¿Cómo insertar una referencia cruzada en una página reST / Sphinx a un subencabezado o un ancla en otra página en el mismo conjunto de documentación?
python-sphinx
restructuredtext
Sue Walsh
fuente
fuente
Respuestas:
La expresión "reST / Sphinx" hace poco claro el alcance de la pregunta. ¿Se trata de reStructuredText en general y Sphinx, o solo de reStructuredText como se usa en Sphinx (y no reStructuredText en general)? Voy a cubrir ambos, ya que es probable que las personas que usan RST se encuentren con ambos casos en algún momento:
Esfinge
Además de las directivas específicas del dominio que se pueden usar para vincular a varias entidades como clases (
:class:
), está la:ref:
directiva general , documentada aquí . Dan este ejemplo:Aunque el mecanismo general de hipervínculos que ofrece RST funciona en Sphinx, la documentación recomienda no usarlo cuando se usa Sphinx:
RST, en general
Las herramientas que convierten archivos RST a HTML no necesariamente tienen una noción de colección . Este es el caso, por ejemplo, si confía en github para convertir archivos RST a HTML o si usa una herramienta de línea de comandos como
rst2html
. Desafortunadamente, los diversos métodos a utilizar para obtener el resultado deseado varían según la herramienta que esté utilizando. Por ejemplo, si usarst2html
y desea que el archivo seA.rst
vincule a una sección llamada "Sección" en el archivoother.rst
y desea que el HTML final funcione en un navegador, entoncesA.rst
debería contener:Tienes que enlazar al archivo HTML final y tienes que saber cuál
id
será el dado a la sección. Si desea hacer lo mismo con un archivo servido a través de github:Aquí también necesita saber lo que se le
id
da a la sección. Sin embargo, se vincula al archivo RST porque solo al acceder al archivo RST se crea el HTML. (En el momento de escribir esta respuesta, no se permite acceder directamente al HTML).Un ejemplo completo está disponible aquí .
fuente
RST, in General
fue una noticia decepcionante!).. _my-reference-label:
enfoque Sphinx es quemy-reference-label
se muestra en la URL después#
en el enlace. Así que hay que usar nombres de etiquetas bonitos. Además, la tabla de contenido siempre crea un#
-enlace aSection to cross-reference
y, por lo tanto, uno termina con dos#
-enlaces diferentes a la misma sección.:ref:`Link title <lmy-reference-label>`
¡Nueva y mejor respuesta para 2016!
La extensión de autosección le permite hacer esto fácilmente.
Entonces despúes...
Esta extensión está incorporada, por lo que todo lo que necesita es editar
conf.py
Lo único con lo que debe tener cuidado es que ahora no puede duplicar titulares internos en la colección de documentos. (Vale la pena.)
fuente
_page-title-learn-more
). Es un poco molesto, pero todavía me gusta confiar principalmente en la autosección.autosectionlabel_prefix_document
opción de configuración que le permite evitar el problema de los titulares duplicados colocando el prefijo de cada etiqueta de sección con el nombre del documento del que proviene.:ref:`Link title <Internal Headline>`
. Además, puede vincular directamente a una página (quickstart.rst, por ejemplo) con:doc:`quickstart`
Ejemplo:
donde
Homebrew
es una sección dentro de un documento diferente llamadoInstallation.rst
.Esto usa la función de autosección , por lo que deberá editar
config.py
con lo siguiente:fuente
autosectionlabel_maxdepth
, por lo que para que funcione la etiqueta de sección automática, debe establecer esa variable en> =2
. Además, si se generan documentos de subdirectorio, comohtml
, debe anteponer árbitros con su nombre::ref:'html/Installation:Homebrew'
. Por esta razón, es posible que desee elegir un nombre de directorio genérico, comogenerated
, para hacer que las referencias sean menos extrañas cuando se usan con formatos que no sean HTML. Debido a esto, también podría'Homebrew <Installation.html#Homebrew>'__
optar por usar el reST adecuado y no estar atado a Sphinx.html/
prefijo