groff -mandoc는 "ESC[1m"을 생성하고 백스페이스를 사용하여 굵은 텍스트를 다시 입력합니다.

groff -mandoc는 "ESC[1m"을 생성하고 백스페이스를 사용하여 굵은 텍스트를 다시 입력합니다.

utf8나는 groff가 출력 형식의 굵은 텍스트를 표시하기 위해 다른 방법을 사용한다는 것을 발견했습니다 .

FreeBSD 14에서 groff는 [1m터미널에 대한 이스케이프 코드(ESC, )를 내보냅니다.

$ 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 덕분에) 해결책은 데비안의 grotty(1) 매뉴얼을 읽고 다음을 사용하여 SGR 동작을 강제하는 것입니다.

printf ".Dd today\n.Sh NAME\n" | GROFF_SGR=y groff -mandoc -Tutf8

답변1

Debian Bookworm은 groff 1.22를 여기에 표시된 이전 백스페이스 재정의 동작으로 구성하고 이를 최신 SGR( 유사한) 동작 grotty으로 되돌리는 방법과 함께 패치된 매뉴얼 페이지 에 문서화합니다.\e[1m

printf ".Dd today\n.Sh NAME\n" | GROFF_SGR=y groff -mandoc -Tutf8

unstable주어진 구성과 패치는 groff 1.23 패키지 와 Ubuntu 23.04에 더 이상 존재하지 않는 것 같습니다 . 따라서 이것은 아마도 이전 동작을 볼 수 있는 마지막 데비안 버전일 것입니다. 그들은 업스트림 groff의 기본값을 따라 새로운 SGR 방법으로 전환하고 있습니다.

답변2

백스페이스 시퀀스를 남용 script하거나 less변환할 수 있습니다.

script --return --quiet -c "printf '.Dd today\n.Sh NAME\n' | groff -mandoc -Tutf8 | less" /dev/null | od -c

0000200   1   m   N   A   M   E 033   [   0   m 033   [   m  \r  \n

관련 정보