为什么放置 vspace*{0 mm} 会产生垂直间距?

为什么放置 vspace*{0 mm} 会产生垂直间距?

我正在测试发票的新布局。我试图在发票标题前放置一些小的垂直间距。在测试垂直间距时,我发现了一个奇怪的行为,并将其减小到 0 只是为了看看会发生什么:

\begin{document}

\vspace*{0 mm}

{\LARGE\center <<title>>\\}

\vspace{10 mm}

...

这会产生与以下布局不同的布局:

\begin{document}

{\LARGE\center <<title>>\\}

\vspace{10 mm}

...

在第一种情况下,存在相当大的垂直空间(即使我将 i 设置为 0 毫米),而在第二种情况下则没有。为什么?

答案1

以下示例使用\centering而不是环境center,请参阅问题“我们什么时候应该使用 \begin{center} 而不是 \centering?”了解详情。

\showlists可以用来分析间距:

% configuring, how much is shown by `\showlists` or `\showbox`
\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen

\documentclass{article}

\begin{document}

  \vspace*{0mm}

  {\LARGE\centering Title}

  \showlists
\end{document}

结果:

### vertical mode entered at line 0
### current page:
\write-{}
\glue(\topskip) 10.0
\rule(0.0+0.0)x*
\penalty 10000
\glue 0.0
\glue 0.0
\glue(\parskip) 0.0 plus 1.0
\glue(\baselineskip) 0.0
\hbox(12.0+0.0)x345.0, glue set 311.69482fil
.\hbox(0.0+0.0)x0.0
.\OT1/cmr/m/n/17.28 T
.\OT1/cmr/m/n/17.28 i
.\OT1/cmr/m/n/17.28 t
.\OT1/cmr/m/n/17.28 l
.\OT1/cmr/m/n/17.28 e
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
total height 22.0 plus 1.0
 goal height 550.0
prevdepth 0.0, prevgraf 1 line

因此,页面在标题前包含额外的空白元素:

  • \topskip,这是一个帮助对齐页面首行的参数。它只会自动添加到页面顶部。但是,在此页面上,没有要对齐的“首行”。因此可以将其设置为零。

  • \parskip0pt plus 1pt但可能会有所不同。

  • \baselineskip,这里0pt,因为下一行超过了大(\LARGE)。

以下示例避免了这些空格:

\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen

\documentclass{article}

\begin{document}

  \begingroup
    \setlength{\topskip}{0mm}% \topskip is set to zero
    \vspace*{0mm}%
    \setlength{\parskip}{0pt}% \parskip is set to zero
    \nointerlineskip % avoids addition of \baselineskip before next line
    \centering
    \LARGE
    Title
    \par
  \endgroup

  \showlists

\end{document}

结果:

### vertical mode entered at line 0
### current page:
\write-{}
\glue(\topskip) 0.0
\rule(0.0+0.0)x*
\penalty 10000
\glue 0.0
\glue 0.0
\glue(\parskip) 0.0
\hbox(12.0+0.0)x345.0, glue set 155.84741fil
.\glue(\leftskip) 0.0 plus 1.0fil
.\hbox(0.0+0.0)x0.0
.\OT1/cmr/m/n/17.28 T
.\OT1/cmr/m/n/17.28 i
.\OT1/cmr/m/n/17.28 t
.\OT1/cmr/m/n/17.28 l
.\OT1/cmr/m/n/17.28 e
.\penalty 10000
.\glue(\parfillskip) 0.0
.\glue(\rightskip) 0.0 plus 1.0fil
total height 12.0
 goal height 550.0
prevdepth 0.0, prevgraf 1 line

这样标题就出现在了文本区域的顶部。可以通过showframe封装几何选项来可视化:

\documentclass[a5paper]{article}
\usepackage[
  showframe,
  % smaller image for answer in TeX.SX
  paperwidth=5cm,
  paperheight=5cm,
  margin=5mm,
  includeheadfoot,
]{geometry}

\begin{document}

  \begingroup
    \setlength{\topskip}{0mm}%
    \vspace*{0mm}%
    \nointerlineskip
    \setlength{\parskip}{0pt}%
    \centering
    \LARGE
    Title
    \par
  \endgroup

\end{document}

结果

相关内容