据我所知,不可能创建以空行开头或结尾的文本块(例如使用code-block
指令),因为这对于structuredText语法来说是不明确的。在
没关系。在
但是现在我想创建一个使用docutils
的literal_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处理过程中丢失。在
我对狮身人面像机器了解不够,无法独自追踪,如有任何帮助,将不胜感激!在
我宁愿尝试使用CSS margin top和margin bottom属性。在
我找到了自己问题的答案,但比我希望的要复杂得多。。。在
我创建了一个自定义节点类,并添加了一个
literal_block
实例作为子节点。 我将空行数保存为自定义节点类的属性。 然后,我为HTML和LaTeX创建了“visit”和“depart”函数(实际上只有后者),它们从节点属性中获取数字,并对self.body
进行一些不优雅的字符串替换,从而将换行符弄到位。在这对HTML和LaTeX都很好,但我很乐意听到一个更优雅的解决方案!在
相关问题 更多 >
编程相关推荐