【问题标题】:How to make an internal link to a heading in sphinx restructuredtext without creating arbitrary labels?如何在不创建任意标签的情况下创建指向 sphinx restructuredtext 中标题的内部链接?
【发布时间】:2013-09-09 01:53:11
【问题描述】:

我有一个包含许多标题和子标题的文档。在文本的后面,我想链接回其中一个标题。如果没有:ref: 标签的冗余,我该如何做到这一点?内容似乎很好地选择了标题。我希望有这样的东西:`#polled-data-retrieval`_

【问题讨论】:

标签: python-sphinx restructuredtext


【解决方案1】:

使用标题文字不是一个好的选择。标题可能会改变或可能会得到纠正。现在有一种简单的方法可以确定更改后链接断开的数量和断开位置。

建议在标准的 reStructuredText 链接上使用 ref,而不是指向部分的标准 reStructuredText 链接(如 `Section title`_),因为它适用于文件,当部分标题更改时,如果不正确会发出警告,并且适用于所有支持交叉引用的构建器。
来源:https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-ref

使用Adam Michael Wood 提出的sphinx.ext.autosectionlabel extension 至少比使用Chris 提出的隐式定义的锚点更结构化。


您应该使用引用和符号目标名称的显式链接(就像 LaTeX 自古以来所做的那样。)

  1. 使用.. _refname: 创建目标。
  2. 使用:ref:`refname` 引用目标。

如果目标后面有标题,则该标题将用作链接文本。

【讨论】:

  • 阅读答案的第一部分我在想“是的,有道理”但是......什么时候有例子,如何实际使用它?跨度>
【解决方案2】:

克里斯回答的一个小补充:

如果您想链接到标题而不使用链接的标题的确切名称,您可以这样做:

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>

【讨论】:

  • 这是最通用的答案。大多数答案都假设 Sphinx,这对于引用 Sphinx 的问题来说当然是公平的。然而,由于 Sphinx 无法应用于通用的 reStructuredText 文档(例如,GitHub 或 GitLab 存储库中的 README.rst),因此假设 Sphinx 特定 :ref: 语法的答案无法概括。另请参阅this authoritative answer elsewhere
  • @CecilCurry 除非您需要输出在非浏览器中工作。
【解决方案3】:

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',
]

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

【讨论】:

  • 谢谢。我一直认为这总是默认启用的,无法弄清楚为什么我的一些 refs 不起作用。
  • 一个小补充::ref:`Short link &lt;Very long headline that clutters your text otherwise&gt;` 也是可能的
  • 这个选项对我有用,谢谢!但是,它与sphinx_togglebutton 扩展不兼容。您对此有什么建议吗?或者我应该就此提出一个新问题?
【解决方案4】:

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>

【讨论】:

  • 使用标题文字不是一个好的选择。标题可能会改变或可能会得到纠正。现在有一种简单的方法可以确定更改后链接断开的数量和位置。您应该使用与引用的显式链接(就像 LaTeX 自古以来所做的那样。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 2011-10-29
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多