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

如何在Sphinx 3.2.1中自定义#式嵌套列表的缩进空格数?

Sphinx 3.2.1 reST自动编号列表与图片缩进对齐问题

问题核心

用Sphinx 3.2.1写reST时,想给自动编号列表(#.)里的图片用3空格缩进,让它和列表文本对齐,但这样会把原本的连续列表拆成两个独立列表,只能被迫用制表符(或4空格)缩进,或者手动编号列表,但更想用自动编号的#.格式。

你期望的写法:

#. Nested list point 1 
   
   .. image:: image.png
        :alt: This is an image
        :scale: 100%

#. Nested list point 2

当前只能这么写才能保证列表正常:

#. Nested list point 1 
   
        .. image:: image.png
                :alt: This is an image
                :scale: 100%

#. Nested list point 2

能不能改写规则?

Sphinx的reST解析依赖docutils,而docutils对自动编号列表的缩进有严格规则:列表项的嵌套内容(包括图片指令)必须缩进至少比列表标记(#. )的长度多1个空格(#. 占3个字符,所以至少要4空格缩进),否则会被识别为新的列表起始。

在Sphinx 3.2.1里,没办法直接通过配置改写这个核心解析规则,除非你自己编写docutils扩展来修改列表的缩进判断逻辑,但这需要Python开发能力,门槛较高。

3.2.1的替代方案

  1. 视觉对齐替代:继续用4空格/制表符缩进图片,然后通过自定义CSS让图片显示时和列表文本对齐。比如在Sphinx的_static/custom.css里加:
li > p + div.figure {
    margin-left: -1em; /* 调整数值让图片左移对齐 */
}

这样语法上符合规则,显示效果也能达到你要的对齐。

  1. 用列表项内的行内图片:如果图片尺寸不大,可以把图片写成行内形式,这样不用嵌套缩进:
#. Nested list point 1 .. image:: image.png
        :alt: This is an image
        :scale: 20%

不过这种方式只适合小图,排版灵活性差。

新版本支持情况

后续的Sphinx版本(比如4.x及以上)搭配更新的docutils(0.17+),对列表缩进的判断逻辑没有本质变化——reST的核心规范还是要求嵌套内容缩进足够多。所以即使升级新版本,你期望的3空格缩进写法依然会被拆成两个列表,核心规则没改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:52:53