開始使用

Sphinx 是一個文件產生器,或是一個工具,可將一組純文字來源檔案翻譯成各種輸出格式,自動產生交叉參考、索引等。也就是說,如果您有一個目錄包含一堆 reStructuredTextMarkdown 文件,Sphinx 可以產生一系列 HTML 檔案、PDF 檔案(透過 LaTeX)、man page 和更多格式。

Sphinx 專注於文件,特別是手寫文件,然而,Sphinx 也可用於產生部落格、首頁,甚至是書籍。Sphinx 的大部分能力來自於其預設純文字標記格式 reStructuredText 的豐富性,以及其 顯著的擴充能力

本文檔的目標是讓您快速體驗 Sphinx 是什麼以及您可能如何使用它。當您完成此處的操作後,您可以查看安裝指南,然後是 Sphinx 使用的預設標記格式 reStructuredText 的簡介。

如需撰寫文件的通用「簡介」 – 原因和方法,另請參閱 Eric Holscher 撰寫的 Write the docs

設定文件來源

Sphinx 純文字文件來源集合的根目錄稱為來源目錄。此目錄還包含 Sphinx 設定檔 conf.py,您可以在其中設定 Sphinx 如何讀取您的來源並建置文件的所有方面。[1]

Sphinx 隨附一個名為 sphinx-quickstart 的指令稿,它會設定來源目錄並建立一個預設的 conf.py,其中包含它向您詢問的幾個問題中最有用的設定值。若要使用此功能,請執行

$ sphinx-quickstart

定義文件結構

假設您已執行 sphinx-quickstart。它建立了一個包含 conf.py 和根文件 index.rst 的來源目錄。根文件的主要功能是作為歡迎頁面,並包含「目錄樹」(或 toctree)的根。這是 Sphinx 新增到 reStructuredText 的主要功能之一,一種將多個檔案連接到單一文件階層結構的方法。

reStructuredText 指令

toctree 是一個 reStructuredText 指令,這是一種非常通用的標記片段。指令可以有引數、選項和內容。

引數直接在指令名稱後面的雙冒號後給定。每個指令決定它是否可以有引數以及有多少個引數。

選項在引數之後給定,以「欄位列表」的形式。 maxdepthtoctree 指令的其中一個選項。

內容在空白行之後跟在選項或引數之後。每個指令決定是否允許內容,以及如何處理內容。

指令的一個常見陷阱是內容的第一行必須縮排到與選項相同的層級

toctree 指令最初是空的,看起來像這樣

.. toctree::
   :maxdepth: 2

您可以在指令的內容中列出文件來新增文件

.. toctree::
   :maxdepth: 2

   usage/installation
   usage/quickstart
   ...

這正是此文件的 toctree 的外觀。要包含的文件以文件名稱給定,簡而言之,這表示您省略檔案名稱副檔名並使用正斜線 (/) 作為目錄分隔符號。

另請參閱

閱讀更多關於 toctree 指令 的資訊。

您現在可以建立您在 toctree 中列出的檔案並新增內容,它們的節標題將被插入(直到 maxdepth 層級)在 toctree 指令放置的位置。此外,Sphinx 現在知道您的文件的順序和階層結構。(它們可能包含 toctree 指令本身,這表示如果需要,您可以建立深度巢狀階層結構。)

新增內容

在 Sphinx 來源檔案中,您可以使用標準 reStructuredText 的大多數功能。Sphinx 還新增了幾個功能。例如,您可以使用 ref 角色以可攜式方式(適用於所有輸出類型)新增跨檔案參考。

例如,如果您正在檢視 HTML 版本,您可以查看本文檔的原始碼 – 使用側邊欄中的「顯示原始碼」連結。

另請參閱

reStructuredText 以取得更深入的 reStructuredText 介紹,包括 Sphinx 新增的標記。

執行建置

現在您已新增了一些檔案和內容,讓我們首次建置文件。建置是使用 sphinx-build 程式啟動的

$ sphinx-build -M html sourcedir outputdir

其中 sourcedir來源目錄,而 outputdir 是您要放置已建置文件的目錄。-M 選項選擇建置器;在此範例中,Sphinx 將建置 HTML 檔案。

另請參閱

請參閱 sphinx-build man page 以取得 sphinx-build 支援的所有選項。

您也可以建置文件的即時版本,您可以在瀏覽器中預覽。它將偵測變更並在您進行編輯時重新載入頁面。若要執行此操作,請使用 sphinx-autobuild 執行以下命令

$ sphinx-autobuild source-dir output-dir

