如何将 "glob "标志选项提供的toctree倒序?

问题描述 投票:10回答:3

有谁知道有什么选项可以让toctree按文件名的降序排列? 如果是升序,我们可以使用 :glob: 这样的选项。

.. toctree:
   :glob:

   2011*

这对于每天用重组文本写的笔记来说很方便 应该在Sphinx文档中报告。

sorting python-sphinx glob toctree
3个回答
11
投票

没有简单的选项可以对toctree进行反向排序。但是你可以通过修改文档结构来实现,然后再将其写入文件。这里有一个建议。在文件中添加以下代码 conf.py:

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() 回调函数被调用,当 doctree-resolved 事件被触发。该函数定位了 toctree 节点,并对其进行就地修改。

关于Sphinx和Docutils APIs的更多细节。


12
投票

这为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*

2
投票

从Sphinx 1.5+开始,有一个内置的 :reversed: 标志,你可以将其添加到一个toctree中。

.. toctree::
   :glob:
   :reversed:

   2011*

更多信息,请看 斯芬克斯文档.

© www.soinside.com 2019 - 2024. All rights reserved.