如何在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的替代方案
- 视觉对齐替代:继续用4空格/制表符缩进图片,然后通过自定义CSS让图片显示时和列表文本对齐。比如在Sphinx的
_static/custom.css里加:
li > p + div.figure { margin-left: -1em; /* 调整数值让图片左移对齐 */ }
这样语法上符合规则,显示效果也能达到你要的对齐。
- 用列表项内的行内图片:如果图片尺寸不大,可以把图片写成行内形式,这样不用嵌套缩进:
#. 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
相关产品推荐
相关产品推荐