但是,sphinx-quickstart 指令稿會建立 Makefilemake.bat,讓您的生活更輕鬆。這些可以透過執行 make 以及建置器的名稱來執行。例如。

$ make html

這將在您選擇的建置目錄中建置 HTML 文件。執行不帶引數的 make 以查看哪些目標可用。

我該如何產生 PDF 文件?

make latexpdf 執行 LaTeX 建置器,並隨時為您調用 pdfTeX 工具鏈。

文件化物件

Sphinx 的主要目標之一是輕鬆文件化任何領域中的物件(以非常廣義的含義)。領域是物件類型的集合,它們屬於一起,並附帶標記來建立和參考這些物件的描述。

最突出的領域是 Python 領域。例如,若要文件化 Python 的內建函式 enumerate(),您會將其新增到您的來源檔案之一。

.. py:function:: enumerate(sequence[, start=0])

   Return an iterator that yields tuples of an index and an item of the
   *sequence*. (And so on.)

這會像這樣呈現

enumerate(sequence[, start=0])

傳回一個迭代器,該迭代器產生索引和 sequence 項目的元組。(等等。)

指令的引數是您描述的物件的簽名,內容是其文件。可以給定多個簽名,每個簽名都在其自己的行中。

Python 領域也恰好是預設領域,因此您不需要在標記前加上領域名稱。

.. function:: enumerate(sequence[, start=0])

   ...

如果您保持預設領域的預設設定,則執行相同的工作。

還有幾個指令可用於文件化其他類型的 Python 物件,例如 py:classpy:method。每個物件類型也都有一個交叉參考角色。此標記將建立一個連結到 enumerate() 的文件。

The :py:func:`enumerate` function can be used for ...

這是證明:連結到 enumerate()

同樣,如果 Python 領域是預設領域,則可以省略 py:。哪個檔案包含 enumerate() 的實際文件並不重要;Sphinx 將會找到它並建立一個連結到它。

每個領域都會有關於簽名外觀的特殊規則,並使格式化的輸出看起來漂亮,或新增特定功能,例如連結到參數類型,例如在 C/C++ 領域中。

另請參閱

領域 適用於所有可用的領域及其指令/角色。

基本設定

稍早我們提到 conf.py 檔案控制 Sphinx 如何處理您的文件。在該檔案中,該檔案作為 Python 來源檔案執行,您指派設定值。對於進階使用者:由於它由 Sphinx 執行,因此您可以在其中執行非簡單的任務,例如擴充 sys.path 或匯入模組以找出您正在文件化的版本。

您可能想要變更的設定值已由 sphinx-quickstart 放入 conf.py 中,並且最初被註解掉(使用標準 Python 語法:# 註解掉該行的其餘部分)。若要變更預設值,請移除井字號並修改該值。若要客製化未由 sphinx-quickstart 自動新增的設定值,只需新增額外的指派即可。

請記住,該檔案對字串、數字、列表等使用 Python 語法。該檔案預設以 UTF-8 儲存,如第一行中的編碼宣告所示。

另請參閱

設定 以取得所有可用設定值的說明文件。

Autodoc

在文件化 Python 程式碼時,通常會將大量文件放在來源檔案中,以文件字串的形式。Sphinx 支援包含來自您模組的文件字串,透過一個名為 autodoc擴充功能(擴充功能是一個 Python 模組,為 Sphinx 專案提供額外功能)。

另請參閱

sphinx.ext.autodoc 以取得 autodoc 功能的完整描述。

Intersphinx

許多 Sphinx 文件,包括 Python 文件,都發布在網際網路上。當您想要從您的文件連結到這類文件時,您可以使用 sphinx.ext.intersphinx

為了使用 intersphinx,您需要在 conf.py 中啟用它,方法是將字串 'sphinx.ext.intersphinx' 放入 extensions 列表,並設定 intersphinx_mapping 設定值。

例如,若要連結到 Python 程式庫手冊中的 io.open(),您需要設定您的 intersphinx_mapping 像這樣

intersphinx_mapping = {'python': ('https://docs.python.org/3', None)}

現在,您可以撰寫像 :py:func:`io.open` 這樣的交叉參考。任何在目前文件集中沒有相符目標的交叉參考,都將在 intersphinx_mapping 中設定的文件集中查閱(這需要存取 URL 才能下載有效目標的列表)。Intersphinx 也適用於某些其他領域的角色,包括 :ref:,但是它不適用於 :doc:,因為它是非領域角色。

另請參閱

sphinx.ext.intersphinx 以取得 intersphinx 功能的完整描述。

更多主題待涵蓋

腳註