我正在尝试定义一个环境,该环境显示由环境参数指定的文本。以下示例演示了这一点:
\documentclass{article}
\usepackage{environ}
\usepackage{etoolbox}
\csdef{bla1}{Bla1Text}
\csdef{bla2}{Bla2Text}
\NewEnviron{myenv}[1][]{%
env: #1
\csuse{bla#1} % does not work
\BODY
}
\begin{document}
\csuse{bla1}\\ % works as expected
\begin{myenv}{1} body1 \end{myenv} \\
\begin{myenv}{2} body2 \end{myenv}
\end{document}
\NewEnviron
与包不兼容或者etoolbox
是否有可能修复我上面的代码?
注意:在常规环境中\csuse
可以正常工作,但我想更改环境的行为,以便无论变量\csuse
是否定义,它都会隐藏内容,据我所知,这只能使用来完成\NewEnviron
。 更改\csuse
不是一种选择,因为它已经在我的实际文档中广泛使用。
答案1
您使用的语法指定环境的参数myenv
是可选的,并且默认值为空。
因此按照你的定义,
\begin{myenv}
body
\end{myenv}
将执行\csuse{bla}
,而
\begin{myenv}[1]
body
\end{myenv}
将执行\csuse{bla1}
。如果您想要括号中的强制参数(从您的示例来看似乎是这种情况),则代码应该是
\NewEnviron{myenv}[1]{%
env: #1
\csuse{bla#1} % does not work
\BODY
}
在这种情况下
\begin{myenv}{2}
body
\end{myenv}
将执行\csuse{bla2}
。