新环境中的第二组括号中的参数无法识别

新环境中的第二组括号中的参数无法识别

在下面的代码中,versionB 不起作用。参数 #1 似乎在第二组括号中时无法识别。有什么帮助吗?

\newenvironment{versionA}[1]
{#1} {}

\newenvironment{versionB}[1]
{} {#1}

\begin{versionA}{5}
Hello world!
\end{versionA}

\begin{versionB}{5}
Good Bye, cruel world!  
\end{versionB}

答案1

似乎只有环境的初始部分才能看到这些参数。解决此问题的一种方法是在环境顶部设置一个虚拟变量,然后在关闭环境时使用它。

\documentclass{article}

\newenvironment{versionA}[1]
{#1} {}

\newenvironment{versionB}[1]
{\def\versionBOne{#1}} {\versionBOne}

\begin{document}
\begin{versionA}{5}
Hello world!
\end{versionA}

\begin{versionB}{5}
Good Bye, cruel world!
\end{versionB}

\end{document}

当然,这不适用于嵌套,但如果您要嵌套这些环境,那么您可以设置一个计数器,并使虚拟变量名称依赖于计数器。诸如enumerateetc 之类的环境使用类似的技巧。

答案2

没有找到 newenvironment 的答案,但找到了替代方案 - NewDocumentEnvironment。有了这个,下面的工作就可以按要求进行。

\usepackage{xparse}

\NewDocumentEnvironment{versiona}{m}
{#1}{}

\NewDocumentEnvironment{versionb}{m}
{}{#1}

\begin{versiona}{5}
Hello world!
\end{versiona}

\begin{versionb}{5}
Good Bye, cruel world!  
\end{versionb}

相关内容