我一直在处理一份文档,其中某些页面的顶部有额外的垂直空间,并注意到在某些情况下,第一页的间距与后面的页面的间距不同。请参阅以下 MWE:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\vspace*{10pt}
\lipsum[1-2]
\newpage
\vspace*{10pt}
\lipsum[1-2]
\end{document}
第二页顶部的空间比第一页小。奇怪的是,如果你只使用一段lipsum,问题就消失了。它也可以通过使用
\null\vspace{10pt}
有人能解释一下这是怎么回事吗?
答案1
问题在于,\baselineskip
粘连被插入到页面的第一行之前\vspace*
。并且它取决于前一行的深度。在文档的开头,此深度为零,但在打印第二段的最后一行之后,深度来自 p 和 q 字母的深度。如果删除第二段,则最后一行仅包含单词,rutrum
并且其深度为零。
如果分页符后未使用,则删除\vspace*
“不稳定”,因为它是分页符后的“可丢弃物品”,并且通常使用粘连。\baselineskip
\topskip
该\vspace*
实现很糟糕,因为它保存了\prevdepth
(它用于下一个\baselineskip
粘合),然后它放入不可丢弃的项目(\hrule
)加上所需的\vskip
,然后恢复\prevdepth
寄存器:
\def\@vspacer#1{%
\ifvmode
\dimen@\prevdepth
\hrule \@height\z@
\nobreak
\vskip #1
\vskip\z@skip
\prevdepth\dimen@
\else ...
现在,“不稳定”一词\baselineskip
被添加到材料之后\vspace*
,并且不会在分页符处被删除。
我建议使用
\par \null \nobreak \vskip-\baselineskip \vskip<desired amount> \relax
而是 LaTeX 的\vspace*
。
答案2
Wipet 的分析是正确的。如果顶部需要精确的间距,则应中和 prevdepth。
\documentclass{article}
\usepackage{lipsum}
\makeatletter
\g@addto@macro{\newpage}{\nointerlineskip}
\makeatother
\begin{document}
\nointerlineskip
\vspace*{10pt}
\lipsum[1]
\newpage
\vspace*{10pt}
\lipsum[1]
\end{document}
然而,\nointerlineskip
如果我们在第一页需要空间,则应该添加一个,因为 LaTeX 会在顶部插入一个内容。