虽然命令的定义和设置只需一步\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
在这种情况下只会是一个字符串。