You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sphinx的toctree(启用glob)中自定义显示标题?

解决Sphinx glob模式toctree自定义标题的问题

我刚好碰到过类似的需求,不用titlesonly也能实现自定义toctree条目标题,给你两种实用的方案:

方案1:混合显式条目+glob(适合少量自定义)

这种方法最简单,不需要改配置,直接在toctree里给特定文件指定自定义标题,同时保留glob匹配其他文件。调整你的index.md代码如下:

```{toctree}
---
maxdepth: 1
glob:
---
src/audit/README.md    Project Root
src/*/*
这样`src/audit/README.md`会显示为`Project Root`,其他匹配`src/*/*`的文件依然沿用原文件的H1标题或文件名。

## 方案2:利用文件元数据批量自定义(适合大量条目)
如果有很多文件需要修改标题,可以用MyST的frontmatter元数据配合Sphinx配置来实现:

### 步骤1:给目标Markdown文件添加元数据
在你的`src/audit/README.md`里添加frontmatter,指定自定义标题:
```markdown
---
title: Project Root
---
# Projet audit @shared
* Project Root: `audit`

步骤2:修改Sphinx配置文件conf.py

添加一段自定义逻辑,让Sphinx读取文件的title元数据作为toctree显示标题:

from sphinx.util import logging

logger = logging.getLogger(__name__)

def use_custom_title(app, doctree, docname):
    # 获取当前文档的元数据
    doc_metadata = app.env.metadata.get(docname, {})
    custom_title = doc_metadata.get('title')
    if custom_title:
        # 覆盖文档的默认标题
        app.env.titles[docname] = custom_title

def setup(app):
    app.connect('doctree-read', use_custom_title)

步骤3:确保启用MyST解析器

如果你的项目还没启用myst_parser,在conf.py的扩展列表里加上:

extensions = [
    'myst_parser',
    # 其他已有的扩展...
]

这样所有带有title元数据的Markdown文件,在toctree里都会显示自定义的标题,没有元数据的文件保持原有行为。

内容的提问来源于stack exchange,提问作者BARIK FATI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:17:57