项目

管道表扩展(Markdig 规范文档)

本节描述了支持的多种扩展:

管道表

当满足以下条件时,检测到一个管道表:

规则 #1

  • 段落块中的每一行都必须至少包含一个列分隔符 |,并且不被内联代码(反引号 `)或 HTML 内联元素包围。
  • 第二行必须通过包含每个列的表头列分隔符来区分第一行表头和后续行。表头列分隔符是:
    • 以可选空格开始
    • 后跟一个可选的 : 用于指定左对齐
    • 后跟至少一个 - 字符的序列
    • 后跟一个可选的 : 用于指定右对齐(如果已定义左对齐,则为中心对齐)
    • 以可选空格结束

由于列表的优先级高于管道表,因此表头行分隔符需要至少两个破折号 -- 来开始表头行:

a | b
-- | -
0 | 1
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>

即使第二行看起来像列表,以下情况也仍被视为表格:

a | b
- | -
0 | 1
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>

允许只有一行表头的管道表:

a | b
-- | --
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
</table>

在表头分隔符之后,它们将被解释为普通列:

a | b
-- | --
-- | --
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>--</td>
<td>--</td>
</tr>
</tbody>
</table>

但如果表格没有以列分隔符 | 开头,则不将其解释为表格,即使后续行包含列分隔符:

a b
c | d
e | f
.
<p>a b
c | d
e | f</p>

如果一行中没有列分隔符 |,则不会检测到表格:

a | b
c no d
.
<p>a | b
c no d</p>

如果一行中的列数多于表头行中的列数,仍然会将其添加为列:

a  | b
-- | --
0  | 1 | 2
3  | 4
5  |
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
<td></td>
</tr>
<tr>
<td>5</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

规则 #2 管道表在空白行后或文件末尾结束。

规则 #3 单元格内容从两侧的空格中修剪。

a          | b              |
-- | --
0      | 1       |
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>

规则 #4 行开头的 | 或仅包含空格和/或以换行符结尾的行尾的 | 可以省略

  a     | b     |
--      | --
| 0     | 1
| 2     | 3     |
  4     | 5
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
</tr>
</tbody>
</table>

每行的开头和结尾都可以有竖线:

|a|b|
|-|-|
|0|1|
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>

也可以在任一侧省略:

a|b|
-|-|
0|1|
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>
|a|b
|-|-
|0|1
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>

单列表格可以声明为仅由列分隔符开头的行:

| a
| --
| b
| c
.
<table>
<thead>
<tr>
<th>a</th>
</tr>
</thead>
<tbody>
<tr>
<td>b</td>
</tr>
<tr>
<td>c</td>
</tr>
</tbody>
</table>

规则 #5

如果第一行与常规行之间有一行包含每个列的表头列分隔符,则认为它是表头行。表头列分隔符是:

  • 以可选空格开始
  • 后跟一个可选的 : 用于指定左对齐
  • 后跟至少一个 - 字符的序列
  • 后跟一个可选的 : 用于指定右对齐(如果已定义左对齐,则为中心对齐)
  • 以可选空格结束
 a     | b
-------|-------
 0     | 1
 2     | 3
.
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
</tr>
</tbody>
</table>

默认情况下,文本对齐方式为表头居中,单元格左对齐。如果应用了左对齐,它将强制列标题左对齐。 除了默认设置之外,无法为表头和单元格定义不同的对齐方式。 可以通过使用字符 :

在本文档中