1

我正在使用manwithman2html来自动生成一些 html 文档,类似于man manpage | man2html. 这工作得很好,除非我在 Travis CI 上运行它,man它没有生成正确的转义序列来使标题和选项加粗。有没有办法强制man生成这些代码?

我还查看了 using groffer --mode=ttyinstead of man,它适用于我的 Mac,但在 Linux(即 Travis CI)上,它不是生成man2html可以读取的二进制 ANSI 代码,而是生成纯文本代码,例如[1m.

4

2 回答 2

4

有一些缺失的信息,但我会尝试填写:

  • 有多个名为man2html. 我相信您指的是我也使用的 Perl 脚本。(我做了一些改进,您可以在我的脚本页面上找到这些改进,但这并没有改变问题)。
  • 相比之下,还有另一个程序(参见手册页),它希望格式化手册页本身 - 与 Perl 脚本不同。
  • 不久前,其中一位开发人员groff添加了一个(错误)功能,将默认行为更改nroff为产品颜色的转义序列。对于彩色或粗体文本,它们类似于^[[34mor 。^[[1m
  • 除此之外,其他人nroff制作的不是转义序列` 而是backspace-sequences,使用重划线来模拟下划线或粗体文本(例如_^HXX^HX)。
  • 不是每个人都喜欢这个groff功能(例如参见这个邮件列表评论)。
  • groff可以通过设置环境变量来覆盖该功能GROFF_NO_SGR,如grotty.

除了转义序列退格序列的问题之外,如果您使用编码为 UTF-8 的语言环境,groff可能会生成 UTF-8。有几个地方很明显:

  • 断字
  • 特殊字符,例如 ©(版权)

man2html脚本对 UTF-8 等多字节编码一无所知,并且会做出意想不到的事情。作为一种解决方法,通过设置以下环境变量,将语言环境设置覆盖为 POSIX 可以解决问题:

LANG=C
LC_ALL=C
LC_CTYPE=C
LANGUAGE=C
于 2015-04-21T23:41:50.277 回答
0

我在我的代码中使用这个环境变量,为非交互式 shell 生成来自 man 的过度输入代码:

export MAN_KEEP_FORMATTING=1

答案就在这里How to run man with formatting in non-interactive shell?

于 2017-05-17T07:28:42.643 回答