align 的缩写

align 的缩写

我知道amsmath包装上的技术说明不能引入直接缩写,例如

\newcommand{\bal}{\begin{align}} % doesn't work
\newcommand{\eal}{\end{align}}   % doesn't work

或者

\newcommand{\bal}{\align}    % doesn't work
\newcommand{\eal}{\endalign} % doesn't work

令我困惑的是

\newenvironment{foo}{\align}{\endalign}

工作,至少如果一个人足够乖巧,能够勤奋地打字\begin{foo}...\end{foo},因为\foo...\endfoo也不会工作。

我真的很感激有人能帮我解释一下幕后发生的事情:-)

答案1

基本上,\begin{align}执行\align,进而调用\start@align

这个宏记录了里面的内容\@currenvir并进行设置,以便环境中要吸收的内容就是第一次出现的任何内容\end{align}

如果你这样做

\newenvironment{foo}{\align}{\endalign}

的执行\begin{foo}将设置\@currenvirfoo,因此\start@align将使 TeX 吸收 之前的所有内容\end{foo},然后执行\endfoo(在本例中,它只是\endalign)。

这就解释了为什么

\newenvironment{foo}{\begin{align}}{\end{align}} % WRONG!

不起作用:\start@align执行时,\begin已设置\@currenviralign,并且不会有明确的 \end{align}被发现。

environ处理时使用相同的策略\NewEnviron,因此如果我们想根据它们定义新的环境,用它定义的环境也必须出现在“宏形式”中。

相关内容