为什么负 \vspace 跳过的空间比 LaTeX 中指定的要少

为什么负 \vspace 跳过的空间比 LaTeX 中指定的要少

我有这样的代码:

\documentclass{article}

\usepackage[a4paper,left=0pt, right=0pt, top=50pt, bottom=0pt]{geometry}
\usepackage{show frame}

\begin{document}
\vspace*{-50pt}
Hello!
\end{document}

我跳过了等于顶部边距的空格量。因此,我希望文本出现在页面顶部,没有任何边距。但是,\vspace跳过的空间似乎比预期的要少。事实上,如果我写入,\vspace*{-5pt}它会将文本移到相反的方向。为什么会发生这种情况以及如何精确指定跳过/添加的空间?我确实需要页面顶部的这个 50pt 边距,但有时我需要一些内容突出到某些页面的边距中。并且我需要能够准确指定间距。

答案1

添加\showoutput

没有空间

...\glue(\topskip) 3.05556
...\hbox(6.94444+0.0)x597.50787, glue set 557.23004fil
....\hbox(0.0+0.0)x15.0
....\OT1/cmr/m/n/10 H
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 l
....\OT1/cmr/m/n/10 l
....\OT1/cmr/m/n/10 o
....\OT1/cmr/m/n/10 !

因此\topskip设置为使第一行的基线距顶部 10pt,因此添加了 3pt,其余部分来自 H 的高度。

\vspace*{-5pt}你一起得到

...\glue(\topskip) 10.0
...\rule(0.0+0.0)x*
...\penalty 10000
...\glue -5.0
...\glue 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\parskip) 0.0
...\hbox(6.94444+0.0)x597.50787, glue set 557.23004fil
....\hbox(0.0+0.0)x15.0
....\OT1/cmr/m/n/10 H
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 l
....\OT1/cmr/m/n/10 l
....\OT1/cmr/m/n/10 o
....\OT1/cmr/m/n/10 !

由于第一项不是文本,因此您将获得完整的 10pt,\topskip然后是 -5pt,因此总共 5pt。因此,正如您所说,负空间导致文本上方的空间更大。


简而言之,\vspace*{xxx}会将内容从使用 时的位置移动 xxx 距离\vspace*{0pt}。使用 时,其位置\vspace*(对于合理大小的第一行)与使用 时的位置相同\vspace{-height of first line of text}

相关内容