Как вставить перекрестную ссылку на страницу reST / Sphinx в подзаголовок или привязку на другой странице в том же наборе документации?
python-sphinx
restructuredtext
Сью Уолш
источник
источник
Ответы:
Выражение «reST / Sphinx» делает неясным объем вопроса. Это о reStructuredText в целом и Sphinx, или только о reStructuredText, который используется в Sphinx (а не reStructuredText в целом)? Я собираюсь рассказать об обоих случаях, поскольку люди, использующие RST, в какой-то момент могут столкнуться с обоими случаями:
Сфинкс
Помимо доменных директив, которые можно использовать для связывания с различными объектами, такими как классы (
:class:
), существует общая:ref:
директива, задокументированная здесь . Они приводят такой пример:Хотя общий механизм гиперссылок, предлагаемый RST, действительно работает в Sphinx, документация не рекомендует использовать его при использовании Sphinx:
RST, в целом
Инструменты, конвертирующие файлы RST в HTML, не обязательно имеют понятие коллекции . Это имеет место, например, если вы полагаетесь на github для преобразования файлов RST в HTML или если вы используете инструмент командной строки, например
rst2html
. К сожалению, различные методы, которые можно использовать для получения желаемого результата, различаются в зависимости от того, какой инструмент вы используете. Например, если вы используетеrst2html
и хотите, чтобы файлA.rst
ссылался на раздел с именем «Раздел» в файле,other.rst
и вы хотите, чтобы окончательный HTML-код работал в браузере, онA.rst
будет содержать:Вы должны сделать ссылку на окончательный HTML-файл и знать, что
id
будет в разделе. Если вы хотите сделать то же самое для файла, обслуживаемого через github:Здесь тоже нужно знать
id
данные в разделе. Однако вы связываетесь с файлом RST, потому что HTML создается только при доступе к файлу RST. (На момент написания этого ответа прямой доступ к HTML запрещен.)Полный пример доступен здесь .
источник
RST, in General
были неутешительные новости!).. _my-reference-label:
подхода Sphinx является тоmy-reference-label
, что URL-адрес отображается после#
ссылки. Поэтому нужно использовать красивые названия ярлыков. Кроме того, TOC всегда создает#
-ссылку наSection to cross-reference
, и, таким образом,#
получается две разные -ссылки на один и тот же раздел.:ref:`Link title <lmy-reference-label>`
Новый лучший ответ на 2016 год!
Расширение autosection позволяет сделать это легко.
тогда позже...
Это расширение встроено, поэтому все, что вам нужно, это отредактировать
conf.py
Единственное, о чем вы должны быть осторожны, это то, что теперь вы не можете дублировать внутренние заголовки в коллекции документов. (Стоило того.)
источник
_page-title-learn-more
). Это немного раздражает, но мне все еще нравится в основном полагаться на автосекцию.autosectionlabel_prefix_document
опцию конфигурации, которая позволяет избежать проблемы с дублированием заголовка, добавляя к каждой метке раздела префикс имени документа, из которого он взят.:ref:`Link title <Internal Headline>`
. Кроме того, вы можете напрямую ссылаться на страницу (например, quickstart.rst) с помощью:doc:`quickstart`
Пример:
где
Homebrew
находится раздел внутри другого документа с именемInstallation.rst
.Здесь используется функция автоматического разделения , поэтому необходимо будет отредактировать
config.py
следующее:источник
autosectionlabel_maxdepth
, поэтому для работы autosectionlabel вы должны установить для этой переменной значение> =2
. Кроме того , если документы формируются в подпапку, какhtml
, вы должны префикс рефов с его именем::ref:'html/Installation:Homebrew'
. По этой причине вы можете выбрать какое-нибудь общее имя каталога, напримерgenerated
, чтобы сделать ссылки менее странными при использовании с форматами, отличными от HTML. Из-за этого вы можете'Homebrew <Installation.html#Homebrew>'__
использовать правильный reST и не быть привязанным к Sphinx.html/
Приставка мне не понадобилась