请参阅CommonMark规范中的示例6前面的说明:http://spec.commonmark.org/0.27/#example-5
我试图理解下面的代码是如何从两个空格开始导致代码块的。
>→→foo示例6显示,这将转换为以下内容。
<blockquote>
<pre><code> foo
</code></pre>
</blockquote>但第2.2节明确规定:
但是,在空白帮助定义块结构的上下文中,制表符的行为就好像被空格替换为4个字符的制表符。
因此,根据我的理解,上面的Markdown的行为如下所示(我表示一个带点的空格)。
>........foo由于在>之后允许使用一个可选的空间,并且有4个空格用于缩进代码块,因此,
>...foo这是一个代码块,从三个空格开始。那么,CommonMark如何宣称它应该导致以两个空格开始的代码块呢?我遗漏了什么?
发布于 2017-04-10 14:45:29
关键是在选项卡一节的第一段(重点是后加的):
行中的制表符不会扩展为空格。但是,在空白有助于定义块结构的上下文中,制表符的行为就好像被用制表符停止为4 的空格所取代一样。
注意,这是说“4个字符”,而不是4个空格。
如果您将文本编辑器配置为使用长度为4的制表符,并将制表符替换为空格(任何优秀的文本编辑器都应提供此设置),则文本编辑器将使用四个字符宽的列。当您按tab键时,它将把光标转发到下一列,该列每列只有四个字符宽。如果列已经包含任何字符,那么只会在总共四个字符中添加许多空格,在这种情况下,这将小于四个空格。
例如,如果在编辑器中键入角括号(>)字符,然后按选项卡,则会得到以下内容(配置为用空格替换制表符时):
>···因此,角括号加上选项卡向前移动到列的末尾(,4个字符,),总共有三个空格。由于我们现在正处于下一列的开头,第二次按制表符将使我们移动到下一列(4多个空格),总共7空格。
>·······我们可以确认这是正确的解释,最近对3bc01c5dc中提交的规范进行了修改(显然还没有发布)。正如提交评论所暗示的那样,澄清有助于数学更有意义(强调是补充的):
通常,以块引号开头的
>后面可能有一个空格,它不被认为是内容的一部分。在下面的例子中,>后面跟着一个选项卡,它被看作是扩展为 three spaces.,因为其中一个空格被认为是分隔符的一部分,foo被认为是缩进块引号上下文中的六个空格,因此我们得到了一个以两个空格开头的缩进代码块。
注意添加的句子(粗体),它确认第一个选项卡只添加“三空格”。
因此,正如我们现在所建立的,我们从一个角括号加上七个空格开始。因此,首先我们断开块引号分隔符,该分隔符由角括号和第一个空格组成(在下面的示例中,|用于指示解析器拆分字符串的位置,不应计算为字符):
>·|······区块引号中包含的文本现在缩进六个空间。其中四个是代码块分隔符:
>·|····|··这使得在代码块的开头有两个空间。
当然,正如在开始时(规范中的部分)所述,制表符实际上不是被空格替换的,它的行为就好像它们是空格一样。这有时会让人困惑。将文本编辑器配置为始终用空格替换制表符可能会有所帮助,然后可以避免这种混淆。
https://stackoverflow.com/questions/43275979
复制相似问题