Как получить \baselineskip вместо \lineskip при использовании сохранённого ящика?

Как получить \baselineskip вместо \lineskip при использовании сохранённого ящика?

Рассмотрим этот код:

\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текст из отмеченных звездочкой глав, но при этом оставить названия глав в том же вертикальном положении на странице.

Все было хорошо, пока мне не понадобилось поместить этот заголовок главы в рамку перед тем, как поместить его на страницу вывода. Я думал, что простое включение всего этого в \vboxto use later with \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

Вы использовали \vbox, поэтому опорная точка находится на нижней линии, поэтому высота блока составляет 22pt, так как это уже больше, чем \baselineskiptex не может гарантировать \baselineskipпространство между опорной точкой предыдущего узла и опорной точкой добавляемого блока, поэтому он вставляет \lineskipвместо этого. Вы могли бы использовать \vtopвместо этого , что упрощает получение правильного пространства в начале (и усложняет получение правильного пространства после)

Хм, на самом деле, я полагаю, что главное отличие здесь в том, что в первом случае \baselineskipиспользуется крупный шрифт, поэтому он просто помещается (следовательно, добавляется как 0pt), но во втором случае крупный шрифт находится внутри рамки, поэтому вы используете небольшой пропуск базовой линии.

вы получаете \baselineskip (0pt) с

{\LARGE\noindent \box \tempbox\par}

Связанный контент