考虑以下代码:
\documentclass{article}
\begin{document}
\pagestyle{empty}
\def\contents{%
\parindent = 0pt
\LARGE
\strut
\raise\baselineskip
\vtop
{%
{\Large\smash{Chapter}\par}%
title\par
}%
\par
}
\newbox\tempbox
\loggingoutput
\vspace*{20pt}%
\begingroup
\contents
\endgroup
\clearpage
\vspace*{20pt}%
\setbox\tempbox\vbox
\bgroup
\contents
\egroup
\noindent \box \tempbox
\end{document}
它们\contents
应该是章节标题,Chapter
写在一行中,章节标题写在下面一行中。
我使用这个\raise\baselineskip\vtop{...}
装置可以删除Chapter
带星号的章节中的文本,但章节标题仍然保留在页面的相同垂直位置。
一切都很好,直到我需要将这个章节标题放在一个框中,然后才能将其放在输出页面上。我以为只需将整个内容放在一个框中以便\vbox
稍后使用\box
就可以了,但如果可以的话,我就不会在这里问了 :)
日志显示第一页的情况:
...\glue 20.0
...\glue 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\baselineskip) 0.0
...\hbox(22.0+6.60007)x345.0
这是第二个:
...\glue 20.0
...\glue 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\lineskip) 1.0
...\hbox(22.0+6.60007)x345.0
唯一的区别是,在第一个中 TeX\baselineskip
在内容前插入,而在第二个中它插入一个\lineskip
。
为什么会这样?又该如何做呢?
答案1
您使用了 a \vbox
,因此参考点位于底线,因此框的高度为 22pt,因为这已经超过了\baselineskip
tex,因此无法确保\baselineskip
前一个节点的参考点与要添加的框的参考点之间的空间,因此改为插入\lineskip
。您可以改用 a \vtop
,这样可以更容易地在开始时获得正确的空间(而之后更难获得正确的空间)
嗯,实际上,我想这里的主要区别在于,第一种情况\baselineskip
是来自大字体,所以它刚好适合(因此添加为 0pt),但在第二种情况下,大字体在框内,所以你使用的是小的基线跳跃。
你\baselineskip (0pt)
得到
{\LARGE\noindent \box \tempbox\par}