Відповіді:
Вираз "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_document
config, який дозволяє уникнути виникнення дублікатів заголовка за допомогою префіксації кожної мітки розділу з назвою документа, з якого він походить.
: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/
приставка