您可以使用`id`属性为块级或内联元素分配一个标识符(即唯一名称)。`id`属性是一种命名属性。其目的是在链接、脚本编写或样式设计时识别元素。因此,标识符在文档中只能使用一次。
一个身份证明:
-
为元素提供一个内部链接或交叉引用锚点。
-
可以用于为特定元素添加额外样式(例如,通过CSS ID选择器)
你可以使用简写的哈希(#
)语法、长格式(id=
)语法或传统的锚点([[]]
)语法来给区块分配一个ID。你可以使用简写的哈希(#
)语法,或者通过在内联元素旁添加一个锚点(使用锚点([[]]
)语法)来给内联元素分配一个ID。
有效的身份证明字符
AsciiDoc 在使用命名的 id
属性定义 ID 时,不限制可以用于 ID 的字符集。在这种情况下,语言仅要求该值不能为空。当使用简写的井号语法或锚点语法定义 ID 时,可接受的字符更为有限(例如,不允许使用空格)。无论如何,不建议利用 AsciiDoc 语法允许使用的任意字符。谨慎的原因是因为 ID 会传递到输出中,并非所有输出格式都提供同样的灵活性。例如,XML 对允许在 ID 值中使用的字符有更多限制。
为了确保你的ID的可移植性,最好遵循一个通用标准。我们推荐遵循的标准是XML规范定义的一个[Name]值。在较高层次上,Name的第一个字符必须是字母、冒号或下划线,可选的后续字符必须是字母、冒号、下划线、连字符、句点或数字。你不应该在ID中使用任何空格字符。以数字开头的ID不太可能造成问题,但最好还是避免。最好尽可能使用小写字母,因为这在使用大小写不敏感的平台时解决了可移植性问题。
当AsciiDoc处理器为章节标题和离散标题自动生成ID时,它会遵循这个标准。
以下是符合上述推荐的有效ID示例:
安装 数据结构 错误处理 主题与正文 取消设置属性
以下是无效ID的示例:
安装gem 3只盲老鼠 -关于作者
区块分配
你可以使用速记语法、完整语法或遗留的块锚点给块分配一个ID。
在简写语法中,你要在第一个位置属性前使用井号(#
)作为前缀。
[#goals]
* 目标 1
* 目标 2
在长格式语法中,你使用一个标准的命名属性。
[id=goals]
* 目标 1
* 目标 2
在传统的块锚点语法中,你需要用双方括号来包围名称:
[[goals]]
* Goal 1
* Goal 2
假设你想从一个开放区块创建一个引用块,并给它指定一个ID和角色。你可以在第一个属性位置上的`#(ID)前面添加`quote
(区块样式),就像这个例子所展示的:
道路?我们要去的地方,不需要道路。
Tip
|
在速记语法中,ID 和角色值的顺序并不重要。 |
Caution
|
如果 ID 中包含了一个 . ,你必须使用长格式赋值(例如,id=classname.propertyname )或锚点速记法(例如,[[classname.propertyname]] )来定义它。这是必要的,因为在速记语法中 . 字符是角色的分隔符,因此会被误解为角色。
|
内联赋值
在行内引用文本中可以使用id(#
)速记符号。
[#free_the_world]*释放世界*
使用ID作为锚点
锚点(又称ID)可以在文档的几乎任何地方定义,包括在章节标题、独立标题、段落、图片、限定块、内联短语等上。通过在双方括号内包围一个_有效的_ XML名称(例如,[[idname]]
)或使用简写ID语法(例如,[#idname]
)来声明锚点,放在属性列表的开始位置。简写形式是首选的语法。
双方括号的形式要求ID以字母、下划线或冒号开头,以确保ID具有可移植性。根据https://www.w3.org/TR/REC-xml/#NT-Name[XML名称]的规则,可移植ID不得以数字开头,尽管数字在名称的其他地方是允许的。属性列表中的简写形式没有这种限制。
在块元素上
要引用一个块元素,你必须给那个块分配一个ID。你可以使用简写语法来定义一个ID:
Unresolved directive in id.adoc - include::example$id.adoc[tag=block-id-shorthand]
或者你可以使用旧版块锚点语法来定义它:
Unresolved directive in id.adoc - include::example$id.adoc[tag=block-id-brackets]
作为一个内联锚点
您也可以在任何接受正常替换(特别是宏替换)的内容中定义锚点。您可以用双方括号括起来ID:
Unresolved directive in id.adoc - include::example$id.adoc[tag=anchor-brackets]
或者使用简写的ID语法。
Unresolved directive in id.adoc - include::example$id.adoc[tag=anchor-shorthand]
在列表项中
除了能够在章节和块上定义锚点之外,还可以在任何可以键入普通文本的地方内联定义锚点(锚点是宏替换)。文本中的锚点在输出中被替换为不可见的锚点。
例如,你不会在列表项前面放一个锚点:
Unresolved directive in id.adoc - include::example$id.adoc[tag=anchor-wrong]
相反,你应该将它放在列表项文字的开始处:
Unresolved directive in id.adoc - include::example$id.adoc[tag=anchor-list-item]
对于描述列表,锚点必须放置在术语的开始处:
Unresolved directive in id.adoc - include::example$id.adoc[tag=anchor-dlist-item]
您可以向列表项或描述列表术语添加多个锚点。然而,在文档内作为交叉引用使用时,只有第一个锚点被注册。其余的锚点是辅助的,用于创建深层链接(即,可通过URL片段访问)。
内联图像上
您目前无法在内联图像上定义ID。相反,您需要在它附近放置一个内联锚点。
Unresolved directive in id.adoc - include::example$id.adoc[tag=inline-anchor-brackets]
除了使用简写形式,你还可以使用宏`anchor`来达到同样的目的。
Unresolved directive in id.adoc - include::example$id.adoc[tag=inline-anchor-macro]
给一个部分添加额外的锚点
要在节中添加额外的锚点(无论是否有自动生成的ID),请将锚点放置在标题前面(不要有任何空格)。
Unresolved directive in id.adoc - include::example$id.adoc[tag=anchor-header-extra]
Caution
|
您不能在节标题中使用内联锚点来制作对该节的内部引用。处理器将会将这些视为可能的无效引用。这些额外的锚点仅用于使用替代ID进行深层链接。 |
请记住,内联锚点会在宏替换应用的任何地方被发现(例如,段落文本)。如果文本内容不属于某个地方,那么内联锚点也不应该存在。
自定义自动交叉引用文本
可以自定义将用于交叉引用链接(称为`xreflabel`)中的文本。如果未定义,AsciiDoc处理器将尽其所能找到合适的文本(解决方案因情况而异)。在图片的情况下,将使用图片标题。在章节标题的情况下,将使用章节的标题文本。
要定义`xreflabel`,请在锚定义中ID之后(用逗号分隔)添加它。
Unresolved directive in id.adoc - include::example$id.adoc[tag=anchor-xreflabel]