我在
preamble
的 conf.py
中声明一个自定义环境,它需要 6 个参数
% REQUIREMENT STYLE/FORMAT
\newenvironment{sphinxclasscustomizedrequirement}[6]{
\rule{15cm}{1pt}\\
\fontfamily{qcr}\selectfont
\color{red}
ARG1 = #1\\[1ex]
\color{black}
ARG2 = #2\\[1ex]
ARG3 = #3\\[1ex]
ARG4 = #4\\[1ex]
ARG5 = #5\\[1ex]
\rule{15cm}{1pt}\\
}{}
我使用
container
指令将一些块包装到这个环境中
.. container:: customizedrequirement
HELLO WORLD THIS IS A TEST
但是,我不知道如何指定这个环境的 6 个参数。
我想生成这个 LaTeX 代码
\begin{sphinxuseclass}{customizedrequirement}{123456}{LOREM}{IPSUM}{DOLOR}{SIT}
\sphinxAtStartPar
HELLO WORLD THIS IS A TEST
\end{sphinxuseclass}
但我不知道如何在
rst
中做到这一点。
如果我像
code-block
中那样指定参数
.. container:: customizedrequirement
:a: A
:b: B
:c: C
:d: DEBUG
HELLO WORLD THIS IS A TEST
然后它生成这个
\begin{sphinxuseclass}{customizedrequirement}
\begin{sphinxuseclass}{a}
\begin{sphinxuseclass}{a}
\begin{sphinxuseclass}{b}
\begin{sphinxuseclass}{b}
\begin{sphinxuseclass}{c}
\begin{sphinxuseclass}{c}
\begin{sphinxuseclass}{d}
\begin{sphinxuseclass}{debug}
\sphinxAtStartPar
HELLO WORLD THIS IS A TEST
\end{sphinxuseclass}
\end{sphinxuseclass}
\end{sphinxuseclass}
\end{sphinxuseclass}
\end{sphinxuseclass}
\end{sphinxuseclass}
\end{sphinxuseclass}
\end{sphinxuseclass}
\end{sphinxuseclass}
如何使用指定参数生成对我的环境的调用?
我最终做的是编写一个自定义扩展,因为如果没有扩展,我无法让它开箱即用。
class Requirement(Directive):
has_content = True
option_spec = {
'id': directives.unchanged_required,
'source': directives.unchanged,
'allocation': directives.unchanged_required,
'safety': directives.unchanged_required,
}
def run(self):
paragraph_node = nodes.paragraph()
self.state.nested_parse(self.content, self.content_offset, paragraph_node)
req_id = self.options.get('id', 'undefined')
source = self.options.get('source', 'None (derived requirement)')
allocation = self.options.get('allocation', 'undefined')
safety = self.options.get('safety', 'undefined')
arguments = f'{{{req_id}}}{{{source}}}{{{allocation}}}{{{safety}}}'.replace('_','\_')
latex_prefix = nodes.raw('', '\\begin{customizedrequirement}' + arguments, format='latex')
latex_suffix = nodes.raw('', '\end{customizedrequirement}', format='latex')
return [latex_prefix, paragraph_node, latex_suffix]
def setup(app):
app.add_directive("requirement", Requirement)
return {
'version': '0.1',
'parallel_read_safe': True,
'parallel_write_safe': True,
}
这是我在
.rst
中调用分机的方式
.. requirement::
:id: ABCDE
:source: req_1
:allocation: team1
:safety: high
This is the textual content
最后,它生成了我想要的 LaTeX :
\begin{customizedrequirement}{ABCDE}{req_1}{team1}{high}
\sphinxAtStartPar
\sphinxAtStartPar
This is the textual content
\end{customizedrequirement}
别忘了向您的
customizedrequirement
声明样式 preamble
:
latex_elements = {
'preamble': r'''
% REQUIREMENT STYLE/FORMAT
\newenvironment{customizedrequirement}[5]{
\rule{15cm}{1pt}\\
\small
\color{red}
#1\\[1ex]
\color{black}
SOURCE=#2\\[1ex]
ALLOCATION=#3\\[1ex]
SAFETY=#4\\[1ex]
}{
\rule{15cm}{1pt}\\
}
'''
}
你成功做到了吗?我也有同样的问题。