关键在Tabs部分的第一段(强调添加):
行中的制表符不会扩展到空格。但是,在空格有助于定义块结构的上下文中,制表符的行为就像它们被替换为具有4 个制表位字符的空格一样。
请注意,这是“4 个字符”而不是 4 个空格。
如果您将文本编辑器配置为使用长度为 4 的制表位并用空格替换制表符(任何好的文本编辑器都应该提供此设置),文本编辑器将使用四个字符宽的列。当您按 Tab 键时,它会将光标转发到下一列,每列只有四个字符宽。如果该列已经包含任何字符,则只添加与总共四个字符一样多的空格,在这种情况下将少于四个空格。
例如,如果您>
在编辑器中键入尖括号 ( ) 字符,然后按 Tab,您将得到以下信息(当配置为用空格替换制表符时):
>···
因此尖括号加上制表符向前移动到列的末尾(四个字符),总共三个空格。由于我们现在位于下一列的开头,再次按 Tab 键会将我们移至下一列(另外 4 个空格),总共7 个空格:
>·······
我们可以通过最近对3bc01c5dc中提交的规范的更改(显然尚未发布)来确认这是正确的解释。正如提交评论所暗示的,澄清有助于数学更有意义(强调):
通常>
,以块引用开头的 可以可选地后跟一个空格,这不被视为内容的一部分。 在以下情况下>
,后跟一个制表符,它被视为扩展为三个空格。
由于其中一个空格被认为是分隔符的一部分,因此foo
被认为在块引用上下文内缩进了六个空格,因此我们得到了一个以两个空格开头的缩进代码块。
请注意添加的句子(粗体),它确认第一个选项卡仅添加了“三个空格”。
因此,正如我们现在所建立的,我们从一个尖括号加上七个空格开始。所以首先我们断开块引用分隔符,它由尖括号和第一个空格组成(在以下示例中,|
用于指示解析器在何处断开字符串并且不应计为字符):
>·|······
块引用中包含的文本现在缩进了六个空格。其中四个是代码块分隔符:
>·|····|··
这在代码块的开头留下了两个空格。
当然,正如开头(规范中的部分)所述,制表符实际上并没有被空格替换,它只是表现得好像它们是一样的。这有时会让人感到困惑。将文本编辑器配置为始终用空格替换制表符可能会有所帮助,这样您就可以避免这种混淆。