我正在尝试为多行拆分的方程式定义一个快捷方式/新命令。
对于单行方程,下面的 \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
\eeq
for\begin{equation} \end{equation}
。对于 amsmath 包定义的某些环境,例如align
、gather
、multline
和其他相同类型的环境,这样做不行:尝试将其定义\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}