指定指向numpy,scipy和matplotlib的Intersphinx链接的目标


67

在用于在软件包之间设置Sphinx文档链接的文档之后,我添加了

intersphinx_mapping = {'python': ('http://docs.python.org/2', None),
                       'numpy': ('http://docs.scipy.org/doc/numpy/', None),
                       'scipy': ('http://docs.scipy.org/doc/scipy/reference/', None),
                       'matplotlib': ('http://matplotlib.sourceforge.net/', None)}

对我来说conf.py,但似乎无法获得除Python本身以外的任何项目的链接。例如

:term:`svg graphics <matplotlib:svg>`

只是将我带到索引页面,而没有添加预期的#term-svg锚点,而且我什至无法找到术语表,也无法确定scipy如何确定软件包支持哪些:ref:s或:term:s。

我在哪里可以找到如何指定目标指令:ref:S和:term:S IN numpyscipymatplotlib


为此,我如何链接到Sphinx本身?新增中

intersphinx_mapping['sphinx'] = ('http://sphinx-doc.org/', None)

:ref:`Intersphinx <intersphinx>`

不起作用。


4
使用:term:`svg graphics <matplotlib:svg>` 对我来说很好。我无法解释为什么您只能进入索引页面。如果要链接到intersphinx文档页面,请使用模块名称::mod:`Intersphinx <sphinx.ext.intersphinx>`
mzjn 2014年

此答案说明了如何找到文档项目可用的intersphinx目标:stackoverflow.com/a/30981554/407651
mzjn 2015年

2
您是否使用的是旧版本的狮身人面像?我记得,旧版本仅支持引用标识符,但不支持:ref:。您是否尝试过做类似的事情In python you can `open` a file
eteq '16


1
我发现sphobjinv命令行工具对于此任务非常有用。
drammock

Answers:


13

我在哪里可以找到如何指定目标指令:ref:S和:term:S IN numpyscipymatplotlib

我有一个要点有极少数的intersphinx映射,现在包括所有的numpyscipymatplotlib。您应该能够直接使用这些条目intersphinx_mapping,您内conf.py。如果有人有建议将其他条目添加到此列表中,请随时将请求发布到Gist的评论中。

对于所有这些软件包,我强烈建议根据fgoudra的回答sphobjinvobjects.inv文件中搜索每个库。(全部披露:我是的作者sphobjinv。)suggestCLI界面的模式经过专门设计,可提供组成狮身人面像交叉引用所需的信息。


numpy很复杂。有时您需要一个完全限定的名称,例如:

:func:`numpy.cross`

在其他时候(例如,对于C函数),您可以仅引用函数的基本名称,但必须明确指示域,例如:

:c:func:`PyArray_InnerProduct`

在其他时候,您可能必须引用自定义np域,例如:

:np:func:`numpy.ma.append`

如果不咨询,实际上是没有办法知道正确的语法是什么objects.inv

 

scipy几乎和一样难以理解numpy通过为各种scipy子包引入大量自定义域,事情变得更加复杂,例如:

:scipy-optimize:func:`scipy.integrate.newton_cotes`

 

对于matplotlib您似乎总是必须在引用中提供(非常详细)完全指定的对象名称,例如:

:meth:`matplotlib.axes.Axes.plot`

但是,所有matplotlib代码对象似乎都位于默认py域中,这在某种程度上简化了事情。

 

对于上述任何一种情况,如果您无法正确构建链接那么我要回避的第一件事就是使用通用:obj:角色,例如:

:obj:`matplotlib.axes.Axes.plot`

intersphinx尽管我认为您仍然必须正确指定任何相关的非默认域,但无论定义特定对象的角色如何,这都将构造一个链接。如果引用不能正确地与:obj:角色配合使用,则对象名称或某个域中的域存在错误。检查两个地方的错别字。


4

可以手动指定要查看的库存。例如,如果intersphinx_mapping['sphinx'] = ('http://sphinx-doc.org/', None) 不起作用,则始终可以下载清单并将其手动添加到映射中(例如,从http://sphinx-doc.org/objects.inv下载,将二进制文件保存在文档中并添加路径它在映射中;这将给出类似以下内容:

intersphinx_mapping['sphinx'] = ('http://sphinx-doc.org/', ('objects.inv', ), )

要验证清单中是否存在参考,您可以使用sphobjinv python软件包探索二进制文件,然后检查所需的参考在哪里。

这可能不是解决问题的方法,但可以帮助调试某些东西。


2

如果这仍然是一个问题..您需要在URL末尾省略斜杠:

intersphinx_mapping = {'python': ('http://docs.python.org/2', None),
                       'numpy': ('http://docs.scipy.org/doc/numpy', None),
                       'scipy': ('http://docs.scipy.org/doc/scipy/reference', None),
                       'matplotlib': ('http://matplotlib.sourceforge.net', None)}

1

知道如何进行交叉引用的另一种方法是使用sphobjinv模块。

您可以搜索本地甚至是远程清单文件(具有模糊匹配)。例如,使用scipy:

$ sphobjinv suggest -t 90 -u https://docs.scipy.org/doc/scipy/reference/objects.inv "signal.convolve2d"

Remote inventory found.

:py:function:`scipy.signal.convolve2d`
:std:doc:`generated/scipy.signal.convolve2d`

请注意,您可能需要使用:py:func:而不是:py:function:(我很高兴知道为什么)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.