为什么 \newlength 没有被分析为 \newcommand?

为什么 \newlength 没有被分析为 \newcommand?

虽然命令的定义和设置只需一步\newcommand,但长度需要两步:\newlength然后\setlength。因为

\newlength{\foo}{1cm}

会比

\newlength{\foo}
\setlength{\foo}{1cm}

我想知道是否有一个特殊原因导致\newlength没有被归类为\newcommand

答案1

无需分配宏名,您可以拥有任意数量的带有宏定义的 csname(最多不超过实现定义的限制)。但经典 TeX 每种类型只有 256 个寄存器(在 etex 中扩展到 32768 个),因此需要从固定池中分配长度(跳过)寄存器,并使用单独的命令来分配寄存器(仅保留下一个空闲插槽),您只需为每个寄存器执行一次此操作并设置其值,您可能经常这样做。

答案2

\newlength被定义为一个\skip,即寄存器也提供给计算(\newlength保留一个新的跳过,\setlength设置它的值),而\newcommand在这种情况下只会是一个字符串。

相关内容