如何扩展一个环境中的几个参数?

如何扩展一个环境中的几个参数?

我有一个定义如下的环境:

\newenvironment{regularEnumerateEx}[2][0em]
  {begin{listSkeleton}[#1]{enumerate}{#2}}
  {\end{listSkeleton}}

问题是我需要#2在将它传递给之前进行扩展listSkeleton。如果扩展了,那就没问题了#1(我认为)。我知道我必须\expandafter以某种方式使用,但不知道具体如何使用。

答案1

如果可以完全扩展它,而不只是一次,您可以使用\edef临时宏:

\newenvironment{regularEnumerateEx}[2][0em]{%
  \edef\temp{%
    \noexpand\begin{listSkeleton}[#1]{enumerate}{#2}%
  }%
  \temp
}{%
  \end{listSkeleton}%
}

如果你确实只想扩展它一次,你可以这样做:

\newenvironment{regularEnumerateEx}[2][0em]{%
  \def\temp{\begin{listSkeleton}[#1]{enumerate}}%
  \expandafter\temp\expandafter{#2}%
}{%
  \end{listSkeleton}%
}

宏通常\@tempa用于此类临时分配,但在用户文档中,它需要\makeatletter ... \makatother围绕代码。因此,为了简单起见,我只使用了\temp。无论如何,它只是在组内使用。

相关内容