当我们编写宏时,如何确定粘合或紧排?

当我们编写宏时,如何确定粘合或紧排?

我不知道我说的对不对。让我们读一下代码吧:)

\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。

相关内容