Hacer que los niveles de encabezado de los documentos dependan automáticamente de los niveles de profundidad de las (sub (sub (…))) carpetas a las que pertenecen
Supongamos que tengo:
- un
foo0.rst
archivo en la raíz (source
) de misphinx-doc
carpeta de origen, - un
foo1.rst
archivo en una subcarpetasubfolder1
desource
, - un
foo2.rst
archivo en una subcarpetasubfolder2
desubfolder1
,
es decir:
$ tree source
source
├── foo0.rst
└── subfolder1
├── foo1.rst
└── subfolder2
└── foo2.rst
todos con el mismo contenido:
This a title
============
Ahora, si index.rst
contiene:
Welcome to Test's documentation!
================================
.. toctree::
:maxdepth: 3
:caption: Contents:
foo0
subfolder1/foo1
subfolder1/subfolder2/foo2
make html
da:
Welcome to Test’s documentation!
Contents:
• This a title
• This a title
• This a title
es decir, todos los títulos son secciones.
Lo que me gustaría obtener en su lugar es lo siguiente:
Welcome to Test’s documentation!
Contents:
• This a title
◦ This a title
▪ This a title
ese es el encabezado de:
foo0.rst
siendo una sección,subfolder1/foo1.rst
siendo una subsección (y no una sección),subfolder1/subfolder2/foo2.rst
siendo una subsección (y no una sección).
Por lo tanto, mi pregunta es: ¿es posible hacer que los niveles de encabezado de los documentos que pertenecen a (sub (sub (...))) carpetas dependan automáticamente de los niveles de profundidad de las carpetas a las que pertenecen?
Respuestas
El estilo aplicado a las toctree
entradas depende del tema que esté utilizando. El CSS del tema aplicará un estilo a las entradas que Sphinx tradujo <ul>
y <li>
dependiendo de su lugar dentro de la "jerarquía del documento", dado cómo encadena toctrees
y cómo se organiza la estructura de su sección en los .rst
archivos individuales .
Por ejemplo, inspeccione los elementos HTML que genera Sphinx. El toctree
será un div class="toctree-wrapper compound"
con cada nivel de secciones que se nombrarán <li class="toctree-l1">
entonces <li class="toctree-l2">
, etc.
Una forma de lograr lo que desea sería rodear un determinado toctree
mediante una .. class::
directiva (como se muestra aquí ) y aplicar un estilo personalizado . Pero eso afectaría el estilo de cualquier otro .rst
archivo que desee incluir como entradas en eso toctree
.
En cualquier caso, incurrirá en trabajo extra y potencialmente perderá automatismo si refactoriza su proyecto.
También hay una posible solución alternativa : utilizar la :hidden:
opción junto con la :include:directiva. Si declara un oculto toctree
antes que un visible, toctree
la "jerarquía de documentos" puede fijar la posición de una entrada para usted en la jerarquía. Posteriormente, lo visible toctree
sin la :hidden:
opción representará las .rst
entradas del archivo como un <li>
elemento que tiene una posición fija en la jerarquía. (Se puede ver un ejemplo completo en esta publicación ).
Se puede hacer, pero trabajará en contra de las características del toctree
.
La solución predominante es escribir sus .rst
archivos y secciones dependiendo de cómo desee toctree
que se muestren. (Este enfoque tiene todas las ventajas con el único inconveniente de poner restricciones en la forma de escribir los .rst
archivos). Probablemente sea la solución preferible en lugar de intentar adaptar los estilos CSS o utilizar soluciones alternativas.
EDITAR:
Lo que escribí antes es válido, pero probablemente demasiado general. Así que daré una posible solución al ejemplo. Si quieres lo siguiente:
Contents:
• This a title (foo0)
◦ This a title (foo1)
▪ This a title (foo2)
Una opción simple es usar una cadena de toctree
s. Puede ocultar los toctree
que están más abajo en la jerarquía del documento si no desea verlos.
index.rst
.. toctree::
:maxdepth: 3
foo0
y en foo0.rst
.. toctree::
:maxdepth: 3
:hidden:
subfolder1/foo1
y en subfolder1/foo1.rst
.. toctree::
:maxdepth: 3
:hidden:
subfolder1/subfolder2/foo2
El resultado será el que especificó.