我有一个包含许多标题和子标题的文档。在文本的后面,我想链接回其中一个标题。:ref:
在没有标签冗余的情况下如何做到这一点?内容似乎很好地选择了标题。我希望有这样的事情:`#polled-data-retrieval`_
。
4 回答
reStructuredText 支持隐式超链接目标。从reStructuredText 快速参考:
章节标题、脚注和引文会自动生成超链接目标(标题文本或脚注/引文标签用作超链接名称)。
所以以下文本(从 reStructuredText 快速参考、拼写错误和所有内容中提取):
Titles are targets, too
=======================
Implict references, like `Titles are targets, too`_.
生成类似于以下内容的 HTML:
<strong><a name="title">Titles are targets, too</a></strong>
<p>Implict references, like <a href="#title">Titles are targets, too</a>.</p>
2016 年新的、更好的答案!
autosection扩展使您可以通过真正的交叉引用轻松完成此操作。
=============
Some Document
=============
Internal Headline
=================
那么,后来……
===============
Some Other Doc
===============
A link- :ref:`Internal Headline`
这个扩展是内置的,所以你只需要编辑conf.py
extensions = [
.
. other
. extensions
. already
. listed
.
'sphinx.ext.autosectionlabel',
]
您唯一需要注意的是,现在您不能在整个文档集合中复制内部标题。(值得。)
克里斯回答的一个小补充:
如果您想链接到标题而不使用该链接的标题的确切名称,您可以这样做:
Titles are targets, too
=======================
See `here <#titles-are-targets-too>`_
这将呈现为:
<h1 id="titles-are-targets-too">Titles are targets, too</h1>
<p>See <a href="#titles-are-targets-too">here</a></p>
使用标题文本不是一个好的选择。标题可能会改变或可能会得到纠正。现在有一种简单的方法可以确定更改后链接断开的数量和位置。
建议在标准的 reStructuredText 链接上使用 ref 到节(如
`Section title`_
),因为它可以跨文件工作,当节标题更改时,如果不正确会发出警告,并且适用于支持交叉引用的所有构建器。
来源:https ://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-ref
使用Adam Michael Wood提出的sphinx.ext.autosectionlabel
扩展至少是一种更结构化的方法,然后使用Chris提出的隐式定义的锚点。
您应该使用带有引用和符号目标名称的显式链接(就像 LaTeX 自古以来所做的那样。)
- 用于
.. _refname:
创建目标。 - 用于
:ref:`refname`
引用目标。
如果目标后面有标题,则此标题将用作链接文本。