LaTeX 是如何誕生的?它又是如何引發(fā)了學(xué)術(shù)排版的變革?
世界上的許多人類都受到過 LaTeX 的恩澤,經(jīng)它排版的論文,就算有再復(fù)雜的公式,格式也不會亂掉。但人們可能并不了解,LaTeX 有個祖先叫 TeX,出生在1977年,并且在一個沒有互聯(lián)網(wǎng)的年代就紅遍了全球。
那么,身為世界上最早開源項目之一的 TeX,究竟是如何誕生,又如以進化形態(tài) LaTeX 活躍了幾十年不敗?
故事開始于一本叫做《計算機編程藝術(shù)》 (The Art of Computer Programming) 的書,作者是斯坦福計算機系教授Donald Knuth,中文名字“高德納”。后來也是因為這本書,他獲得了圖靈獎。
1968年,《計算機編程藝術(shù)》初版問世。在這之前,高德納給了出版商 Addison-Wesley 幾千頁手寫書稿。出版商用的是傳統(tǒng)金屬排版設(shè)備,需要專業(yè)人員手動操作。那時候電腦上還沒有圖形界面,書里面有各種編程示例,高德納就一點一點向排版人描述他到底想要怎樣的效果。成書的時候,高德納感到很滿意。
轉(zhuǎn)折發(fā)生在1976年,《計算機編程藝術(shù)》準備再版,擴充了一些內(nèi)容。這一次,出版商改用了便宜的電子排版方法,小樣完全達不到高德納要求。雖然高德納知,高分辨率的數(shù)字排版機可以生成精確的形狀,但從前那些專業(yè)的排版人員已經(jīng)找不到了。
他想到,如果讓計算機軟件來代替專業(yè)人士呢?于是在1977年,高德納用了一個夏天加一整年的學(xué)術(shù)休假執(zhí)行了他的“數(shù)字排版計劃”,他和學(xué)生一起寫出了一個排版程序,名叫 TeX。轉(zhuǎn)年,《計算機編程藝術(shù)》的修訂版就用 TeX 排版完成了。那時的高德納可能不知道,TeX 會引發(fā)學(xué)術(shù)排版的巨大變革。
有了TeX,即便論文作者沒有排版的專業(yè)知識,也可以把自己想要的效果直接告訴電腦:只要在手稿里加入一些簡單的 markup 代碼:
這就是 TeX 輸出的樣子,結(jié)果就像60年代的高德納教授和排版人員密切溝通出來的那樣。而且,和電腦溝通,還避免了人與人之間的誤解。
其實在文本中加 markup 倒不算新鮮事。TeX 的新鮮之處在于,它可以捕捉到非常實用的排版知識和概念,并且把它們形成體系,表現(xiàn)出來:高德納定義了幾百個排版命令,而用來理解這些命令的排版機就是 TeX 引擎,它可以讀取作者的手稿,生成一個文件——直接能拿去打印的那種。
高德納也知道,不管 TeX 能理解多少命令,都不可能滿足手稿作者的所有需求。所以他又寫了一個可擴展的 TeX,讓用戶隨意添加自己想要的功能:只要給它一些新的宏(Macro)),就能定義新的命令。每個人都可以自己創(chuàng)建宏文件,這樣不用修改 TeX 引擎,就能擴展 TeX 的功能。1984年,他還出版了The TeXbook,這本書詳細講述 TeX 了所有原始命令的含義,以及普通宏命令(Plain Macro Commands),還有引擎內(nèi)部的工作原理。
這本書的出現(xiàn),就是為了鼓勵開發(fā)者去寫自己的宏。在高德納的堅持之下,TeX 引擎的源代碼已經(jīng)免費了40年,每個人都可以修改。不過他也規(guī)定,一切不兼容的修改版都不能叫做 TeX;他還發(fā)布了一組自動測試,修改版引擎必須通過測試,才能用 TeX 這個名字。
在那個沒有互聯(lián)網(wǎng)的年代,生在斯坦福的 TeX 走向了世界。它被移植到各種計算機系統(tǒng)、各種語言、各種打印設(shè)備上,為越來越多的人類排版。
1982年和1989年,高德納又修改了 TeX 兩次。1992年,教授從項目里功成身退,接著寫《計算機編程藝術(shù)》。這本促成了 TeX 誕生的書,內(nèi)容一直在不斷擴充。雖然高德納不再更新項目了,但還有其他人在繼續(xù)他的工作。
TeX 的命令集,都是偏低層 (Low-Level) 的,適合高德納教授這樣,希望從細節(jié)上把握排版效果的人類。但這幾百個命令,對于大多數(shù)人來說可能還是太多了。
“能讓計算機來做的決定,就不要問我。”用戶常常希望自己手寫的排版命令越少越好,他們需要的是高層命令,是更加方便使用的 markup 語言,最好是可以把內(nèi)容 (Content))和表現(xiàn)形式 (Presentation))分開的那種工具。于是,1980年誕生了 Scribe,這是卡耐基梅隆大學(xué) (CMU) Brian Reid的博士論文項目。
在80年代早期,Scribe 受到了許多學(xué)術(shù)作者的追捧。不過它并不免費,這一點阻礙了傳播。Scribe 有位忠實用戶,來自斯坦福的蘭波特( Leslie Lamport),當(dāng)時已是著名的計算機科學(xué)家。他在嘗到便利的滋味之后,想要把 Scribe 的易用性轉(zhuǎn)移到 Tex 身上,并最終發(fā)明了LaTeX。
1984年,蘭波特自己創(chuàng)建了一個宏,叫做“l(fā)plain”,“l(fā)”是他姓氏的首字母。這里面的一系列命令,比TeX的原始命令易用得多得多。蘭波特把新的宏放出來給大家免費使用:只要運行一個LaTeX程序,讓TeX引擎先讀取這個宏。蘭波特還寫了一本書,叫 LaTex:a Document Preparation System,教學(xué)術(shù)作者怎樣用他寫的命令來給文章排版。
當(dāng)然,就算有了LaTeX,用戶依然可以用TeX的底層命令,來實現(xiàn)復(fù)雜的需求。
這下,TeX 用戶數(shù)量大大大大大爆發(fā)。許多人用了很久的 LaTeX 命令,甚至不知道有 TeX 這個名字。整個學(xué)術(shù)排版行業(yè)也因為 LaTeX 的誕生,受到了深遠的影響:在這個領(lǐng)域,精確排版至關(guān)重要,從前只有手動排版才能滿足需求;但現(xiàn)代世界里,論文、期刊、書籍和其他出版物大量產(chǎn)出,遠遠超過了手動排版能達到的吞吐量。
LaTex 在實現(xiàn)自動化的同時,又不會損失排版質(zhì)量。現(xiàn)在,許多學(xué)術(shù)出版機構(gòu),都接受用LaTeX排版的稿件。除此之外,連ArXiv這片機器學(xué)習(xí)論文的沃土,也是在LaTex的滋養(yǎng)下,才有更加蓬勃的生命力。