다른 페이지의 부제목 또는 앵커에 상호 참조 추가


답변:


207

"reST / Sphinx"라는 표현은 질문의 범위를 명확하지 않게 만듭니다. 그것은 일반적으로 reStructuredText에 대한인가 스핑크스, 또는 단지 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를 사용할 때 사용하지 말 것을 권장합니다.

ref를 사용하는 것은 섹션에 대한 표준 reStructuredText 링크 (예 : Section title_) 를 사용하는 것이 좋습니다. 이는 파일간에, 섹션 제목이 변경 될 때 및 상호 참조를 지원하는 모든 빌더에 대해 작동하기 때문입니다.

RST, 일반

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섹션에 주어진 것을 알아야합니다 . 그러나 HTML이 작성되는 RST 파일에 액세스 할 때만 가능하기 때문에 RST 파일에 링크합니다. (이 답변을 작성하는 시점에서 HTML에 직접 액세스하는 것은 허용되지 않습니다.)

완전한 예는 여기에서 볼 수 있습니다 .


9
질문 소유자가 수락 한 답변보다 훨씬 더 나은 답변입니다. ( RST, in General실망스런 소식 임에도 불구하고 !)
dlm

1
Sphinx .. _my-reference-label:접근 방식 의 단점은 링크 my-reference-label뒤의 URL에 표시 된다는 것 입니다 #. 따라서 예쁜 레이블 이름을 사용해야합니다. 또한 TOC는 항상에 대한- #링크를 생성 Section to cross-reference하므로 #동일한 섹션에 대한 두 개의 서로 다른- 링크로 끝납니다 .
ST12

3
링크에 다른 이름을 지정하려면 항상 사용할 수 있습니다.:ref:`Link title <lmy-reference-label>`
HyperActive 2010 년

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`
과잉 행동

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. 또한 문서가과 같이 subdir에 생성되는 경우 htmlrefs에 해당 이름을 접두사로 지정해야합니다.:ref:'html/Installation:Homebrew' .. 이러한 이유로 generatedHTML 이외의 형식과 함께 사용할 때 참조를 덜 이상하게 보이게하기 위해 와 같은 일반적인 디렉토리 이름을 선택할 수 있습니다 . 이 때문에 'Homebrew <Installation.html#Homebrew>'__적절한 reST를 사용하고 Sphinx에 묶이지 않는 것이 좋습니다.
Pugsley

나는 html/접두사 가 필요하지 않았다
크리스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.