浮动的垂直间距

浮动的垂直间距

我在文本中使用了浮动。我发现,使用\intextsep可以设置浮动和文本上方和下方的空间。但是当我使用 时\setlength{\intextsep}{5mm},浮动下方的空间大于其上方的空间。为什么它们不相等?

% Preview source code

%% LyX 2.0.0beta1 created this file.  For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[english]{report}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{3}
\usepackage{graphicx}

\makeatletter

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
%% A simple dot to overcome graphicx limitations
\newcommand{\lyxdot}{.}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage{setspace}
\setlength{\intextsep}{5mm}
\setlength{\belowcaptionskip}{0mm}

\setstretch{2}

\makeatother

\usepackage{babel}

\begin{document}
Text Text Text Text Text Text Text Text Text Text Text Text

\begin{figure}[h]
\begin{centering}
\includegraphics[scale=0.5]{\lyxdot \lyxdot /Pictures/fedora}
\par\end{centering}

\caption{}

\end{figure}
Text Text Text Text Text Text Text Text Text Text Text Text
\end{document}

答案1

下面使用分步方法解释发生了什么。首先,请考虑以下示例代码的简化版本:

\documentclass{report}
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
\setlength{\intextsep}{0mm}
\begin{document}
Line 1: Text Text Text Text Text Text Text Text Text Text Text Text

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.5]{\lyxdot \lyxdot /Pictures/fedora}
%  \caption{This is a caption}
\end{figure}

Line 2: Text Text Text Text Text Text Text Text Text Text Text Text\par
Line 3: Text Text Text Text Text Text Text Text Text Text Text Text
\end{document}

所有的包都已经被移除,代码也做了少许修改(centering环境已经改为在环境\centering中有一个范围figure;编号行Text Text...demo包选项改为graphicx允许任何人编译该示例并用黑色矩形替换所有图像;注释掉该\caption命令)。输出如下所示。

在此处输入图片描述

注意 的基线Line 1是如何“紧贴”图形的。如果放大,您会看到文本实际上接触到了图形。这是因为\setlength{\intextsep}{0mm}。那么为什么Line 2不从底部“紧贴”图形呢?它实际上是紧贴的!事实上,从图形底部到 的基线的距离与从到 的Line 2基线跳跃的距离完全相同。它可能看起来并不“紧贴”,但 基线到基线(或) 却是紧贴的。Line2Line 3\baselineskip

当添加原始示例中的其他组件时,这种边际差异会被夸大,例如setspace包裹并且\setstretch{2}仍然保持\setlength{\intextsep}{0mm}

在此处输入图片描述

但是,正如预期的那样\baselineskip,图中和之间的距离仍然与和之间的Line 1距离相同。添加进一步在视觉上增加了这个差距:\baselineskipLine 1Line 2\caption

在此处输入图片描述

不过,和以前一样,\baselineskip标题底部的距离(g和字符的底部)与从到的p距离完全相同。\baselineskipLine 1Line 2

如果要纠正这个问题,则需要将所需的跳过添加到浮点数的顶部,例如:

在此处输入图片描述

\documentclass{report}
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
\setlength{\intextsep}{0mm}
\begin{document}
Line 1: Text Text Text Text Text Text Text Text Text Text Text Text \par \kern 5pt

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.5]{\lyxdot \lyxdot /Pictures/fedora}
  \caption{This is a caption}
\end{figure}

Line 2: Text Text Text Text Text Text Text Text Text Text Text Text\par
Line 3: Text Text Text Text Text Text Text Text Text Text Text Text
\end{document}

这里5pt似乎合理。或者,如果你想要自动化,那么你可以使用etoolbox包裹

\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\BeforeBeginEnvironment{figure}{\kern 5pt}%

但请注意,5pt即使图形位于页面顶部,这也会在图形和文本之间留出间隙。这种手动交互通常不是好的风格,即使它在视觉上看起来不准确。LaTeX 在间距方面做得足够好。


编辑: 正如 @Jake 所建议的,更好的方法是修改标题下方的跳过(或\belowcaptionskip),以删除一些过于视觉化的\baselineskip。在下面的例子中,\intextsep设置5pt了,\belowcaptionskip设置为-\baselineskip+1.6ex(以摆脱\baselineskip并添加“正常行”高度;通过实验获得\intextsep=0pt):

在此处输入图片描述

\documentclass{report}
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{setspace}% http://ctan.org/pkg/setspace
\begin{document}
\setlength{\intextsep}{5pt}%
\setstretch{2}%
\setlength{\belowcaptionskip}{-\baselineskip}\addtolength{\belowcaptionskip}{1.6ex}%
Line 1: Text Text Text Text Text Text Text Text Text Text Text Text

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.5]{\lyxdot \lyxdot /Pictures/fedora}
  \caption{This is a caption}
\end{figure}

Line 2: Text Text Text Text Text Text Text Text Text Text Text Text\par
Line 3: Text Text Text Text Text Text Text Text Text Text Text Text
\end{document}

相关内容