为什么浮筒的头部尺寸较小?

为什么浮筒的头部尺寸较小?

我正在排版一本插图书,作者指出图片的头部高度似乎较小。我认为他是对的,我不知道为什么。

这是我的 MWE:

\documentclass{scrbook}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{graphicx,float}
\usepackage{lipsum}

\begin{document}
\lipsum[3]

\newpage

\begin{figure}[t]
\textbf{\framebox[70mm][r]{Example: headsep smaller }}
\end{figure}

\null
\vfill

\end{document}

下面是一张图片,希望能够显示出问题:

headsep_smaller_above_floats

有任何想法吗?

答案1

我觉得没什么奇怪的:

\documentclass{scrbook}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{graphicx,float}
\usepackage{lipsum}

\usepackage{fancyhdr}
\pagestyle{fancy} % just to show the head sep

\begin{document}
\makebox[0pt][l]{\vrule height0pt depth0.2pt width 30cm}%
\lipsum[3]

\newpage

\begin{figure}[t]
\textbf{\framebox[70mm][r]{%
  \makebox[0pt][r]{\vrule height0pt depth0.2pt width 30cm}%
  Example: headsep smaller }}
\end{figure}

\null
\vfill

\end{document}

fancyhdr两条发际线处于同一水平,并且(仅用于示例)产生的顶部规则也是如此。

在此处输入图片描述

发生了什么,真的

普通页面受制于一个称为 的功能\topskip:第一行基线将\topskip与文本块的上边缘保持一定距离。浮动不会发生这种情况,浮动的第一行将与分配空间的上边缘齐平。

一个更重要的例子是

\documentclass{scrbook}

\usepackage{lipsum}
\usepackage{showframe}

\begin{document}

\lipsum[3]

\newpage

\begin{figure}[t]
  Nulla malesuada porttitor
\end{figure}

\null
\vfill

\end{document}

这将清楚地表明情况。

我认为这不是浮点数的问题,因为它们是独立的部分并且遵循不同的规则。

如果担心这一点,请添加

\vrule height\topskip width 0pt

到第一行。

答案2

这是我通常用来应对这种情况的命令:

\newcommand*\cleantop{%
    \dimen@ \baselineskip
    \advance \dimen@ -\topskip
    \prevdepth \dimen@
}

在这个定义之后,我\cleantop在浮动环境的开始时使用它,正如我在下面的 MWE 中展示的那样:

\documentclass{scrbook}

\usepackage{lipsum}
\usepackage{showframe}

\makeatletter
\newcommand*\cleantop{%
    \dimen@ \baselineskip
    \advance \dimen@ -\topskip
    \prevdepth \dimen@
}
\makeatother

\begin{document}

\lipsum[3]

\newpage

\begin{figure}[t]
    \cleantop
    Nulla malesuada porttitor
\end{figure}

\null
\vfill

\end{document}

本质上与 egreg 的建议相同。

相关内容