很多开源项目或者软件都会提供一个类似如下形式的网页文档,页面看上去很清晰整洁,左侧可以方便的查看整个文档的层次结构,文档中支持嵌入高亮代码块
本文介绍在windows环境下通过Python安装Sphinx,使用reStructuredText语法编写软件文档并生成网页文档的方法。本文使用的环境和版本
Windows10
Python3.7.0
sphinx4.4.0
sphinx安装与工程创建
sphinx安装
cmd或WindowsPowershell运行以下命令安装sphinx
1 | pip install sphinx |
安装完成后,命令行中可以使用以下4个命令工具
sphinx-apidoc:api文档
sphinx-autogen:可以根据文档结构描述自动生成文档
sphinx-build:编译原文档
sphinx-quickstart:自动创建一个新的sphinx工程
以上命令实际使用中主要会用到sphinx-build和sphinx-quickstart
创建sphinx工程
首先创建一个文件夹,进入文件夹后输入sphinx-quickstart,即可在该文件夹下创建一个sphinx工程
1 | mkdir helloworld |
sphinx-quickstart会在命令行中提示一些创建工程的选项,以下选项可做参考
主要变动的地方
独立的源文件和构建目录(y/n),选y
项目名称,按需要输入
作者名称,按需要输入
项目发行版本,按需要输入
其余选项可以直接回车按默认值设置,完成后在helloworld路径下会自动生成build和source两个文件夹
source文件夹下是项目源文件所在,也就是文档文件存放位置,build文件夹下是通过source生成的输出文件。sphinx支持多种输出方式,默认为html输出,也可以选择latex、pdf等其他方式输出,但是需要做额外配置,本文只介绍默认html输出方式。另外sphinx默认支持的源文件格式为.rst,即reStructuredText语法,如果要支持其他语法例如Markdown也需要做额外配置
编译
在项目根目录下运行以下命令,即可编译源文件生成html
1 | sphinx-build.exe source build |
进入build目录下可以看到生成了html文件,index.html是入口文件
双击index.html文件,浏览器中显示如下页面
修改主题
默认的html样式比较难看,可以通过安装修改主题使得页面更美观,在Sphinx Themes Gallery网站可以查看sphinx支持的各种主题
比较典型的是使用Read the Docs主题,在命令行输入以下命令安装该主题
1 | pip install sphinx-rtd-theme |
安装完成后在sphinx工程helloworld的source/conf.py中修改以下两处
1 | extensions = [ |
再次编译工程
1 | sphinx-build.exe source build |
打开build/index.html,可以看到页面样式已经变为Read the Docs样式
reStructuredText语法简介
sphinx工程默认是以reStructuredText来编写文档,文档的入口在source/index.rst文件
文档组织结构
用sphinx编写文档一般都是写类似书籍形式的多部分多章节结构,所有文档内容并不是在一个源文件中编写,而是在多个rst文档中编写,并通过reStructuredText的语法来建立文档的层次结构。reStructuredText中通过toctree
语法来建立文档间的层次结构,在source/index.rst文档中有如下代码
1 | .. toctree:: |
以下举例说明toctree
语法如何使用。假设要建立一个两级的文档层次,最高层级是一个简介,第二级是两个章节:第一章和第二章,章节分别在一个单独页面显示
源文件的结构如下
|— source
|-- index.rst # 总入口
|-- chapter1 # 第一章文件夹
|-- index.rst # 第一章入口
|-- chapter2 # 第二章文件夹
|-- index.rst # 第二章入口
在source目录下需创建两个文件夹chapter1和chapter2,并在章节文件夹下分别创建两个index.rst。source/index.rst文件内容如下
1 | 简介 |
总入口的index.rst中,通过toctree
语法声明了两个子部分,注意声明的部分需要与maxdepth隔一行,maxdepth表示在html页面中左侧展示的接口最多展示多少层。
标题
reStructuredText中使用的标题与Markdown不同
1 | ############ |
注意部分和章节是上下都有标识符
代码嵌入
在reStructuredText中嵌入代码有两种方式,一种是行内嵌入,一种是嵌入代码块。行内嵌入使用以下格式
1 | 空格+``+代码+``+空格 |
嵌入代码块格式如下
1 | 空行 |
在html页面显示效果如下
嵌入图片
在reStructuredText中嵌入图片,使用image
语法,格式如下
1 | .. image:: /images/hello.png |
后面跟的/images/hello.png是指示文件路径,注意这里是相对路径,在source目录下创建images文件夹,将hello.png放在该路径下,效果如图
嵌入注意事项
按如下语法可以在页面中嵌入Note注意事项
1 | .. note:: |
效果如下
嵌入表格
在reStructuredText中使用表格比较复杂,需要格式对齐的非常准确才可以,不想Markdown中那么方便,简单的格式如下
1 | +-------+-------+ |
以上代码效果如下
vscode table formatter插件
建议在vscode中编写reStructuredText,安装table formatter插件,能够辅助对齐表格
在使用该插件编写表格时,先不需要考虑表格的对齐问题,只需按照表格格式编写好大体内容
1 | +-+-+ |
鼠标全选表格内容,并按ctrl+shift+p选择table current
插件将会自动对齐表格