为什么`\the\le`会排版`12820`?

为什么`\the\le`会排版`12820`?

TeX 基元参考说原始人\the可以

  • 排版参数值(整数、dimen、glue 或 muglue)或内部数量(\font 除外)
  • 为 token 参数生成 token 列表的副本

\the\le排版12820\the\ge排版12821

这是否意味着\le是一个参数值或内部量,或者这种行为是否与的数学模式定义\le有关\mathchar"3214

答案1

你应该看一下⟨内部数量⟩的定义,你会发现它是练习 24.7(第 336 页)的答案

⟨内部数量⟩ → ⟨内部整数⟩ | ⟨内部尺寸⟩
      | ⟨内部胶水⟩ | ⟨内部 muglue⟩ | ⟨内部非数字⟩

现在我们来找到⟨内部整数⟩的定义,它在第 271 页:

⟨内部整数⟩ → ⟨整数参数⟩ | ⟨特殊整数⟩ | \lastpenalty
      | ⟨countdef 标记⟩ | \count⟨8 位数⟩ | ⟨codename⟩⟨8 位数⟩
      | ⟨chardef 标记⟩ | ⟨mathchardef 标记⟩ | \parshape| \inputlineno
      | \hyphenchar⟨font⟩ | \skewchar⟨font⟩ |\badness

最后,\le是一个⟨mathchardef token⟩:plain.tex我们发现

\mathchardef\leq="3214 \let\le=\leq

并在中找到等效定义fontmath.ltx,即

\DeclareMathSymbol{\leq}{\mathrel}{symbols}{"14}

在 TeX 开发的某个阶段,Knuth 意识到\chardef\mathchardef标记可以用作整数常量,这样就不会浪费宝贵的计数器寄存器,因此添加了在语法需要整数时使用此类标记的能力。

例如,常数 10000 存储在 中plain.tex\@M其定义为

\mathchardef\@M=10000

每次\penalty\@M在定义中都会节省四个或五个标记。

相关内容