![在段落内使用 Needspace 提供了太多空间](https://linux22.com/image/318261/%E5%9C%A8%E6%AE%B5%E8%90%BD%E5%86%85%E4%BD%BF%E7%94%A8%20Needspace%20%E6%8F%90%E4%BE%9B%E4%BA%86%E5%A4%AA%E5%A4%9A%E7%A9%BA%E9%97%B4.png)
我正在尝试实施提供的解决方案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}