Risposte:
L'espressione "reST / Sphinx" rende poco chiaro lo scopo della domanda. Riguarda reStructuredText in generale e Sphinx, o solo reStructuredText come usato in Sphinx (e non reStructuredText in generale)? Coprirò entrambi poiché è probabile che le persone che utilizzano RST si imbattano in entrambi i casi ad un certo punto:
Oltre alle direttive specifiche del dominio che possono essere utilizzate per collegarsi a varie entità come classes ( :class:
), c'è la :ref:
direttiva generale , documentata qui . Danno questo esempio:
.. _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`.
Sebbene il meccanismo di collegamento ipertestuale generale offerto da RST funzioni in Sphinx, la documentazione sconsiglia di utilizzarlo quando si utilizza Sphinx:
L'uso di ref è consigliato rispetto ai link reStructuredText standard alle sezioni (come
Section title
_) perché funziona su tutti i file, quando le intestazioni delle sezioni vengono modificate e per tutti i builder che supportano i riferimenti incrociati.
Gli strumenti che convertono i file RST in HTML non hanno necessariamente una nozione di raccolta . Questo è il caso, ad esempio, se ti affidi a github per convertire i file RST in HTML o se usi uno strumento da riga di comando come rst2html
. Sfortunatamente, i vari metodi da utilizzare per ottenere il risultato desiderato variano a seconda dello strumento che stai utilizzando. Ad esempio, se utilizzi rst2html
e desideri che il file si A.rst
colleghi a una sezione denominata "Sezione" nel file other.rst
e desideri che l'HTML finale funzioni in un browser, allora A.rst
conterrà:
`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.
Devi collegarti al file HTML finale e devi sapere quale sarà il id
dato alla sezione. Se vuoi fare lo stesso per un file servito tramite 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``.
Anche qui è necessario conoscere il id
dato alla sezione. Tuttavia, ci si collega al file RST perché è solo all'accesso al file RST che viene creato l'HTML. (Al momento della stesura di questa risposta, l'accesso diretto all'HTML non è consentito.)
Un esempio completo è disponibile qui .
RST, in General
, è stata una notizia deludente!)
.. _my-reference-label:
è che my-reference-label
è mostrato nell'URL dopo #
nel collegamento. Quindi bisogna usare nomi di etichette carini. Inoltre, il sommario crea sempre un #
collegamento a Section to cross-reference
, e quindi uno finisce con due diversi #
collegamenti alla stessa sezione.
:ref:`Link title <lmy-reference-label>`
Nuova, migliore risposta per il 2016!
L' estensione di autosection ti consente di farlo facilmente.
=============
Some Document
=============
Internal Headline
=================
poi più tardi...
===============
Some Other Doc
===============
A link- :ref:`Internal Headline`
Questa estensione è integrata, quindi tutto ciò di cui hai bisogno è modificare conf.py
extensions = [
.
. other
. extensions
. already
. listed
.
'sphinx.ext.autosectionlabel',
]
L'unica cosa a cui devi stare attento è che ora non puoi duplicare i titoli interni nella raccolta di documenti. (Ne e 'valsa la pena.)
_page-title-learn-more
). È un po 'fastidioso, ma mi piace comunque fare affidamento principalmente sull'autosezione.
autosectionlabel_prefix_document
opzione di configurazione che ti consente di evitare il problema del titolo duplicato anteponendo a ciascuna etichetta di sezione il nome del documento da cui proviene.
:ref:`Link title <Internal Headline>`
. Inoltre, puoi collegarti direttamente a una pagina (ad esempio quickstart.rst) con:doc:`quickstart`
Esempio:
Hey, read the :ref:`Installation:Homebrew` section.
dove si Homebrew
trova una sezione all'interno di un documento diverso denominato Installation.rst
.
Questo utilizza la funzione di selezione automatica , quindi sarà necessario modificare config.py
con quanto segue:
extensions = [
'sphinx.ext.autosectionlabel'
]
autosectionlabel_prefix_document = True
autosectionlabel_maxdepth
, quindi affinché l'autosectionlabel funzioni è necessario impostare quella variabile su> = 2
. Inoltre, se i documenti sono generati a subdir, come html
, è necessario anteporre refs con il suo nome: :ref:'html/Installation:Homebrew'
. Per questo motivo potresti voler scegliere un nome di directory generico, come generated
, per rendere i ref meno strani se usati con formati diversi dall'HTML. Per questo 'Homebrew <Installation.html#Homebrew>'__
motivo , potresti anche usare il corretto reST e non essere legato a Sphinx.
html/
prefisso