我正在记录一组使用sphinx的项目,这些项目从intersphinx扩展中受益匪浅。从本质上讲,大约有3个实用程序项目提供给较大的项目,在较大的项目中,我需要从较小的项目中引用文档。我把Intersphinx设置为
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.intersphinx',
...
]
intersphinx_mapping = {
'project1': ('http://internal.url/to/project1/latest', None),
'project2': ('http://internal.url/to/project2/latest', None),
'project3': ('http://internal.url/to/project3/latest', None),
}
这让我可以正常使用intersphinx:
:any:`project1.Class1`
它被呈现为文本
project1.Class1
的链接不过,我宁愿用不合格的名字,所以我最后还是写了:any:`Class1 <project1.Class1>`
很多。这真烦人。我真的很想扮演几个角色
* :p1:`Class1` is from ``project1``
* :p2:`Class2` is from ``project2``
* :p3:`function1` is from ``project3``
其中
:p1:`{text}`
替换为:any:`{text} <project1.{text}>`
等。有什么简单的方法可以做到这一点吗?我所有的搜索都得到了非常无用的信息,intersphinx的源代码很难阅读理想情况下我有办法
def p1_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
return sphinx.some_module.parse(':any:`{0} <project1.{0}>`'.format(text))
def setup(app):
app.add_role('p1', p1_role)
会是最好的,但我不知道那里是否有。
最佳答案
根据third bullet point of Cross-referencing syntax:
如果在内容前面加上~
,则链接文本将仅是目标的最后一个组件。例如:
:py:meth:`~Queue.Queue.get`
将引用
Queue.Queue.get
,但仅将get
显示为链接文本。它可以与
class
、func
、meth
和attr
一起工作,也可能与any
一起工作(我无法让它与any
一起工作)。按照模式,尝试以下操作:
:class:`~project1.Class1`
我刚刚在金字塔和webob上做了一个测试,结果成功了:
:class:`~webob.request.Request`
只有文本
Request
显示并链接到webob api。