\NewEnviron 中的 \csuse 使用环境参数

\NewEnviron 中的 \csuse 使用环境参数

我正在尝试定义一个环境,该环境显示由环境参数指定的文本。以下示例演示了这一点:

\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}

相关内容