计数器用于存储和显示临时的数字或拉丁字符序列。

Warning
计数器在AsciiDoc中定义不够明确,如果可能的话应该避免使用。如果你确实需要使用计数器,应该只在最基本的使用场景中使用它们,例如在列表、表格列或正文中创建序列。你*不应该*使用计数器来构建ID(即,引用)或引用文本。在引用的边界范围内使用计数器很可能导致意料之外的行为。

计数器作为一个特殊的文档属性被实现。你通过属性引用来声明和显示计数器,其中属性名以 counter: 为前缀(例如,{counter:name})。由于计数器是属性,计数器名称遵循与属性名相同的规则。最重要的规则需要注意的是,计数器名称中的字母 必须是小写

每次解析 counter: 属性引用时,计数器的值都会增加并显示。术语[.term]*增加*意味着将属性值前进到序列中的下一个值。如果计数器的值是整数,就加1。如果计数器的值是字符,就移到拉丁字母表中的下一个字母(例如,a → b)。计数器的默认起始值是1。

要创建一个以1为起始的序列,请使用如下所示的简单形式 {counter:name}

沙拉需要 {counter:seq1}) 苹果,{counter:seq1}) 橙子和 {counter:seq1}) 梨。

这是结果输出:

沙拉需要 1) 苹果,2) 橙子和 3) 梨。

如果你想在节标题中使用计数器的值,你应该先用属性引用来定义它。

:seq1: {counter:seq1}
== 章节 {seq1}

本节中的序列是{seq1}。

:seq1: {counter:seq1}
== 章节 {seq1}

本节中的序列是{seq1}。

这是结果输出:

章节 1

本节中的序列是1。

章节 2

本节中的序列是2。

要增加计数器而不显示它(即跳过序列中的一个项目),请使用`counter2`前缀。

{counter2:seq1}
Warning
一个单独一行的`counter2`属性引用会产生一个空段落。您需要将它与最近的内容相邻,以避免这种副作用。

要显示计数器当前的值而不增加它,请像引用任何其他属性一样引用计数器名称:

这是第{pnum}段。

要创建一个字符序列,或者以非1的值开始一个数字序列,通过在计数器首次使用时附加一个开始值来指定一个开始值:

甜点需要 {counter:seq1:A}) 芒果,{counter:seq1}) 葡萄和 {counter:seq1}) 樱桃。
Caution
字符序列可以从a,b,c,…​x,y,z,{,|…​或者A,B,C,…​,X,Y,Z,[,…​根据开始值而变化。因此,他们对超过26个项目来说并不是真正有用的。

某个计数器的起始值只有在文档中该计数器处于“未设置”状态时才会被识别。否则,起始值将被忽略。

要重置计数器属性,请使用属性项取消设置相应属性。属性项必须与一个块相邻,否则它将被忽略。

沙拉需要 {counter:seq1:1} 个苹果,{counter:seq1} 个橙子和 {counter:seq1} 个梨。

:!seq1:
甜点需要 {counter:seq1:A}) 芒果,{counter:seq1}) 葡萄和 {counter:seq1}) 樱桃。

这意味着:

沙拉需要 1 个苹果,2 个橙子和 3 个梨。

甜点需要 A) 芒果,B) 葡萄和 C) 樱桃。

这里有一个完整的示例,展示了如何在表格中使用计数器来统计零件编号。

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

这是那张表格的输出结果:

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