我将Sphinx与reStructuredText输入和HTML输出一起使用来记录基础结构的不同部分。这个想法是,阅读文档的用户可以复制示例并将其粘贴到她的文件中。 Makefile示例如何完成? Makefile在某些位置需要使用制表符,但是Sphinx会将制表符转换为空格。
示例:command
行必须以最终HTML中的标签开头。此处用缩进和制表符的三个空格编写:
.. code-block:: Makefile
target: dependency
command -i $< -o $@
code-block
没有控制标签扩展的选项。
使用 sphinx代码块生成文件选项卡进行的网络搜索可在包含的代码(我希望将其内联)中扩展选项卡,或者如何编辑Sphinx Makefile的答案,但是没有什么可以解决的问题。
答案 0 :(得分:0)
Tab扩展发生在解析RST的早期,因此您必须自定义解析器以禁用它。我希望这行得通。
from typing import Union
from docutils.nodes import document
from docutils.statemachine import StringList
from sphinx.parsers import RSTParser
class NoTabExpansionRSTParser(RSTParser):
def parse(self, inputstring: Union[str, StringList], document: document) -> None:
if isinstance(inputstring, str):
lines = inputstring.splitlines()
inputstring = StringList(lines, document.current_source)
super().parse(inputstring, document)
def setup(app):
app.add_source_parser(NoTabExpansionRSTParser, override=True)
仅供参考,这是制表符扩展的地方,上面的代码将绕过该扩展名。
在sphinx.parsers.RSTParser#parse
lines = docutils.statemachine.string2lines(
inputstring, tab_width=document.settings.tab_width,
convert_whitespace=True)
↓
在docutils.statemachine.string2lines
return [s.expandtabs(tab_width).rstrip() for s in astring.splitlines()]