6. 我可以使用哪些预处理器?

Groff 至少带有三个预处理器,tbl, eqn,以及pic(在某些系统中,它们被命名为gtbl, geqngpic。) 它们的目的是将预处理器宏及其数据转换为常规的 troff 输入。Tbl是一个表格预处理器,eqn是一个方程/数学预处理器,以及pic是一个图片预处理器。 请参考 man pages 以获取更多关于它们提供的功能的信息。 简而言之:不要编写需要任何预处理器的 man pages。 Eqn 通常会在类似打字机的设备上产生糟糕的输出,不幸的是,99% 的 man pages 都是在这种类型的设备上查看的(至少我是这样的)。 例如,XAllocColor.3x 使用了一些带有指数运算的公式。 由于类似打字机的设备的特性,指数将与底数在同一行。 N 的平方显示为 `N2'。Tbl应该避免使用,因为我见过的所有 xman 程序都会在它们上面失败。 Xman 3.1.6 使用以下命令来格式化 man pages,例如 signal(7)

gtbl /usr/man/man7/signal.7 | geqn | gtbl | groff -Tascii -man /tmp/xmana01760 2> /dev/null

这对于使用gtbl,因为gtbl输出再次被送入到gtbl。 效果是一个没有表格的 man page。 我不知道这是 bug 还是特性,即gtbl无法处理它自己的输出,或者 xman 是否可以更智能一点,不使用gtbl两次。 此外,一些系统使用grog来确定传递给 groff 的选项。 不幸的是,grog 有时会猜错,并建议groff -t但实际上tbl不应该使用。 我们基本上剩下两种表格的解决方法

  1. 手动格式化表格,并将其放在 .nf 和 .fi 行之间,使其保持未格式化。 这样你就不会有粗体和斜体,但这总比你的表格被吞噬要好。

  2. 使用任何tbl你喜欢的宏,但分发tbl输出而不是输入。 然而,对于grog来说,有一个奇怪之处,它认为任何包含以.TS开头的行tbl. Tbl输出的文件,由于某些我仍然不明白的原因,仍然包含.TS.TE。 似乎你可以简单地删除它们,结果看起来仍然可以。 YMMV,所以请用你的特定 man page 测试一下。

我还没有见过需要pic预处理的 man page。 但我不喜欢这样。 正如你在上面看到的,xman不会使用它,并且groff肯定会对输入执行奇怪的操作。