我发现 groff 使用不同的方式来指示utf8
输出格式的粗体文本。
在 FreeBSD 14 上,groff 为终端发出转义码 (ESC, [1m
):
$ printf ".Dd today\n.Sh NAME\n" | groff -mandoc -Tutf8 | od -c
0000000 \n 033 [ 1 m N A M E 033 [ 0 m \n
[...]
在 Linux (debian Bookworm) 上使用退格键和加粗键:
$ printf ".Dd today\n.Sh NAME\n" | groff -mandoc -Tutf8 | od -c
[...]
0000120 N \b N A \b A M \b M E \b E \n
为什么会这样?有没有办法让 Linux groff 也对终端使用 ESC 代码?我已从上到下阅读了 groff 手册页,但找不到更改此行为的选项。
(我需要对结果进行后处理,ESC 代码使这变得更加容易和灵活。)
编辑:解决方案(感谢@egmont)是阅读 Debian 的 grotty(1) 手册,然后使用以下命令强制 SGR 行为
printf ".Dd today\n.Sh NAME\n" | GROFF_SGR=y groff -mandoc -Tutf8
Debian Bookworm 将 groff 1.22 配置为您在此处看到的旧退格覆盖行为,并将其记录在其修补的
grotty
手册页中以及如何恢复到较新的 SGR(\e[1m
类似)行为:似乎给定的配置和补丁不再存在于 的 groff 1.23 包中
unstable
,以及 Ubuntu 23.04 中。所以这可能是您看到的具有这种旧行为的最后一个 Debian 版本,他们正在切换到新的 SGR 方法,遵循上游 groff 的默认设置。您可以滥用
script
和less
来转换退格序列: