
Considere este código:
\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}
Supõe- se \contents
que seja o título de um capítulo, Chapter
escrito em uma linha e o título do capítulo na linha abaixo.
Eu uso essa \raise\baselineskip\vtop{...}
engenhoca para remover o Chapter
texto dos capítulos marcados com estrela, mas ainda ter os títulos dos capítulos na mesma posição vertical da página.
Tudo estava bem até que precisei definir o cabeçalho do capítulo em uma caixa antes de colocá-lo na página de saída. Achei que simplesmente colocar tudo em um \vbox
para usar mais tarde \box
funcionaria, mas não estaria perguntando aqui se funcionasse :)
O log mostra isso para a primeira página:
...\glue 20.0
...\glue 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\baselineskip) 0.0
...\hbox(22.0+6.60007)x345.0
e isso para o segundo:
...\glue 20.0
...\glue 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\lineskip) 1.0
...\hbox(22.0+6.60007)x345.0
a única diferença é que no primeiro o TeX insere \baselineskip
antes do conteúdo e no segundo insere um \lineskip
.
Por que ele faz isso? E como fazer de outra forma?
Responder1
Você usou um \vbox
então o ponto de referência fica na linha inferior então a caixa tem altura 22pt, pois isso já é maior que o \baselineskip
tex não pode garantir \baselineskip
espaço entre o ponto de referência do nó anterior e o da caixa que está sendo adicionada então ele insere \lineskip
no lugar . Você poderia usar a \vtop
, o que torna mais fácil obter o espaço correto no início (e mais difícil obter o espaço correto depois)
Hmm, na verdade, suponho que a principal diferença aqui é que no primeiro caso \baselineskip
vem da fonte grande, então ela apenas cabe (portanto, é adicionada como 0pt), mas no segundo caso a fonte grande está dentro da caixa, então você está usando um pequeno salto de linha de base .
você fica \baselineskip (0pt)
com
{\LARGE\noindent \box \tempbox\par}