Answers:
表达式“ reST / Sphinx”使问题的范围不清楚。它与一般和 Sphinx中的reStructuredText有关,还是仅与 Sphinx中所使用的 reStructuredText有关(而与一般reStructuredText不有关)?我将同时介绍这两种情况,因为使用RST的人有时可能会遇到两种情况:
除了可用于链接到各种实体(例如类(:class:
))的特定于域的指令外,还有通用:ref:
指令(在此处记录)。他们举这个例子:
.. _my-reference-label:
Section to cross-reference
--------------------------
This is the text of the section.
It refers to the section itself, see :ref:`my-reference-label`.
尽管RST提供的常规超链接机制确实可以在Sphinx中使用,但是文档建议不要在使用Sphinx时使用它:
建议使用ref而不是标准的reStructuredText链接到节(例如
Section title
_),因为它可以跨文件运行,更改节标题时以及支持交叉引用的所有构建器。
将RST文件转换为HTML的工具不一定具有集合的概念。例如,如果您依靠github将RST文件转换为HTML,或者使用诸如的命令行工具,就是这种情况rst2html
。不幸的是,用于获得理想结果的各种方法因所使用的工具而异。例如,如果您使用rst2html
并且希望文件A.rst
链接到文件中名为“ Section”的部分,other.rst
并且您希望最终的HTML在浏览器中工作,那么A.rst
它将包含:
`This <other.html#section>`__ is a reference to a section in another
file, which works with ``rst2html``. Unfortunately, it does not work
when the HTML is generated through github.
您必须链接到最终的HTML文件,并且您必须知道id
该部分的内容。如果要对通过github提供的文件执行相同的操作:
`This <other.rst#section>`__ is a reference to a section in another
file, which works on github. Unfortunately, it does not work when you
use ``rst2html``.
在这里,您也需要知道id
给定的部分。但是,您链接到RST文件,因为仅在访问RST文件时才创建HTML。(在编写此答案时,不允许直接访问HTML。)
这里有一个完整的例子。
RST, in General
令人
.. _my-reference-label:
方法的缺点是在链接my-reference-label
后的URL #
中显示。因此,必须使用漂亮的标签名称。另外,TOC始终创建到的#
-link Section to cross-reference
,因此最终以#
指向同一节的两个不同的-links 结尾。
:ref:`Link title <lmy-reference-label>`
新的,更好的答案2016!
该autosection扩展可以让你轻松做到这一点。
=============
Some Document
=============
Internal Headline
=================
然后,以后...
===============
Some Other Doc
===============
A link- :ref:`Internal Headline`
此扩展是内置的,因此您只需编辑 conf.py
extensions = [
.
. other
. extensions
. already
. listed
.
'sphinx.ext.autosectionlabel',
]
您唯一需要注意的是,现在您无法在整个文档集合中重复内部标题。(值得。)
_page-title-learn-more
)添加一个标题。有点烦人,但我仍然喜欢大部分依靠自动切开功能。
autosectionlabel_prefix_document
config选项,该选项通过在每个节标签前添加其来源文档的名称来避免重复的标题问题。
:ref:`Link title <Internal Headline>`
。另外,您可以使用:doc:`quickstart`
例:
Hey, read the :ref:`Installation:Homebrew` section.
Homebrew
另一个名为的文档中的节在哪里Installation.rst
?
这使用了自动切片功能,因此需要config.py
使用以下内容进行编辑:
extensions = [
'sphinx.ext.autosectionlabel'
]
autosectionlabel_prefix_document = True
autosectionlabel_maxdepth
,因此要使autosectionlabel起作用,必须将该变量设置为> = 2
。另外,如果将文档生成到subdir(如)html
,则必须在refs之前添加名称::ref:'html/Installation:Homebrew'
。因此,您可能需要选择一些通用的目录名称,例如generated
,以使ref在与HTML以外的格式一起使用时看起来不那么奇怪。因此,您不妨'Homebrew <Installation.html#Homebrew>'__
使用适当的reST,而不必与Sphinx捆绑在一起。
html/
前缀