Odpowiedzi:
Wyrażenie „reST / Sphinx” sprawia, że zakres pytania jest niejasny. Czy chodzi o reStructuredText w ogóle i Sphinx, czy tylko o reStructuredText używane w Sphinx (a nie o reStructuredText w ogóle)? Omówię oba, ponieważ ludzie używający RST prawdopodobnie napotkają w pewnym momencie oba przypadki:
Oprócz dyrektyw specyficznych dla domeny, które mogą być używane do łączenia się z różnymi jednostkami, takimi jak class ( :class:
), istnieje :ref:
dyrektywa ogólna , udokumentowana tutaj . Podają ten przykład:
.. _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`.
Chociaż ogólny mechanizm hiperłączy oferowany przez RST działa w Sphinx, dokumentacja odradza używanie go podczas korzystania z Sphinx:
Używanie ref jest zalecane zamiast standardowych linków reStructuredText do sekcji (takich jak
Section title
_), ponieważ działa ono w różnych plikach, gdy zmieniane są nagłówki sekcji i dla wszystkich kreatorów, które obsługują odsyłacze.
Narzędzia konwertujące pliki RST na HTML niekoniecznie mają pojęcie kolekcji . Dzieje się tak na przykład, jeśli korzystasz z github do konwersji plików RST do HTML lub jeśli używasz narzędzia wiersza poleceń, takiego jak rst2html
. Niestety, różne metody uzyskiwania pożądanego rezultatu różnią się w zależności od używanego narzędzia. Na przykład, jeśli używasz rst2html
i chcesz, aby plik A.rst
łączył się z sekcją o nazwie „Sekcja” w pliku other.rst
i chcesz, aby ostateczny kod HTML działał w przeglądarce, A.rst
powinien zawierać:
`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.
Musisz id
podać link do ostatecznego pliku HTML i wiedzieć, jakie będzie dane sekcji. Jeśli chcesz zrobić to samo dla pliku udostępnianego przez 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``.
Tutaj również musisz znać id
podane w sekcji. Jednak łączysz się z plikiem RST, ponieważ dopiero po uzyskaniu dostępu do pliku RST tworzony jest kod HTML. (W chwili pisania tej odpowiedzi bezpośredni dostęp do kodu HTML nie jest dozwolony).
Pełny przykład jest dostępny tutaj .
RST, in General
rozczarowująca wiadomość!)
.. _my-reference-label:
podejścia Sphinx jest to, że my-reference-label
jest wyświetlany w adresie URL po #
linku. Trzeba więc używać ładnych nazw etykiet. Ponadto spis treści zawsze tworzy #
-link do Section to cross-reference
, a więc kończy się to dwoma różnymi #
-linkami do tej samej sekcji.
:ref:`Link title <lmy-reference-label>`
Nowa, lepsza odpowiedź na rok 2016!
Przedłużenie sekcji opryskiwacza pozwala to zrobić łatwo.
=============
Some Document
=============
Internal Headline
=================
potem, później ...
===============
Some Other Doc
===============
A link- :ref:`Internal Headline`
To rozszerzenie jest wbudowane, więc wszystko, czego potrzebujesz, to edycja conf.py
extensions = [
.
. other
. extensions
. already
. listed
.
'sphinx.ext.autosectionlabel',
]
Jedyną rzeczą, na którą musisz uważać, jest to, że nie możesz teraz powielać nagłówków wewnętrznych w całej kolekcji dokumentów. (Warto było.)
_page-title-learn-more
). To trochę denerwujące, ale nadal lubię polegać głównie na autosekcji.
autosectionlabel_prefix_document
opcję konfiguracji, która pozwala uniknąć problemu z powielonymi nagłówkami, poprzedzając każdą etykietę sekcji nazwą dokumentu, z którego pochodzi.
:ref:`Link title <Internal Headline>`
. Możesz również utworzyć łącze bezpośrednio do strony (na przykład :doc:`quickstart`
Przykład:
Hey, read the :ref:`Installation:Homebrew` section.
gdzie Homebrew
jest sekcja wewnątrz innego dokumentu o nazwie Installation.rst
.
Korzysta z funkcji autosekcji , więc będzie trzeba edytować config.py
z następującymi elementami :
extensions = [
'sphinx.ext.autosectionlabel'
]
autosectionlabel_prefix_document = True
autosectionlabel_maxdepth
, więc aby autosectionlabel działał, musisz ustawić tę zmienną na> = 2
. Ponadto, jeśli są generowane docs do podkatalogu, podobnie html
, należy poprzedzić bibl z nazwy: :ref:'html/Installation:Homebrew'
. Z tego powodu możesz wybrać ogólną nazwę katalogu, na przykład generated
, aby referencje były mniej dziwne, gdy są używane z formatami innymi niż HTML. Z tego powodu możesz równie dobrze 'Homebrew <Installation.html#Homebrew>'__
użyć odpowiedniego reST i nie być przywiązanym do Sfinksa.
html/
prefiksu