章节和离散标题支持自动生成ID。除非你为这些块分配了自定义ID,或者你取消了`sectids`文档属性,否则AsciiDoc处理器将会使用标题自动生成并分配该块的ID。此页面解释了ID是如何派生的,以及如何控制这种行为。

如何计算节的ID

AsciiDoc 处理器根据以下事件顺序和规则从标题构建 ID:

  • 内联格式化将被应用(按标题替换顺序)。

  • 所有字符都被转换为小写。

  • idprefix attribute的值(默认为`_`)被添加到前面。

  • 字符引用、HTML/XML标签(不包括其内容)以及无效的ID字符将被移除。

    • 请参考XML规范中的https://www.w3.org/TR/REC-xml/#NT-Name[NT-Name^]部分,以获取有效ID字符的列表。

  • 空格、连字符和句点会被替换为idseparator属性的值(默认为`_`)。

  • 连续的分隔符会被压缩。

  • 如果必要,将追加一个序列号,直到该ID在文档中是唯一的。

鉴于以下章节标题:

== 威利与儿子公司

处理器将生成以下ID:

威利孙公司

您可以使用 sectids 开启或关闭 ID 自动生成,并通过 自定义 ID 前缀和单词分隔符

Caution
如果标题中包含向前看的交叉引用(即,对文档顺序后面的元素的引用),您必须要么为该块分配一个自定义ID,要么在标题周围使用 disable ID generation 禁用ID生成。否则,AsciiDoc处理器可能会警告说引用无效。这是因为,为了生成ID,处理器必须转换标题。这种转换在处理器访问目标元素之前就发生了。因此,处理器无法查找引用,所以必须认为它是无效的。

禁用自动节ID生成

要禁用自动生成的部分和独立标题ID,请取消设置`sectids`属性。

:!sectids:

即使禁用了自动节ID,仍然使用自定义ID

你可以在文档中允许使用属性条目的任何地方取消设置此属性。通过这样做,你可以仅对某些部分和独立标题禁用ID生成。

== 开启ID生成

:!sectids:
== 关闭ID生成
:sectids:

== ID再次生成

如果您禁用了自动生成的章节ID,并且您没有为章节或独立标题指定自定义ID,那么您将无法创建到该元素的交叉引用。