Sphinx 扩展指令¶
Sphinx 扩展了标准的 reStructuredText(reST)语法,使其增加了很多功能,例如:目录、代码块语法高亮等。
目录¶
由于 reStructuredText 没有组织目录的功能,因此 Sphinx 使用自定义指令来组织文档的目录树(TOC 树)。
toctree 指令将在当前位置插入一个目录树,目录树使用相对文档名来组织。文档名使用 / 作为路径分隔符(不能以正斜杠开头),并且不包含文件扩展名。
目录树可以在文档中出现多次,并且可以在一个文件中使用多种目录格式。
提示
文档中的所有文件必须出现在某些 toctree 指令中,如果 Sphinx 找到未包含到目录中的文件,会发出警告,这意味着无法通过标准导航访问到此文件。
.. toctree::
:maxdepth: 2
:numbered: 3
:glob:
:caption: 目录
welcome
All about strings <strings>
usage/started
recipe/*
The colors <http://www.url.com>
...
.. toctree::
:hidden:
doc_1
doc_2
自定义目录标题¶
默认情况下,目录中的标题是读取文档标题后自动生成的。可以自定义目录中的标题,也可以在目录中加入外部超链接。
上面例子中,第二行为 strings 文档自定义标题 “All about strings”,而不是使用文档的标题。第四行为 The colors 标题自定义 url 链接。
选项和参数¶
目录指令支持的选项和参数:
maxdepth 选项设置目录树的深度(默认值 1),即目录中嵌套标题的深度。
numbered 选项设置文档标题的自动编号,默认会为所有标题添加编号。也可以指定深度。
caption 选项设置目录的标题。
titlesonly 选项设置在目录只显示文档的标题,适用于一个文档中有多个 H1 标题时。该选项没有参数。
glob 选项设置在目录添加文件时,支持 * 匹配,将结果按字母顺序插入到目录中。该选项没有参数。
reversed 反转目录中条目的顺序,通常配合 glob 选项使用。该选项没有参数。
hidden 选项用于隐藏目录,
提示
目录在每种输出格式中都会发生变化,例如,输出网页(HTML)文件时,构建器将目录视为超链接的集合;输出单个文件(手册页)时,构建器将目录替换为文档的内容。
另类标题¶
小标题¶
rubric 指令创建一个段落小标题(粗体文本行),该标题不会添加到目录节点中。
.. rubric:: 小标题文字
居中的小标题¶
centered 指令创建一个居中的小标题,该标题不会添加到目录节点中。
.. centered:: LICENSE AGREEMENT
代码块语法高亮¶
reStructuredText 只能用于 Python 代码的高亮,Sphinx 扩展了该功能,使其支持更多的编程语言。Sphinx 的语法高亮由 Pygments 模块提供。
自定义语言代码高亮¶
在文件的任意位置使用 highlight 指令进行自定义语言代码高亮。在当前文件中,highlight 指令之后的代码块都将被定义,直到遇到下一个 highlight 指令。
highlight 指令支持 Pygments 支持的所有编程语言,常用的有:
none(不使用代码高亮)
default(类似于 Python)
guess(让 Pygments 根据内容猜测语言,只适用于某些识别良好的语言)
python
ruby
c
如果使用所选语言高亮显示失败,将会回退到 none 值(不使用代码高亮)。
.. highlight:: python
:linenothreshold: 5
linenothreshold 选项为代码块生成行号,上边的示例将为超过五行的所有代码块生成行号。
多语言代码高亮¶
code-block 指令将编程语言名称作为参数,可以对每个代码块进行设置,并且 code-block 指令的设置优先级高于 highlight 指令。
.. code-block:: JavaScript
:caption: Ajax 请求示例
:lineno-start: 10
:emphasize-lines: 3,5
function displayFullName() {
var request = new XMLHttpRequest();
request.open("GET", "https://www.baidu.com");
request.onreadystatechange = function() {
if(this.readyState === 4 && this.status === 200) {
document.getElementById("result").innerHTML = this.responseText;
}
};
request.send();
}
code-block 指令支持更多的选项对代码块进行设置:
linenos 选项设置为代码块生成行号。
lineno-start 选项为第一行设置行号数。使用用后,linenos 选项会自动激活
emphasisize-lines 选项用于强调特定的行。
caption 选项定义代码块的标题
dedent 选项设置从代码块中删除缩进字符的个数
插入代码文件¶
literalinclude 指令用于将代码文件中的内容插入到文档的代码块,适用于插入长的代码块。
.. literalinclude:: example.py
:emphasize-lines: 12,15-18
literalinclude 指令支持 code-block 指令的所有选项,并且额外增加了几个选项:
language 选项指定代码语言
tab-width 选项指定制表符的宽度
encoding 源文件的编码格式,如 ASCII、UTF-8
lines 选项指定要插入文件的行,例如:1,3,5-10,20- 包括第 1、3、5 到 10 行和第 20 行到最后一行
start-after 选项指定要插入文件开始的行,可以单独使用也可以配合 end-before 选项使用
end-before 选项指定要插入文件结束的行,可以单独使用
diff 选项用于对比两个文件,类似于 diff 命令的输出