列表
列表是一个或多个相同类型列表项的序列,列表项可能被一行或多行空行分隔。
相同类型列表项拥有相同的列表标记,如果两个列表项有使用相同字符(-,+,或*)的无序列表标记或者是使用相同分隔符(「.」或「)」)的有序列表,则它们也是同一种类型。
列表的类型由其第一个列表项的列表标记决定。
一个有序列表的起始序号由其起始列表项的序号确定,忽略后面的列表项数字。
如果列表任意的组成列表项有空行分隔,或者如果其任意的组成列表项直接包含两个块级元素,并且它们之间有空行,则列表是稀疏的。否则列表是稠密的。(HTML 输出的不同之处在于稀疏列表中的段落包含在<p>
标记中,而稠密列表中的段落则不包含在内。)
改变无序或者有序列表的分隔符会另起新列表:
示例 281
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 282
Markdown | HTML | 效果 |
---|---|---|
|
|
在 CommonMark 中,段落可以中断列表,也就是说,不需要空行来分隔段落与下列列表:
示例 283
Markdown | HTML | 效果 |
---|---|---|
|
|
Markdown.pl
不允许这么做,因为可能会因为句子中自带的数字触发列表:
The number of windows in my house is
14. The number of doors is 6.
但奇怪的是,Markdown.pl
允许块引用中断段落,即使可能适用相同的考虑因素。
在CommonMark中,我们允许列表中断段落,原因有两个。首先,新建一个没有空行的列表是很自然的并且并不罕见:
I need to buy
- new shoes
- a coat
- a plane ticket
其次,我们发现了
(确实,列表项和块引用的规范也默许了这个原则。) 这个原则意味着如果
* I need to buy
- new shoes
- a coat
- a plane ticket
是一个列表项,其中包含一个段落后跟一个嵌套的子列表,因为所有 Markdown 实现都是这样解析的(尽管该段落可能没有<p>
标签,因为列表「稠密」),然后
I need to buy
- new shoes
- a coat
- a plane ticket
本身应该是一个段落,后跟一个嵌套的子列表。
由于 Markdown 实现允许列表中断列表项内的段落,因此统一性原则要求我们允许这个外部列表项。 (reStructuredText采用不同的方法,在列表之前甚至在其他列表项中也需要空行。)
为了解决带有嵌套数字的段落中出现意外的列表,我们只允许以 1 开头的列表来中断段落。 从而,
示例 284
Markdown | HTML | 效果 |
---|---|---|
|
|
我们也可能获得一个未缩进像这样的结果
示例 285
Markdown | HTML | 效果 |
---|---|---|
|
|
但是这应该可以防止大多数意外的列表生成。
项之间可以有任意行的空行:
示例 286
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 287
Markdown | HTML | 效果 |
---|---|---|
|
|
为了要分隔相同类型的连续列表,或者分隔列表与缩进的代码块,不然的话这些代码块将被解析为最终列表项的子段,可以通过插入空白的 HTML 注释:
示例 288
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 289
Markdown | HTML | 效果 |
---|---|---|
|
|
列表项不需要缩进到同一级别。 以下列表项将被视为同一列表级别的项目,因为没有缩进到足以属于上一个列表项:
示例 290
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 291
Markdown | HTML | 效果 |
---|---|---|
|
|
但请注意,列表项可能不会缩进三个以上的空格。在这里 - e
被视为段落延续行,因为它缩进了三个以上的空格:
示例 292
Markdown | HTML | 效果 |
---|---|---|
|
|
这里的 3. c
被视为缩进的代码块,因为它缩进了四个空格且前面有一行空行。
示例 293
Markdown | HTML | 效果 |
---|---|---|
|
|
这是一个稀疏列表,因为列表项被空行分隔:
示例 294
Markdown | HTML | 效果 |
---|---|---|
|
|
像这样,有一个空的列表项:
示例 295
Markdown | HTML | 效果 |
---|---|---|
|
|
这些是稀疏列表,尽管项中间没有空隔,但是其中一项中含有被空行分隔的两个块级元素:
示例 296
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 297
Markdown | HTML | 效果 |
---|---|---|
|
|
这是一个稠密列表,因为空行存在于代码块中:
示例 298
Markdown | HTML | 效果 |
---|---|---|
|
|
这个列表是稠密的,因为空行是子列表的两个段落中间的,所以子列表是稀疏的,外部列表是稠密的:
示例 299
Markdown | HTML | 效果 |
---|---|---|
|
|
这个列表是稠密的,因为空行包含在块引用中:
示例 300
Markdown | HTML | 效果 |
---|---|---|
|
|
这个列表是稠密的,因为连续的块元素没有被空行分割:
示例 301
Markdown | HTML | 效果 |
---|---|---|
|
|
一个单个段落是稠密的:
示例 302
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 303
Markdown | HTML | 效果 |
---|---|---|
|
|
这个列表是稀疏的,因为列表项中含有被空行分隔块元素:
示例 304
Markdown | HTML | 效果 |
---|---|---|
|
|
这里的外部列表是稀疏的,内部列表是稠密的:
示例 305
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 306
Markdown | HTML | 效果 |
---|---|---|
|
|