1.3. 历史

未匹配的标注

1.2 历史

troff 的起源可以追溯回一个名为 RUNOFF 的格式化程序,它被 Jerry Saltzer

image-20221103163526526

编写,在上世纪 60 年代中期运行在 CTSS(Compatible Time Sharing System/兼容分时系统,MIT 麻省理工的一个项目)。这个名字来自于短语 “run off a document” 的使用。意思是将它打印出来。Bob Morris 将它移植到 635 架构上,然后把这个程序叫 roffrunoff 的简称)。它针对 PDP-7(在有 UNIX 之前)

image-20221103154801857

重写为 rf,同时(1969 年),Doug McIlroy

image-20221103163751415

以 BCPL 编程语言重写了 roff 的一个扩展和简化版本。

在 1971 年,UNIX 开发者想要一台 PDP-11,

image-20221103154934673

为了证明成本的合理性,他们建议为 AT&T 专利部门开发一种文档格式化系统。第一个格式化程序是重新实现 McIlroy 的 roffJ. F. Ossanna 编写。

当他们需要一个更灵活的语言,一个名为 nroff (newer roff) 的新版本被编写,它的语法复杂得多,但提供了所有未来版本的基础。当他们得到一个图形系统 CAT 照相排字机时,Ossanna 写了一个可以驱动它的 nroff 版本。 它被称作 troff,意思是 "typesetter roff" 虽然许多人推测它是真正意思是 "Times roff", 因为在 troff 中默认字体是 Times 字体 ,因此,troff 这个名字的发音是 "t-roof" 而不是 "trough"。

troff 之后是 nroof(它们事实上是同一个程序,除了一些 "#ifdef"),它对行式打印机和字符终端产生输出。它理解 troff 理解的任何东西,然后忽略了不可用的命令,比如字体变化。

因为有些事情在 troff 里面是不能被轻易完成的,关于几个预处理器的工作开始了。这些程序将文档的特定部分转换到 troff 里面,使得在 UNIX 中很自然地使用了管道。

eqn 预处理器允许以更简单更直觉的方式来指定数学公式。 tbl 是格式化表格的预处理器。 refer 预处理器(还有类似的程序 bib)通过一个书目式数据库处理文档中的引用。

不幸的是, Ossanna 的 troff 是用 PDP-11 汇编语言写的,并且专门为 CAT 照相排字机产生输出。他用 C 重写了它,虽然它是 7000 行未注释的代码,并且仍然依赖于 CAT。随着 CAT 变得不再普遍,并且不再被制作商支持,使得它支持其它设备的需求就变成优先事项。然而在这个事情被完成前,Ossanna 就在医院恢复之前的心脏病时死于一次严重的心脏病发作。

所以,Brian Kernighan

image-20221103164022041
承担了重写 troff 的任务。重写的新版本产生了与设备无关的代码,非常容易为后处理器读取并转换为合适的打印机代码。并且 troff 这个新版本(叫做 ditroff 因为是 "device independent troff")有几个扩展,包括了绘图函数。

由于 troff 新版本增加的能力,几个新的预处理器出现了。 pic 预处理器提供了许多不同的绘图函数。同样的 ideal 预处理器也有这个功能,虽然通过一个非常不同的范式。 grap 预处理器采取的是图像标准,但是不像其它预处理器,产生的是 pic 代码。

James Clark
image-20221103164216422

在 1989 年初致力于 ditroff 的 GNU 实现。第一个版本 groff 0.3.1 在 1990 年 6 月被发布。 groff 包括:

  • 用许多扩展来替代 ditroff
  • soelim, pic, tbleqn 预处理器。
  • 对字符设备的后处理器,PostScript, TEX DVI 和 X Windows. GNU troff 也不需要单独的带有后处理器的 nroff 程序来产生 ASCII 输出。
  • me 宏的一个版本和 man 宏的一个实现

此外,还包括一个前端,它可以构建所有后处理器和预处理器所需的管道,有时很长,令人痛苦。

GNU troff 的开发进展迅速,增加了替代 refer 的内容,实现了 ms 和 mm 宏,以及推导如何格式化文档的程序(grog)。

在1991年11月左右发布1.04版本时,它被宣布为一个稳定的(即非beta)包。

从1999年开始,groff 有了新的维护者(这个包有几年是一个孤儿)。因此,添加了一些新特性和程序,如grn (gremlin图像的预处理器)和一个生成 HTML 和 XHTML 的输出设备。

目前的维护者(2018)是 Trent A. Fisher 和 Werner Lemberg

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~