为什么 \showbox 以两种不同的方式显示字距?

为什么 \showbox 以两种不同的方式显示字距?

假设我\showbox有 TeX 徽标和单词“我们”,因此:

\setbox0=\hbox{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125em X We}\showbox0

结果中,有两种不同的字距表示形式:

    \box0=
    \hbox(6.83331+2.15277)x35.83302
    .\tenrm T
    .\kern -1.66702
    .\hbox(6.83331+0.0)x6.80557, shifted 2.15277
    ..\tenrm E
    .\kern -1.25
    .\tenrm X
    .\glue 3.33333 plus 1.66498 minus 1.11221
    .\tenrm W
    .\kern-0.83334
    .\tenrm e

\kern显式字距在和 宽度之间留有空格,而 cmr10 中 W 和 e 之间的自然字距则没有。为什么会有这种差异?

这不是很重要,但它让我很烦。

答案1

TeX 程序解释如下:

“明确的” kern 值由明确的空间隐式表示。

\kern宏中的 s是\TeX显式的,因为它们出现在宏定义中:T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX。但W 和 e 之间的 是隐式的,它由中的命令\kern-0.83334暗示ligtable字体定义

ligtable "F": "V": "W": if serifs: "o" kern kk#, "e" kern kk#, "u" kern kk#,
...

答案2

原因正如您在问题中所展示的那样,是为了区分隐式和显式的字距。

如果您发现空格有点“微妙”地表明了这种区别,那么您并不孤单,luatex 从不使用空格并(font)为字体添加隐式字距:

> \box0=
\hbox(6.83331+2.15277)x35.83302, direction TLT
.\tenrm T
.\kern-1.66702
.\hbox(6.83331+0.0)x6.80557, shifted 2.15277, direction TLT
..\tenrm E
.\kern-1.25
.\tenrm X
.\glue(\spaceskip) 3.33333 plus 1.66498 minus 1.11221
.\tenrm W
.\kern-0.83334 (font)
.\tenrm e

答案3

关于 TeX 中的“kern_node”子类型的另外一点说明:

TeX 的内部 kern 节点可以有 3 种子类型:normal (0)、explicit (1) 和 acc_kern (2)。

重音字距仅用于重音例程,使用 \accent 基元调整重音字符,将其置于重音符号的中间位置,以进行倾斜/斜体校正。在 \showbox 输出中,acc_kern 标有额外的“(表示重音)”。

TeX 在某些情况下需要区分隐式和显式的字距,例如将段落分成几行时

除非|明确|,否则 Kern 节点不会在换行符处消失。

(参见 TeX.web,章节“@* [38] 将段落分成行。”,代码部分“@<计算 |break...@> 的值”)

相关内容