
Betrachten Sie diesen Code:
\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}
Es \contents
soll sich dabei um eine Kapitelüberschrift handeln, die Chapter
in einer Zeile steht, der Kapiteltitel in der Zeile darunter.
Ich verwende dieses \raise\baselineskip\vtop{...}
Gerät, um den Text aus mit einem Sternchen markierten Kapiteln zu entfernen Chapter
, die Kapitelüberschriften aber weiterhin an der gleichen vertikalen Position auf der Seite zu behalten.
Alles war in Ordnung, bis ich diesen Kapitelkopf in eine Box setzen musste, bevor ich ihn auf die Ausgabeseite setzen konnte. Ich dachte, dass es funktionieren würde, das Ganze einfach in ein Feld einzuschließen, \vbox
um es später zu verwenden \box
, aber wenn das der Fall wäre, würde ich hier nicht fragen :)
Das Protokoll zeigt dies für die erste Seite:
...\glue 20.0
...\glue 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\baselineskip) 0.0
...\hbox(22.0+6.60007)x345.0
und dies zum Zweiten:
...\glue 20.0
...\glue 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\lineskip) 1.0
...\hbox(22.0+6.60007)x345.0
der einzige Unterschied besteht darin, dass TeX im ersten \baselineskip
vor dem Inhalt einfügt und im zweiten ein \lineskip
.
Warum macht es das? Und wie kann man es anders machen?
Antwort1
Sie haben ein verwendet, \vbox
sodass der Referenzpunkt auf der unteren Linie liegt, sodass die Box eine Höhe von 22pt hat. Da dies bereits mehr ist, kann Tex keinen Abstand zwischen dem Referenzpunkt des vorherigen Knotens und dem der hinzuzufügenden Box \baselineskip
gewährleisten, sodass es stattdessen einfügt. Sie könnten stattdessen ein verwenden , wodurch es einfacher wird, den richtigen Abstand am Anfang zu erhalten (und schwieriger, den richtigen Abstand danach zu erhalten).\baselineskip
\lineskip
\vtop
Hmm, ich vermute, der Hauptunterschied besteht eigentlich darin, dass es im ersten Fall \baselineskip
an der großen Schriftart liegt, sodass es gerade passt (und daher als 0 pt hinzugefügt wird), aber im zweiten Fall ist die große Schriftart innerhalb des Felds, sodass Sie einen kleinen Grundliniensprung verwenden.
du bekommst \baselineskip (0pt)
mit
{\LARGE\noindent \box \tempbox\par}