围栏代码块
围栏代码块是至少三个连续反引号字符(`
)或波浪号(~
)的序列。(波浪号和反引号不能混合。)一个围栏代码块以代码围栏开头,缩进不超过三个空格。
具有起始(opening)代码围栏的行,可以可选地包含代码围栏之后的一些文本;这是前导和尾随空格的修剪,它被称为信息字符串。信息字符串不得包含任何反引号字符。(这种限制的原因是不这样做的话,某些内联代码将被错误地解释为围栏代码块的开头。)
代码块的内容由所有后续的行组成,直到与代码块开头围栏相同类型的闭合(closing)代码围栏(反引号或波浪号),而且至少要与起始代码围栏有一样多的反引号或波浪号。如果起始代码围栏缩进 N 个空格,则从内容的每一行(如果存在的话)中删除最多 N 个缩进空格。(如果内容行没有缩进,则保持不变。如果缩进小于 N 个空格,则删除所有缩进。)
闭合代码围栏可以缩进三个空格,并且可以仅跟随被忽略的空格。如果到达包含块(或文档)的末尾并且未找到闭合代码围栏,则代码块会包含起始代码栏后的所有行,直到包含块(或文档)结束。(如果没有找到闭合代码围栏,则另一个规范需要回溯。但这会使解析效率降低,并且这里描述的行为似乎没有真正的缺点。)
围栏代码块可能会中断段落,并且在之前或之后不需要空行。
围栏代码块的内容被视为明文文本,不会被解析为内联。信息字符串的第一个单词通常用于指定代码示例的语言,并在代码标签的 class
属性中呈现。但是,此规范并未强制要求对信息字符串进行任何特定处理。
这是一个带反引号的简单示例:
示例 89
Markdown | HTML | 效果 |
---|---|---|
|
|
带波浪号:
示例 90
Markdown | HTML | 效果 |
---|---|---|
|
|
少于三个反引号是不够的:
示例 91
Markdown | HTML | 效果 |
---|---|---|
|
|
闭合代码围栏必须使用与起始围栏有相同的字符:
示例 92
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 93
Markdown | HTML | 效果 |
---|---|---|
|
|
闭合代码围栏必须至少等于起始围栏的长度:
示例 94
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 95
Markdown | HTML | 效果 |
---|---|---|
|
|
未闭合的代码块在文档末尾(或者闭合的块引用或列表项)中闭合:
示例 96
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 97
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 98
Markdown | HTML | 效果 |
---|---|---|
|
|
代码块可以将所有空行作为其内容:
示例 99
Markdown | HTML | 效果 |
---|---|---|
|
|
代码块可以为空:
示例 100
Markdown | HTML | 效果 |
---|---|---|
|
|
围栏可以缩进。如果起始围栏是缩进的,则内容行将删除等效的起始缩进(如果存在的话):
示例 101
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 102
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 103
Markdown | HTML | 效果 |
---|---|---|
|
|
四个空格缩进产生一个缩进的代码块:
示例 104
Markdown | HTML | 效果 |
---|---|---|
|
|
闭合围栏可以缩进 0-3 个空格,并且它们的缩进不需要与起始围栏的缩进匹配:
示例 105
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 106
Markdown | HTML | 效果 |
---|---|---|
|
|
这不是闭合围栏,因为它缩进了 4 个空格:
示例 107
Markdown | HTML | 效果 |
---|---|---|
|
|
代码围栏(起始和闭合)不能包含内部空格:
示例 108
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 109
Markdown | HTML | 效果 |
---|---|---|
|
|
围栏代码块可以中断段落,并且可以直接紧跟段落,后面没有空行:
示例 110
Markdown | HTML | 效果 |
---|---|---|
|
|
在围栏代码块之前和之后也可以出现其他块,不插入空行:
示例 111
Markdown | HTML | 效果 |
---|---|---|
|
|
可以在起始代码围栏后提供信息字符串。
尽管此规范并未强制要求对信息字符串进行任何特定处理,但第一个字通常用于指定代码块的语言。在 HTML 输出中,通常通过向包含 language-
的 code
元素添加 class 来指明语言,然后是语言名称。
示例 112
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 113
Markdown | HTML | 效果 |
---|---|---|
|
|
示例 114
Markdown | HTML | 效果 |
---|---|---|
|
|
用作反引号的代码块的信息字符串不能包含反引号。
示例 115
Markdown | HTML | 效果 |
---|---|---|
|
|
用作波浪号的代码块的信息字符串不能包含波浪号。
示例 116
Markdown | HTML | 效果 |
---|---|---|
|
|
闭合的代码围栏不能有信息字符串:
示例 117
Markdown | HTML | 效果 |
---|---|---|
|
|