我有以下问题:我想创建一个 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
但你真的想这么做吗?(任何其他可行的方法可能与此相同,只是语法可能稍微隐藏一些)