如何在不创建任意标签的情况下在sphinx restructuredtext中创建标题的内部链接?

时间:2013-09-05 09:36:56

标签: python-sphinx restructuredtext

我有一份包含许多标题和小标题的文件。进一步在文本中我想链接回其中一个标题。如果没有:ref:标签的冗余,我该怎么做?内容似乎拿起标题就好了。我希望这样的事情:`#polled-data-retrieval`_

4 个答案:

答案 0 :(得分:26)

reStructuredText支持implicit hyperlink targets。来自reStructuredText quick reference

  

章节标题,脚注和引文自动生成超链接目标(标题文本或脚注/引文标签用作超链接名称)。

所以下面的文字(取自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>

答案 1 :(得分:14)

2016年新的,更好的答案!

autosection extension可让您轻松完成此操作,并使用真正的交叉引用。

=============
Some Document
=============


Internal Headline
=================

然后,稍后......

===============
Some Other Doc
===============


A link-  :ref:`Internal Headline`

此扩展程序是内置的,因此您只需编辑conf.py

即可
extensions = [
    .
    . other
    . extensions
    . already
    . listed
    .
    'sphinx.ext.autosectionlabel',
]

您唯一需要注意的是,现在您无法在整个文档集合中复制内部标题。 (值得。)

答案 2 :(得分:8)

克里斯回答中的一小部分内容:

如果要链接到标题而不使用链接的标题的确切名称,则可以这样操作:

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>

答案 3 :(得分:0)

使用标题文字不是一个好选择。标题可能会更改或可能会得到纠正。现在,有一种简单的方法可以找出更改后断开了谁的链接以及链接的位置。

  

建议通过标准reStructuredText链接到节(例如Requirement already up-to-date: fastprogress in /usr/local/lib/python3.6/dist-packages (0.2.1) )使用ref,因为它可跨文件工作,更改节标题时,如果不正确将发出警告,并且适用于所有支持交叉引用的构建器。
  来源:https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-ref

sphinx.ext.autosectionlabel extension提出的隐式定义的锚点相比,使用Adam Michael Wood提出的Chris至少是一种更加结构化的方法。


您应该使用带有引用和符号目标名称的显式链接(就像LaTeX一样。)

  1. 使用`Section title`_创建目标。
  2. 使用.. _refname:引用目标。

如果目标后面有标题,则会在链接文本中使用该标题。