我在文本中使用了浮动。我发现,使用\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
基线跳跃的距离完全相同。它可能看起来并不“紧贴”,但 基线到基线(或) 却是紧贴的。Line2
Line 3
\baselineskip
当添加原始示例中的其他组件时,这种边际差异会被夸大,例如setspace
包裹并且\setstretch{2}
仍然保持\setlength{\intextsep}{0mm}
:
但是,正如预期的那样\baselineskip
,图中和之间的距离仍然与和之间的Line 1
距离相同。添加进一步在视觉上增加了这个差距:\baselineskip
Line 1
Line 2
\caption
不过,和以前一样,\baselineskip
标题底部的距离(g
和字符的底部)与从到的p
距离完全相同。\baselineskip
Line 1
Line 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}