浮动元素和其后的部分之间的间距太大

浮动元素和其后的部分之间的间距太大

当一个部分跟在浮动元素后面时,两个元素之间的垂直间距过大,因为\intextsep引入的间距会增加\section。一般来说,对于添加垂直间距的其他命令(例如下面的 MWE)也是如此\mycommand。以 MWE 和以下图像为例:

在此处输入图片描述

和 :

在此处输入图片描述

\documentclass{book}
\usepackage{mwe, lipsum}
\makeatletter
\newcommand{\mycommand}{\par%
    \vspace{16pt    \@plus 4pt  \@minus 2pt}%
    {\centering\LARGE * * *\par}%
    \vspace{16pt    \@plus 4pt  \@minus 2pt}%
    \@afterindentfalse\@afterheading}
\makeatother

\begin{document}
\lipsum[1]

\begin{figure}[h]
\centering\includegraphics[width =.5\linewidth]{example-image}
\caption{Figure \#1.}
\end{figure}

\mycommand\lipsum[2]
\mycommand\lipsum[2]
\newpage\lipsum[2]

\begin{figure}[h]
\centering\includegraphics[width =.5\linewidth]{example-image}
\caption{Figure \#2.}
\end{figure}

\section{My section}\lipsum[2]
\section{My section}\lipsum[2]
\end{document}

当然,我不希望\intextsep浮点数后面跟着文本时等于 0。所以我不能简单地写\setlength{\intextsep}{0pt}

因此我尝试使用\removelastskip\addvspace{...}代替来\vspace{...}补偿所添加的空间\intextsep但无济于事......

\intextsep你知道如何使位于浮点数顶部和底部的值的垂直空间表现得像\addvspace,以便位于浮点数之后的宏可以使用吗\addvspace\removelastskip等等?


有趣的是,LaTeX2e 源文档(2023-11-01 版本第 1081 页)中引用了类似的问题:

  1. 两个连续的 h 浮点数被两个 \intextsep 分隔:可以使用 \addvspace 将其更改为一个,好吗?请注意,如果 h 浮点数紧跟其他空格,则也意味着放入的空间更少。这也可能是一个太大的变化,至少对于兼容模式而言?或者它可能完全是错误的!它没有改变。

按照建议,我想使用浮点数\addvspace(或至少类似的行为)。有人提到这将是一个大变化,我不知道这是指修改原始代码的复杂性,还是指输出文档中会发现的更改以及由此导致的向后兼容性的缺乏。然而,管理浮点数的命令对我来说太复杂了,远远超出了我对 LaTeX 的理解。\patchcmd{\@addtocurcol}{\skip\intextsep}{\addvspace{\intextsep}}{}当然,天真的使用并没有解决问题。

答案1

当我偶然发现弗兰克·米特尔巴赫(Frank Mittelbach)的这个答案时,我终于找到了解决方案:https://tex.stackexchange.com/a/40363/209693

这个答案解决了LaTeX2e源文档中提出的和我的问题中提到的问题,但它也解决了我的问题的主要问题。

相关内容