交叉引用#

MyST-Parser 提供了强大的交叉引用功能,可以链接到 URL、文档、标题、图表等,这些功能在输出格式之间是 可移植的,并在链接失效时生成 警告

本页介绍了为内容设置可引用目标的基础知识以及如何引用它们。

1.  创建显式目标#

目标用于定义自定义锚点,您可以在文档的其他地方引用这些锚点。

有三种主要方式可以创建目标:

  1. 使用 (target)= 为语法块添加注释

  2. 使用 {#id} 属性为语法块/行内/跨行内容添加注释(使用 attrs_blockattrs_inline 插件)

  3. 在指令中添加 name 选项

(heading-target)=
### Heading

{#paragraph-target}
This is a paragraph, with an `id` attribute.

This is a [span with an `id` attribute]{#span-target}.

:::{note}
:name: directive-target

This is a directive with a `name` option
:::

[reference1](#heading-target), [reference2](#paragraph-target),
[reference3](#span-target), [reference4](#directive-target)

Heading

This is a paragraph, with an id attribute.

This is a span with an id attribute.

备注

This is a directive with a name option

reference1, reference2, reference3, reference4

还有一些特定指令可以创建目标,例如 术语表 为术语创建目标,代码 API 为对象创建目标:

{.glossary}
my other term
: Definition of the term

[Link to a term](<#my other term>)

```{py:class} mypackage.MyClass
:nocontentsentry:
Docstring content
```

[Link to a class](#mypackage.MyClass)
my other term

Definition of the term

Link to a term

class mypackage.MyClass#

Docstring content

Link to a class

参见

脚注部分 介绍了如何创建和链接脚注,而 sphinxcontrib.bibtex 插件提供了引用参考文献的功能。

2.  隐式目标#

可以通过路径引用整个文档。还可以通过设置 myst_heading_anchors 配置选项为文档中的标题分配隐式目标。该选项应设置为 1 到 6 之间的整数,表示分配目标的标题深度。

锚点“ slugs ”是根据 GitHub 实现 创建的:标题被转换为小写,标点符号被移除,空格替换为 -,并通过后缀枚举确保唯一性。

例如,使用 myst_heading_anchors = 2

## A heading with slug

## A heading with slug

<project:#a-heading-with-slug>

[Explicit title](#a-heading-with-slug-1)

A heading with slug

A heading with slug

A heading with slug

Explicit title

更多信息请参见 自动生成的标题锚点 部分。

警告

通常不建议依赖隐式目标,因为它们很容易被破坏,例如文档/标题被移动或重命名时。

4.  引用角色#

Sphinx 提供了许多用于引用特定对象的角色

这些也可以在 MyST 文档中使用,但建议尽可能使用 Markdown 语法,因为它更具可移植性且更符合 MyST 的原生特性。

- {ref}`syntax/referencing`, {ref}`Explicit text <syntax/referencing>`
- {term}`my other term`
- {doc}`../intro`, {doc}`Explicit text <../intro>`
- {download}`example.txt`, {download}`Explicit text <example.txt>`
- {py:class}`mypackage.MyClass`, {py:class}`Explicit text <mypackage.MyClass>`
- {external:class}`sphinx.application.Sphinx`, {external:class}`Explicit text <sphinx.application.Sphinx>`
- {external+sphinx:ref}`code-examples`, {external+sphinx:ref}`Explicit text <code-examples>`

---

- <project:#syntax/referencing>, [][syntax], [Explicit text][syntax]
- [](<#my other term>)
- <project:../intro.md>, [Explicit text](../intro.md)
- <path:example.txt>, [Explicit text](example.txt)
- <project:#mypackage.MyClass>, [Explicit text](#mypackage.MyClass)
- <inv:#*Sphinx>, [Explicit text](#sphinx.application.Sphinx)
- <inv:sphinx#code-examples>, [Explicit text](inv:sphinx#code-examples)

[syntax]: #syntax/referencing

5.  处理无效引用#

在构建文档时,建议在挑剔模式下运行,该模式会对任何无效引用发出警告。

你可能会遇到如下警告:

intro.md:1: WARNING: 'myst' cross-reference target not found: 'reference' [myst.xref_missing]

intro.md:2: WARNING: Multiple matches found for 'duplicate': inter:py:module:duplicate, inter:std:label:duplicate [myst.iref_ambiguous]

要完全抑制特定类型的警告,你可以在 Sphinx 的 conf.py 文件中使用 suppress_warnings 配置选项:

suppress_warnings = ["myst.xref_missing", "myst.iref_ambiguous"]

或者在 docutils.conf命令行工具中:

[general]
myst-suppress-warnings = myst.xref_missing, myst.iref_ambiguous

在 Sphinx 中,还可以使用 nitpick_ignorenitpick_ignore_regex 配置选项来抑制特定引用警告。

nitpick_ignore = [("myst", "reference")]

要处理模糊引用,对于 intersphinx 引用,请参见 跨项目(intersphinx)链接 部分,或者可以使用 myst_ref_domains 配置全局或按文档限制所有 Markdown 引用搜索的域。

myst_ref_domains = ["std", "py"]