域¶
在 1.0 版本加入.
最初,Sphinx是为单个项目(Python语言的文档)构思的。不久之后,它作为一个文档工具开放给每个人,但Python模块的文档仍然内置 —— 最基本的指令,如 function,是为Python对象设计的。由于Sphinx在某种程度上变得流行起来,人们对将它用于许多不同目的产生了兴趣:C/ C++项目、JavaScript,甚至是reStructuredText标记(如本文档中所示)。
虽然这一直都是可能的,但是现在,通过为每种目的提供一个 域,可以更容易地支持使用不同编程语言(甚至是主Sphinx发行版不支持的语言)的项目文档。
域是一些标记(reStructuredText directives 和 roles)的集合,用于描述和链接属于同一类的 objects,例如编程语言的元素。域中的指令和角色名称类似于 domain:name,例如 py:function。域还可以提供自定义索引(像如Python模块索引那样)。
拥有域意味着当一组文档引用(例如c++和Python类)时不会出现命名问题。这还意味着支持全新语言文档的扩展更容易编写。
本节描述Sphinx包含的域提供了什么。域API也被记录在 域接口 一节中。
内置域¶
Sphinx中包含以下域:
第三方域¶
有几个第三方域可作为扩展使用,包括:
其他域可以在Python包索引(通过 Framework :: Sphinx :: Domain 分类器),GitHub, GitLab 中找到。
基本标记¶
大多数域提供许多 object description directives,用于描述模块提供的特定对象。每个指令都需要一个或多个签名来提供有关所描述内容的基本信息,内容应为描述。
域通常会保留所有实体的内部索引以帮助交叉引用。通常,它还会在显示的常规索引中添加条目。如果您想抑制在显示的索引中添加条目,可以使用 :no-index-entry: 指令选项标志。如果您想将对象描述从目录中排除,可以使用指令选项标志 :no-contents-entry:。如果您想排版对象描述,而不使其可用于交叉引用,可以使用指令选项标志 :no-index: (这意味着 :no-index-entry:)。如果您不想排版任何内容,可以使用指令选项标志 :no-typesetting:。例如,这可以用于仅创建一个目标和索引条目以供以后参考。不过,请注意,并非每个域中的每个指令都支持这些选项。
在 3.2 版本加入: Python、C、C++和Javascript域指令选项 noindexentry。
在 5.2.3 版本加入: Python、C、C++、Javascript和reStructuredText域指令选项 :nocontentsentry:。
在 7.2 版本加入: Python、C、C++、Javascript和reStructuredText域指令选项 no-typesetting。
在 7.2 版本发生变更:
指令选项
:noindex:已重命名为:no-index:。指令选项
:noindexentry:已重命名为:no-index-entry:。指令选项
:nocontentsentry:已重命名为:no-contents-entry:。
以前的名称被保留为别名,但将在Sphinx的未来版本中弃用和删除。
使用Python域指令的一个例子:
.. py:function:: spam(eggs)
ham(eggs)
Spam or ham the foo.
这描述了两个Python函数 spam 和 ham。(请注意,当签名太长时,如果在下一行继续的行中添加一个反斜杠,可以将其断开。例如:
.. py:function:: filterwarnings(action, message='', category=Warning, \
module='', lineno=0, append=False)
:no-index:
(此示例还显示了如何使用 :no-index: 标志。)
域还提供链接回这些对象描述的角色。例如,要链接到上面示例中描述的其中一个函数,您可以说:
The function :py:func:`spam` does a similar thing.
如您所见,指令和角色名称都包含域名和指令名称。
指令选项 :no-typesetting: 可用于创建一个目标(和索引条目),该目标稍后可以通过域提供的角色进行引用。这对于文学编程特别有用:
.. py:function:: spam(eggs)
:no-typesetting:
.. code:: python
def spam(eggs):
pass
The function :py:func:`spam` does nothing.
默认域
对于仅从一个域描述对象的文档,作者在指定默认值后,不必再在每个指令,角色等处再次声明其名称。这可以通过配置值 primary_domain 或通过此指令来完成:
- .. default-domain:: name¶
选择一个新的默认域。虽然
primary_domain选择全局默认值,但这只在同一个文件中有效。
如果没有选择其他默认值,则Python域(名为 py)是默认值,主要是为了与为旧版Sphinx编写的文档兼容。
属于默认域的指令和角色可以在不给出域名的情况下被提及,即:
.. function:: pyfunc()
Describes a Python function.
Reference to :func:`pyfunc`.
交叉引用语法¶
对于域提供的交叉引用角色,存在与一般交叉引用相同的 交叉引用修饰符。简而言之:
您可以提供一个显式的标题和参考目标:
:py:mod:`mathematical functions <math>`将引用math模块,但链接文本将是"mathematical functions"。如果您在内容前加上感叹号(
!),则不会创建引用/超链接。如果您在内容前加上
~,链接文本将仅是目标的最后一个组件。例如,:py:meth:`~queue.Queue.get`将引用queue.Queue.get但仅显示get作为链接文本。