![为什么 \showbox 以两种不同的方式显示字距?](https://linux22.com/image/458868/%E4%B8%BA%E4%BB%80%E4%B9%88%20%5Cshowbox%20%E4%BB%A5%E4%B8%A4%E7%A7%8D%E4%B8%8D%E5%90%8C%E7%9A%84%E6%96%B9%E5%BC%8F%E6%98%BE%E7%A4%BA%E5%AD%97%E8%B7%9D%EF%BC%9F.png)
假设我\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
答案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...@> 的值”)