Rendre les niveaux de titre des documents automatiquement dépendants des niveaux de profondeur des (sous (sous (…))) dossiers auxquels ils appartiennent
Supposons que j'ai:
- un
foo0.rst
fichier à la racine (source
) de monsphinx-doc
dossier source, - un
foo1.rst
fichier dans un sous-dossiersubfolder1
desource
, - un
foo2.rst
fichier dans un sous-dossiersubfolder2
desubfolder1
,
C'est:
$ tree source
source
├── foo0.rst
└── subfolder1
├── foo1.rst
└── subfolder2
└── foo2.rst
tous avec le même contenu:
This a title
============
Maintenant, si le index.rst
contient:
Welcome to Test's documentation!
================================
.. toctree::
:maxdepth: 3
:caption: Contents:
foo0
subfolder1/foo1
subfolder1/subfolder2/foo2
make html
donne:
Welcome to Test’s documentation!
Contents:
• This a title
• This a title
• This a title
c'est-à-dire que tous les titres sont des sections.
Ce que je voudrais plutôt obtenir est le suivant:
Welcome to Test’s documentation!
Contents:
• This a title
◦ This a title
▪ This a title
c'est l'en-tête de:
foo0.rst
être une section,subfolder1/foo1.rst
étant une sous-section (et non une section),subfolder1/subfolder2/foo2.rst
étant une sous-section (et non une section).
Ma question est donc: est-il possible de faire dépendre automatiquement les niveaux d'en-tête des documents appartenant aux (sous (sous (...))) dossiers des niveaux de profondeur des dossiers auxquels ils appartiennent?
Réponses
Le style appliqué aux toctree
entrées dépend du thème que vous utilisez. Le CSS du thème appliquera un style aux entrées dans lesquelles Sphinx a été traduit <ul>
et en <li>
fonction à la fois de leur place dans la «hiérarchie des documents», compte tenu de la façon dont vous enchaînez toctrees
et de l'organisation de votre structure de section dans les .rst
fichiers individuels .
Par exemple, inspectez les éléments HTML générés par Sphinx. Le toctree
sera un div class="toctree-wrapper compound"
avec chaque niveau de sections étant nommé <li class="toctree-l1">
alors <li class="toctree-l2">
, etc ...
Une façon d'obtenir ce que vous voulez serait d'entourer une donnée en toctree
utilisant une .. class::
directive (comme montré ici ) et d'appliquer un style personnalisé . Mais cela aurait alors un impact sur le style de tous les autres .rst
fichiers que vous souhaitez inclure en tant qu'entrées toctree
.
Dans tous les cas, vous encourrez un travail supplémentaire et un automatisme potentiellement lâche si vous refactorisez votre projet.
Il existe également une solution de contournement possible , en utilisant l' :hidden:
option avec la :include:directive. Si vous déclarez un masqué toctree
avant un visible, toctree
la "hiérarchie de documents" peut fixer pour vous la position d'une entrée dans la hiérarchie. Ensuite, le visible toctree
sans l' :hidden:
option rendra .rst
les entrées de fichier comme un <li>
élément ayant une position fixe dans la hiérarchie. (Un exemple complet peut être vu dans cet article ).
Cela peut être fait, mais vous travaillerez contre les caractéristiques du toctree
.
La solution la plus courante consiste à écrire vos .rst
fichiers et vos sections en fonction de la manière dont vous souhaitez toctree
afficher le. (Cette approche a tous les avantages avec le seul inconvénient de mettre des restrictions sur la façon dont vous écrivez les .rst
fichiers). C'est probablement la solution préférable plutôt que d'essayer d'adapter les styles CSS ou d'utiliser des solutions de contournement.
ÉDITER:
Ce que j'ai écrit avant est valide, mais probablement trop général. Je vais donc donner une solution possible à l'exemple. Si vous souhaitez ce qui suit:
Contents:
• This a title (foo0)
◦ This a title (foo1)
▪ This a title (foo2)
Une option simple consiste à utiliser une chaîne de toctree
s. Vous pouvez masquer les éléments toctree
situés plus bas dans la hiérarchie du document si vous ne souhaitez pas les voir.
index.rst
.. toctree::
:maxdepth: 3
foo0
et en foo0.rst
.. toctree::
:maxdepth: 3
:hidden:
subfolder1/foo1
et en subfolder1/foo1.rst
.. toctree::
:maxdepth: 3
:hidden:
subfolder1/subfolder2/foo2
Le résultat sera celui que vous avez spécifié.