python - 如何在 Sphinx 中正确定义新的警告?
问题描述
使用 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'
解决方案
您也可以手动执行基本visit_admonition
操作并自己添加标题节点:
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'
如果你没有本地化的意图,你也可以放。
推荐阅读
- uml - 活动图:以不同继承类型的对象流作为输出重用活动/动作
- android - 应用程序被杀死时没有触发 FCM 通知
- javascript - 使用 AJAX 和 PHP 将 MYSQL 中的数据显示到文本字段中
- python - 绘制 x 轴格式
- c++ - 在 qml 中使用 c++ 类的静态属性
- android - 如何创建一个 Firebase 动态链接,点击后会打开一个 android 即时应用程序?
- android - Firebase Cloud Messaging 无法在带有 Flutter 应用程序的 Android 上运行
- java - 如何在java中将排序方法作为参数传递
- c# - OnEntry 方法不起作用,当使用 postsharp 进行 AOP 时
- java - 在 Spring 中管理(检查和恢复)自定义背景例程的标准方法是什么?