什么是 align_state?

什么是 align_state?

这是 TeX 的第 309 节:

\halign输入例程还必须与和 的处理进行交互\valign,因为在某些地方出现制表符 和\cr应该会触发扫描仪中特殊〈vj〉模板文本的开始。这个魔法是由一个align_state变量实现的,当扫描到 ' ' 时,该变量增加 1 ,当扫描到{' ' 时,该变量减少 1。在 〈uj〉模板期间 为非零,之后将其设置为零;当制表符 或出现在= 0时, 〈vj〉模板开始。}align_state\cralign_state

〈全局变量 13〉+≡
align_state: integer; {group level with respect to current alignment}

事实上,在第 342 条中我们看到

if cur cmd ≤ car ret then
  if cur cmd ≥ tab mark then
    if align state = 0 then 〈Insert the〈vj〉template and goto restart 789〉

而其他部分align_state则按规定递增和递减。

但是 的一些用法align_state对我来说不是很清楚。它在几个地方被设置为 1000000(§88、§331、§482、§483、§486、§785、§789、§791)。它在 §339、§774 和 §777 中被设置为 −1000000。它在 §324 和 §778 中被设置为 0。因此,它似乎align_state比当前组级别略高。

究竟是多少align_state?将其设置为±1000000有什么意义?

答案1

重点是非零部分:每当 TeX 遇到制表符或\cralign_state为零时,TeX 就会执行代码以插入 vj 模板。

当然,这个可能更明显的用途是确保括号是平衡的,但除此之外,它还用于确保您确实处于对齐中:每当 TeX 超出对齐范围时,align_state都会设置为 1000000(加上括号平衡)。这确保 TeX 不会尝试插入不存在的 vj 模板(如果您\cr在对齐之外使用或制表符)。这里的 1000000 没有任何实际意义,除了足够大,可以让对齐中具有大量不匹配括号的文档轻松达到。

类似地,-1000000(+ 括号平衡) 用作标记,表示您正在阅读对齐前言(同样,制表符和 \cr 不应插入 vj 模板,而应具有自定义含义)。

相关内容