假设我希望定义一个mynewenv
与现有环境完全相同的新环境myenv**
,但名称是在中给出的\testmacro
。我该如何获取价值在\testmacro
做出定义时?
下面是 MWE。
\documentclass{article}
\ExplSyntaxOn
\def\testmacro{myenv**}
\NewDocumentEnvironment { myenv** } { O{} }
{ My }
{ Env }
\NewDocumentEnvironment { mynewenv } { O{} }
{
\expandafter \begin \expandafter { \testmacro }
}
{
\expandafter \end \expandafter { \testmacro }
}
\ExplSyntaxOff
\def\testmacro{cleared} % This shouldn't affect "mynewenv"
\begin{document}
\begin{mynewenv}
\end{mynewenv}
Text in case of empty.
\end{document}
答案1
你想让环境的主体有\begin{test**}
所以在定义之前需要进行扩展,我ee
在这里使用了一种变体。
\documentclass{article}
\ExplSyntaxOn
\def\testmacro{myenv**}
\NewDocumentEnvironment { myenv** } { O{} }
{ My }
{ Env }
\cs_new:Nn\my_def_env:nn{
\NewDocumentEnvironment { #1 } { O{} }
{
\begin { #2 }
}
{
\end { #2 }
}
}
\cs_generate_variant:Nn \my_def_env:nn {ee}
\my_def_env:ee {mynewenv} { \testmacro}
\ExplSyntaxOff
\def\testmacro{cleared} % This shouldn't affect "mynewenv"
\begin{document}
\begin{mynewenv}
\end{mynewenv}
Text in case of empty.
\end{document}