为什么没有 \mudimendef 原语?

为什么没有 \mudimendef 原语?

TeXbook 在第 24 章(我的版本为第 270 页)中定义了<dimen><skip><mudimen><muskip>其中,前两个用于水平和垂直模式,后两个用于数学模式。

但是数学模式和其他模式之间的这种相似性被寄存器打破了:只有\dimendef\skipdef\muskipdef存在,而不存在\mudimendef。同样,\dimen 0\skip 0\muskip 0存在,但不存在\mudimen 0

唯一能够操纵 mudimens 的原始人似乎是\mkern。为什么<mudimens>很特别?

编辑:额外的问题。我问这个问题是因为我试图能够获取任何原语的参数。要获取<dimen>例如,可以使用\newdimen\MyDimen\afterassignment\DoSomethingWithMyDimen \MyDimen=。鉴于 TeX 没有<mudimen>参数,我不能使用相同的技巧。我也不能使用 muskip,因为它可能会错误地抓住\mkern会停止的拉伸或收缩部分。在某些情况下我可以使用寄存器,但不是全部:我如何区分像和(自动强制)这样的\count情况?\mkern 1mu\mkern \MyMuskip

答案1

嗯,答案是没有\mudimen寄存器。:) 所以不可能有命令\mudimendef。我不知道 Knuth 为什么没有提供这种寄存器;但可能是因为\mkern和 的\mskip使用并不多,所以需要为它们提供不同的寄存器。

\mkern 3mu plus我相信,在文档中找到的机会是无穷小的,但您总是可以plus在规范之后进行测试,以防万一\mkern

也没有强制转换:\mkern 3pt是非法的,就像 一样\mkern 33。在 e-TeX 中,有\mutoglue\gluetomu进行计算(与\glueexpr)或比较(与\ifdim),但它们只是将 1mu 转换为 1pt 或反之亦然。而 这样的代码\ifdim\mutoglue\mymuskip>\mydimen虽然合法,但却毫无意义。

因为\mkern您可以使用\afterassignment\DoSomethingForMKern\tempmuskip=,但正如您所观察到的,这将吞噬可能隐藏在宏中的aplus或部分,但会停止 的参数,而原始标记列表将丢失。唉,我认为真的不可能做得更多。minus\mkern

相关内容