2013-03-13 8 views
53

Come inserire un riferimento incrociato in una pagina reST/Sfinge su un'intestazione secondaria o su un'ancora in un'altra pagina nello stesso set di documentazione?Aggiunta di un riferimento incrociato a un sottotitolo o ancora in un'altra pagina

+0

Possibile duplicato di [Come creare un hyper link interno nella documentazione della sfinge] (https://stackoverflow.com/questions/4385315/how-to-make-an-internal-hyper-link- in-sphinx-documentation) –

risposta

11

Ignorare questa risposta, non funziona: un uso migliore la risposta da Louis

per l'ancora, è possibile definire i nomi di ancoraggio "corte" in questo modo:

.. _ShortAnchor: 

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

Some text. 

fare riferimento a tale uso intestazione:

For more details, see ShortAnchor_. 

Nota, che questo espande anche ShortAnchor al nome completo dell'intestazione.

Si può anche utilizzare il nome completo di intestazione come:

See `Target Header goes here`_ chapter. 

ma questo è più soggetto a errori di modifiche di testo dell'intestazione.

Tutto questo funziona su più file sorgente che fanno parte di una documentazione finale.

+5

Questo non ha funzionato per me quando l'ancora a cui volevo fare riferimento era in un documento diverso, invece ho trovato che l'uso di: ref: funzionava comunque (si veda: http://sphinx.pocoo.org /markup/inline.html#cross-referencing-arbitrary-locations) –

+2

Questo tipo di schivare la domanda. Cosa succede se ci sono nomi di intestazione duplicati, come si fa riferimento l'intestazione in un documento specifico? Cosa succede se non si desidera aggiungere nomi univoci ovunque? – davidism

+1

@davidism L'uso di ancore corte ti rende responsabile della creazione di un codice univoco nell'intero set di documenti. Questa è una regola. Ti consente di spostare sezioni su pagine e ancore e riferimenti ancora funzionanti. Se vuoi usare intestazioni "lunghe" duplicate nel tuo set, fallo, le ancore corte permetteranno un riferimento esatto. –

115

L'espressione "reST/Sphinx" rende poco chiara la portata della domanda. Riguarda reStructuredText in generale e Sfinge, oppure solo su reStructuredText come utilizzato in Sfinge (e non in ReStructuredText in generale)? Sto andando a coprire sia in quanto persone che utilizzano RST sono probabilità di incorrere in entrambi i casi a un certo punto:

Sfinge

Oltre alle direttive specifiche del dominio che possono essere utilizzati per creare un collegamento a diverse entità come le classi (:class:) c'è la direttiva generale :ref:, documentata here. 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 collegamenti ipertestuali generale offerto dalla RST funziona nella Sfinge, la documentazione raccomanda di non usarlo quando si utilizza Sfinge:

Utilizzando ref è consigliato su link reStructuredText standard alle sezioni (come Section title _) perché funziona su tutti i file, quando le intestazioni delle sezioni sono cambiate e per tutti i costruttori che supportano riferimenti incrociati.

RST, in generale

Gli strumenti che convertono file RST in HTML non hanno necessariamente una nozione di raccolta. Questo è il caso ad esempio se ci si basa su github per convertire i file RST in HTML o se si utilizza 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 si sta utilizzando.Per esempio, se si utilizza rst2html e si desidera archiviare A.rst collegare a una sezione chiamata "sezione" nel file other.rst e si desidera che la finale HTML di lavorare in un browser, quindi A.rst conterrebbe:

`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. 

Hai per collegarsi al file HTML finale e devi sapere che cosa sarà la id assegnata alla sezione. Se si vuole fare lo stesso per un file servito attraverso 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, si collega al file RST poiché solo quando si accede al file RST viene creato l'HTML. (Al momento della stesura di questa risposta, l'accesso diretto all'HTML non è consentito.)

Un esempio completo è disponibile here.

+8

Risposta molto migliore di quella accettata dal proprietario della domanda. (Nonostante il fatto che "RST, in generale", fosse una notizia deludente!) – dlm

+0

Uno svantaggio della Sphinx '.. _my-reference-label:' l'approccio è che 'my-reference-label' è mostrato nell'URL dopo' # 'nel link. Quindi è necessario utilizzare nomi di etichette carini. Inoltre, il sommario crea sempre un collegamento "#" a "Sezione per il rimando", e quindi uno finisce con due diversi '#' -links nella stessa sezione. –

23

Nuova, migliore risposta per il 2016!

Il autosection extension consente di farlo facilmente.

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


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

poi, più tardi ...

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


A link- :ref:`Internal Headline` 

Questa estensione è built-in, quindi tutto ciò che serve è modificare conf.py

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

L'unica cosa che dovete stare attenti di questo è che ora non è possibile duplicare i titoli interni nella raccolta di documenti. (Vale la pena.)

+0

Da quando ho scritto questa risposta, ho scoperto in pratica un paio di problemi con questo approccio. Innanzitutto, la ridenominazione delle sezioni è un problema. In secondo luogo, spesso hai titoli di sezioni brevi come "Ulteriori informazioni" o "panoramica" che vuoi utilizzare, cosa che non puoi fare se lo stai facendo.Soluzione: aggiungi il titolo della sezione quando/se rinomini; aggiungi un titolo di sezione per i titoli delle sezioni brevi (come '_page-title-learn-more'). È un po 'fastidioso, ma mi piace ancora di più affidarsi all'autosection. –

+1

Sphinx 1.6 introduce l'opzione di configurazione ['' autosectionlabel_prefix_document''] (http://www.sphinx-doc.org/en/stable/ext/autosectionlabel.html#confval-autosectionlabel_prefix_document) che consente di evitare il problema dei titoli duplicati prefisso ogni etichetta di sezione con il nome del documento da cui proviene. – pmos

Problemi correlati