Markdown学习笔记(4)- 非容器文本块(2)

Markdown学习笔记(4)- 非容器文本块(2)


本章目标

上一篇文章里,我们已经了解了一些属于Markdown非容器文本块的标记。这篇文章将继续讨论Markdown的非容器文本块。我们把非容器文本块中Markdown语法分成3部分食用,所以下一篇文章我们仍然会讨论非容器文本块的内容。


1. 缩进代码块

缩进的代码块以4个或者4个以上的空格开始,表示这行是一个内联的代码块。由于内联的代码块不能中断一个段落,因此代码块前和段落文本之间需要有空行(在代码块后则不用)。缩进代码块中,这行4个空格缩进之后的内容都被视为代码内容,代码内容里的Markdown标识符不会被解析,任何超过四个的初始空格都将包含在内容中,即使是内部空白行。

1.1 列表项优于缩进代码块被解析

如果作为缩进的4个空格在缩进代码块也可以被解析为列表项文本的一部分,那么这段缩进会被解析为列表项文本的一部分。

1.2 缩进代码块可以在其他的块结构后出现,而不用加一个空白行

之前说过,因为由于内联的代码块不能中断一个段落,因此代码块前和段落文本之间需要有空行。带块结构会自带段落的中断(比如分隔线、标题等结构),因此块结构后可以直接接缩进代码块,不需要空白行做段落分隔。

1.3 空白行和缩进代码行

即使一行以4个或者4个以上的空格开始,如果这行完全由空白字符组成,并且这行的前后没有缩进代码块,那么这行会被视为一个空白行。
也就是说,在缩进代码行组成的块内部,你可以加任意数量的由4个空格开始、之后完全由空白字符组成的行,这行会被视为代码的一部分。但在缩进代码块前后,无法保留一个空白代码行(大部分情况下这也符合直觉)。
最后,和缩进代码块一样,代码文本中的Markdown标识不会生效。


2. 围栏代码块

围栏代码块需要在新的一行以三个或三个以上连续的反引号`或者波浪线\~开始(这被称作前导代码围栏),并在接下来的文本的另一行里以同样数量的同样字符结束(这被称作关闭代码围栏),在开始标识和结束标识之间的地方,就是围栏代码块的代码文本内容,文本内容里的空行会被当作代码保留(甚至可以为空)。围栏代码块会中断段落,因此在之前或之后不需要空行。

2.1 删除代码缩进

围栏代码块最开始的3个`或者\~符号之前可以包括0到3个空格进行缩进,如果前导代码围栏缩进N个空格,则从代码文本内容的每一行中删除最多N个缩进空格(如果存在)。如果内容行没有缩进,则保持不变。如果缩进的内容小于N个空格,则删除所有缩进。
顺便一提,关闭代码围栏前也可以缩进0到3个空格。虽然关闭代码栏的符号标识需要和开始代码栏的一致,但它们可以有不同的缩进。

2.2 未闭合的前导代码围栏

如果Markdown解析器只找到了符合语法的前导代码围栏文本,而没有找到闭合用的代码围栏。则前导代码围栏和文章结尾之间的文本都会被视为代码文本。

2.3 信息字符串

在前导代码围栏后面,同意行内,可以进行对代码格式的标记,标记文本被称为信息字符串。不过,CommonMark把具体的标记到代码块显示格式之间的转换交给了具体的实现,一般地,我们把代码所属的语言名字紧挨着前导代码围栏写出来。信息字符串和代码文本里都不能有长的类似关闭代码围栏的波浪线或反引号的组合。
关闭代码栏后不能加信息字符串。


3. 段落

不能被解释为其他类型Markdown文本块的一系列非空行形成了各个段落。段落的内容是将原始的文本内容解析为内联样式内容之后的结果。
以下内容就会形成两个段落:

aaa


bbb

效果:

aaa

bbb

可以看出,段落之间的多个空白行是不起作用的。
我们在Markdown基本概念中提到过,Markdown的文本结构分为块结构和内联结构。其中块结构(段落文本块、代码块文本块、引用内容文本块和列表文本块这些文本块)之所以成为一个块结构,其中一个原因就是块结构和段落一样,是作为一个整体被解析的,因而和内联结构对应。这里要注意的是,Markdown中段落和块是不同的概念,段落只是块结构中的一种。

Have A Break

接下来的一篇文章中,我们将继续了解非容器文本块中Markdown符号的那些更富有细节的用法。稍作休息,我们在下篇文章再见。

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录