使用 sphinx 制作简洁而又美观的文档

2023-05-16

  Sphinx 是一种工具,它允许开发人员以纯文本格式编写文档,以便采用满足不同需求的格式轻松生成输出。这在使用 Version Control System 追踪变更时非常有用。纯文本文档对不同系统之间的协作者也非常有用。纯文本是当前可以采用的最便捷的格式之一。

虽然 Sphinx 是用 Python 编写的,并且最初是为 Python 语言文档而创建,但它并不一定是以语言为中心,在某些情况下,甚至不是以程序员为中心。Sphinx 有许多用处,比如可以用它来编写整本书!

突出显示

默认情况下,Sphinx 会为 Python 突出显示代码,但它还允许定义其他编程语言,比如 C 和 Ruby。

可以将 Sphinx 想像成为一种文档框架:它会抽象化比较单调的部分,并提供自动函数来解决一些常见问题,比如突出显示标题索引和特殊代码(在显示代码示例时),以及突出显示适当的语法。

要求

您应该能轻车熟路地使用 Linux® 或 UNIX® 终端(也称为控制台或终端仿真器),因为命令行界面是与 Sphinx 进行互动的主要方式。

您需要安装 Python。在所有主要的 Linux 发行版和一些基于 UNIX 的操作系统(如 Mac OSX)上预先安装 Python 并做好使用它的准备。Sphinx 支持 Python V 2.4、2.5 和 2.6。要确定您已经安装了 Python 并且安装的是有效版本,请运行 清单 1 中的代码。


清单 1. 检查 Python 的版本

				
$ python --version
Python 2.6.1
      

语法

Sphinx 使用 reStructuredText 标记语法(和其他一些语法)来提供文档控制。如果您之前编写过纯文本文件,那么您可能非常了解精通 Sphinx 所需的语法。

标记允许为适当的输出实现文本的定义和结构。开始之前,请参见 清单 2 中的一个小的标记语法示例。


清单 2. Sphinx 标记语法示例

				
This is a Title
===============
That has a paragraph about a main subject and is set when the '='
is at least the same length of the title itself.

Subject Subtitle
----------------
Subtitles are set with '-' and are required to have the same length 
of the subtitle itself, just like titles.

Lists can be unnumbered like:

 * Item Foo
 * Item Bar

Or automatically numbered:

 #. Item 1
 #. Item 2

Inline Markup
-------------
Words can have *emphasis in italics* or be **bold** and you can define
code samples with back quotes, like when you talk about a command: ``sudo`` 
gives you super user powers! 
  

正如您所看到的,纯文本格式的语法非常容易读懂。在创建特定格式(如 HTML)时,标题会成为主要目标,其字体会比副标题大一些(理应如此),并且会对编号列表进行适当的编号。您已经拥有一些非常强大的功能。添加更多的项或更改编号列表中的顺序不会影响到编号,而通过替换使用的下划线可以改变标题的重要性。

安装和配置

安装是通过命令行进行的,非常简单明了,如 清单 3 所示。


清单 3. 安装 Sphinx

				
$ easy_install sphinx
Searching for sphinx
Reading http://pypi.python.org/simple/sphinx/
Reading http://sphinx.pocoo.org/
Best match: Sphinx 1.0.5
Downloading http://pypi.python.org/packages/[...]
Processing Sphinx-1.0.5-py2.5.egg
[...]
Finished processing dependencies for sphinx
  

为了简便起见,清单 3 中的内容有所缩减,但它提供了在一个在安装 Sphinx 时应执行的操作的示例。

框架使用了一个目录结构来分离源文件(纯文本文件)和构建(指生成的输出)。例如,如果使用 Sphinx 从文档源中生成一个 PDF,那么该文件会放置在构建目录中。您可以更改此行为,但为了获得一致性,我们还是保留了默认格式。

让我们快速启动 清单 4 的一个新的文档项目,系统会通过一些问题提示您如何操作。请按下 Enter 键接受所有的默认值。


清单 4. 执行 sphinx-quickstart

				
$ sphinx-quickstart 
Welcome to the Sphinx 1.0.5 quickstart utility.

Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).
[...]
  

我选择 "My Project" 作为项目名称,该名称会在多处被引用。您可以随意选择不同的名称。

运行 sphinx-quickstart 命令后,在工作目录中会出现类似 清单 5 的文件。


清单 5. 工作目录的列表

				
.
├── Makefile
├── _build
├── _static
├── conf.py
└── index.rst
  

让我们详细研究一下每个文件。

  • Makefile:编译过代码的开发人员应该非常熟悉这个文件,如果不熟悉,那么可以将它看作是一个包含指令的文件,在使用make 命令时,可以使用这些指令来构建文档输出。
  • _build:这是触发特定输出后用来存放所生成的文件的目录。
  • _static:所有不属于源代码(如图像)一部分的文件均存放于此处,稍后会在构建目录中将它们链接在一起。
  • conf.py:这是一个 Python 文件,用于存放 Sphinx 的配置值,包括在终端执行 sphinx-quickstart 时选中的那些值。
  • index.rst:文档项目的 root 目录。如果将文档划分为其他文件,该目录会连接这些文件。

入门指南

此时,我们已经正确安装了 Sphinx,查看了默认结构,并了解了一些基本语法。不要直接开始编写文档。缺乏布局和输出方面的知识会让您产生混淆,可能耽误您的整个进程。

现在来深入了解一下 index.rst 文件。它包含大量的信息和其他一些复杂的语法。为了更顺利地完成任务并避免干扰,我们将合并一个新文件,将它列在主要章节中。

在 index.rst 文件中的主标题之后,有一个内容清单,其中包括 toctree 声明。toctree 是将所有文档汇集到文档中的中心元素。如果有其他文件存在,但没有将它们列在此指令下,那么在构建的时候,这些文件不会随文档一起生成。

我们想将一个新文件添加到文档中,并打算将其命名为 example.rst。还需要将它列在 toctree 中,但要谨慎操作。文件名后面需要有一个间隔,这样文件名清单才会有效,该文件不需要文件扩展名(在本例中为 .rst)。清单 6 显示该列表的外观。在文件名距离左边距有三个空格的距离,maxdepth 选项后面有一个空白行。


清单 6. index.rst 中的 toctree 示例

				
Contents:

.. toctree::
   :maxdepth: 2

   example
  

此时,不用担心其他选项。目前,注意到了有一个列出其他单独的文件的索引文件,该文件可存储有效文档,因此,该列表有一定的顺序和空格,才能使该列表变得有效。

还记得 清单 2 中的示例语法吗? 请复制该示例,将它粘贴到 example.rst 文件中并保存它。现在我们准备生成输出。

运行 make 命运,并将 HTML 指定为输出格式。可直接将该输出用作网站,因为它包含了生成的所有内容,包括 JavaScript 和 CSS 文件。请参见 清单 7。


清单 7. make html 命令的输出

				
$ make html
sphinx-build -b html -d _build/doctrees   . _build/html
Making output directory...
Running Sphinx v1.0.5
loading pickled environment... not yet created
building [html]: targets for 2 source files that are out of date
updating environment: 2 added, 0 changed, 0 removed
reading sources... [100%] index
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [100%] index 
writing additional files... genindex search
copying static files... done
dumping search index... done
dumping object inventory... done
build succeeded.

Build finished. The HTML pages are in _build/html.
  

如果您对 make 命令提供的其他选项感兴趣,请参见 清单 8,将帮助标志传至此处,并查看完整的描述。


清单 8. 列示 make 选项

				
$ make -h
Usage: make [options] [target] ...
Options:
[...]  
  

生成静态网站

随着我们完成第一步操作,从两个文件中生成 HTML 之后,我们就拥有一个完整的函数式(静态)网站。

在 _build 目录内,现在应该有两个目录:doctrees 和 HTML。我们对于这个存储了文档网站所需的全部文件的 HTML 目录很感兴趣。使用浏览器打开 index.html 文件,就会发现如 图 1 所示的内容。


图 1. 静态 HTML 形式的主页
浏览器中生成的 HTML 文档的屏幕截图。  

虽然信息很少,但 Sphinx 能够创建很多内容。我们拥有一个基本布局,该布局包含有关项目文档、搜索部分、内容表、附带名称和日期的版权声明、页码的一些信息。

搜索部分非常有趣,因为 Sphinx 已经为所有文件建立索引,并使用 JavaScript 的一些强大功能创建了一个可搜索的静态网站。

还记得我们已将 example 作为一个单独的文件添加至 清单 6 的 toctree 中的文档吗?您可以看到,主标题显示为内容索引中的主要项目符号,副标题显示为二级项目符号。Sphinx 小心维护着让整个结构保持正确。

如果一开始就没有成功...

进行一些修改后,只需再次运行 make 命令,即可生成这些文件。

所有的链接都指向文档中的正确位置,并且标题和副标题均有定位点,允许直接进行链接。比如,Subject Subtitle 部分在浏览器中有一个类似 ../example.html#subject-subtitle 的定位点。如前所述,该工具消除了我们对这些琐碎的、重复的需求的顾虑。

图 2 显示了 example.rst 如何显示为静态网站中的 HTML 文件。


图2. HTML 页面示例
屏幕截屏显示格式化为 HTML 页面的示例,带有明确定义的标题、段落和子弹目录列表  

添加图形

简明的段落、图像和图形都为项目文档增加趣味性和可读性。Sphinx 有助于利用这些有可能添加了静态文件的主要元素来吸引读者的注意。

添加静态文件的正确语法很容易记忆。只要将静态文件放置 _static 目录(Sphinx 在创建文档布局时创建了该目录)中,就可以轻松地对其进行引用。在 清单 9,查看 reStructuredTex 文件中的引用应该是什么样子的。在本例中,我将其添加在 example.rst 的底部。


清单 9. example.rst 的静态清单

				
.. image:: _static/system_activity.jpg
  

生成文档之后,应将图像正确放置在我们为有关系统活动的 JPEG 小图像指定的地方。它看上起应该类似于 图 3。


图 3. 系统活动图像
HTML 文档的屏幕截屏,其中包含一个饼图  

结束语

本文介绍了开始使用 Sphinx 的一些基础知识,但仍有许多内容有待我们探索。Sphinx 能够用不同的格式导出文档,但要求安装额外的库和软件。可生成的格式包括:PDF、epub、man (UNIX Manual Pages) 和 LaTeX。

对于复杂的图形,有一个插件可将 Graphviz 图形添加至您的文档项目。我曾经不得不为一个小型办公网络地图创建一个插件,但它表现相当出色,无需使用其他工具,便可在同一文档中获取所有的东西。与 Graphviz 插件类似,有大量可用于 Sphinx 的插件(亦称为扩展)。Sphinx 提供了一些插件,比如 interSphinx,该插件允许您链接不同的 Sphinx 项目。

如果生成的输出的外观不符合您的喜好,Sphinx 还提供了许多主题,可应用它们来完全改变 HTML 文件呈现文档的方式。一些重要的开源项目,如 Celery 和 Lettuce,通过更改 CSS 并扩展模板完全更改了 HTML 的外观。请参阅 参考资料 部分,以获取这些项目的链接、解释如何扩展的文档的链接以及修改默认 CSS 和布局的链接。

