Định dạng văn bản trong một liên kết trong reStructuredText


81

Làm cách nào để bạn định dạng văn bản trong một liên kết được biểu thị trong reStructuredText?

Cụ thể, tôi muốn tạo HTML sau từ lần đầu tiên của mình:

<a href="http://docs.python.org/library/optparse.html"><tt>optparse.OptionParser</tt> documentation documentation</a>

Kết quả sẽ như thế này:

optparse.OptionParser tài liệu

trong đó phần "optparse.OptionParser" ở phông chữ có độ rộng cố định.

Tôi đã thử

```optparse.OptionParser`` <http://docs.python.org/library/optparse.html>`_

tuy nhiên, điều này đã cho

<tt class="docutils literal">`optparse.OptionParser</tt> documentation &lt;<a class="reference external" href="http://docs.python.org/library/optparse.html">http://docs.python.org/library/optparse.html</a>&gt;`_

trông như thế này

`` optparse.OptionParser documentation <http://docs.python.org/library/optparse.html>\_

Câu trả lời:


93

Cấu trúc này:

Here you have |optparse.OptionParser|_.

.. |optparse.OptionParser| replace:: ``optparse.OptionParser`` documentation
.. _optparse.OptionParser: http://docs.python.org/library/optparse.html

tạo ra HTML này (một số dấu ngắt dòng được thêm vào):

<p>Here you have 
  <a class="reference external" href="http://docs.python.org/library/optparse.html">
  <tt class="docutils literal"><span class="pre">optparse.OptionParser</span></tt> documentation</a>.
</p>

Tôi nhận ra rằng đây không phải là chính xác những gì bạn yêu cầu, nhưng có lẽ nó đủ gần. Xem thêm http://docutils.sourceforge.net/FAQ.html#is-nested-inline-markup-possible .


2
Điều này thực sự đẹp. Tôi đã xem xét tất cả các loại giải pháp được thiết kế kỹ lưỡng, bao gồm cả việc viết tiện ích mở rộng tùy chỉnh trước khi tôi tìm thấy điều này.
Mad Physicist,

91
Điều này không thực sự đẹp. Điều này thật kinh khủng. Tất cả các ngôn ngữ đánh dấu sane đều hỗ trợ lồng vô thời hạn của đánh dấu nội tuyến, vì đây là năm 2016. Phân tích cú pháp không theo ngữ cảnh đã được giải quyết một cách đáng kinh ngạc kể từ năm 1959. ( Chomsky: "Trên một số thuộc tính chính thức của ngữ pháp." ) Không có khả năng phân tích cú pháp reStructuredText để thực hiện ngữ cảnh chính xác -miễn phí phân tích cú pháp là một vết nứt, xấu xí trên một mặt tiền bằng đồng bảng Anh. Cú pháp được xác định rõ ràng và có khả năng mở rộng cao của reST xứng đáng tốt hơn. ( Có người nên cảm thấy xấu về việc này. )
Cecil Curry

1
Liên kết "chi tiết tại đây" trong mục Câu hỏi thường gặp đó rất thú vị ... đặc biệt là "các hình thức đánh dấu nội tuyến khác có thể được lồng vào nhau nếu rõ ràng"; Tôi tự hỏi liệu cách duy nhất nó sẽ xảy ra là nếu ai đó chỉ cần cố gắng tạo ra một bộ bản vá xử lý các trường hợp rõ ràng và sau đó hương vị "hơi khác thường" này của RST trở nên phổ biến đến mức mọi thứ chỉ là quả cầu tuyết từ đó (hoặc nếu không ít nhất chúng tôi nhận được hỗ trợ tốt cho các trường hợp rõ ràng ngay lập tức)
JamesTheAwesomeDude

lưu ý rằng điều này chỉ hoạt động cho các siêu liên kết chứ không phải cho các liên kết nội bộ tài liệu (như :ref:)
Jason S

6

Bạn đã thử interphinx chưa? Sử dụng tiện ích mở rộng đó, đánh dấu sau:

:py:class:`optparse.OptionParser`

tạo ra HTML này:

<a class="reference external" href="http://docs.python.org/2.6/library/optparse.html#optparse.OptionParser" title="(in Python v2.6)"><tt class="xref py py-class docutils literal"><span class="pre">optparse.OptionParser</span></tt></a>

Đã thử nghiệm với Python 2.6 và Sphinx 1.0.5.


1
À, tôi không biết về tượng nhân sư. Cảm ơn, thật tốt khi biết. Liên kết đến optparsethực sự chỉ là một ví dụ. Tôi thực sự quan tâm đến việc định dạng văn bản trong một liên kết đến bất kỳ URI nào.
gotgenes

4

Lấy từ cùng một trang Câu hỏi thường gặp do mzjn tham khảo:

The "raw" directive can be used to insert raw HTML into HTML output:

Here is some |stuff|.

.. |stuff| raw:: html

   <em>emphasized text containing a
   <a href="http://example.org">hyperlink</a> and
   <tt>inline literals</tt></em>

Về lý thuyết, có thể làm những việc phức tạp mà không thể làm được với RST.


1
điều này hoạt động, nhưng nó cũng phá vỡ các nhà văn khác (LaTeX, PDF, v.v.)
Jason S

0

Nếu bạn muốn về cơ bản, hãy lấy HTML / CSS tương đương với

<span class="red">This is red text</span>

trong reStructuredText bằng Sphinx, bạn có thể thực hiện việc này bằng cách tạo một vai trò:

.. role:: red

Sau đó, bạn sử dụng nó như thế này:

:red:`This is red text`

Chỉ nên có một dấu tick `ở cuối dòng trên. Bạn, tất nhiên, phải có

.red { color: red }

trong tệp CSS của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.