环境之后如何扩展?

环境之后如何扩展?

我有以下问题:我想创建一个 beamer 演示文稿并使用 引入一个新环境xparse。该环境有一个可选参数(+ 两个强制参数)。现在我想创建一个叠加效果,使得在第 1 帧上可选参数有一个值,而在第 2 帧上它应该不存在。我想到了类似

\begin{MyEnv}{...}\alt<2->{}{[a]} ...

\alt这会导致环境打开后评估的结果与预期行为不符。我考虑\expandafter在之前添加\begin{MyEnv},但没有帮助。

下面是一个最小的工作示例。

一个想法是使用空字符串来表示没有给出参数。这很关键,因为参数似乎被错误地扩展了。有一个第二个问题关于所描述的问题。

\documentclass[a4paper,10pt]{article}
\usepackage{xparse}
\NewDocumentEnvironment{MyEnv}{m O{x}}{Start (#1, #2)\par}{\par End}
\newcommand{\argument}{[o]}
\begin{document}
\begin{MyEnv}{a}
OK
\end{MyEnv}

\begin{MyEnv}{a}[b]
OK
\end{MyEnv}

\begin{MyEnv}{a}\argument{}
Not OK (should be a,o)
\end{MyEnv}
\end{document}

答案1

\expandafter\begin{MyEnv}

将会扩展后面的标记\begin,但这是{不可扩展的,因此\expandafter没有效果。

你可以做

 \def\foo{\begin{MyEnv}}
 \expandafter\foo\argument

但你真的想这么做吗?(任何其他可行的方法可能与此相同,只是语法可能稍微隐藏一些)

相关内容