宏与计数器:如何在不使用(太多)计数器的情况下在 TeX 中存储和操作数字

宏与计数器:如何在不使用(太多)计数器的情况下在 TeX 中存储和操作数字

我需要存储和使用大量整数(有点“编程TeX”),但我知道 TeX 可同时使用的计数器数量有限(最多 256 个)。如何使用宏处理这些数字?我需要基本的数字运算和比较。

答案1

pdftex如今,如果您使用(或),则没有真正的限制pdflatex,因为引擎有 32768 个计数寄存器。唯一的问题是说服分配宏使用整个集合。在 LaTeX 中,这是通过加载(尽早,即在 之后立即\documentclassetex包来实现的。

如果使用小于“8000 = 32768的常量,则可以方便地将它们存储为\mathchardef

\mathchardef\myconst=12000

\myconst允许您在 TeX 期望的每个地方使用<number>(作为其语法规则的一部分)。

笔记。诸如此类的技巧

\mathchardef\myconstant=\numexpr \myconstant + 1 \relax

没有工作。这是因为 TeX 在分配期间采取了安全预防措施。当有人说

\mathchardef\myconstant=...

令牌\myconstant暂时设置为\relax,因此无法在以下情况下使用\numexpr。在这种情况下,必须使用临时存储箱:

\mathchardef\myconstant=42
...
\mathchardef\mytempconstant=\myconstant
\mathchardef\myconstant=\numexpr\mytempconstant+1\relax

然而,这样的计算效率相当低。

相关内容