man2html 示例:

man2html 示例:

我想在不使用 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

其他工具:

答案2

这第一点是无耻的撕毁官方网站:

mandoc是一套工具编译mdocroffBSD 手册页的首选宏语言,以及manUNIX 手册的主要历史语言。它体积小,获得 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 年代末编写。该程序的内部结构非常古怪。然而,它的优点是它可以使用原始手册页源代码,而不是troffnroff输出。该程序已添加到 Frederico Lucifredi 的 man suite 中。

程序理解manmandoc宏的语义,并输出合理的 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 时,我发现唯一能完成合理工作的是man2htmlC 程序,以及对其输出进行后处理以“品尝季节”。

最终,我想要一个质量更高的 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< bmeansb是一个元语法变量。>> a bmeansa是一个具体语法,旁边是b没有任何中间空间的元语法,<> a b cmeans是在和文字b之间进行处理的元语法。ac

我的改进版本man2html理解实现这些标记约定的相当复杂的宏。

另外,请注意手册如何自动编号部分:这都是由 troff 代码完成的,它man2html可以理解。

答案4

由于 OpenSolaris 作为 OSS 提供,因此有一个免费的troff.

一组移植的源代码如下:

http://heirloom.sourceforge.net/doctools.html

但自 aprox 以来,Heirloom 就是一个死项目。 2007.你可能想检查一下

https://github.com/nt-roff/heirloom-doctools

一些人继续死去的传家宝项目。

man2htmltroff 一起,您可以自动创建漂亮的 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 人页。

如果您需要支持mandocFreeBSD 和类似的格式化 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.

相关内容