缩进
在文本行首插入空白,以视觉方式标示段落起始或层级结构的排版格式。中文写作中,段首缩进两个全角字符是标准格式。
缩进 (indent) 是在行首插入空白来直观表达文本结构的排版手法。中文写作中,段落开头空两个全角字符 (即两个汉字宽度) 是从小学作文教学就开始培养、出版排版长期沿用的通行格式。英文中则通常将段落首行缩进,或者不缩进而在段落之间插入空行;缩进宽度由各媒体的版式规定决定,并不像中文这样一律固定为某个字符数。
在编程领域,缩进是表达代码层级结构的重要元素。Python 将缩进作为语法的一部分,缩进深度直接决定代码块的范围。其他语言 (JavaScript、Java、C 等) 虽然用花括号 {} 界定代码块、缩进并非强制要求,但为了可读性,仍强烈推荐采用统一的缩进。Python 官方风格指南 PEP 8 推荐每级缩进使用 4 个半角空格;在 Python 3 中,同一代码块内混用制表符和空格会触发 TabError: inconsistent use of tabs and spaces in indentation,导致程序直接无法运行。Python 2 默认并不会因此报错,因此把旧代码迁移过来时,这往往是最先遇到的绊脚石。
缩进使用的字符分为"制表符"和"空格"两派,这在程序员群体中是一场旷日持久的争论。制表符 (U+0009) 只需 1 个字符就能表示一级缩进,且显示宽度可通过设置调整,但在不同环境下显示效果不一。终端和多数语言实现的默认制表符宽度为 8 列 (Python 的 str.expandtabs() 默认值也是 8),而编辑器设置中 4 列更为常见,因此同一文件在不同环境下各级缩进的深度未必对得齐。空格的显示效果固定,但一级缩进要消耗 2 至 4 个字符。从字符计数的角度看,1 个制表符和 4 个空格虽然视觉效果相同,字符数却截然不同。要避免混用,实务上的做法是借助 .editorconfig 这类跨编辑器的配置文件,把所用字符和宽度固定下来。
在网页环境中,HTML 会将连续空格压缩为一个,因此要实现缩进需要使用 CSS 的 text-indent 属性。text-indent: 2em 可以实现中文标准的两字缩进。在 <pre> 元素内,空格和制表符会原样显示,因此能保持代码块的缩进格式。
在中文稿纸 (方格纸) 上,段落缩进占用 2 个格子。以 400 字稿纸为例,若文章有 10 个段落,仅缩进就消耗 20 个字符。这里要留意的是,缩进是否计入字数,取决于计数方式:稿纸以 1 格为 1 字,缩进也会被计入;而字处理软件和网页的字数统计,则有把行首空白算进去和不算进去两种做法。因此,面对"800 字以内"这类有上限的写作任务,应先确认提交方是否把空白也计入字数,而不是为了省下区区几十个字符就减少段落、破坏文章结构,那样反而本末倒置。
在电子邮件和即时通讯中,引用内容常以">"符号来表示缩进层级。这不只是单纯的习惯做法:规定纯文本邮件格式的 RFC 3676 (2004 年) 明确要求,把行首连续">"的个数直接作为引用深度 (quote depth) 来处理。Markdown 中">"同样表示块引用。这个">"也会被计为 1 个字符,因此引用层级越深 (>>>),字符数就越多;一旦保留引用不断往上叠加回复,正文以外的字符便会随之累积。