2017-08-11 43 views
3

我記錄了一系列使用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) 

會是最好的,但我不知道這是否可用在任何地方。

回答

3

third bullet point of Cross-referencing syntax

如果前綴~內容,鏈接文本將僅是目標的最後一個組件。例如:

:py:meth:`~Queue.Queue.get` 

將把Queue.Queue.get但只顯示get作爲鏈接文字。

它與classfuncmeth,並attr,並可能any(我不能讓它與any工作)。

繼模式,試試這個:

:class:`~project1.Class1` 

我只是跑在金字塔的WebOb測試,而這個工作:

:class:`~webob.request.Request` 

只有文本Request顯示並鏈接到的WebOb API 。

+1

這使我更接近我想要的,但我更喜歡較短的''':p1:'Name''',因爲我將不得不輸入很多,將避免必須鍵入模塊名稱。儘管現在這會做。謝謝! – bheklilr