我不知道我说的对不对。让我们读一下代码吧:)
\setbox0=\vbox{a\par
\vskip2pt
\kern2pt
b}
\showbox0
日志文件的片段:
.\glue 2.0
.\kern 2.0
.\glue(\parskip) 0.0 plus 1.0
.\glue(\baselineskip) 5.05556
什么时候我们
\setbox1=\vbox{\unvbox0
\setbox2=\lastbox
\unskip
\unskip
\global\skip0=\lastkern
\unkern
\global\skip1=\lastskip
\unskip}
有时候,我们没有机会检查日志文件,那么,我们如何判断某些文件中的 glue 或 kern\skip<number>
是 glue 还是 kern?
答案1
这可以通过 e-TeX (包含在 中pdftex
) 来实现:
\def\unkernorunskip#1{%
\ifnum\lastnodetype=12 % kern
\global\skip#1=\lastkern\unkern
\else
\ifnum\lastnodetype=11 % skip
\global\skip#1=\lastskip\unskip
\fi
\fi}
\setbox0=\vbox{a\par
\vskip4pt
\kern2pt
b}
\setbox1=\vbox{\unvbox0
\setbox2=\lastbox
\unskip
\unskip
\unkernorunskip{1}%
\unkernorunskip{3}%
}
\showthe\skip1
\showthe\skip3
输出为
> 2.0pt.
l.24 \showthe\skip1
?
> 4.0pt.
l.25 \showthe\skip3
?
答案2
在经典 TeX 中你无法分辨。你可以检查列表中的最后一项是否不是跳过,或者它是否是大小为 0pt 的跳过,但这些将是 0pt,你无法区分这些情况\lastskip
。\lastkern
但是使用 e-tex,您可以检查整数的值\lastnodetype
,对于粘合(跳过)节点,该值为 11,对于 kern 节点,该值为 12。