![使 \[ 和 \] 表现为 \begin{gather*} 和 \end{gather*}](https://linux22.com/image/243443/%E4%BD%BF%20%5C%5B%20%E5%92%8C%20%5C%5D%20%E8%A1%A8%E7%8E%B0%E4%B8%BA%20%5Cbegin%7Bgather*%7D%20%E5%92%8C%20%5Cend%7Bgather*%7D.png)
我正在尝试重新定义\[
和,\]
使它们的行为与\begin{gather*}
和一样end{gather*}
。我一直使用这样做\DeclareRobustCommmand
;但是,当我尝试编译以下最小程序时:
\documentclass[10pt,oneside,a4paper]{article}
\usepackage[english]{babel}
\usepackage{amsmath}
\let\equation\gather
\let\endequation\endgather
\DeclareRobustCommand{\[}{\begin{gather*}}
\DeclareRobustCommand{\]}{\end{gather*}}
\begin{document}
\[ 2+2=4 \]
\end{document}
我收到此错误:
! LaTeX Error: \begin{gather*} on input line 9 ended by \end{document`.
gather
如果我将其替换为,则不会发生这种情况equation
。这是怎么回事?
答案1
你不能这样做,因为 TeX 需要看 \end{gather*}
才能知道哪里gather*
结束。需要一个低级命令定义
\protected\def\[#1\]{\begin{gather*}#1\end{gather*}
但我不推荐这样做,因为一行显示的方程式需要周围不同的垂直间距,这\[...\]
(或equation*
)确保。
答案2
@Ryan Reich:您的观点最接近。可以对 AMS 代码进行一些更改,以允许 OP 寻求的缩写类型。这种情况经常出现。从以下代码片段中可以明显看出 Michael Downes(许多原始 AMS 内容的编码员)的逻辑:
\edef\begin@stack{%
\push@begins#1\begin\end \expandafter\@gobble\begin@stack}
在看到当前最顶层环境的结束之前,该堆栈不会停止构建。