2011-11-30 43 views

回答

10

沒有簡單的選項來反向排序toctree。但是你可以在寫入文件之前修改文檔結構來完成。這是一個建議。下面的代碼添加到conf.py:當doctree-resolved事件被觸發

def reverse_toctree(app, doctree, docname): 
    """Reverse the order of entries in the root toctree if 'glob' is used.""" 
    if docname == "index": 
     for node in doctree.traverse(): 
      if node.tagname == "toctree" and node.get("glob"): 
       node["entries"].reverse() 
       break 

def setup(app): 
    app.connect("doctree-resolved", reverse_toctree) 

reverse_toctree()調用回調函數。該功能可以在文檔樹中找到toctree節點並在原地進行更改。

更多關於獅身人面像和docutils的API的細節:

+0

不錯。這不會扭轉每一個toctree,但?你可以添加一個檢查':顛倒:參數toctree節點來控制這種行爲,不是嗎? –

+0

@Kevin Horn:如果使用:glob:選項,則代碼在「索引」(根)文檔中反轉toctree。 OP沒有具體說明任何詳細要求,我不打算這個答案不僅僅是一個卑微的建議。我相信有很多方法可以調整它。感謝評論和upvote! – mzjn

+3

但是這並不能逆轉邊欄中的ToC。 – Adobe

11

這增加了一個反向選項toctree。

from sphinx.directives import TocTree 
from docutils.parsers.rst import directives 

class NewTocTree(TocTree): 
    option_spec = dict(TocTree.option_spec, 
         reversed=directives.flag) 

    def run(self): 
     rst = super(NewTocTree, self).run() 
     if 'reversed' in self.options: 
      rst[0][0]['entries'].reverse() 
     return rst 

def setup(app): 
    app.add_directive('toctree', NewTocTree) 

它可以讓你做的事:

Contents: 

.. toctree:: 
    :maxdepth: 2 
    :reversed: 
    :glob: 

    20* 
+0

這也顛倒了sidebar中的toctree。 – brandones

1

獅身人面像的1.5+有一個內置的:reversed:標誌,你可以添加到toctree:

.. toctree:: 
    :glob: 
    :reversed: 

    2011* 

欲瞭解更多信息,見the Sphinx documentation

+0

該功能是在獅身人面像1.5(1.5a2)中添加的:http://www.sphinx-doc.org/en/stable/changes.html#id30。 – mzjn

相關問題