“align”环境非常棒,我认为它几乎可以取代默认的“equation”和“eqnarray”环境。但是,我发现对齐方程的垂直间距有点困扰我。
我观察到,如果方程式位于一长行文本之后,则“align”和“equation”的间距相同;但是,如果方程式位于一短行文本之后,则“equation”会进行一些压缩,而“align”则不会,因此前者会产生更好看的方程式。
这是一个例子。有没有办法让“align”像“equation”一样调整间距?
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage{amsmath}
\begin{document}
\setlength\parindent{0pt}
Using \textit{equation}:
\begin{equation}
x = 1
\end{equation}
Spacing is OK.
\smallskip
(Using \textit{align}):
\begin{align}
x = 1
\end{align}
Spacing is too much.
\bigskip
\textbf{Another Example}
Using \textit{equation}: (long text long text long text)
\begin{equation}
x = 1
\end{equation}
Spacing is OK. (long text long text long text long text)
\smallskip
Using \textit{align}: (long text long text long text long text)
\begin{align}
x = 1
\end{align}
Spacing is the same. (long text long text long text long text)
\end{document}
答案1
SwapAboveDisplaySkip
来自的命令(mathtools
@Gustavo Mezzetti 在他的评论中提到)不适用于multline
, 也不适用于equation
。
from (在环境之前使用,与必须在环境开始时使用的解决方案相反)的工作原理\useshortskip
:nccmath
mathtools
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage{mathtools, nccmath}
\begin{document}
\setlength\parindent{0pt}
Using \textit{equation}:
\begin{equation}
x = 1
\end{equation}
Spacing is OK.
\smallskip
(Using \textit{align}):\useshortskip
\begin{align}
x = 1
\end{align}
Spacing is OK.
\bigskip
(Using \textit{multline}):\useshortskip
\begin{multline}
x =a + b + c + d\\ + f +e +g + h
\end{multline}
Spacing is OK.
\end{document}
答案2
最后,我决定扩大我的评论得到答案。
该包为显示数学而定义的许多环境amsmath
都没有利用 TeX 在“机器级”实现的“显示短跳过”机制;这是因为,从 TeXnical 的角度来看,这些环境不会排版“显示方程”,而是更类似于环境的东西list
。无论如何,该mathtoos
包提供了一个部分的解决方法:如果显示环境中的第一个东西是命令\SwapAboveDisplaySkip
,则显示前面会有空格\abovedisplayshortskip
,而不是\abovedisplayskip
。此解决方案只是部分解决方案,因为它不是自动:\SwapAboveDisplaySkip
必须手动插入命令,无论需要什么。最后,应该注意的是,不能与和环境\SwapAboveDisplaySkip
一起使用——但也不需要!equation
multline
这是一个完整的、可编译的示例:
% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly
% declare the paper format.
\usepackage[T1]{fontenc} % Not always necessary, but recommended.
% End of standard header. What follows pertains to the problem at hand.
\usepackage{mathtools} % also loads "amsmath"
\begin{document}
\setlength\parindent{0pt}
Using \texttt{equation}:
\begin{equation}
x = 1
\end{equation}
Spacing is OK.
\medskip
Using \texttt{align}:
\begin{align}
x = 1
\end{align}
Spacing is too much.
\medskip
Using \verb|\SwapAbove...|:
\begin{align}
\SwapAboveDisplaySkip
x = 1
\end{align}
Now the spacing is correct.
\bigskip
\textbf{Another Example}
Using \texttt{equation} (long text long text long text):
\begin{equation}
x = 1
\end{equation}
Spacing is OK.
\smallskip
Using \texttt{align} (long text long text long text long text):
\begin{align}
x = 1
\end{align}
Spacing is the same.
\bigskip
\textbf{But Beware:}
Using \verb|\SwapAboveDisplaySkip| (long text long text long text long text):
\begin{align}
\SwapAboveDisplaySkip
x = 1
\end{align}
Now the spacing is wrong again (too little)!
\end{document}
以下是我得到的输出: