我正在尝试为一个副项目创建手册页,而且我以前从未使用过 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
吗?
不,mdoc
和man
是完全不相关的软件包,仅具有共同的祖先和标记计算机手册页的相同目标。
我注意到两者
mdoc
和 plainman
共享一些宏
他们不分享任何东西。您所看到的可能是本机 Roff 命令,它是编写mdoc
和宏的底层排版语言。这些命令往往在使用 的文档中大量使用,但在使用 的文档中则较少使用。man
man
mdoc
您可以通过标准 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这里已经有一些权威学习材料的链接:
- UNIX 联机帮助页的历史: 50 多年发展的综合时间表
- CSTR #54:原始 Nroff/Troff 用户手册的 PDF 版本 – 被广泛认为是 Troff 圣经
- “弃用 Groff 进行 BSD 手动显示”: 作者的一篇论文,解释了过时的
mandoc
原因。man