Ajout d'un renvoi à un sous-titre ou à une ancre dans une autre page

Comment insérer une référence croisée dans une page reST/Sphinx vers un sous-en-tête ou une ancre dans une autre page du même ensemble de documentation?

65
demandé sur Trilarion 2013-03-13 23:10:39

3 réponses

Ignorez cette réponse, cela ne fonctionne pas: mieux vaut utiliser la réponse de Louis

Pour l'ancre, vous pouvez définir des noms d'ancre "courts" comme ceci:

.. _ShortAnchor:

Target Header goes here
=======================

Some text.

Pour se référer à cet en-tête, utilisez:

For more details, see ShortAnchor_.

Notez que cela étend même ShortAnchor au nom complet de l'en-tête.

Vous pouvez également utiliser le nom d'en-tête complet comme:

See `Target Header goes here`_ chapter.

Mais c'est plus une erreur sujette à la modification du texte d'en-tête.

Tout cela fonctionne sur plusieurs fichiers sources faisant partie d'un seul documentation finale.

12
répondu Jan Vlcinsky 2015-08-25 19:40:16

L'expression "reST / Sphinx" rend la portée de la question peu claire. Est-ce reStructuredText en général et Sphinx, ou seulement sur reStructuredText , comme utilisé dans Sphinx (et pas reStructuredText en général)? Je vais couvrir les deux puisque les personnes utilisant RST sont susceptibles de rencontrer les deux cas à un moment donné:

Sphinx

Outre les directives spécifiques au domaine qui peuvent être utilisées pour lier à diverses entités comme les classes (:class:), Il y a la directive générale :ref:, documentée ici . Ils donnent cet exemple:

    .. _my-reference-label:

    Section to cross-reference
    --------------------------

    This is the text of the section.

    It refers to the section itself, see :ref:`my-reference-label`.

Bien que le mécanisme général d'hyperliens offert par RST fonctionne dans Sphinx, la documentation recommande de ne pas l'utiliser lors de L'utilisation de Sphinx:

L'utilisation de ref est conseillée sur les liens standard reStructuredText vers des sections (comme Section title_) car cela fonctionne dans les fichiers, lorsque les en-têtes de section sont modifiés et pour tous les constructeurs qui prennent en charge les références croisées.

En premier lieu, dans Générale

Les outils qui convertissent les premiers fichiers en HTML n'ont pas nécessairement une notion de collection . C'est le cas par exemple si vous comptez sur github pour convertir les premiers fichiers en HTML ou si vous utilisez un outil de ligne de commande comme rst2html. Malheureusement, les différentes méthodes à utiliser pour obtenir le résultat souhaité varier selon l'outil que vous utilisez. Par exemple, si vous utilisez rst2html et que vous voulez que le fichier A.rst soit lié à une section nommée "Section" dans le fichier other.rst et que vous voulez que le code HTML final travailler dans un navigateur, alors A.rst contiendrait:

`This <other.html#section>`__ is a reference to a section in another
file, which works with ``rst2html``. Unfortunately, it does not work
when the HTML is generated through github.

Vous devez créer un lien vers le fichier HTML final et vous devez savoir quel sera le id donné à la section. Si vous voulez faire la même chose pour un fichier servi via github:

`This <other.rst#section>`__ is a reference to a section in another
file, which works on github. Unfortunately, it does not work when you
use ``rst2html``.

Ici aussi, vous devez connaître le id donné à la section. Cependant, vous créez un lien vers le fichier RST car ce N'est qu'en accédant au fichier RST que le code HTML est créé. (Au moment de la rédaction de cette réponse, l'accès direct au HTML n'est pas permettre.)

Un exemple complet est disponible ici.

132
répondu Louis 2018-04-10 11:44:32

Nouveau, meilleure réponse pour 2016!

L'extension d'autosection vous permet de le faire facilement.

=============
Some Document
=============


Internal Headline
=================

Ensuite, plus tard...

===============
Some Other Doc
===============


A link-  :ref:`Internal Headline`

Cette extension est intégrée, donc tout ce dont vous avez besoin est d'éditer conf.py

extensions = [
    .
    . other
    . extensions
    . already
    . listed
    .
    'sphinx.ext.autosectionlabel',
]

La seule chose dont vous devez faire attention est que maintenant vous ne pouvez pas dupliquer les titres internes à travers la collection doc. (La peine.)

30
répondu Adam Michael Wood 2016-10-24 18:44:23