通常,TeX 命令后面会有参数。但是\over
用于生成分数的命令可以访问它前面的标记。它究竟是如何实现的?我可以定义这样的自定义命令吗?
答案1
它是一个 TeX 原语,所以你不能定义类似的命令。它也是一个麻烦,也是数学模式中许多问题的根源,因为这意味着当你第一次遇到任何数学模式标记时,你无法确定最终会以什么样式结束,因此需要它\mathchoice
和其他各种可怕的东西。如果原语有像 LaTeX 那样的正常前缀语法,\frac
那就没有必要了。
答案2
我突然想到一可以执行此操作的其他 TeX 基元:\lastbox
。它的工作原理并不完全相同;如果最后生成的确实是一个框(并且您不在“主垂直模式”或数学模式中),它只会抓取最后生成的框。不过,它有些受限,因为框一旦写入就不可变,而\over
将其部分切换为“拥挤”样式,挤压上标和下标。但重要的是要意识到, 和 都\over
不能\lastbox
访问先前的代币;一旦标记被扩展/执行,它就消失了。它们仅对列表进行操作:数学列表或垂直/水平列表。
正如 David Carlisle 所说,它的语法是一个糟糕的设计决策。对于用户可见的命令,你可以要求作者编写操作前它的操作数。对于内部命令,\lastbox
它有助于分解已经生成的内容,以便使用事后才可获得的知识来处理它们。