例子1. 定义广义乘法.
分析中, Hamilton发明了所谓的Sharp算子, 即用来表示乘积, 其系数是有界的。 例如A# B表示A与B和某个有界函数的乘积. 那么问题是, 如何在TeX中定义一个命令使得很方便写这种乘积呢?
这就是本文的重点:递归调用命令。
用法如下
解释下, 上面我们定义了一个\multi
命令, 它只接收一个参数, 效果是:首先原样输出接收的参数, 然后用\checknextchar
检查后面还有没有参数. 而\checknextchar
中, 我们使用了内置的(这也是为啥我们定义的命令要放到 \makeatletter
与 \makeatother
之间)字符匹配函数\@ifnextchar
, 而\bgroup
就是表示的{
字符, 如果第一个参数后面是{
字符, 则输出\#\multi
;注意这里递归调用了\multi
命令, 即不断的做上述操作, 直到后一个字符不是{
, 这时我们啥也不做。
如果利用xparse包的话, 则上述命令可以如下实现:
例子2. 递归李括号.
仿照上述例子, 试试如何产生
[A,[B,[C,D]]]]
其实我也不知道, 答案见How to make a recursive Latex macro with comma separated argument list。
发表回复