2011-11-30 4 views
9

¿Alguien sabe alguna opción para ordenar el árbol en orden descendente de los nombres de los archivos? En caso de orden ascendente, podemos utilizar: glob: opción de la siguiente manera:Dentro de una documentación de Sphinx, ¿cómo puedo revertir el orden del árbol de texto proporcionado por la opción de indicador "glob"?

.. toctree: 
    :glob: 

    2011* 

Esto sería útil para las notas diarias escritas en texto reestructurado que deben ser reportadas dentro de un documento Esfinge.

Respuesta

10

No hay una opción simple para revertir-ordenar el árbol de texto. Pero puede hacerlo modificando la estructura del documento antes de escribirlo en el archivo. Aquí hay una sugerencia. Agregue el código siguiente para 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) 

La función de devolución de llamada reverse_toctree() se llama cuando se dispara el evento doctree-resolved. La función ubica el nodo toctree en el árbol de documentos y lo cambia in situ.

Más detalles sobre las API de Sphinx y docutils:

+0

Agradable. Sin embargo, esto no revertiría cada árbol? Probablemente pueda agregar una comprobación para un parámetro ': reversed: al nodo toctree para controlar este comportamiento, ¿no? –

+0

@Kevin Horn: el código invierte el toctree en el documento "índice" (raíz) si se usa la opción: glob :. El OP no ha especificado ningún requisito detallado, y no pretendía que esta respuesta fuera más que una sugerencia humilde. Estoy seguro de que hay muchas formas de modificarlo. Gracias por el comentario y el voto favorable! – mzjn

+3

Pero esto no invierte el ToC en la barra lateral. – Adobe

11

Esto añade una opción inversa para 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) 

que le permiten hacer:

Contents: 

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

    20* 
+0

Esto también invierte el árbol de texto en la barra lateral. – brandones

1

A partir de Sphinx 1.5+ hay un built-in :reversed: bandera se pueden agregar a un toctree:

.. toctree:: 
    :glob: 
    :reversed: 

    2011* 

Para obtener más información, ver the Sphinx documentation.

+0

La característica se agregó en Sphinx 1.5 (1.5a2): http://www.sphinx-doc.org/en/stable/changes.html#id30. – mzjn

Cuestiones relacionadas