troff 的 mdoc 宏集和用于制作新联机帮助页的 plain man 宏集有什么区别

troff 的 mdoc 宏集和用于制作新联机帮助页的 plain man 宏集有什么区别

我正在尝试为一个副项目创建手册页,而且我以前从未使用过 troff,我正在尝试弄清楚 man 宏集和 mdoc 宏集之间到底有什么区别,以及哪个在 POSIX OS 之间更可移植es 和 troff 的各种实现。

我注意到 mdoc 和 plain man 共享一些宏,并且 BSD(至少 FreeBSD)使用 mdoc 手册格式,而 GNU 使用 plain man 格式。

所以我的问题基本上是:

mdoc 是 man 宏的超集吗?这是否意味着使用普通人的遗产? mdoc 的 groff 联机帮助页指出,普通 man 宏是 mdoc 的前身,但没有说明 mdoc 是否取代 man。

BSD 与 SYSV 和/或 GNU 之间的区别是什么?

除了 groff(如传家宝 troff)之外,哪个在 POSIX 系统和 troff 的各种实现中更可移植?

答案1

man宏集和宏集到底有什么区别mdoc

man是最小化和简单化的,只有简单的命令来定义章节标题、段落和副标题。该软件包包括一些基本的格式化命令,例如.B.BI、 ,仅此而已。

mdoc另一方面,它是一个功能齐全的 DSL,它具有用于常见联机帮助页元素的专用标记命令,例如开关、选项和参数列表、函数类型和返回值、标志、命令概要以及几乎所有您期望的内容具有的联机帮助页标记语言。看mdoc(7)以获得完整的参考。

是宏mdoc的超集man吗?

不,mdocman是完全不相关的软件包,仅具有共同的祖先和标记计算机手册页的相同目标。

我注意到两者mdoc和 plainman共享一些宏

他们不分享任何东西。您所看到的可能是本机 Roff 命令,它是编写mdoc和宏的底层排版语言。这些命令往往在使用 的文档中大量使用,但在使用 的文档中则较少使用。manmanmdoc

您可以通过标准 Roff 包将宏名称大写的方式轻松区分本机 Roff 命令和宏。对于man,每个宏的名称都是大写的,如.PP.TH.SH等。对于mdoc,只有第一个字母是大写的:.Pp.Dt.Sh等。

Groff 的联机帮助页mdoc指出,普通man宏是 的前身,mdoc但没有说明是否mdoc取代man

groff_mdoc(7)
使用以下命令编写 UNIX 手册页的完整参考-mdoc宏包; A内容基于和领域基于 GNU troff(1) 的格式化包。它的前身是-男人(7) 打包、处理页面布局,将字体和其他排版细节的操作留给个人作者。

我不认为这里的“前任”的意思只是“以前使用过的类似东西”。 :-)

troff哪个比 Groff更能跨 POSIX 系统和各种实现(如 Heirloom Troff)移植?

这些mdoc宏长期以来一直得到良好的支持,首次在 4.4BSD 中首次亮相,并默认随每个 Groff 安装一起提供。除非您正在为 70 年代中期的古董终端准备文件,否则这两个软件包都可以被认为是同样便携的。 :)

BSD 与 SYSV 和/或 GNU 之间的区别是什么?

你走在正确的轨道上。现代 BSD 系统使用一个名为格式化和显示联机帮助页的程序mandoc,这是使用本机编译的 C 语言的干净重新实现mdoc。它仅支持 Roff 语言的一个子集 — 足以使旧版联机帮助页正确显示。

Mandoc 不像 Groff 和 Heirloom 那样是真正的排版程序。它的重点特别是计算机手册:并且只有使用其编写的文档mdoc才能保证在 BSD 派生平台上一致且正确地呈现。更详细的批评man可以在man(7)

这是否可以使用简单的man遗产?

有点儿。除非您是一位经验丰富的手册页作者,对 Roff 语法和管道机制有深入的了解,否则您实际上不应该使用除mdoc编写手册页之外的任何内容。经验丰富的troff用户可能会发现mdoc不必要的冗长或限制性,发现man更轻松且更少干扰。然而,这些作者经验丰富,非常清楚他们在做什么——所以除非你是一位头发花白的退伍军人,否则就坚持使用mdoc

更多信息

如果您有兴趣了解更多有关 Roff 历史的信息,而这个答案不是FMEYEWTK这里已经有一些权威学习材料的链接:

相关内容