如何在不创建任意标签的情况下建立指向 sphinx 重构文本中标题的内部链接?

问题描述 投票:0回答:5

我有一个包含许多标题和副标题的文档。在正文中,我想链接回其中一个标题。如何在没有

:ref:
标签冗余的情况下做到这一点?内容似乎可以很好地获取标题。我希望有这样的事情:
`#polled-data-retrieval`_

python-sphinx restructuredtext
5个回答
50
投票

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>

34
投票

对克里斯的答案进行一点补充:

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

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>

30
投票

2016 年新的、更好的答案!

自动切片扩展让您可以通过真正的交叉引用轻松完成此操作。

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


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

然后,稍后...

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


A link-  :ref:`Internal Headline`

此扩展是内置的,因此您只需编辑即可

conf.py

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

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


11
投票

使用标题文字并不是一个好的选择。标题可能会改变或者可能会被更正。现在有一种简单的方法可以找出更改后哪些链接被破坏以及链接在哪里被破坏。

建议使用 ref 而不是指向节的标准 reStructuredText 链接(如

`Section title`_
),因为它可以跨文件工作,当节标题更改时,如果不正确,将发出警告,并且适用于所有支持交叉引用的构建器。
资料来源:https://www.sphinx-doc.org/en/master/usage/restructedtext/roles.html#role-ref

使用 Adam Michael Wood

 提出的 
sphinx.ext.autosectionlabel 扩展 至少是一种比使用 Chris 提出的隐式定义的锚点更加结构化的方法。


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

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

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


0
投票

根据 Paebbels 的回答和评论,Sphinx 展示了如何在文档内和整个项目中添加交叉引用这里

我什至可以在 Jupyter 笔记本的 Markdown 单元中使用它。我使用的是 .md 而不是 .rst,但此链接显示了如何为两者完成此操作。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.