使用 \newenvironment 嵌套 amsmath 环境

使用 \newenvironment 嵌套 amsmath 环境

使用amsmath环境,我想创建一个快捷方式

\begin{equation*}
  \begin{split}
    ...
  \end{split}
\end{equation*}

但说

\newenvironment{eqs}
  {\begin{equation*}\begin{split}}
  {\end{split}\end{equation*}}

并使用它

\begin{eqs}
  ...
\end{eqs}

产生错误

! LaTeX Error: \begin{split} on input line 67 ended by \end{eqs}.

但是,使用\newcommand— 但\eqs{...}在几行中看起来有点奇怪:

\newcommand{\eqs}[1]{
  {\begin{equation*}\begin{split}{#1}\end{split}\end{equation*}}}

% ...

\eqs{
  ...
  ...}

是否有可能让它在新的环境中发挥作用,或者是否有更好的方法来实现相同的效果?

答案1

amsmath为了执行测量,需要多次处理某些环境。因此,它捕获使用 TeX“参数文本”方法的环境内容。这需要\end{<env>}伴随的明确可见\begin{<env>}。在您的例子中,您希望使用不同的简写来放弃这一点,使之\end{<env>}不可见。

一种解决方法是捕捉eqs您自己的身体并将其传递给指定的环境。environ提供了一种方法来做到这一点:

\usepackage{environ}

\NewEnviron{eqs}
  {\begin{equation*}
     \begin{split}
       \BODY
     \end{split}
   \end{equation*}}

答案2

我更喜欢使用原始形式

\begin{equation*}
  \begin{split}
   <content>
  \end{split}
\end{equation*}

因为这样代码更清晰。但是,如果你坚持,你可以使用environ下面的包。

\documentclass{article}
\usepackage{amsmath}
\usepackage{environ}
\NewEnviron{eqs}{%
\begin{equation*}
  \begin{split}
   \BODY
  \end{split}
\end{equation*}
  }
  \begin{document}
    \begin{eqs}
      x &+ y \\
      a &+ b
    \end{eqs}
  \end{document}

相关内容