You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在groff中将宏参数赋值给数字寄存器?

troff数字寄存器在宏中无法正常取值的问题

问题现象

直接使用数字寄存器时运行正常:

.nr weeks 12
.tm start is \n[weeks] weeks away.

控制台会输出预期的start is 12 weeks away.。

但将逻辑移入自定义宏后,结果不符合预期:

.de set_weeks
.  nr weeks \\$1
.  tm start is \n[weeks] weeks away.
..

调用宏时:

.br
.set_weeks 6
.br

控制台输出start is 0 weeks away.,而非预期的start is 6 weeks away.。

问题原因

troff在定义宏时会提前解析宏体内的转义序列。当你在宏里写\n[weeks]时,宏定义阶段weeks寄存器还未被当前宏的.nr命令赋值(此时寄存器值为默认的0),所以这个转义序列会被直接替换成0,而不是等到宏调用执行时再去读取寄存器的最新值。

解决方案

需要延迟转义序列的解析时机,让\n[weeks]在宏调用执行时才被解析。只需在宏定义里给\再加一层转义,写成\\n[weeks]:

.de set_weeks
.  nr weeks \\$1
.  tm start is \\n[weeks] weeks away.
..

再次调用.set_weeks 6,控制台就会输出正确的start is 6 weeks away.。

内容的提问来源于stack exchange,提问作者DaveParillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:09:50