別のページの小見出しまたはアンカーへの相互参照の追加


回答:


207

「reST / Sphinx」という表現は、質問の範囲を不明確にします。それは一般的にreStructuredText Sphinx についてですか、それともに関するものです使用される reStructuredTextに関するものだけですか(一般的に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を使用する場合はそれを使用しないことを推奨しています。

セクションへの標準のreStructuredTextリンクよりもrefを使用することをお勧めします( Section title _など)ます。これは、セクション見出しが変更された場合、および相互参照をサポートするすべてのビルダーに対して、ファイル全体で機能するためです。

RST、一般的に

RSTファイルをHTMLに変換するツールには、必ずしもコレクションという概念はありません。たとえば、githubを使用してRSTファイルをHTMLに変換する場合や、などのコマンドラインツールを使用する場合ですrst2html。残念ながら、望ましい結果を得るために使用するさまざまな方法は、使用しているツールによって異なります。たとえば、を使用してrst2html、file A.rstをfile内の「Section」という名前のセクションにリンクさ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はセクションに与えられたものを知る必要があります。ただし、HTMLが作成されるのはRSTファイルにアクセスしたときだけなので、RSTファイルにリンクします。(この回答を書いている時点では、HTMLに直接アクセスすることは許可されていません。)

完全な例はここにあります


9
質問の所有者が受け入れるものよりもはるかに良い答え。(それはRST, in General、残念なニュースでした!)
dlm 2014年

1
Sphinx .. _my-reference-label:アプローチの欠点は、my-reference-labelURLの後#のリンクに表示されることです。したがって、かなりのラベル名を使用する必要があります。また、目次では常に#への-link が作成されるため、同じセクションへのSection to cross-reference2つの異なる-link が作成され#ます。
st12

3
また、リンクに別の名前を付けたい場合は、いつでも使用できます:ref:`Link title <lmy-reference-label>`
HyperActive

52

2016年の新しい、より良い答え!

autosection拡張機能は、あなたがこれを簡単に行うことができます。

=============
Some Document
=============


Internal Headline
=================

じゃあ後で...

===============
Some Other Doc
===============


A link-  :ref:`Internal Headline`

この拡張機能は組み込みなので、編集するだけです conf.py

extensions = [
    .
    . other
    . extensions
    . already
    . listed
    .
    'sphinx.ext.autosectionlabel',
]

あなたが注意しなければならない唯一のことは、今あなたはドキュメントコレクション全体で内部の見出しを複製することができないということです。(価値がある。)


5
この回答を書いてから、実際にこのアプローチに関するいくつかの問題を発見しました。まず、セクションの名前変更が問題です。次に、「詳細」や「概要」など、使用したい短いセクションタイトルがあることがよくありますが、これを行う場合はできません。解決策:名前を変更するときに、セクションのタイトルを追加します。のような短いセクションタイトルのセクションタイトルを追加し_page-title-learn-moreます。それは少し面倒ですが、私は依然としてオートセクションに依存するのが好きです。
アダムマイケルウッド

12
Sphinx 1.6には構成autosectionlabel_prefix_documentオプションが導入されており、各セクションラベルの前にドキュメントの名前を付けることで、見出しの重複問題を回避できます。
pmos

2
これが最良の解決策です。また、リンクのタイトルはで簡単に変更できます:ref:`Link title <Internal Headline>`。また、次のようなページ(quickstart.rstなど)に直接リンクすることもできます:doc:`quickstart`
HyperActive

5

例:

Hey, read the :ref:`Installation:Homebrew` section.

どこHomebrew名付け異なるドキュメント内のセクションですInstallation.rst

これは自動セクション機能を使用するためconfig.py、次のように編集する必要があります。

extensions = [
    'sphinx.ext.autosectionlabel'
]
autosectionlabel_prefix_document = True

2.0.0b1で追加されたautosectionlabel_maxdepthため、autosectionlabelを機能させるには、その変数を> =に設定する必要があります2。また、のようにドキュメントがサブディレクトリに生成される場合はhtml、refの前にその名前を付ける必要があります:ref:'html/Installation:Homebrew'。このため、のような一般的なディレクトリ名を選択してgenerated、HTML以外の形式で参照を使用するときに見た目が悪くならないようにすることができます。このため、'Homebrew <Installation.html#Homebrew>'__Sphinxに縛られずに、適切なreSTを使用することもできます。
パグスリー

html/プレフィックスは必要ありませんでした
Chris
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.