![6 为什么我不能使用缩写\begin{align} . . . \end{align}?](https://linux22.com/image/267820/6%20%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8%E7%BC%A9%E5%86%99%5Cbegin%7Balign%7D%20.%20.%20.%20%5Cend%7Balign%7D%EF%BC%9F.png)
\newcommand
我使用以下示例创建了一些新的短命令:
\documentclass[12pt,twoside,a4paper]{book}
\usepackage{enumerate,amsmath}
\newcommand{\ba}{\begin{array}}
\newcommand{\ea}{\end{array}}
\newcommand{\ben}{\begin{enumerate}}
\newcommand{\een}{\end{enumerate}}
\newcommand{\bal}{\begin{align}}
\newcommand{\eal}{\end{align}}
\newcommand{\bc}{\begin{center}}
\newcommand{\ec}{\end{center}}
\newcommand{\de}{^\circ}
\begin{document}
\bc
$5\de$
\ec
\ben
\item Text
\item Text
\een
$\ba{cc}
a & b\\
c & d
\ea$
\bal
& r\\
& f
\eal
But
\begin{align}
& r\\
& f
\end{align}
is working.
\end{document}
除和外,所有\newcommand
s 都运行良好 。我不知道为什么它不起作用。\bal
\eal
答案1
David 和 Ulrike 已经告诉你为什么它不适用于align
。引用 Ulrike 提供的链接,“技术说明amsmath
包装”
6 为什么我不能使用缩写
\begin{align} . . . \end{align}
?... 尝试将
\bal
...定义\eal
为\begin{align}
...的简写。\end{align}
的简写将会失败,并出现令人费解的错误消息。这与不幸的非平凡技术复杂性有关:给定的环境必须将其内容读取为分隔的宏参数,因为它们使用从 Spivak 继承的算法对内容进行多遍处理amstex.tex
。显而易见的解决方案是使用不同的算法,在多遍计算中执行框改组而不是标记改组,这将需要从头开始重写这些显示环境;虽然这是一个值得追求的目标,但它超出了 AmS-LaTeX 项目的原始范围。[强调补充]
就我个人而言,以下是我认为总体上这是一个坏主意的原因,尽管存在令人费解的错误。快告诉我这段代码应该产生什么。
\bc
$5\de$
\ec
\ben
\item Text
\item Text
\een
如果这花费了您超过 10 秒的时间,那么您就是在浪费时间。现在想象一下将这样的代码发布到论坛上寻求帮助解决问题。其他试图阅读它的人很快就会困惑,不会再去阅读。
相比于:
\[
5^\circ
\]
\begin{enumerate}
\item Text
\item Text
\end{enumerate}
更加可读且更加传统。
我认为,零参数、零逻辑的宏,除非它们添加了语法糖,否则代表了对错误事物的优化:按键,以可读性和可移植性为代价。如果你真的想少打字,请使用文本扩展软件,例如文本扩展器或者自动热键。