在下面的代码中,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}
当然,这不适用于嵌套,但如果您要嵌套这些环境,那么您可以设置一个计数器,并使虚拟变量名称依赖于计数器。诸如enumerate
etc 之类的环境使用类似的技巧。
答案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}