Я часто использую следующий групповой код для сокращения вертикального пространства между некоторыми уравнениями (с уравнениями, выравниванием, сборкой и другими математическими средами) и текстом над ними:
\begingroup\abovedisplayskip=0pt
some equations in there
\endgroup
Но вместо того, чтобы каждый раз вручную вводить этот групповой код, как мне создать простой макрос в преамбуле, чтобы сделать то же самое? Я предполагаю, что макрос должен использоваться следующим образом, но можно ли сделать его проще?
\eqlift
some equations in there
\eqdown
Вот код MWE, демонстрирующий проблему, которую я решил с помощью кода выше (только после компиляции):
\documentclass[11pt,letterpaper,twoside]{book}
\usepackage{lmodern}
\usepackage{amsmath}
\begin{document}
Blabla bla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla bla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla blabla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla blabla blabla bla bla blabla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
\end{document}
А вот предварительный просмотр того, что он делает:
Я часто получаю слишком большое вертикальное пространство для любого класса, любого размера шрифта или другой конфигурации, которую я пробовал в прошлом (см. уравнение (3) на картинке предварительного просмотра). Единственный известный мне способ решить эту проблему — вставить код группы, который я показал выше.
решение1
Обычно TeX использует \abovedisplayskip
уравнение выше, но если последняя строка предыдущего абзаца короткая, то \abovedisplayshortskip
по умолчанию большинство классов устанавливают для нее меньшую длину, и уравнение «вписывается» в пространство, оставленное короткой строкой выше.
shortdisplayskip используется, если последняя строка заканчивается на 2em левее уравнения, чтобы убедиться, что визуальный зазор все еще есть.
Ваш случай (3) как раз очень близок к границе, TeX использует большую длину, ту же, что и в (4), но субъективно вы хотите, чтобы он работал как (1) и (2).
Я предлагаю здесь два варианта.
Уравнения 5–8 показывают настройку, когда обе длины имеют одинаковое значение. Тогда вы избежите разрыва, когда tex переключается с одного стиля на другой, но (8) в конечном итоге выглядит довольно плотным.
Уравнения 9-12 установлены с настройками по умолчанию, как в вашем оригинале, но длина последней строки третьего абзаца сделана так, чтобы она выглядела (для TeX) искусственно короче за счет вставки произвольного отрицательного пробела. Это заставляет TeX вставлять тот же пробел, что и для первых двух абзацев.
\documentclass[11pt,letterpaper,twoside]{book}
\usepackage{lmodern}
\usepackage{amsmath}
\begin{document}
\section{Original}
Blabla bla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla bla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla blabla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla blabla blabla bla bla blabla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
\section{use abovedisplayshortskip everywhere}
{
\setlength\abovedisplayskip{\abovedisplayshortskip}
Blabla bla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla bla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla blabla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla blabla blabla bla bla blabla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
}
\section{abovedisplayshortskip in (3=11)}
Blabla bla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla bla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla blabla :\hspace{-2cm}\mbox{}
\begin{equation}
y(x) = a \, x^2.
\end{equation}
Blabla bla blabla bla blabla blabla bla bla blabla :
\begin{equation}
y(x) = a \, x^2.
\end{equation}
\end{document}