为分割环境定义新命令

为分割环境定义新命令

我正在尝试为多行拆分的方程式定义一个快捷方式/新命令。

对于单行方程,下面的 \beq 和 \eeq 命令有效,但 \bsp 和 \esp 命令无效。

我看到的错误信息是

! 段落在 \split 完成之前结束。

这可能意味着某处有一条空白行,但我不知道如何解决这个问题。

\documentclass[12pt]{article}

\usepackage{amsfonts,amsfonts,amsmath,amssymb,bm}

\newcommand{\beq}{\begin{equation}}
\newcommand{\eeq}{\end{equation}}
\newcommand{\bsp}{\begin{split}}
\newcommand{\esp}{\end{split}}

\begin{document}

This equation works
\beq
a^2 + b^2 = c^2
\eeq

And this one
\beq
\begin{split}
\cos(a+b) &= \cos a \cos b - \sin a \sin b \\
\sin(a+b) &= \sin a \cos b + \cos a \sin b
\end{split}
\eeq

But this one doesn't
\beq\bsp
\cos(a+b) &= \cos a \cos b - \sin a \sin b \\
\sin(a+b) &= \sin a \cos b + \cos a \sin b
\esp\eeq

\end{document}

答案1

以下内容是从分发版technotes.tex中复制粘贴的amsmath

6 为什么我不能使用缩写\begin{align} . . . \end{align}

作者通常喜欢使用缩写,例如\beq \eeqfor \begin{equation} \end{equation}。对于 amsmath 包定义的某些环境,例如aligngathermultline和其他相同类型的环境,这样做不行:尝试将其定义\bal \eal为 for 的简写\begin{align} \end{align}将会失败并显示令人费解的错误消息。不幸的是,这与并非平凡的技术复杂性有关:给定的环境必须将其内容读取为分隔的宏参数,因为它们使用从 Spivak 的 继承的算法对内容进行多遍处理amstex.tex。显而易见的解决方案 - 用不同的算法替代多遍计算中的框洗牌而不是标记洗牌 - 这将需要从头开始重写这些显示环境;虽然这是一个值得的目标,但它超出了 AMS-LATEX 项目的原始范围。一个名为的辅助包的工作正在进行中,它breqn不仅解决了这个问题,还解决了许多其他问题;然而,在撰写本文时 [1999 年 9 月] 它只进展到 beta 版。

一些解决方法:

  • \def\bal#1\eal{\begin{align}#1\end{align}}
  • 定义\newcommand{\env}[2]{\begin{#1}#2\end{#1}}然后使用 \env{align}{...}

根据您所展示的代码,您可能需要研究提到的第一个解决方法。

答案2

这样它就可以工作了:

\documentclass[12pt]{article}

\usepackage{amsfonts,amsfonts,amsmath,amssymb,bm}

\newcommand{\beq}{\begin{equation}}
\newcommand{\eeq}{\end{equation}}
\newcommand{\bsp}{\begin{split}}
\newcommand{\esp}{\end{split}}

\newcommand\multi[1]{% one command
  \begin{equation}%
    \begin{split}%
      #1%
    \end{split}%
  \end{equation}%
}

\newcommand\me[1]{% split into the equation part ...
  \begin{equation}%
      #1%
  \end{equation}%
}
\newcommand\ms[1]{% ... and the split part
    \begin{split}%
      #1%
    \end{split}%
}


\begin{document}

This equation works
\beq
a^2 + b^2 = c^2
\eeq

And this one
\beq
\begin{split}
\cos(a+b) &= \cos a \cos b - \sin a \sin b \\
\sin(a+b) &= \sin a \cos b + \cos a \sin b
\end{split}
\eeq

\multi{\cos(a+b) &= \cos a \cos b - \sin a \sin b \\
\sin(a+b) &= \sin a \cos b + \cos a \sin b}

\me{\ms{
\cos(a+b) &= \cos a \cos b - \sin a \sin b \\
\sin(a+b) &= \sin a \cos b + \cos a \sin b
}}

\me{%  same, but in a neater presentation
  \ms{
    \cos(a+b) &= \cos a \cos b - \sin a \sin b \\
    \sin(a+b) &= \sin a \cos b + \cos a \sin b
  }
}

\end{document}

X

相关内容