嵌套环境给出“!...的参数有一个额外的}”错误

嵌套环境给出“!...的参数有一个额外的}”错误

我尝试以嵌套的方式使用两个 Environ,但得到了

! Argument of \marray has an extra }

错误。知道为什么会发生这种情况吗?

\documentclass{minimal}
\usepackage{amsmath,environ}

\NewEnviron{meqmultinum}[1]{
\begin{equation}\begin{split}
\BODY
\end{split}\label{eq:#1}\end{equation}
}

\NewEnviron{marray}[2]{
\renewcommand*{\arraystretch}{#2}
\begin{array}{#1}
\BODY
\end{array}
}

\begin{document}

\begin{meqmultinum}{test}
a&=\begin{marray}{l l}{1.2}
\alpha & \beta\\
\gamma & \kappa
\end{marray}\\
b&=\begin{array}{l l}
\alpha & \beta\\
\gamma & \kappa
\end{array}
\end{meqmultinum}

\end{document}

答案1

环境split内部meqmultinum提供对齐。这意味着环境的内容是逐个单元处理的:

单元格 1: a
单元格 2:=\begin{marray}{l l}{1.2} \alpha

其余部分& \beta \\ \gamma & \kappa \end{marray}不属于单元格 2。因此 的代码\begin{marray}会抱怨,因为它\end找不到\end{marray}

可以通过在周围添加花括号来解决这个问题\begin{marray}...\end{marray}

\begin{meqmultinum}{test}
  a&={\begin{marray}{l l}{1.2}
    \alpha & \beta\\
    \gamma & \kappa
  \end{marray}}\\
  ...
\end{meqmultinum}

为什么用array而不是 呢marray?环境array不需要一开始就看到\end{array},而是建立一个表格,并在这个内部表格中处理array和 的内容。&

其他定义marray

David Carlisle 在他的评论中给出了另一种解决此问题的方法。无需environ对包进行特殊的环境处理array

\newenvironment*{marray}[2]{%
  \renewcommand*{\arraystretch}{#2}%
  \begin{array}{#1}%
}{‌%
  ​\end{array}%
}

答案2

没有必要\NewEnviron在这些环境中使用;在这种情况下split可能会出现问题,但aligned可以代替使用。

\documentclass{article}
\usepackage{amsmath}

\newenvironment{meqmultinum}[1]
  {\equation\label{eq:#1}\aligned}
  {\endaligned\endequation}

\newenvironment{marray}[2]
  {\renewcommand*{\arraystretch}{#2}\array{#1}}
  {\endarray}

\begin{document}

\begin{meqmultinum}{test}
a&=\begin{marray}{l l}{1.2}
\alpha & \beta\\
\gamma & \kappa
\end{marray}\\
b&=\begin{array}{l l}
\alpha & \beta\\
\gamma & \kappa
\end{array}
\end{meqmultinum}

\end{document}

相关内容