我有这样的代码:
\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}