2016-09-27 120 views
2

我想创建一个将一个指令转换为另一个指令的替换(或类似)。是否可以用另一个指令代替一个指令

例如:

在我们的狮身人面像基于文档中,我们使用Admonitions创造一定的说明和警告框。

然而,如果我们使用

.. note:: This is a Note 

框的标题是这是一个注意成为第一款。

相比之下,这个指令

.. admonition:: This is a Note 
    :class: note 

产生与所需的标题注释框。

为了让其他编辑器更容易,我想创建一个替换,用第二个替换第一个。

在狮身人面像中可以做什么吗?

回答

2

是的,可以做到。您必须向Sphinx添加自定义指令。创建一个Python模块(如mydirectives.py旁边conf.py)下列要求:

import os 
import os.path 
import re 
import subprocess 

import docutils.core 
import docutils.nodes 
import docutils.parsers.rst 

class AbstractDirective(docutils.parsers.rst.Directive): 
    has_content = True 
    required_arguments = 0 
    optional_arguments = 0 
    option_spec = {} 
    final_argument_whitespace = False 

    node_class = docutils.nodes.container 

    def run(self): 
     self.assert_has_content() 
     text = '\n'.join(self.content) 
     admonition_node = self.node_class(rawsource=text) 
     self.state.nested_parse(self.content, self.content_offset, 
           admonition_node) 
     admonition_node.set_class("abstract") 
     return [admonition_node] 


def setup(app): 
    app.add_directive('abstract', AbstractDirective) 

必须有某种方式来添加标题为好。也许你需要自己添加一个 标题节点。该文档缺乏,最好看看 source for admonitions ,你会感受到docutils。

使用自定义文本节点,您应该可以编写自己的注释指令。

+0

谢谢。我会尽快看看它 –

相关问题