Como inserir uma referência cruzada em uma página reST / Sphinx para um subcabeçalho ou âncora em outra página no mesmo conjunto de documentação?
python-sphinx
restructuredtext
Sue Walsh
fonte
fonte
Respostas:
A expressão "reST / Sphinx" torna o escopo da questão pouco claro. É sobre reStructuredText em geral e Sphinx, ou apenas sobre reStructuredText como usado em Sphinx (e não reStructuredText em geral)? Vou cobrir ambos, já que as pessoas que usam RST provavelmente se depararão com os dois casos em algum momento:
Esfinge
Além das diretivas específicas do domínio que podem ser usadas para vincular a várias entidades como classes (
:class:
), há a:ref:
diretiva geral , documentada aqui . Eles dão este exemplo:Embora o mecanismo geral de hiperlinks oferecido pelo RST funcione no Sphinx, a documentação não recomenda usá-lo ao usar o Sphinx:
RST, em geral
As ferramentas que convertem arquivos RST em HTML não necessariamente têm uma noção de coleção . Este é o caso, por exemplo, se você confia no github para converter arquivos RST em HTML ou se você usa uma ferramenta de linha de comando como
rst2html
. Infelizmente, os vários métodos a serem usados para obter o resultado desejado variam de acordo com a ferramenta que você está usando. Por exemplo, se você usarst2html
e deseja que o arquivoA.rst
seja vinculado a uma seção chamada "Seção" no arquivoother.rst
e deseja que o HTML final funcione em um navegador, entãoA.rst
conteria:Você tem que vincular ao arquivo HTML final e saber qual será o
id
dado à seção. Se você quiser fazer o mesmo para um arquivo veiculado por meio do github:Aqui também você precisa saber o
id
dado à seção. No entanto, você vincula ao arquivo RST porque é apenas ao acessar o arquivo RST que o HTML é criado. (No momento em que escrevo esta resposta, acessar o HTML diretamente não é permitido.)Um exemplo completo está disponível aqui .
fonte
RST, in General
, foram notícias decepcionantes!).. _my-reference-label:
abordagem Sphinx é quemy-reference-label
é mostrada na URL depois#
do link. Portanto, deve-se usar nomes de rótulos bonitos. Além disso, o TOC sempre cria um#
-link paraSection to cross-reference
e, portanto, termina com dois#
-links diferentes para a mesma seção.:ref:`Link title <lmy-reference-label>`
Nova e melhor resposta para 2016!
A extensão de autosecção permite que você faça isso facilmente.
então, depois ...
Esta extensão é integrada, então tudo que você precisa é editar
conf.py
A única coisa com que você precisa ter cuidado é que agora você não pode duplicar títulos internos em toda a coleção de documentos. (Vale a pena.)
fonte
_page-title-learn-more
). É um pouco chato, mas ainda gosto de confiar principalmente na autosecção.autosectionlabel_prefix_document
opção de configuração que permite evitar o problema de título duplicado, prefixando cada etiqueta de seção com o nome do documento de onde vem.:ref:`Link title <Internal Headline>`
. Além disso, você pode criar um link direto para uma página (quickstart.rst, por exemplo) com:doc:`quickstart`
Exemplo:
onde
Homebrew
é uma seção dentro de um documento diferente nomeadoInstallation.rst
.Isso usa o recurso de autosecção , portanto, será necessário editar
config.py
com o seguinte:fonte
autosectionlabel_maxdepth
, portanto, para autosectionlabel funcionar, você deve definir essa variável como> =2
. Além disso, se docs são gerados para subdir, comohtml
, você deve prefixar refs com seu nome::ref:'html/Installation:Homebrew'
. Por esta razão, você pode querer escolher algum nome de diretório genérico, comogenerated
, para tornar a aparência de referência menos estranha quando usado com formatos diferentes de HTML. Por causa disso, você pode muito bem'Homebrew <Installation.html#Homebrew>'__
usar o reST adequado e não estar vinculado ao Sphinx.html/
precisei do prefixo