
ВTeXBookон говорит
Значение
\prevdepth
на момент используется\halign
в начале внутреннего вертикального списка, а окончательное значение\prevdepth
переносится в охватывающий вертикальный список после завершения выравнивания, чтобы межстрочный клей рассчитывался правильно в начале и в конце выравнивания.
В разделе 15.2TeX по теме, он говорит
В начале вертикального списка
\prevdepth
устанавливается значение-1000pt
, за исключением содержащегося в нем кода\halign
и\noalign
, где он переносится из окружающего списка.
Я могу понять предложение наTeXBook, но не смог понять предложение вTeX по теме. Может ли кто-нибудь привести примеры о \prevdepth
и \noalign
?
решение1
этот простой текстовый файл
\def\foo#1{\edef\tmp{\immediate\write20{#1: \the\prevdepth}}\tmp}
\foo{1}
g
\foo{2}
\vbox{
\foo{3}
Q
\foo{4}
}
\foo{5}
a,
\foo{6}
\halign{#\hfil\cr
\noalign{\foo{7}}
z\cr}
\foo{8}
\bye
производит
1: -1000.0pt
2: 1.94444pt
3: -1000.0pt
4: 1.94444pt
5: 1.94444pt
6: 1.94444pt
7: 1.94444pt
8: 0.0pt
показывающий, что \prevdepth
имеет магическое значение -1000pt в начале основного вертикального списка и в начале a, \vbox
но не в \noalign
.
решение2
Ваши две цитаты из двух книг решают немного разную проблему. Первая (из TeXbook) говорит, что вертикальный материал из \halign
ведет себя как "обычный" вертикальный материал внутри (может быть большего) вертикального списка. Он не ведет себя как \unvbox
материал, где пропуск строки до и после должен решаться индивидуально. Вторая (из TeX по темам) говорит, что строки из\halign
включая объекты из \noalign
материаласоединены друг с другом правым межстрочным пропуском. \noalign
С этой точки зрения материал не является индивидуальным вертикальным списком.