是否可以在重构文本(或sphinx)中重用另一个文件中定义的超链接

nos*_*nos 4 restructuredtext python-sphinx

假设我有两个文件a.rstb.rst同一个文件夹中,a.rst看起来像这样

.. _foo: http://stackoverflow.com

`foo`_ is a website
Run Code Online (Sandbox Code Playgroud)

似乎不允许使用fooin 。b.rst有没有办法定义超链接并在多个文件中使用它们?

跟进

extlinks按照史蒂夫·皮尔西的建议使用了该扩展。它的实现和文档字符串可以在 github 上看到。

就我而言,我在 conf.py 中定义了维基百科链接

extlinks = {'wiki': ('https://en.wikipedia.org/wiki/%s', '')}
Run Code Online (Sandbox Code Playgroud)

.rst文件中,像这样使用它们

:wiki:`Einstein <Albert_Einstein>`
Run Code Online (Sandbox Code Playgroud)

其中爱因斯坦将显示为https://en.wikipedia.org/wiki/Albert_Einstein的链接

Ste*_*rcy 7

至少有四种可能的解决方案。

1.重复一遍

将您的完整休息放入每个文件中。你可能不想要这样。

2. 组合rst_epilog与替换

这个很聪明。rst_epilog在您的值中配置该值conf.py以及带有replace指令的替换:

rst_epilog = """
.. |foo| replace:: foo
.. _foo: http://stackoverflow.com
"""
Run Code Online (Sandbox Code Playgroud)

和休息:

|foo|_ is a website
Run Code Online (Sandbox Code Playgroud)

产量:

|foo|_ is a website
Run Code Online (Sandbox Code Playgroud)

3.extlinks

对于您想要具有基本 URL 并附加路径段或参数的外部网站的链接,您可以extlinks在您的 中使用conf.py

<a class="reference external" href="http://stackoverflow.com">foo</a>
Run Code Online (Sandbox Code Playgroud)

然后在休息时:

:so:`questions/49016433`
Run Code Online (Sandbox Code Playgroud)

产量:

extensions = [
...
    'sphinx.ext.extlinks',
...
]
...
extlinks = {'so': ('https://stackoverflow.com/%s', None)}
Run Code Online (Sandbox Code Playgroud)

4.intersphinx

对于由 Sphinx 生成的文档的外部网站,您可以intersphinx在您的 中使用 , conf.py

:so:`questions/49016433`
Run Code Online (Sandbox Code Playgroud)

然后在休息时:

:py:mod:`doctest`
Run Code Online (Sandbox Code Playgroud)

产量:

<a class="reference external"
 href="https://stackoverflow.com/questions/49016433">
 https://stackoverflow.com/questions/49016433
</a>
Run Code Online (Sandbox Code Playgroud)