Sphinx扩展:带有前导和/或尾随空白行的文本块?

2024-05-23 16:11:46 发布

您现在位置:Python中文网/ 问答频道 /正文

据我所知,不可能创建以空行开头或结尾的文本块(例如使用code-block指令),因为这对于structuredText语法来说是不明确的。在

没关系。在

但是现在我想创建一个使用docutilsliteral_block()节点的自定义指令,并且我希望(在指令的代码中)在指令内容的开头和/或结尾添加空行。在

因为这在structuredText语法中是不可能的,所以我打算使用指令的选项来指定空行的数量,但这不是我的问题,也不是我问题的一部分。万一你想知道。。。在

下面是一个我想做的最简单的例子:

import docutils

class MyDirective(docutils.parsers.rst.Directive):

    has_content = True

    def run(self):
        text = '\n\n' + '\n'.join(self.content.data) + '\n\n'
        node = docutils.nodes.literal_block(text, text)
        print(node)
        return [node]

def setup(app):
    app.add_directive('mydirective', MyDirective)

它可以这样使用:

^{pr2}$

这是可行的,但是我在指令中添加的新行以某种方式被Sphinx吞没(在HTML和LaTeX输出中)。在

我怎么才能避免呢?在

新行实际上存储在node对象中(可以在print()的输出中看到),但它们似乎在稍后的Sphinx处理过程中丢失。在

我对狮身人面像机器了解不够,无法独自追踪,如有任何帮助,将不胜感激!在


Tags: textselfnodedef结尾指令语法content
2条回答

我宁愿尝试使用CSS margin top和margin bottom属性。在

我找到了自己问题的答案,但比我希望的要复杂得多。。。在

我创建了一个自定义节点类,并添加了一个literal_block实例作为子节点。 我将空行数保存为自定义节点类的属性。 然后,我为HTML和LaTeX创建了“visit”和“depart”函数(实际上只有后者),它们从节点属性中获取数字,并对self.body进行一些不优雅的字符串替换,从而将换行符弄到位。在

这对HTML和LaTeX都很好,但我很乐意听到一个更优雅的解决方案!在

相关问题 更多 >