我正在尝试为一个辅助项目创建手册页,我以前从未使用过 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 命令,它是编写mdoc和man宏的底层排版语言。这些往往在使用 的文档中大量使用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,这里有一些权威学习材料的链接:
mandoc,解释了man过时的原因。