我想在不使用 groff 的情况下将一些 Linux 手册页转换为 HTML。我对 groff 的偏见是因为它给我带来了一些 PNG 渲染问题,这些问题似乎仅限于 Sabayon(因为这些问题似乎不会出现在我的其他发行版的 VirtualBox 虚拟机上)。我意识到这是一个错误,但解决方案似乎不会在不久的将来出现,所以我想问是否有其他方法将 Linux 手册页转换为 HTML。使用 HTML 页面http://linux.die.net/man不是一个可接受的解决方案,因为我感兴趣的一些手册页不存在(例如,emerge(1)
不存在)。
答案1
有很多替代方案,例如罗菲特,特罗夫,man2html。还有基于 Perl 的在线手册页浏览器,例如人服务器。
我最喜欢的是pandoc
,但遗憾的是它默认情况下似乎不支持 ROFF 输入(尽管如果您需要将多个转换过滤器链接在一起,您可能可以使用它。
man2html 示例:
zcat /usr/share/man/man1/dd.1.gz \
| man2html \
| sudo tee /var/www/html/dd.html
罗菲特示例:
git clone git://github.com/bagder/roffit.git
cd roffit
zcat /usr/share/man/man1/dd.1.gz \
| perl roffit \
| sudo tee /var/www/html/dd-roffit.html
其他工具:
- 特罗夫CVT做同样的事情。
- “真正的”
troff
——要尝试一下http://heirloom.sourceforge.net/doctools.html。我怀疑 schily 考虑的是 OpenSolaris 和朋友:-)。
答案2
这第一点是无耻的撕毁官方网站:
mandoc
是一套工具编译mdoc
,roff
BSD 手册页的首选宏语言,以及man
UNIX 手册的主要历史语言。它体积小,获得 ISO C、ISC 许可,而且速度相当快。该工具集的主要组件是mandoc
基于libmandoc
验证编译器的实用程序,用于格式化 UNIX 终端的输出(支持宽字符区域设置)、XHTML、HTML、PostScript 和 PDF。
mandoc
主要在 OpenBSD 上开发,既是 OpenBSD 又是 BSD.lv 项目。我们努力支持所有感兴趣的免费操作系统,特别是 FreeBSD、NetBSD、DragonFly、illumos、Minix 3 和 GNU/Linux,以及运行pkgsrc
便携式软件包构建系统的所有系统。为了支持mandoc
开发,请考虑向 OpenBSD 基金会捐款。
pacman
告诉我我本地安装的mdocml
包大小为 3.28mb,它包含以下/usr/bin
二进制文件:
/usr/bin/demandoc
/usr/bin/makewhatis
/usr/bin/mandoc
/usr/bin/mapropos
/usr/bin/mman
/usr/bin/mwhatis
有了它我可以做:
mman -Thtml mman >/tmp/html
firefox file:///tmp/html
您可以根据需要应用自己的样式表。所有的文档都是在线的,还有。正如我所认为的,所有这些mandoc
也都是经过编译的。
答案3
首先,需要指出的是,有不止一个程序称为man2html
.
其中一个实用程序man2html
是 C 程序,最初由埃因霍温理工大学的 Richard Verhoeven 在 20 世纪 90 年代末编写。该程序的内部结构非常古怪。然而,它的优点是它可以使用原始手册页源代码,而不是troff
或nroff
输出。该程序已添加到 Frederico Lucifredi 的 man suite 中。
程序理解man
和mandoc
宏的语义,并输出合理的 HTML 结构。例如,当您使用缩进段落时,如下所示:
.IP字 的定义 单词。 .RS
程序将输出一个 HTML 定义列表。
我维护着一个非常大的手册页(大部分是 1 MB 的源代码,当通过 转换为信纸大小的 PDF 时,长度接近400groff
800 页):
$ ls -l txr.1-rw-rw-r-- 1 kaz kaz 980549 1月3日11:38 txr.1-rw-rw-r-- 1 kaz kaz 2016633 4月7日16:00 txr.1
大约五年前,当我需要将其转换为 HTML 时,我发现唯一能完成合理工作的是man2html
C 程序,以及对其输出进行后处理以“品尝季节”。
最终,我想要一个质量更高的 HTML 文档,所以我开始编写troff
宏。 C 程序的局限性变得非常明显,所以我分叉了它。在我的 git 网站上,您可以找到包含 30 个 man2html 补丁的 git 仓库。这些补丁修复了许多错误,并增强了程序解释 troff 宏、条件、循环和其他结构的能力。我还添加了一个M2
寄存器,您可以通过它编写代码来检测它正在运行man2html
,并且可以有条件地以不同的方式执行某些操作(向下滚动查看示例)。此外,我还添加了一个.M2SS
命令,可让您发出自定义 HTML 标头部分。
我的大型联机帮助页是在这里举办。这是用 制作的man2html
,由我进行后处理genman.txr
程序,重新排列各部分,并在整个文档中添加超链接。它还将目录中的内部链接重写为稳定的 URL(基于散列而不是任意枚举),并通过一些 Javascript 使目录可折叠。
我使用的确切命令Makefile
:
man2html txr.1 | ./txr genman.txr - > txr-manpage.html 表 txr.1 | pdfroff-man --no-toc-> txr-manpage.pdf
有关 HTML 之间的输出如何有条件不同的示例,nroff
我们可以查看输出的一部分man
:
9.19.4 宏解构 句法: (defstruct {<名称> | (<名称> <参数>*)} <超级> <插槽说明符>*) defstruct 宏定义了一个新的结构类型和寄存器 它位于 <name> 下,它必须是可绑定符号,根据 可绑定函数。同样,每个 <slot> 的名称必须 也可以是一个可绑定的符号。
上面,请注意参数在 中的表示方式<angle>
<brackets>
。在 HTML 版本中,他们出现在斜体。
语法部分在源代码中如下所示:
.coNP 宏@defstruct .synb .mets (defstruct >> { 名称 | >> ( 名称 << arg *)} < super .mets \ \ << 槽说明符 *) .syne
这是在同一文档中定义的所有自定义宏。在 下.mets
,< b
meansb
是一个元语法变量。>> a b
meansa
是一个具体语法,旁边是b
没有任何中间空间的元语法,<> a b c
means是在和文字b
之间进行处理的元语法。a
c
我的改进版本man2html
理解实现这些标记约定的相当复杂的宏。
另外,请注意手册如何自动编号部分:这都是由 troff 代码完成的,它man2html
可以理解。
答案4
由于 OpenSolaris 作为 OSS 提供,因此有一个免费的troff
.
一组移植的源代码如下:
http://heirloom.sourceforge.net/doctools.html
但自 aprox 以来,Heirloom 就是一个死项目。 2007.你可能想检查一下
https://github.com/nt-roff/heirloom-doctools
一些人继续死去的传家宝项目。
与man2html
troff 一起,您可以自动创建漂亮的 html 手册页。
请参阅 SchilliX 手册页:
http://schillix.sourceforge.net/man/
使用 Schily Bourne Shell:
http://schillix.sourceforge.net/man/man1/bosh.1.html
我对此感到满意,并且通过正确的选项,您可以将手册页链接到同一组的其他文档。我使用例如这个命令:
soelim sh.1 | tbl | nroff -u1 -Tlp -man - | col -x | \
(sed -e 's/XXX/sh.1/g' ../conf/pre.html; \
man2html -cgiurl '../man$section$subsection/$title.$section$subsection.html' -compress -nodepage; \
cat ../conf/post.html) | \
egrep -v 'HTML|BODY'> sh.1.html
这是 schily 工具中 make 文件系统的一部分。请注意标题和其他内容所需的文件../conf/pre.html
和来自 schily makefilesystem 的文件。../conf/post.html
您可能想改变这四个您的需求。
增强版man2thml
是 schily 工具的一部分(请参见手册页底部bosh
)。
顺便说一句:一个有趣的信息:整个troff
源代码加上所有帮助程序的所有源代码,例如soelim
,,tbl
...加上man
程序源代码只是您程序所需代码的一半mandoc
,并且mandoc
只有非常有限的tbl
支持,这会破坏大多数 Solaris 人页。
如果您需要支持mandoc
FreeBSD 和类似的格式化 troff 源,我创建了一组适用于troff
.检查 SchilliX 来源:https://sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/src/cmd/troff/troff.d/tmac.d/
有问题的代码位于文件andoc
和中doc*
。
SchilliX-ON 中的程序man
源已更改为 callnroff -mandoc
而不是nroff -man
.