Sphinx 文档项目规范¶
这些最佳实践源于真实项目的丰富经验。遵循既定的约定可以使您的文档更具可读性,同时通过已验证的模式帮助您避免常见的陷阱。
本指南展示了通过多年使用 Sphinx-doc、构建包含 API 参考、层次结构和多语言支持的复杂文档系统所开发的最佳实践。通过遵循这些建议,您可以显著减少重复性工作,专注于创建有价值的内容。
文件组织¶
以逻辑层次结构组织您的 Sphinx 文档。典型的结构可能如下:
docs/
├── source/ # 源文件 (.rst, .md, .ipynb)
│ ├── _static/ # 静态文件 (CSS, 图片)
│ ├── _templates/ # 自定义模板
│ ├── conf.py # Sphinx 配置
│ ├── index.rst # 主入口点
│ ├── installation/ # 章节目录
│ │ └── index.rst
│ ├── usage/
│ │ └── index.rst
│ └── api/ # API 文档(可自动生成)
│ └── ...
└── build/ # 生成的输出 (HTML, PDF 等)
└── html/ # 生成的 HTML 文件
命名约定¶
为了保持一致、可维护的文档:
文件名和目录中避免使用空格 - 使用连字符或下划线代替
优先使用连字符而非下划线 - 连字符在 URL 中有效,而下划线可能会导致问题
对文件和目录名使用 kebab-case 命名法 - 例如,使用
user-guide.rst而非UserGuide.rst坚持使用 ASCII 字符 - 尽可能使用英文名称和字母数字字符
保持一致性 - 选择一种命名约定并在整个项目中应用它
页面组织¶
推荐:使用基于文件夹的结构
与其使用包含许多 .rst 文件的平面层次结构,不如将每个主要文档章节组织为带有索引文件的文件夹:
# 推荐
docs/source/
├── user-guide/ # "用户指南"章节的目录
│ ├── index.rst # 主要内容(相当于 user-guide.rst)
│ ├── images/ # 章节特定的图片
│ │ ├── screenshot1.png
│ │ └── diagram.png
│ └── examples/ # 额外的子章节文件
│ └── index.rst
└── index.rst # 根文档
而不是:
# 不推荐
docs/source/
├── user-guide.rst # 单个文件
├── screenshot1.png # 图片与文档混合
├── diagram.png
├── examples.rst
└── index.rst # 根文档
基于文件夹组织的好处:
更好的组织 - 相关内容保持在一起
可扩展性 - 易于添加子章节和资源
改进的导航 - 为读者提供逻辑层次结构
可维护性 - 更容易管理相关资源
更整洁的目录 - 没有文档和资源的混合
图片管理¶
为了一致且可维护的图片处理:
在每个文档章节内创建
images/子目录:
docs/source/user-guide/
├── images/
│ ├── screenshot1.png
│ └── diagram.png
└── index.rst
使用相对路径引用图片:
.. image:: ./images/screenshot1.png
:alt: 应用程序截图
:width: 80%
一致命名 - 为图片使用描述性的、带连字符的名称
优化图片 - 压缩图片以减小大小而不牺牲质量
适当的替代文本 - 始终包含描述性替代文本以提高可访问性
版本控制 - 在界面变更时更新图片,保持与文本的一致性
多语言支持¶
如果您希望每个 HTML 页面都支持多种语言,官方方法过于复杂,不推荐使用。基本上它的做法是:
使用 gentext 插件 将文档翻译成目标语言 - 但是,翻译质量很差。
使用 readthedocs.org 上的多语言功能,但这需要维护多个 Git 仓库,这使得它们难以保持同步。
相反,我建议遵循 页面组织 中定义的样式,并使用像 _es.rst 或 _cn.rst 这样的后缀来表示同一文档的不同语言版本。您的文件结构可能如下所示:
tutorial
|--- index.rst # 英语(默认)
|--- index_es.rst # 西班牙语
|--- index_cn.rst # 中文
在每个 .rst 文件的开头,定义一个引用链接,如 .. _en_tutorial:、.. _es_tutorial: 或 .. _cn_tutorial:。然后,在顶级标题下插入以下片段,作为语言切换器:
- :ref:`English <en_tutorial>`
- :ref:`española <es_tutorial>`
- :ref:`中文 <cn_tutorial>`
当您需要为非默认(非英语)子文档使用 .. autotoctree:: 时,可以使用 :index_file: 选项指定特定语言的索引文件,如下所示:
.. autotoctree::
:maxdepth: 1
:index_file: index_cn.rst