狮身人面像(文档工具):在输出中设置制表符宽度

问题描述:

如何在Pygments突出显示的Sphinx代码片段的HTML输出中设置制表符宽度? 默认情况下,它是令人讨厌的8,但我想要4. 在Sphinx conf.py中找不到关于此设置的字样。狮身人面像(文档工具):在输出中设置制表符宽度

+1

与S.洛特一致,即使在Java世界中,您也可以使用空格而不是制表符。 http://java.sun.com/docs/codeconv/html/CodeConventions.doc3.html#262 – 2009-11-06 13:14:56

+2

对于某些人来说,切换到空格可能并不那么容易:整个团队的代码库可以很好地使用制表符,并提供使用空格的文档不一致。将所有代码更改为使用一个代码是不切实际的并且可能具有破坏性。狮身人面像适用于许多不同的语言和环境。最好的叙述文档工具如果不支持制表符,那么它就不会被破坏,这是因为“PEP8,这就是为什么”的代码已经被破坏,这是充其量只是短视和适得其反的结果。 – Shabbyrobe 2012-05-17 02:00:48

+1

此外,我知道tabtil替代发生在docutils,而不是在狮身人面像,但狮身人面像受到严重影响的问题,应承担一定的责任来处理它。 – Shabbyrobe 2012-05-17 02:04:30

您将需要编写一个狮身人面像扩展。 Add your custom Lexer,并将其与VisibleWhitespaceFilter一起使用。

+0

我更新了狮身人面像到0.6.3和Pygments到1.1.1(pygmentize -V)。 感动我的所有文件,然后将此添加到conf.py: 画质设置(应用程序): 从pygments.filters从pygments.lexers.compiled进口JavaLexer sphinx.highlighting进口词法分析器 导入VisibleWhitespaceFilter myLexer = JavaLexer () myLexer.add_filter(VisibleWhitespaceFilter(spaces ='!')); app.add_lexer('java',myLexer); 这将我的Java代码中的所有选项卡替换为八个“!”和“!”的所有空间 如预期。 当我尝试选项标签='!'时,没有任何改变。 当我尝试选项tabsize = 4时,没有任何改变。 – jbasko 2009-11-09 15:13:01

+1

看起来标签已被 之前的某个地方的空间替换。 因此,我试图添加此过滤器到其他词法分析器(其余,没有)[与 词法分析器['rest']。add_filter(...)],但没有任何影响 选项卡或制表符。 – jbasko 2009-11-09 15:13:39

我问了关于sphinx-dev组的相同问题,结果发现这是Sphinx使用的Docutils的问题。 Docutils将所有标签替换为8个空格,并且目前无法从Sphinx更改该值。

http://groups.google.com/group/sphinx-dev/browse_thread/thread/35b8071ffe9a8feb

唯一可行的解​​决方案似乎是遵循美国洛特和约翰Paulett建议在评论我的问题 - 用空格代替制表符。

添加这样的事情你conf.py:

import re 

def process_docstring(app, what, name, obj, options, lines): 
    spaces_pat = re.compile(r"({8})") 
    ll = [] 
    for l in lines: 
     ll.append(spaces_pat.sub(" ",l)) 
    lines[:] = ll 

def setup(app): 
    app.connect('autodoc-process-docstring', process_docstring) 

又见狮身人面像Docstring preprocessing文档。