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

Zen*_*lea 5 man groff

我正在尝试为一个辅助项目创建手册页,我以前从未使用过 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 的各种实现中更具可移植性?

小智 7

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

man是最小和简单的,只有简单的命令来定义节标题、段落和副标题。该软件包包括像一些基本的格式化命令.B.BI和没有多少人。

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

是宏mdoc的超集man吗?

不,mdoc并且man是完全不相关的包,只共享一个共同的祖先和标记计算机手册页的相同目标。

我注意到的是,两者mdoc和普通man共享一些宏

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

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

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

groff_mdoc(7)
使用-mdoc宏包编写 UNIX 手册页的完整参考;一个内容为基础的和为基础的用于GNU的troff(1)格式化包。它的前身-man (7) 包解决了页面布局问题,将字体和其他排版细节的操作留给了个人作者。

我不认为这里的“前身”除了“以前使用过的类似的东西”之外的意思。:-)

哪个在 POSIX 系统和troffGroff 以外的各种实现(如 Heirloom Troff)中更具可移植性?

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

某些 BSD 与 SYSV 和/或 GNU 的区别是什么?

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

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

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

的种类。除非您是一位对 Roff 语法和管道机制有透彻理解的有经验的联机帮助页作者,否则您真的不应该使用除mdoc编写手册页以外的任何其他内容。经验丰富的troff用户可能会发现mdoc不必要的冗长或限制,发现man更轻松和更少侵入性。然而,这些作者有足够的经验,知道他们在做什么吗?所以除非你是一个头发花白的老手,否则坚持使用mdoc.

更多信息

如果你有兴趣了解更多关于 Roff 的历史,并且这个答案已经不是FMTEYEWTK,这里有一些权威学习材料的链接: