在段落内使用 Needspace 提供了太多空间

在段落内使用 Needspace 提供了太多空间

我正在尝试实施提供的解决方案twoside-mode 外部的方程标签。解决方案似乎在对齐环境上方提供了太多空间。以下代码重现了该问题,您也可以查看附图。将第一段与第二段进行比较。

\documentclass{article}
\usepackage{amsmath}
\usepackage{needspace}

\begin{document}

\setbox0=\hbox{%
\begin{minipage}{\linewidth}%
\begin{align}
a^2=b^2+c^2, \\ d^2 = e^2 + f^2.
\end{align}
\end{minipage}%
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa:
\Needspace{\ht0}
\begin{align}
a^2=b^2+c^2, \\ d^2 = e^2 + f^2.
\end{align}
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa: 
\begin{align}
a^2=b^2+c^2, \\ d^2 = e^2 + f^2.
\end{align}
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. 

\end{document}

在此处输入图片描述

Needspace 软件包的手册确实指出 \Needspace 不应在段落内使用;这可能会导致问题。我希望两个段落内的间距相同。我该如何实现?

评论。最初,我以为问题是由带框的多行方程上方有额外空格,但解决方案是添加

\setlength\abovedisplayskip{0pt} 

在 minipage 中没有效果。这表明问题是由于 \Needspace 命令引起的。

答案1

我可以确认问题在于\Needspace(一旦它解析带星号或不带星号的调用)发出一个\par作为其打开宏(参见\makeatletter\meaning\@needsp@)。因此,额外的空间本质上是由于在环境之前插入了一个新段落align

因此,在这里,在\Needspace调用之前,我发出一个\vspace{\dimexpr-\baselineskip-\parskip\relax}。在这个 MWE 中,我更改了\parskip,只是为了确认它在我的解决方案中的正确使用。

我无法说这是否总体上对你有用。

根据 David 的评论,我也调用了该minipage选项[b],这样盒子深度就不会发挥作用。

\documentclass{article}
\usepackage{amsmath}
\usepackage{needspace}
\parskip 3em
\begin{document}

\setbox0=\hbox{%
\begin{minipage}[b]{\linewidth}%
\begin{align}
a^2=b^2+c^2, \\ d^2 = e^2 + f^2.
\end{align}
\end{minipage}%
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa:%
\vspace{\dimexpr-\baselineskip-\parskip\relax}\Needspace{\ht0}%
\begin{align}
a^2=b^2+c^2, \\ d^2 = e^2 + f^2.
\end{align}
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa: 
\begin{align}
a^2=b^2+c^2, \\ d^2 = e^2 + f^2.
\end{align}
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. 

\end{document}

在此处输入图片描述

相关内容