目录

编写文档

构建文档

科学 Python 软件文档可以用 Markdown 语法编写,如下所示

# My nifty title

- list
- of
- items

Some **bold** or _italicized_ text!

```python
# A code block

1 + 1
```

然后将此文档“源代码”构建成 HTML 或 PDF 等格式,以显示给用户。

有各种工具可以做到这一点。在本指南中,我们将介绍科学 Python 社区中主流的一种方法:使用 Sphinx 文档生成器和 MyST 插件。有关 Markdown 语法的一般信息以及 MyST 的 Markdown 变体,请参阅 MyST 文档。

我们将从一个非常基本的模板开始。首先在您的项目中创建一个 docs/ 目录(即在 src/ 旁边)。

mkdir docs

在此目录中,我们将在 docs/conf.py 中创建一个最小的 Sphinx 配置文件。

# content of docs/conf.py

project = "example"
extensions = ["myst_parser"]
source_suffix = [".rst", ".md"]

并且,在 docs/index.md 中,我们将为我们的文档创建一个最小的首页。

# Example documentation

Hello world!

您现在应该拥有类似以下内容。

example/
├── docs/
│   ├── conf.py
│   ├── index.md
(...)

要从此源代码构建 HTML,请安装 sphinx 和 MyST Markdown 解析器

pip install sphinx myst-parser

然后运行 sphinx-build,将其指向您的源文件目录和用于写入渲染(HTML)输出文件的目标目录。

sphinx-build docs/ docs/build/

您应该会看到一些以 build succeeded. 结尾的日志消息。这创建了目录 docs/build。在您的网络浏览器中打开 docs/build/index.html 以查看文档。

MyST Markdown 的基本功能

有关包括以下主题在内的内容,我们建议您参阅 MyST 文档

  • 排版
  • 表格
  • 图像和图形
  • 交叉引用
  • 数学和方程式
  • 包含来自其他文件的内容

结构

我们从这个结构开始,只有一个文档页面。

example/
├── docs/
│   ├── conf.py
│   ├── index.md
(...)

假设我们在子目录中添加了一些教程页面。

example/
├── docs/
│   ├── conf.py
│   ├── index.md
│   └── tutorials/
│       ├── installation.md
│       ├── first-steps.md
│       └── real-application.md
(...)

我们可以使用 MyST Markdown 的 {toctree} 指令从首页链接到它们。

```{toctree}
tutorials/installation.md
tutorials/first-steps.md
tutorials/real-application.md
```

有关更多详细信息,请参阅 MyST 文档页面上的 组织内容

自动生成参考文档

参考文档提供了 API 的全面文档:代码库中每个公共对象的全部输入和输出。这不应该手动编写;这将很乏味,并且很可能出现人为错误或随着时间的推移而不同步。

MyST 建议使用 sphinx-autodoc2。但是,我们目前建议使用内置的 sphinx autodocautosummary 扩展,因为它们与按照 numpydoc 标准编写的文档字符串很好地互操作。要调用它们,我们需要使用另一种语法(reST)。幸运的是,您可以简单地复制/粘贴这些示例。

docs/conf.py 中,添加到扩展列表中。

extensions = [
    # whatever you already have in here...
    "sphinx.ext.autodoc",
    "sphinx.ext.autosummary",
    "sphinx.ext.napoleon",
]

(请注意,这些扩展随 sphinx 提供,因此无需安装任何其他内容。)

您可以记录单个对象(例如函数),在页面上内联显示

```{eval-rst}
.. autofunction:: example.refraction.snell
    :noindex:
    :toctree: generated
```

或者您可以生成一个表格,其中包含指向每个对象的文档的链接。

```{eval-rst}
.. autosummary::
    :nosignatures:
    :toctree: generated

    example.refraction.snell
```

有关如何将其集成到包中以及 nox 设置的更多信息,请参阅 指南