Sphinx 改变了我对编写文档的看法。从一开始的毫无灵感,到现在能够轻易编制我的几乎所有的个人开源项目以及少数内部项目,我感到非常兴奋。使用 Sphinx 可轻松检索遗忘在您自己文档中的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 sphinx 制作简洁而又美观的文档 的相关文章

  • linux代码检测工具valgrind之内存检测memcheck

    1 安装命令 xff1a sudo apt get install valgrind 安装成功如下 xff1a 检测版本命令 xff1a valgrind version 2 valgrind检测工具tool介绍 xff08 1 xff09
  • 摄影成像原理

    转载 xff1a https www sohu com a 191146657 690175 摄影成像原理 照相机是个什么样的仪器 xff1f 为什么可以把外界景物浓缩到一张小小的照片上 xff1f 观察手中的照相机 xff0c 就会感到这
  • cmake, make, CMakeLists.txt, Makefile简介

    文章目录 cmake make CMakeList txt Makefile之间的关系参考文章链接 xff1a 转自个人博客 在各种开源项目中 xff0c 经常会发现项目中除了代码源文件 xff0c 还包含了 CMakeList txt M
  • 相机畸变校正详解

    转 xff1a https blog csdn net humanking7 article details 45037239 1 摄像机成像原理简述 成像的过程实质上是几个坐标系的转换 首先空间中的一点由 世界坐标系 转换到 摄像机坐标系
  • java错误:需要《标识符》

    出现如下错误 xff1a 上面的第一 第二 xff0c 第三个错误的原因是 xff1a 没有加函数返回值类型void 最后一个原因是 xff1a 关键字static错误 总之 xff0c 出现标识符错误 xff0c 就是说程序里的不是缺少标
  • Java的throws Exception

    转 xff1a https www cnblogs com feichengwulai articles 3793261 html 1 终极解释 xff01 xff01 xff01 throws Exception放在方法后边 xff0c
  • TX2从入门到放弃学习笔记(1)-基础

    一 资源简介 TX2作为TX1的改进版 xff0c 资源配置相当强劲 1 模组配置 256 core NVIDIA Pascal GPU ARMv8 64 bit Multi Processor CPU Complex Advanced H
  • 弹窗问题 Android Detected problems with API compatibility visit g.co/dev/appcompat for more info dialog

    原因是Android P之后Google限制了开发者调用非公开的API方法 xff0c 例如使用反射去调用SDK内部的非公开方法 xff0c 这样启动app的时候就会弹窗提示 xff0c 不过我们还是可以通过反射把他干掉 手动狗头 解决方法
  • 进程创建和替换——fork和exec

    fork fork是UNIX系统中产生新进程的唯一办法 fork的作用是复制当前进程 xff0c 生成子进程 xff0c 子进程从fork的位置继续执行 fork函数的特点概括起来就是 调用一次 xff0c 返回两次 xff0c 在父进程中
  • ROS(2)工作空间与包

    2 创建工作空间与功能包 ros的工作空间是我们开发ros项目的一个工作目录 src 代码空间 xff0c 包含代码 lanuch文件 配置文件等等 xff0c 是源码所在的目录 xff1b build 编译空间 xff0c 包含编译过程中
  • Invalid bound statement (not found)错误的可能原因

    今天在执行sql的时候遇到这个问题 xff0c 按说非常简单 xff0c 但是出现问题的原因却不是唯一的 xff0c 所以总一下 xff1a 1 检查xml文件所在package名称是否和Mapper interface所在的包名 lt m
  • 组合导航+多传感器融合算法

    1 INS GPS的组合导航系统可以输出高频率的导航参数信息 xff08 位置 速度 姿态 xff09 xff0c 并且在长 短期的导航过程中均能具备较高精度 xff08 输出数据的意义什么 xff0c PDR是步长 43 航向 xff09
  • 记录一次阿里云服务器被入侵处理经过

    本人自己的阿里云服务器 xff0c 纯个人使用 xff0c 除了提供小爱音箱开关家中esp8266灯带使用 xff0c 没什么特别的重要服务 直到有一天 xff0c 小爱平台的哥们告诉我 xff0c 我的应用响应超时 xff0c 才开始关注
  • 使用阿里云搭建自用大数据集群(3台),含计费方式描述

    1 背景 自学大数据相关课程 xff0c 需要3台虚拟机 xff0c 之前是使用本地克隆虚拟机的方式 xff0c 但是现在用mac比较多 xff0c 而且需要上班 xff0c 无法一直坐在开着虚拟机的win前进行操作学习 xff0c 所以考
  • go语言基础-gozero

    go基础 go 文档 Go语言的并发是基于 goroutine 的 xff0c goroutine 类似于线程 xff0c 但并非线程 可以将 goroutine 理解为一种虚拟线程 Go 语言运行时会参与调度 goroutine xff0
  • devops-2-prometheus

    监控对比 prometheus官方英文文档 入门教程prometheus操作指南 prometheus书学习文档 博客园prometheus系列文章 Prometheus云原生监控pdf 配套视频 服务发现 grafana告警等官方英文文档
  • 443https-公网证书nginx-freessl

    keymanage 生成证书 教程文档 freessl freessl cn acme sh帮助文档 主机记录 acme challenge 记录类型 CNAME 记录值 i7tdkyba41nr7ryod9hr dcv2 httpsaut
  • go基础语法

    基础语法 参考 log 日志 配置基础库参考 zap 日志 zap配置参考 go get u go uber org zap gin 日志 zap 生成 traceid gorm 空指针报错 传递指针地址 结果传递了值报错 reflect
  • 构建监控系统-2-zabbix开发

    参考 zabbix6官网自动发现 zabbix官网 agent监控项说明 go请求zabbix封装参考 ant design pro 前端构建 gin 官方文档 zabbix6 0接口官方文档 zabbix 各表开发介绍 zabbix we
  • 读取文件报错'utf-8' codec can't decode byte 0xb2 in position 49: invalid start byte

    python open打开文件报错 utf 8 codec can t decode byte 0xb2 in position 49 invalid start byte 解决方法 xff1a 1 操作字符为xb2 2 手动查看csv文件

