您可以通过用指定的标记符开始行来在AsciiDoc中创建无序列表。无序列表是一种列表,其项目前面带有符号,例如圆点(也称为项目符号)。

AsciiDoc 基于一种深入人心的传统,这种传统是使用星号或者连字符来标识列表项。相邻的列表项会合并成一个列表。无序列表可以通过改变标记字符或长度(仅限星号)来进行嵌套。列表项中可以包含附加的块。它们也可以与其他类型的列表交错。

基本无序列表

在下面的例子中,每个列表项都用星号(*)标记,这是AsciiDoc语法指定的无序列表项。

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=base]

列表项的第一行文本必须至少与标记(*)之间隔一个空格。在列表前后必须有空行。此外,在列表项之间允许有空行,但不是必需的。

Example 1. 渲染无序列表

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=base]

您可以通过在标题前加上句点(.)来为列表添加标题。

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=base-t]
Example 2. 渲染了一个带标题的无序列表

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=base-t]

你的直觉是使用连字符(-)而不是星号来标记列表项吗?猜猜看?这也行!

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=base-alt]

你应该只在有单一级别的列表时使用连字符,因为连字符标记(-)并不适用于嵌套列表。现在我们提到了嵌套列表,让我们进入下一节,并学习如何创建多级别的列表。

将列表分开

如果你有相邻的列表,它们会倾向于融合在一起。为了强制分开这些列表,可以在两个列表之间插入被空行包围的行注释(//)。这里有一个例子,其中行注释中的 - 文本表示这一行作为“列表结束”的标记:

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=divide]

这种技术适用于所有列表类型。有关更多详细信息,请参见separating.html

嵌套无序列表

要嵌套一个项目,只需在标记符号上增加另一个星号(*)。对于每个后续的层级,继续这样做。

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=nest]
Example 3. 呈现嵌套的无序列表

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=nest]

如果您愿意,您可以从左边距将标记缩进任意数量的空格。缩进并不重要,它可能有助于视觉上识别嵌套层级。

你可以把无序列表嵌套到任何深度。但是请记住,有些界面在列表达到一定深度后会开始将其展平。例如,GitHub在列表嵌套达到10级后会开始展平。

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=max]
Example 4. 无序列表可以嵌套到任何深度。

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=max]

确定列表深度

虽然看起来星号的数量代表嵌套层级,但这并不是深度确定的方式。每遇到一个新的标记就会创建一个新层级。例如,你可以使用连字符标记来创建第二层级,而不是两个星号。

不推荐使用连字符来标记第二级别。
Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=nest-alt]

然而,遵循标记长度(即星号的数量)等于嵌套层级这一约定更为直观。连字符应仅用作第一层的标记。

标记长度 = 嵌套层级

毕竟,我们的目标是明了易懂的纯文本标记,即使是_原样_阅读也是如此。

标记物

当呈现时,无序列表项由领先的标记(项目符号)指示(不要与用来定义列表的标记混淆)。这个标记可以使用列表样式来控制。如果没有指定标记,渲染器将选择一个默认的标记。

默认标记

默认情况下,AsciiDoc 假设在渲染时,无序列表的前三个级别将分别使用 disc、circle 和 square 标记进行样式设计。请考虑以下列表:

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=markers]
Example 5. 嵌套列表的默认交替标记

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=markers]

观察到第一层级的标记是一个圆盘(实心圆),第二层级是一个圆圈(轮廓),第三层级是一个正方形(实心)。AsciiDoc处理器在模型或转换后的输出中并不显式指定这些标记。相反,这些默认设置是由渲染器(例如,CSS)添加的,遵循HTML建立的惯例。

嵌套超过第三层后,标记的选择并没有指定。通常情况下,渲染器会继续使用正方形标记,正如之前的例子所展示的那样。

自定义标记

AsciiDoc为列表提供了多种标记样式。可以使用列表的块样式来指定列表标记。

无序列表的标记可以使用以下任何一种块样式来设置。

  • 正方形;广场;平方

  • 圆圈

  • 光盘

  • 无或者无项目符号(缩进,但没有项目符号)

  • 未添加样式(无缩进或项目符号)(DocBook输出不支持)

Note
这些样式受到默认的Asciidoctor样式表的支持。

当存在时,样式名称按如下方式分配给无序列表元素:

对于HTML

样式名称被分配给`<ul>`元素上的`class`属性。

针对DocBook

样式名称被赋予了`<itemizedlist>`元素上的`mark`属性。

这是一个带有方形标记的无序列表:

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=square]
Example 6. 一个带有方形标记的列表

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=square]

一旦设置了列表的样式,该样式就会用于所有嵌套列表,直到再次被设置。假设不再可能推断出交替变化,所以它就停止了。继承的样式没有在模型中指定出来,而是由渲染器(例如,CSS)应用的。例如,如果我们在顶级列表上设置了列表样式为圆圈,那么这种样式将会被用于所有层级。

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=marker-lock]
Example 7. 列表样式一旦设置即被继承

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=marker-lock]

继承的样式可以在任何层次上被设置或重置。

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=marker-override]
Example 8. 列表样式可以被重置

Unresolved directive in unordered.adoc - include::example$unordered.adoc[tag=marker-override]