Câu trả lời:
Cụm từ "reST / Sphinx" làm cho phạm vi câu hỏi không rõ ràng. Đó là về reStructuredText nói chung và Sphinx, hay chỉ về reStructuredText như được sử dụng trong Sphinx (và không phải reStructuredText nói chung)? Tôi sẽ đề cập đến cả hai vì những người sử dụng RST có khả năng gặp phải cả hai trường hợp tại một số điểm:
Bên cạnh các chỉ thị dành riêng cho miền có thể được sử dụng để liên kết với các thực thể khác nhau như các lớp ( :class:
) còn có :ref:
chỉ thị chung , được ghi lại ở đây . Họ đưa ra ví dụ này:
.. _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`.
Mặc dù cơ chế siêu liên kết chung do RST cung cấp không hoạt động trong Sphinx, nhưng tài liệu khuyến cáo không nên sử dụng nó khi sử dụng Sphinx:
Sử dụng ref được khuyên dùng hơn là các liên kết reStructuredText tiêu chuẩn đến các phần (như
Section title
_) vì nó hoạt động trên các tệp, khi các tiêu đề của phần được thay đổi và cho tất cả các trình xây dựng hỗ trợ tham chiếu chéo.
Các công cụ chuyển đổi tệp RST sang HTML không nhất thiết phải có khái niệm thu thập . Đây là trường hợp chẳng hạn nếu bạn dựa vào github để chuyển đổi tệp RST sang HTML hoặc nếu bạn sử dụng một công cụ dòng lệnh như rst2html
. Thật không may, các phương pháp khác nhau để sử dụng để có được kết quả mong muốn khác nhau tùy thuộc vào công cụ bạn đang sử dụng. Ví dụ: nếu bạn sử dụng rst2html
và bạn muốn tệp A.rst
liên kết đến một phần có tên "Phần" trong tệp other.rst
và bạn muốn HTML cuối cùng hoạt động trong trình duyệt, thì tệp A.rst
sẽ chứa:
`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.
Bạn phải liên kết đến tệp HTML cuối cùng và bạn phải biết nội dung id
được cung cấp cho phần sẽ là gì. Nếu bạn muốn làm điều tương tự đối với tệp được cung cấp qua 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``.
Ở đây bạn cũng cần biết những gì id
được đưa ra cho phần. Tuy nhiên, bạn liên kết đến tệp RST vì chỉ khi truy cập tệp RST, HTML mới được tạo. (Tại thời điểm viết câu trả lời này, không được phép truy cập trực tiếp vào HTML.)
Một ví dụ hoàn chỉnh có sẵn ở đây .
RST, in General
, đó là một tin đáng thất vọng!)
.. _my-reference-label:
phương pháp Sphinx là my-reference-label
được hiển thị trong URL sau #
liên kết. Vì vậy, người ta phải sử dụng tên nhãn đẹp. Ngoài ra, TOC luôn tạo ra một liên #
kết đến Section to cross-reference
, và do đó một liên kết kết thúc với hai #
liên kết khác nhau đến cùng một phần.
:ref:`Link title <lmy-reference-label>`
Câu trả lời mới, hay hơn cho năm 2016!
Các phần mở rộng autosection cho phép bạn làm điều này một cách dễ dàng.
=============
Some Document
=============
Internal Headline
=================
sau đó, sau đó ...
===============
Some Other Doc
===============
A link- :ref:`Internal Headline`
Tiện ích mở rộng này được tích hợp sẵn, vì vậy tất cả những gì bạn cần là chỉnh sửa conf.py
extensions = [
.
. other
. extensions
. already
. listed
.
'sphinx.ext.autosectionlabel',
]
Điều duy nhất bạn phải cẩn thận là bây giờ bạn không thể sao chép các tiêu đề nội bộ trong bộ sưu tập tài liệu. (Đáng giá.)
_page-title-learn-more
). Có một chút khó chịu, nhưng tôi vẫn thích chủ yếu dựa vào tính năng tự động.
autosectionlabel_prefix_document
tùy chọn cấu hình cho phép bạn tránh vấn đề dòng tiêu đề trùng lặp bằng cách đặt trước mỗi nhãn phần bằng tên của tài liệu mà nó xuất phát.
:ref:`Link title <Internal Headline>`
. Ngoài ra, bạn có thể liên kết trực tiếp đến một trang (ví dụ: quickstart. Đầu tiên) với:doc:`quickstart`
Thí dụ:
Hey, read the :ref:`Installation:Homebrew` section.
đâu Homebrew
là một phần bên trong một tài liệu khác được đặt tên Installation.rst
.
Điều này sử dụng tính năng tự động chọn , vì vậy sẽ cần phải chỉnh sửa config.py
những điều sau:
extensions = [
'sphinx.ext.autosectionlabel'
]
autosectionlabel_prefix_document = True
autosectionlabel_maxdepth
, vì vậy để nhãn tự động hoạt động, bạn phải đặt biến đó thành> = 2
. Ngoài ra, nếu tài liệu được tạo ra để subdir, như html
, bạn phải thêm tiền tố refs với tên gọi của nó: :ref:'html/Installation:Homebrew'
. Vì lý do này, bạn có thể muốn chọn một số tên dir chung chung, chẳng hạn như generated
, để làm cho các ref trông bớt kỳ lạ hơn khi được sử dụng với các định dạng khác với HTML. Vì điều này, bạn cũng có 'Homebrew <Installation.html#Homebrew>'__
thể sử dụng reST thích hợp và không bị ràng buộc với Sphinx.
html/
tiền tố