如何正确定义狮身人面像中的新训诫?

2024-04-27 22:38:27 发布

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

使用Sphinx很容易编写扩展,但是很难以正确的方式扩展Sphinx。你知道吗

我想定义一个自定义警告,因此我有:

class exercise(nodes.Admonition, nodes.Element):
    pass

class ExerciseDirective(BaseAdmonition):
    node_class = exercise

def visit_exercise(self, node, name=''):
    self.visit_admonition(node, 'exercise')

def depart_exercise(self, node=None):
    self.depart_admonition(node)

def setup(app):
    app.add_directive('exercise', ExerciseDirective)

    app.add_node(exercise,
        html=(visit_exercise, depart_exercise)
    )

不幸的是,这还不够,因为我的exercise没有标题。我注意到docutils/languages上有警告的翻译,以后可以用language.labels阅读。因为我的标签exercise没有定义,所以我没有文本。你知道吗

正确的方法是为定义的语言添加一个新标签。我不知道怎么。。。。你知道吗

一个非常难看的解决方案是破解硬编码的admonitionlabels

sphinx.locale.admonitionlabels['exercise'] = 'Exercise'

Tags: selfaddnodeapp警告定义defsphinx
1条回答
网友
1楼 · 发布于 2024-04-27 22:38:27

您还可以手动执行basevisit_admonition所做的操作,并自己添加title节点:

def visit_exercise(self, node, name=''):
    self.visit_admonition(node, 'exercise')
    if not isinstance(node[0], nodes.title):
        node.insert(0, nodes.title('exercise', _('Exercise')))

我以_('Exercise')为例,但如果您不打算本地化,也可以只放'Exercise'。你知道吗

相关问题 更多 >