Відповіді:
Вираз "reST / Sphinx" робить обсяг питання неясним. Це про reStructuredText взагалі та Sphinx, чи лише про reStructuredText, як він використовується у Sphinx (а не reStructuredText взагалі)? Я збираюсь висвітлити і те, і інше, оскільки люди, які використовують RST, в якийсь момент можуть зіткнутися з обома випадками:
Окрім доменних директив, які можна використовувати для посилання на різні об'єкти, такі як класи ( :class:), тут є загальна :ref:директива, задокументована тут . Вони наводять такий приклад:
.. _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`.
Хоча загальний механізм гіперпосилання, запропонований RST, працює у Sphinx, документація рекомендує не використовувати його під час використання Sphinx:
Використовувати ref рекомендується для стандартних посилань на reStructuredText до розділів (наприклад,
Section title_), оскільки він працює у файлах, коли змінюються заголовки розділів, і для всіх будівельників, які підтримують перехресні посилання.
Інструменти, які перетворюють файли RST в HTML, не обов'язково мають поняття колекції . Це, наприклад, якщо ви покладаєтесь на github для перетворення файлів RST в HTML або якщо ви використовуєте інструмент командного рядка, як rst2html. На жаль, різні способи використання бажаного результату залежать від того, який інструмент ви використовуєте. Наприклад, якщо ви використовуєте, rst2htmlі ви хочете, щоб файл A.rstпосилався на розділ, який називається у розділі "Розділ", other.rstі ви хочете, щоб остаточний HTML-код працював у браузері, він A.rstмістив би:
`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.
Ви маєте посилання на кінцевий HTML-файл, і ви повинні знати, що буде idдано до розділу. Якщо ви хочете зробити те ж саме для файлу, який подається через 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``.
Тут теж потрібно знати idдане до розділу. Однак ви посилаєтесь на файл RST, оскільки HTML-файл створюється лише після доступу до файлу RST. (На момент написання цієї відповіді доступ до HTML безпосередньо не дозволений.)
Повний приклад доступний тут .
RST, in Generalневтішна новина!)
.. _my-reference-label:підходу Сфінкса є те, що my-reference-labelвідображається в URL-адресі після #у посиланні. Отже, треба використовувати гарні назви міток. Також TOC завжди створює #-посилання до Section to cross-reference, і, таким чином, один закінчується двома різними #-посиланнями на один і той же розділ.
:ref:`Link title <lmy-reference-label>`
Нова, краща відповідь на 2016 рік!
Розширення автосекції дозволяє вам це зробити легко.
=============
Some Document
=============
Internal Headline
=================
потім, пізніше ...
===============
Some Other Doc
===============
A link- :ref:`Internal Headline`
Це розширення є вбудованим, тому все, що вам потрібно - це редагувати conf.py
extensions = [
.
. other
. extensions
. already
. listed
.
'sphinx.ext.autosectionlabel',
]
Єдине, на що потрібно бути обережним - це те, що тепер ви не можете копіювати внутрішні заголовки в колекції doc. (Варто.)
_page-title-learn-more). Це трохи дратує, але мені все одно подобається в основному покладатися на автосекцію.
autosectionlabel_prefix_documentconfig, який дозволяє уникнути виникнення дублікатів заголовка за допомогою префіксації кожної мітки розділу з назвою документа, з якого він походить.
:ref:`Link title <Internal Headline>`. Крім того , ви можете пов'язати безпосередньо на сторінку (quickstart.rst, наприклад) з:doc:`quickstart`
Приклад:
Hey, read the :ref:`Installation:Homebrew` section.
де Homebrewзнаходиться розділ всередині іншого документа, названого Installation.rst.
Для цього використовується функція автоматичного вибору , тому її потрібно буде відредагувати config.pyтаким чином:
extensions = [
'sphinx.ext.autosectionlabel'
]
autosectionlabel_prefix_document = True
autosectionlabel_maxdepth, тож для роботи autosectionlabel потрібно встановити цю змінну на> = 2. Крім того , якщо документи формуються в підпапку, як html, ви повинні префікс рефов з його ім'ям: :ref:'html/Installation:Homebrew'. З цієї причини ви можете вибрати якесь загальне ім’я режисера, наприклад generated, щоб зробити рефлекси менш дивними на вигляд при використанні інших форматів, ніж HTML. Через це ви також 'Homebrew <Installation.html#Homebrew>'__можете скористатися належним відпочинком і не бути прив’язаним до Сфінкса.
html/приставка