\parskip 在浮点数(和列表)后插入额外空格

\parskip 在浮点数(和列表)后插入额外空格

这个问题似乎与当“\parskip”随着“\baselineskip”增加时,如何删除列表后的跳过?但那里给出的答案虽然被接受了,但却不起作用。

我如何\parskip设置仅有的插入段落之间。目前我的设置导致[h]-float 或后出现额外的垂直空间{lstlisting}。后者未在我的文档中使用,但说明了显示样式环境中的问题。* 方程式没有问题。

问题

\documentclass[fleqn]{book}

\usepackage{parskip}

\usepackage{listings}

\begin{document}
XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX
\begin{equation}
xxxxx = xxxxx
\end{equation}
XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX

XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX
XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX
\begin{lstlisting}
LLLLLLLLLLLLLLLLLLL
\end{lstlisting}
XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX

XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX
XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX
\begin{figure}[h]
\rule{10cm}{2cm}
\end{figure}
XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX
XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX
\end{document}

我可以通过插入来修复这个问题,\vspace{-\parskip}但这是一个糟糕的解决方案——所以像 MS Word 一样 ;-)

* 我正在使用自己创建的环境来mdframed获取框架盒。

答案1

基本上,我认为您看到的是 a) 列表中的一个错误,LaTex2e 中“此处”浮点数的缺陷,以及选项的equation环境实现中可能存在的错误fleqn。该parskip包实际上在这里没有做太多事情,为了进行测试,我只会将其注释掉并改用\setlength\parskip{33pt}

如果你这样做,你会看到 parskip 被插入

  • 围绕方程环境(错误?)
  • 仅在 lstlisting 环境之后(肯定是 bug)
  • 不在浮点周围(但那里的间距不均匀 - 缺陷)

如果您另外删除该选项,则方程周围的空间会消失(实际上它周围不应该有 parskip)。除了建议使用对 有适当实现的fleqn之外,我们对此无能为力。amsmathfleqn

关于列表,我认为这是环境的一个错误,因为它总是在上方和下方添加一些空间(可通过设置控制),但此外总是在\parskip后面添加一个,无论此环境是否被空白行包围。一种解决方法是将“belowskip”配置为“aboveskip”减去 parskip 设置,例如

\setlength\parskip{33pt}  % our strange value
\lstset{aboveskip=6pt plus 2pt, belowskip=-27pt plus 2pt}

最后是浮动:这里你能做的不多:如果浮动处于垂直模式(在你的例子中不是),那么你可以应用我的答案intextsep 提供双倍空间 否则,我建议的最好方法是将 a 放在\strut前面,例如

XXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX
\strut
\begin{figure}[h]
\rule{10cm}{2cm}
\end{figure}
CCCXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXX XXXXX

如果您\showoutput在序言中使用,您将看到 LaTeX 正确地将浮动放在\intexsep浮动的上方和下方,没有其他内容。但是,在浮动之后,还添加了计算的空间以到达下一个基线。并且该量取决于前一行是否为下降行(如果不是,则添加更多空间)。因此,支柱有助于平衡这一点。

从技术上讲,LaTeX 无法(好吧,它是一台图灵机,但需要付出现实的努力)将浮点数放置在计算空间的中间,因为在添加浮点数时尚不知道此信息。

更新

至少自动添加\strut水平模式的一种方法是使用以下补丁:

\usepackage{etoolbox}
\makeatletter
\patchcmd{\end@float}%
    {\vadjust}{\strut\vadjust}%
    {\typeout{*** SUCCESS ***}}{\typeout{*** FAIL ***}}
\makeatother

相关内容