如何为Sphinx的code-block:emphasize-lines设置行字符限制?
Sphinx 4.5.0中code-block:emphasize-lines长行高亮不全的解决方法
这个问题的根源并非code-block的:emphasize-lines选项本身有字符限制,而是Sphinx依赖的代码高亮后端Pygments在默认配置下,会对超过100字符的代码行进行截断,导致高亮逻辑无法覆盖整行。
以下是两种解决方式:
全局配置(所有代码块生效)
在项目的conf.py文件中添加或修改以下代码,调整Pygments的行截断阈值:
from pygments.formatters import HtmlFormatter def setup(app): # 禁用Pygments的行截断,或设置你需要的最大长度(比如200) app.connect('html-page-context', lambda app, pagename, templatename, context, doctree: context['pygments_formatter_args'] = {'maxlinelength': 0})
将maxlinelength设为0会完全禁用行截断,也可以根据实际需求设置具体的字符数上限。
单个代码块配置
如果只想针对特定代码块调整,可按以下步骤操作:
- 在目标
code-block指令中添加自定义类:.. code-block:: python :emphasize-lines: 3,5 :class: no-wrap # 示例长代码行(超过116字符) short_line = 1 long_line = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz" another_short_line = 2 another_long_line = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz" - 在项目的自定义CSS文件中添加样式,禁止代码换行并保留完整行:
.code-block.no-wrap .highlight pre { white-space: pre; overflow-x: auto; }
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

