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

如何让nroff/troff宏对多行参数全部应用加粗格式?

修复troff多行参数宏的问题

问题根源在于troff会把宏参数中的换行符当作参数分隔符:你用\*[t1]传入的多行内容被拆成了多个参数,而原宏MMM只处理第一个参数$1(也就是aaa),剩下的bbb等内容会在宏执行完.ft R之后才输出,因此没被加粗。

以下是几个可行的修复方案:

方案1:让宏直接处理diversion(最可靠)

修改宏定义,让它直接输出指定diversion的内容,彻底避免参数传递带来的拆分问题:

.\" Start a diversion to capture text
.di t1

aaa


bbb


.di

.\" 定义宏:直接输出指定diversion的内容并加粗
.de MMM
.ft B
.di \$1  \" 输出目标diversion的内容
.di       \" 关闭diversion输出模式
.ft R
..

.\" 调用宏,传入diversion名称即可
.MMM t1

方案2:修改宏处理所有参数

如果坚持要用参数传递的方式,把宏改成处理全部传入参数($@代表所有参数),这样即使内容被拆分成多个参数,也能全部包裹在加粗字体范围内:

.\" Start a diversion to capture text
.di t1

aaa


bbb


.di

.\" 修改宏,处理所有传入参数
.de MMM
.ft B
$@
.ft R
..

.asciify t1
.MMM \*[t1]

方案3:用引号包裹参数(部分troff版本支持)

部分troff版本允许用双引号将多行内容括起来,强制作为单个参数传递,此时原宏定义无需修改:

.asciify t1
.MMM "\*[t1]"

其中方案1的兼容性和效果最好,能完美保留原内容的换行、空行格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:03:21