我正在排版一本插图书,作者指出图片的头部高度似乎较小。我认为他是对的,我不知道为什么。
这是我的 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}
下面是一张图片,希望能够显示出问题:
有任何想法吗?
答案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 的建议相同。