2017-08-17 5 views
1

Je voudrais ajouter formatage du code à une référence comme celui-ci:Sphinx ajouter formatage du code à: ref:

:ref:`__slots__ <python:slots>` 

Mon intersphinx_mapping définit python comme ceci:

intersphinx_mapping = { 
    'python': ('https://docs.python.org/3', None), 
} 

de sorte que le lien est à https://docs.python.org/3/reference/datamodel.html#slots (slots est défini dans la section std:label de https://docs.python.org/3/objects.inv)

Mon objectif est de formater le re lien ndered dans le style de :py:attr: ou similaire plutôt que le style de texte par défaut avec lequel :ref: rend.

Aucune des options suivantes fonctionnent:

  • ... ``:ref:`__slots__ <python:slots>``` ... yeilds sortie comme

    ... :ref:`__slots__ <python:slots>` ...

  • ... ``:ref:`__slots__ <python:slots>` `` ... yeilds sortie comme

    ... __slots__ ...

  • ... :ref:```__slots__`` <python:slots>` ... yeilds sortie comme

    ...: ref: ```__slots__`` <python:> fentes `...

    Il existe deux liens internes distincts à #id1 dans ce cas.

  • ... :ref:` ``__slots__`` <python:slots>` ... yeilds sortie comme

    ...: ref: ``` __slots__`` <python:> fentes` ...

Relpacing ``...`` avec :code:`...` ou :literal:`...` à l'intérieur ou à l'extérieur du :ref: ne aide pas non plus. En fait, il semble que les rôles imbriqués ne sont pas autorisés du tout.

Je voudrais avoir un rôle en ligne qui se traduit par quelque chose qui rend avec un style de code et un lien, comme

... __slots__ ...

Comment puis-je le :ref: de base (ou équivalent) à apparaître avec la mise en forme de style de code utilisée par :py:attr:?J'utilise Sphinx 1.6.3 avec Python 3.6.2 dans un environnement Anaconda.

question inverse est ici: Sphinx remove code formatting from custom code reference

Une question tangentiellement pertinente: Nested/Compounded roles: apply multiple roles to overlapping text

+0

Je suis un peu confus par ce que vous voulez. D'abord, voulez-vous cela en ligne et pas dans un 'code-block'? Deuxièmement, voulez-vous que la sortie rendue soit liée aux docs Python pour les slots? Enfin, voulez-vous appliquer un style à la sortie rendue? –

+0

@StevePiercy. Toutes mes excuses pour la confusion. 1) Je voudrais que ': ref:' (ou équivalent) soit en ligne, comme c'est le cas actuellement. 2) Je voudrais que la sortie soit liée aux docs python avec l'étiquette 'slots'. 3) Je voudrais que la sortie soit rendue en police de code, même si ': ref:' ne l'est pas. De préférence avec le style de ': py: attr:' pour ce cas. Si cela signifie appliquer un style, je serais heureux de le faire. –

+0

J'ai mis à jour l'information ci-dessus dans la question. –

Répondre

1

Le rôle :any: fait ce que vous voulez:

:any:`__slots__ <python:slots>` 

Ceci est un "rôle de commodité" qui cherche croix cibles de référence dans le domaine actuel ainsi que les cibles qui fonctionnent avec :ref:. Le domaine Python a plusieurs specific cross-reference roles, pour différents types d'objets.

+0

Cela fonctionne vraiment, mais je ne comprends pas pourquoi. J'ai parcouru tous les rôles de références croisées spécifiques à Python et aucun d'entre eux n'a fonctionné. Ni 'doc' ou' option'. La seule chose qui fonctionne est 'ref', donc' any' doit être un alias, sauf qu'il se transforme magiquement en un extrait de code au lieu du texte brut 'ref'. –

+0

Il existe une étiquette de référence croisée '.. _slots:' dans la source RST, donc il n'est pas étrange que '': ref: 'slots'' 'fonctionne. (': doc:' et ': option:' sont différents types de références croisées que je ne m'attendrais pas à travailler). D'une certaine manière ': any:' aboutit au formatage du code sur le lien (mais je ne peux pas vraiment expliquer pourquoi). – mzjn