随机推荐

  • python 技术大杂烩

    20230204 python升级报错 pip3 install span class token operator span U pip Could span class token keyword not span fetch URL
  • python 页面点击事件实现selenium

    pip install selenium coding 61 utf 8 from selenium import webdriver driver 61 webdriver Chrome driver maximize window dr
  • python 2.7 连接mysql

    sudo pip install MySQL python import xlrd import MySQLdb cursors conn 61 MySQLdb connect host 61 39 ip 39 user 61 39 use
  • 搭建react antd

    npm install g antd npm WARN antd 64 3 10 8 requires a peer of react 64 gt 61 16 0 0 but none is installed You must insta
  • UCF101和HMDB51数据集的处理 for Human Action Recognition

    数据集简介 xff1a 一 数据集获取 xff1a 1 UCF 101 http crcv ucf edu data UCF101 UCF101 rar 此外 xff0c 该数据集由于超过4G了无法上传百度云 xff0c 所以还在自己移动硬
  • 各种rtos(实时操作系统)比较

    RTOS在国内主要有vxworks和pSOS 现在还有nuclear QNX WinCE 说起好坏吗 其实 vxWorks要好一些 可能 不知道以前国内研究所一直用的VRTX是不是都被vxworks所替代了呢 据说因为VRTX是最早商业化的
  • 使用docker开启和停止一个容器

    我在网上看教程的时候 xff0c 使用docker开启一个容器用的是run命令 xff0c 这里有一个小坑 比如我用run开启了一个mysql xff0c 然后下次还用run开启的话 xff0c 实际上会生成两个mysql容器 正确的做法是
  • 使用python求一次函数和三角函数的交点并画图

    由于一些物理计算的需要 xff0c 我要用电脑将一个一次函数和一个三角函数 xff08 cotan xff09 的图像和交点画出来 本例程使用到的库 xff1a numpy 强大的科学计算库 matlibplot python绘图库 ran
  • 将MyEclipse的配色方案还原到最初的状态(主题还原)

    我的MyEclipse中导入了主题 xff0c 但是现在不想用那种花花绿绿的配色了 xff08 眼睛有点累 xff09 但是想还原却比较麻烦 xff0c 目前有三种方法吧 xff1a 1 xff1a 更换workspace 这种方法需要你重
  • 自己写的一个数组与list转化工具,请大神指正问题

    话不多说上代码 public class ListUtil public static void main String args List lt Integer gt lst1 61 new ArrayList lt Integer gt
  • Python学习记录-----批量发送post请求

    昨天学了一天的Python xff08 我的生产语言是java xff0c 也可以写一些shell脚本 xff0c 算有一点点基础 xff09 xff0c 今天有一个应用场景 xff0c 就正好练手了 这个功能之前再java里写过 xff0
  • 找不到系统安全日志/var/log/secure文件的问题

    今天打算配置一个服务器防止暴力破解的脚本 xff0c 原理不复杂 xff0c 搜索登录错误超过一定次数的ip地址 xff0c 加入防火墙 xff0c 但是在找登录日志的时候出现了问题 一般服务器的ssh登录等操作日志都是 var log s
  • osx多用户设置共享文件夹(MacBook)

    mac平台有很方便的多用户系统 xff08 Unix你懂的 xff09 我本人就一直在使用两个账户 xff0c 各有分工 xff0c 权限不同 有时候我们在一个账户下下载或者使用的文件 xff0c 也需要在另一个账户上使用 xff0c 这就
  • MySQL DROP TABLE操作以及 DROP 大表时的注意事项

    语法 xff1a 删表 sql view plain copy DROP TABLE Syntax DROP TEMPORARY TABLE IF EXISTS tbl name tbl name RESTRICT CASCADE 可一次删
  • python日期操作类

    coding utf 8 39 39 39 获取当前日期前后N天或N月的日期 39 39 39 from time import strftime localtime from datetime import timedelta date
  • ROS运行调用摄像头无法显示的解决办法

    报错 xff1a Unable to open camera calibration file home hri ros camera info head camera yaml 参考 xff1a https github com ros
  • [VC] 冒号(:)与C/C++

    这篇文章将总结C C 43 43 中的冒号的用法 1 位域定义 是C 43 43 里的 作用域分解运算符 比如声明了一个类A xff0c 类A里声明了一个成员函数voidf xff0c 但没有在类的声明里给出f的定义 xff0c 那么在类外
  • TX2入门(1)——开箱上电

    因为实验室有需求 导师购入了一块Jetson TX2开发板 下面就记录一下板子在我手机的应用过程 xff0c 方便以后查找 xff0c 如果也能给大家一些帮助就更好啦 欢迎转载 1 已经提前按照网上各种大神的意见采购好了电源线 HDMI转V
  • TX2入门(3)——ubuntu(包含tx2端)常用命令(持续补充中……)

    emmm xff0c 刷机完成 xff0c 突然发现还有一些常用指令需要整理一下 xff0c 以后查找起来方便 所以 xff0c tensorflow放到下一篇吧 一 系统架构类型 1 查看系统架构 uname a 2 显示操作系统架构类型
  • 使用 sphinx 制作简洁而又美观的文档

    Sphinx 是一种工具 xff0c 它允许开发人员以纯文本格式编写文档 xff0c 以便采用满足不同需求的格式轻松生成输出 这在使用 Version Control System 追踪变更时非常有用 纯文本文档对不同系统之间的协作者也非常