2. sphinx 与 rst
2.1. sphinx
Important
当前使用的版本是:
1Sphinx                        4.5.0
2sphinx-rtd-theme              1.0.0
3sphinxcontrib-applehelp       1.0.2
4sphinxcontrib-devhelp         1.0.2
5sphinxcontrib-htmlhelp        2.0.0
6sphinxcontrib-jsmath          1.0.1
7sphinxcontrib-qthelp          1.0.3
8sphinxcontrib-serializinghtml 1.1.5
Note
在 mac 上安装 sphinx 5.2.3:
brew install sphinx-doc
发现自动安装了依赖 python@3.10 ,而不是用
系统已经安装好的 /usr/bin/python ,这就导致 sphinx-build 一直找不到 /usr/bin/pip 安装的 sphinx-rtd-theme ,
因此需要使用:
/opt/homebrew/Cellar/python@3.10/3.10.6_2/bin/python3.10 -m pip install sphinx-rtd-theme
来重新安装。添加环境变量:
echo 'export PATH="/opt/homebrew/opt/sphinx-doc/bin:$PATH"' >> ~/.zshrc
编译之后,本地查看 html 结果显示正常,但是 push 到 Github 发布之后,发现代码行号几乎紧贴代码本身,视觉效果很差。 没找到好的解决方法,只能手动降级 sphinx:
/opt/homebrew/Cellar/python@3.10/3.10.6_2/bin/python3.10 -m pip install sphinx==4.5
Note
如果修改了目录结构(新增、删除、改名、调换顺序等),最好重新 build 一次:
make clean
make html
否则目录总是会跳到以前的版本去。
2.2. rst 语法测试
makefile 语法高亮:
target ... : prerequisites ...
    command
    ...
    ...
下面是几个定义:
- target
- 可以是一个object file(目标文件),也可以是一个执行文件,还可以是一个标签(label)。对 于标签这种特性,在后续的“伪目标”章节中会有叙述。 
- prerequisites
- 生成该target所依赖的文件和/或target 
- command
- 该target要执行的命令(任意的shell命令) 
行内公式使用 math role : \(a^2 + b^2 = c^2\) 。
行间公式:
将高亮语言设置为 C :
.. highlight:: c
    :linenothreshold: 1
测试 C:
1int a = 0;
2char c = 'c';
3printf("%c\n", c);
这里是 C++ :
1int main()
2{
3  int i;
4  int j;
5  cin >> i >> j;
6  cout << i << j << endl;
7  return 1;
8}
9// 主函数注释
斜体 text
将高亮语言设置为 python :
1.. highlight:: python
2    :linenothreshold: 2
测试 python:
1import torch
2import numpy as np
3print "hello world"
这里也是 python (code):
1def foo():
2    print "Love Python, Love FreeDome"
3    print "E文标点,.0123456789,中文标点,. "
如果数据库有问题, 执行下面的 SQL:
1-- Dumping data for table `item_table`
2INSERT INTO item_table VALUES (
30000000001, 0, 'Manual', '', '0.18.0',
4'This is the manual for Mantis version 0.18.0.\r\n\r\nThe Mantis manual is modeled after the [url=http://www.php.net/manual/en/]PHP Manual[/url]. It is authored via the \\"manual\\" module in Mantis CVS.  You can always view/download the latest version of this manual from [url=http://mantisbt.sourceforge.net/manual/]here[/url].',
5  '', 1, 1, 20030811192655);
下面的代码有高亮行:
1# 测试注释
2def foo():
3    print "Love Python, Love FreeDome"
4    print "E文标点,.0123456789,中文标点,. "
下面是 javescipt 的 rst 源码:
1.. code-block:: javascript
2    :linenos:
3
4    function whatever()
5    {
6        return "such color"
7    }
下面是 bash :
1cd home
2echo $PATH
3source ~/.bashrc
4ls -l
5mkdir filefolder
6cd ..
代码折叠功能需要自定义 _templates 。
\(\color{darkgreen}{Show/Hide\ Code}\)
 1class Solution(object):
 2    def canJump(self, nums):
 3        """
 4        https://leetcode.com/problems/jump-game/
 5        Each element in the array represents your maximum jump length at that position.
 6
 7        Input: [2,3,1,1,4]
 8        Output: true
 9        Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
10
11        :type nums: List[int]
12        :rtype: bool
13        """
14        if nums == []:
15            return False
16        if len(nums) == 1:
17            return True
18        return None
插入空行使用 | ,下面是两个空行。
这里有一个下载链接:lake
使用 sphinx.ext.graphviz 扩展,下面是一个无向图:
无向图
下面是一个有向图:
有向图
一行插入多张图:
多列列表使用 hlist :
| 
 | 
 | 
field list:
- School
- ustc 
- Year
- 1958 
- Addr
- hefei, anhui 
- Me
- fong 
Todo
补充更多的语法测试内容。
Tip
VS Code 推荐使用插件:
reStructuredText Syntax highlighting(@Trond Snekvik)
RST Preview(@Thomas Haakon Townsend)
reStructuredText(@LeXtudio Inc.)
Hint
使用 sphinx.ext.graphviz 扩展需要安装 graphviz(brew 安装不要使用代理):
brew install graphviz
然后设置环境变量(dot 的目录 which dot ):
export PATH=$PATH:/opt/homebrew/bin
在配置文件 conf.py 中设置导出格式:
graphviz_output_format = 'svg'
Warning
编译的时候提示:
WARNING: html_static_path 入口 ‘_static’ 不存在
需要在 source 目录下新增一个 _static 目录。
2.3. 参考资料
- sphinx_rtd_theme 配置 
- sphinx themes 
- reStructuredText 
- reStructuredText 域 
- reStructuredText Directives 
- reStructuredText(rst)快速入门语法说明 
- 代码隐藏(自定义,_templates放在conf.py同目录下) 
- 代码隐藏(安装扩展,全屏显示,体验不好) 
- Sphinx + Github Page + Read the Docs 
https://kyzhang.me/2018/05/08/Sphinx-Readthedocs-GitHub2build-wiki/
https://www.jianshu.com/p/78e9e1b8553a
https://blog.csdn.net/baidu_25464429/article/details/80805237
https://github.com/mathLab/PyGeM/issues/94
https://jamwheeler.com/college-productivity/how-to-write-beautiful-code-documentation/
- latex 颜色 
- graphviz 
- How to add custom CSS or JavaScript to Sphinx documentation 
