Como obter \baselineskip em vez de \lineskip ao usar uma caixa armazenada?

Como obter \baselineskip em vez de \lineskip ao usar uma caixa armazenada?

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 \contentsque seja o título de um capítulo, Chapterescrito em uma linha e o título do capítulo na linha abaixo.

Eu uso essa \raise\baselineskip\vtop{...}engenhoca para remover o Chaptertexto 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 \vboxpara usar mais tarde \boxfuncionaria, 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 \baselineskipantes do conteúdo e no segundo insere um \lineskip.

Por que ele faz isso? E como fazer de outra forma?

Responder1

Você usou um \vboxentão o ponto de referência fica na linha inferior então a caixa tem altura 22pt, pois isso já é maior que o \baselineskiptex não pode garantir \baselineskipespaço entre o ponto de referência do nó anterior e o da caixa que está sendo adicionada então ele insere \lineskipno 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 \baselineskipvem 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}

informação relacionada