Descobri que groff usa maneiras diferentes de indicar texto em negrito para o utf8
formato de saída.
No FreeBSD 14, groff emite códigos de escape para um terminal (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
[...]
No Linux (debian Bookworm) usa backspaces e overstriking:
$ 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
Por que isso acontece e existe uma maneira de fazer o Linux groff também usar códigos ESC para o terminal? Eu li a página de manual do groff de cima para baixo, mas não consigo encontrar uma opção para alterar esse comportamento.
(Preciso pós-processar o resultado e os códigos ESC tornam isso muito mais fácil e flexível.)
EDIT : A solução (obrigado a @egmont) foi ler o manual grosseiro(1) do Debian e então forçar o comportamento do SGR com
printf ".Dd today\n.Sh NAME\n" | GROFF_SGR=y groff -mandoc -Tutf8
O Debian Bookworm configura o groff 1.22 para o antigo comportamento de substituição de backspace que você vê lá, e o documenta em sua
grotty
página de manual corrigida junto com como reverter para o\e[1m
comportamento mais recente do SGR (-like):Parece que a configuração e o patch fornecidos não estão mais presentes no pacote groff 1.23
unstable
no Ubuntu 23.04. Então é provavelmente a última versão do Debian que você vê com esse comportamento antigo, eles estão mudando para o novo método SGR, seguindo os padrões do upstream groff.Você pode abusar
script
eless
converter as sequências de backspace: