使用Sphinx时reStructuredText嵌套列表含代码块失效问题
没问题,reStructuredText完全支持嵌套列表嵌入代码块的场景,你遇到的问题主要是缩进层级和块分隔没处理对。我给你修正后的.rst代码,再拆解一下关键要点:
修正后的.rst代码
=========== Tester Page =========== 以下是一些测试段落。 1. 这是一个描述高级步骤的段落,包含3个子步骤。 a. 这是一个子项,附带示例: :: ls -l foo.txt b. 现在这个子项不会被当成代码块的一部分了!这是另一个子项,附带示例: :: git add bar.txt 2. 这是步骤2。 文档结束。
如果你想给代码块指定语法高亮(比如bash),也可以用更明确的code-block指令,效果更可控:
=========== Tester Page =========== 以下是一些测试段落。 1. 这是一个描述高级步骤的段落,包含3个子步骤。 a. 这是一个子项,附带示例: .. code-block:: bash ls -l foo.txt b. 现在这个子项不会被当成代码块的一部分了!这是另一个子项,附带示例: .. code-block:: bash git add bar.txt 2. 这是步骤2。 文档结束。
关键注意事项
严格的缩进层级:
- 父编号列表(
1.、2.)的子内容(包括子列表)必须缩进至少4个空格(或者和列表标记后的第一个字符对齐,比如1.后面的文字开始位置,子项要对齐到这里)。 - 子字母列表(
a.、b.)要相对于父列表项再缩进一级,确保reStructuredText能识别这是嵌套子项,而不是新的段落。 - 代码块的
::或者code-block指令,以及代码内容,必须相对于所属的子列表项再缩进一级,这样才会被解析为该子项的附属内容。
- 父编号列表(
空行分隔块:
列表项的描述文本、子列表、代码块之间最好空一行,避免reStructuredText把不同的内容块错误合并(比如你之前遇到的子项文字被当成代码块的一部分,大概率是因为子项和前面的代码块之间没有正确分隔)。
这样调整后,生成的HTML就能正确显示嵌套的编号列表+字母子列表,每个子项的代码块也会独立展示啦。
内容的提问来源于stack exchange,提问作者Ogre Psalm33
相关产品推荐
相关产品推荐

