页面顶部 \vspace* 前多余的空格

页面顶部 \vspace* 前多余的空格

当我用 开始一个页面时\vspace*,除了我在 中指定的内容之外,还有一个额外的空间vspace

在此示例中,如果没有注释,\vspace第一行的顶部将从页面顶部 1 英寸处开始,这与预期一致。\vspace但是,当我取消注释该行时,第一行将从顶部约 2 1/8 英寸处开始,而不是我预期的 2 英寸。

\documentclass{article}
\usepackage[margin=1in]{geometry}
\begin{document}
%\vspace*{1in}
First line
\end{document}

那么,如何才能以指定的精确数量的空白空间开始一页呢?

具有严格大学要求的论文标题页就是需要这样做的一个例子。

答案1

TeX 会尝试对齐页面第一行的基线。页面上第一个元素的基线会保持一定距离,\topskip除非该元素较大。

不包含示例\vspace*

\documentclass{article}
\usepackage[margin=1in]{geometry}

\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen
\tracingonline=1
\typeout{\noexpand\topskip = \the\topskip}
\typeout{\noexpand\baselineskip = \the\baselineskip}

\begin{document}
% \vspace*{1in}
First line

\showlists
\end{document}

日志输出:

\topskip = 10.0pt
\baselineskip = 12.0pt
[...]
### vertical mode entered at line 0
### current page:
\write-{}
\glue(\topskip) 3.05556
\hbox(6.94444+0.0)x469.75502, glue set 414.8105fil
.\hbox(0.0+0.0)x15.0
.\OT1/cmr/m/n/10 F
.\OT1/cmr/m/n/10 i
.\OT1/cmr/m/n/10 r
.\OT1/cmr/m/n/10 s
.\OT1/cmr/m/n/10 t
[...]

第一行的高度为 6.94444 pt,\topskip值为 10 pt,因此 TeX 在页面顶部插入额外的 3.05556 pt,以将基线移动到完整的 10 pt。

现在举个例子\vspace*

### vertical mode entered at line 0
### current page:
\write-{}
\glue(\topskip) 10.0
\rule(0.0+0.0)x*
\penalty 10000
\glue 72.26999
\glue 0.0
\glue(\parskip) 0.0 plus 1.0
\glue(\baselineskip) 5.05556
\hbox(6.94444+0.0)x469.75502, glue set 414.8105fil
.\hbox(0.0+0.0)x15.0
.\OT1/cmr/m/n/10 F
.\OT1/cmr/m/n/10 i
.\OT1/cmr/m/n/10 r
.\OT1/cmr/m/n/10 s
.\OT1/cmr/m/n/10 t

TeX 会移除页面开头的粘连。星形格式\vspace*通过以不可见的规则开头来防止这种情况,其高度和深度为零 pt。该规则也是顶部元素,TeX 插入完整元素\topskip以将规则的基线移动到与上一个示例中的行相同的高度。然后从参数中得出 72 pt 的粘连量\vspace*{1in}。新段落以插入\parskip(此处为 0 pt)开始,第一行根据设置为\baselineskip获得等距垂直间距的行。数量为 12 pt,行高为 6.94444 pt,并添加剩余的 5.05556 pt。

第一种情况:\topskip - ht(第一行)=3.05556 点

第二种情况:
  全\topskip= 10 pt
  \vspace= 1 in = 72.26999 pt
  \parskip= 0 pt
  \baselineskip- ht(第一行)= 5.05556 pt
总计 =1 英寸 + 15.05556 点

因此,可以通过删除不需要的空格来修复间距:

\vspace*{1in}
\vspace{-\parskip}
\vspace{-\baselineskip}
% next element smaller than \topskip and \baselineskip
  • 如果文本行的高度不高于\baselineskip\topskip(例如,通常是正常文本行)或
  • 如果\baselineskip与的数量相同\topskip(后者通常较小,因此不太可能发生)。

否则,需要知道或测量以下元素的高度,以便计算和比较要添加的哪些\baselineskip部分。topskip

如果第一个元素的高度是更大\baselineskip和都大\topskip,误差将是它们之间的差值。然后可以通过以下方法获得正确的空间

\vspace*{1in}
\vspace{-\parskip}
\vspace{-\topskip}
% next element larger than \baselineskip and \topskip

如果不清楚将\vspace*去往何处,那么如果空间设置在页面中间,则以下方法也可以工作:

\vspace{\parskip}
\vspace{\baselineskip}
\vspace*{1in}
\vspace{-\parskip}
\vspace{-\baselineskip}

前两个\vspace将被丢弃在新页面的顶部。

相关内容