1700436798
1700436799
我和比尔自己排版,主要原因是传统出版流程常常误印计算机程序代码。从输入到准备印刷的整个流程尽在掌握,我们就能直接测试书中的程序,无须文字编辑和排版人员经手,最终得到基本上没有错误的编程书。这在当时极不寻常。从那以后,我一直照此办理,我的书都用Troff或其现代版本Groff制作。幸运的是,人们已不再需要照排机和昂贵又难用的印刷介质。今天,只要把所有的东西都正确地放在PDF文件中,然后发给出版商或印刷商就可以了。
1700436800
1700436801
3. Eqn和其他预处理器
1700436802
1700436803
1700436804
1700436805
1700436806
1700436807
贝尔实验室的作者们想要创建的文档不仅仅包含文本,还有其他形式的内容,其中最明显的是数学文本,还包括表格、图、书目引文等。原则上,Troff本身能够处理这些东西,但并不方便。因此,我们着手创建特殊用途的语言,使其更容易处理特定类型的技术性资料。实际上,这样的演变过程在传统编程语言中已经发生过,我们只是在文档编制领域重复一次而已。
1700436808
1700436809
这些特殊用途语言中的第一种是Eqn。Eqn是用于排版数学表达式的语言和程序,由洛琳达 · 彻丽(图5-7)和我于1974年编写。如人所愿,贝尔实验室制作了大量的技术文件,大部分供内部使用,其中许多文件充满数学内容。实验室有一批打字高手,他们能读懂手写的数学符号,并使用手动打字机将其打成可识别的形式,但这一过程非常耗时,而且编辑起来也很痛苦。
1700436810
1700436811
1700436812
1700436813
1700436814
图5-7 洛琳达·彻丽,约1981年(杰勒德·霍尔兹曼供图)
1700436815
1700436816
洛琳达一直在探索如何实现数学符号输出工具,而我希望有一种语言能像数学家朗读数学内容那样直观。我想,关于这种语言的想法根植于我的潜意识里,因为我还在读研时,就曾自愿加入“为盲人录音”(Recording for the Blind[7])项目,朗读技术书籍并录制下来。这项工作持续了好几年,所以我花了很多时间口述数学内容。
1700436817
1700436818
Eqn能很好地处理简单数学表达式。例如,级数求和:
1700436819
1700436820
1700436821
1700436822
1700436823
写作:
1700436824
1700436825
sum from i=0 to inf 1 over 2 sup i = 2
1700436826
1700436827
1700436828
1700436829
1700436830
1700436831
事实证明,数学打字员很容易学会Eqn,其他人也很容易学会,实践证明它比手工打字机快得多。这种语言非常简单,连物理学博士也能掌握。没过多久,人们就开始自己动手打字,不再依赖专业打字员。Eqn是启发高德纳(Don Knuth)开发TeX(1978)中数学模式的灵感之一。TeX已成为数学内容输入的标准。
1700436832
1700436833
Eqn是作为Troff的预处理器来实现的,通常用法是把Eqn的输出通过管道引入Troff中,就像这样:
1700436834
1700436835
eqn file | troff >typeset.output
1700436836
1700436837
1700436838
1700436839
1700436840
1700436841
Eqn识别数学结构,并将其转化为Troff命令,而其他内容则不做处理。预处理器式方法干净爽利地切出两种语言和两种程序,用于不同目的。PDP-11的物理限制逼着洛琳达和我想出这个好主意。由于内存限制,Troff已经是单个程序所能达到的最大尺寸,不能再添加处理数学内容的功能。再者,即使我们想修改Troff,乔·奥桑纳也不会容许我们碰它。
1700436842
1700436843
Eqn语言基于盒子模型:表达式由一系列盒子组成,这些盒子相互决定位置和大小。例如,分数是一条长线将分子盒和分母盒上下分开。像xi这样的下标表达式是一对盒子,其中第二个盒子的内容尺寸较小,位置比第一个盒子略低。
1700436844
1700436845
我们用史蒂夫·约翰逊新发明的编译器-编译器Yacc来定义语法,并将语义挂接上去。Eqn是首个基于Yacc的语言,不同于传统语言的传统编译器。就我自己而言,如果没有Yacc,Eqn不会出现,因为我不肯为一门新语言亲手写语法分析器。语法太复杂,而且在我和洛琳达试验语法的时候,经常会改动它,所以不适合写专门的语法分析器。我们使用Yacc的经验有力地说明,有了好的工具,就能做一些原本太难甚至无法想象的事情。
1700436846
1700436847
为不同类型的难以排版的材料提供预处理器是个好主意。在Eqn面世之后不久,迈克尔·莱斯克创造了Tbl,它提供了相当不一样的语言来制作复杂表格。莱斯克还写了用于管理文献引用的Refer程序。管理文献引用对技术论文来说非常重要。
[
上一页 ]
[ :1.700436798e+09 ]
[
下一页 ]