打字猴:1.700436748e+09
1700436748
1700436749
1700436750
1700436751
1700436752 这些标记告诉Runoff如何格式化文本:将行长设置为60个字符,下一行居中,空2行,临时缩进5个空格,将段落设置成最多60个字符的行,然后空1行,再临时缩进下一段。
1700436753
1700436754 Runoff有一二十条这样的命令,可以很容易地格式化手册页、程序说明、给朋友的信等简单文档。今天用Markdown之类工具能做到的文本格式化,Runoff都能做到。
1700436755
1700436756 1.早期格式化工具
1700436757
1700436758
1700436759
1700436760
1700436761
1700436762 Runoff对我来说是一种启示,一种与数学计算和编译无关的计算机使用方法。有了它,低成本地反复完善文档就变得容易多了。今天的读者可能很难体会到,在文字处理程序诞生之前,编制文档是多么费劲。当时只有机械打字机——当然,比泥板或鹅毛笔要好一些,但要想改几个词,就得整份重打。因此,大多数文件打出来后,都得在打印纸上手写修改,再费力用打字机重新输入,才能得到一份干净的文件。
1700436763
1700436764 1968年秋天开始写毕业论文时,我真的很需要Runoff这样的工具,否则就得自己用手动打字机打出论文(每改一次都要重打),或者付钱请人帮我打。我打字速度快但常打错,所以前者不切实际;由于我又穷又不怎么能挣钱,后者也不切实际。
1700436765
1700436766 于是我写了个简单版本的Runoff。我把它叫作“Roff”,意思是“Runoff的缩写形式”。问题是当时普林斯顿大学没有像CTSS那样的交互式计算机系统,也没有任何计算机终端,只有穿孔卡可用,但穿孔卡只支持大写字母。我用Fortran语言写了Roff(远非理想,因为Fortran是用来进行科学计算的,而不是用来把字符移来移去,但当时没其他选择),添加功能,将所有的字母都转换成小写,同时自动大写每句话第一个字母。最终的文本既有大写又有小写,用一台大小写都能打的IBM 1403打印机打印出来。堪称“前卫”!我的论文是3盒卡片。每个盒子里有2 000张卡,盒子长35厘米,重4.5千克。前1 000张卡片是程序,另外5 000张是用Roff定义的论文文本。
1700436767
1700436768 从未用过穿孔卡的读者可能会不太理解。每张穿孔卡最多包含80个字符,要么是一行Fortran代码,要么是一行论文文本。如果需要修改文本,就把替换的文本打在几张新卡片上,替换掉旧卡片。修正拼写错误一般只需要更换一张卡片,但如果新文本很长,就可能需要更多卡片。
1700436769
1700436770 我不得不在打印出来的页面上手写插入一些特殊的字符,如连加求和符号(Σ)。这个笨办法出奇地好用,足以让我打印出我的论文。相信这是普林斯顿大学第一篇用计算机打印的论文。(图5-6所示为随便抽出来的一页。)在之后的几年里,有个学生机构为学生们“roff ”文件,并收取一定的费用。因此,Roff是我写的第一个被别人大量使用的程序。
1700436771
1700436772
1700436773
1700436774
1700436775 图5-6 我论文中的一页,使用Roff做了格式化
1700436776
1700436777 当我到贝尔实验室时,发现有几个人在写类似roff的工具,其中就有道格·麦基尔罗伊基于索尔泽原作编写的程序。乔·奥桑纳在此后不久写了一个更强大的版本,他称之为Nroff,即“new Roff”(意为“新Roff”),专利部门用它做专利申请文档格式化工作。正如前文所述,Nroff是促成为Unix研发购买第一批PDP-11计算机的功臣。
1700436778
1700436779 这个由文档编制爱好者组成的小团体,以及由这类程序的活跃用户构成的社区,完美地契合了我的兴趣。于是在接下来的10年里,我花了很大一部分时间愉快地研究文本格式化的工具。
1700436780
1700436781 2. Troff与排版
1700436782
1700436783
1700436784
1700436785
1700436786
1700436787 Roff和Nroff只能处理固定宽度(等宽)字符集,比Model 37电传打字机上的标准字母字符多不了多少,所以输出质量并不高。然而,1973年,乔·奥桑纳安排购买了一台在报刊行业很受欢迎的Graphic Systems CAT照排机。他希望能制作更漂亮的内部技术文件,同时也帮助专利部门准备更像样的专利申请书。
1700436788
1700436789 这台照排机能打印正体、斜体和粗体等传统非等宽字体,以及一组希腊字母和数学专用符号。字符打印到长卷相纸上,经过几轮化学毒物药浴,相纸才能显影。这项技术早于激光打印机。激光打印机至少还要再过10年才会被广泛使用。还有,照排机输出的是黑白照片。廉价的彩色印刷直到几十年后才出现。
1700436790
1700436791 每种字体都是一张印有字符图像的35毫米胶片,安装在一个快速旋转的轮子上。转轮能同时装载4种字体,每种字体102个字符,单次印刷任务可支持408个字符。当纸张和所需字符处于正确的位置时,照排机发射强光,透过胶片图像,照射到相纸上。它支持16种印刷尺寸。
1700436792
1700436793 照排机运转缓慢——想改印刷尺寸,就得转动机械式透镜塔。显影化学药品最令人不快,但输出质量高,可以制作出看上去很专业的文件。事实上,有几次贝尔实验室的作者投给期刊的论文被质疑:它看起来如此光洁,肯定已经发表过了。
1700436794
1700436795 为了驱动排版机,乔为Nroff写了个他称之为Troff的重要扩展。“T”代表排版机(typesetter),整个词念作“tee-roff”。Troff语言刁钻晦涩,只有很少人精通,但只要学会技巧、保持耐心,就能让它完成任何格式化任务。实际上,Troff是为特殊型号计算机设计的汇编语言,所以大多数人通过宏包来使用它。宏包封装了常用的格式化操作,如标题、章节标题、段落、编号列表等。宏成了一种底层Troff命令之上的高级语言。迈克尔·莱斯克是制作宏包的大师(他也写了被广泛使用的ms软件包),在我的圈子里,无人能及他善用Troff编程的技巧水平。
1700436796
1700436797 有了照排机,就能输出多种字体,字符之间距离合适,也有足量的特殊字符。这样一来,就到了用它来为图书和内部技术文档排版的时候了。第一本用照排机制作的书是我和比尔·普劳格在1974年写的《编程格调》。这本书很多地方排版粗糙,因为当时没有用于呈现代码的单倍行距字体,除此之外,尽如人意。
[ 上一页 ]  [ :1.700436748e+09 ]  [ 下一页 ]