栗子 編譯整理
量子位 出品 | 公衆號 QbitAI
△用LaTeX記筆記的超能操作
世界上的許多人類,都受到過LaTeX的恩澤。
經它排版的論文,就算有再複雜的公式,格式也不會亂掉。
但人們可能並不瞭解,LaTeX有個祖先叫TeX,出生在1977年。
並且在一個沒有互聯網的年代,就紅遍了全球。
那麼,身爲世界上最早開源項目之一的TeX,究竟是如何誕生?又如以進化形態LaTeX,活躍了幾十年不敗?
專業排版師,找不到了
故事,開始於一本叫做《計算機編程藝術》 (The Art of Computer Programming) 的書。
作者是斯坦福計算機系教授Donald Knuth,中文名字“高德納”。後來也是因爲這本書,他獲得了圖靈獎。
1968年,初版問世。在這之前,他給了出版商Addison-Wesley幾千頁手寫書稿,出版商用的是傳統金屬排版設備,需要專業人員手動操作。
那時候,電腦上還沒有圖形界面。
書裏面有各種編程示例,高德納就一點一點向排版人描述,他到底想要怎樣的效果。成書的時候,他很滿意。
轉折發生在1976年,這本書準備再版,擴充了一些內容。這一次,出版商改用了便宜的電子排版方法,小樣完全達不到高德納要求。
雖然高德納知道,高分辨率的數字排版機可以生成精確的形狀,但從前那些專業的排版人員已經找不到了。
他想着,如果讓計算機軟件來代替專業人士呢?
於是,1977年高德納用了一個夏天,再加一整年的學術休假,執行他的數字排版計劃:和學生一起寫出了排版程序,名叫TeX。
轉年,《計算機編程藝術》的修訂版,就用TeX排版完成了。
那時的高德納可能不知道,TeX會引發學術排版的巨大變革。
原來你是這樣的TeX
有了TeX,即便論文作者沒有排版的專業知識,也可以把自己想要的效果,直接告訴電腦。
只要在手稿里加入一些簡單的markup代碼:
叮噹法術變變變:
這就是TeX輸出的樣子。
就像60年代的高德納教授,可以和排版人員密切溝通那樣。而且,和電腦溝通還避免了人與人之間的誤解。
其實在文本中加markup,倒不算新鮮事。但TeX的新鮮之處在於,它可以捕捉到非常實用的排版知識和概念,並且把它們形成體系、表現出來:
高德納定義了幾百個排版命令。而用來理解這些命令的排版機,就是TeX引擎:它可以讀取作者的手稿,生成一個文件,直接能拿去打的那種。
不過,高德納也知道,不管它能理解多少命令,都不可能滿足手稿作者的所有需求。
所以,他寫了一個可擴展的TeX,讓用戶隨意添加自己想要的功能:
只要給它一些新的宏 (Macro) ,就能定義新的命令。每個人都可以自己創建宏文件,這樣不用修改TeX引擎,就能擴展TeX的功能。
當然,既是高德納自己寫的工具,肯定夠自己用的了。1984年他還出版了The TeXbook,這本書詳細講述TeX了所有原始命令的含義,以及普通宏命令 (Plain Macro Commands) ,還有引擎內部的工作原理。
這本書的出現,就是爲了鼓勵開發者,去寫自己的宏。
在高德納的堅持之下,TeX引擎的源代碼已經免費了40年,每個人都可以修改。
不過他也規定,一切不兼容的修改版都不能叫做TeX;還發布了一組自動測試,修改版引擎必須通過測試,才能用TeX這個名字。
在那個沒有互聯網的年代,生在斯坦福的TeX走向了世界。它被移植到各種計算機系統、各種語言、各種打印設備上,爲越來越多的人類排版。
1982年和1989年,高德納又修改了TeX兩次。
1992年,教授從項目裏功成身退,接着寫《計算機編程藝術》。這本促成了TeX誕生的書,內容一直在不斷擴充。
雖然高德納不再更新項目了,但還有其他人在繼續他的工作。
從TeX到LaTeX,更更更簡單
TeX的命令集,都是偏低層 (Low-Level) 的,適合高德納教授這樣,希望從細節上把握排版效果的人類。
但這幾百個命令,對於大多數人來說,可能還是太多了。
“能讓計算機來做的決定,就不要問我。”
用戶常常希望自己手寫的排版命令越少越好,他們需要的是高層命令,是更加方便使用的markup語言。
最好是,可以把內容 (Content) 和表現形式 (Presentation) 分開的那種工具。
Scribe:爆發之前奏
於是,1980年誕生了Scribe,是卡耐基梅隆大學 (CMU) Brian Reid的博士論文項目。
在80年代早期,Scribe受到了許多學術作者的追捧。不過它並不免費,這一點阻礙了傳播。
即便如此,它也不只是個插曲:
Scribe有位忠實用戶,來自斯坦福的Leslie Lamport (簡稱“蘭波特”) ,當時已是著名的計算機科學家。
就是他,在嚐到便利的滋味之後,想要把Scribe的易用性,轉移到Tex身上,最終發明了LaTeX。
LaTeX:大爆發
1984年,蘭波特自己創建了一個宏,叫做“lplain”,“l”是他姓氏的首字母。
這裏面的一系列命令,比TeX的原始命令易用得多得多。
他把新的宏放出來給大家免費使用:只要運行一個LaTeX程序,讓TeX引擎先讀取這個宏。
蘭波特還寫了一本書,叫LaTex:a Document Preparation System,教學術作者怎樣用他寫的命令來給文章排版。
當然,就算有了LaTeX,用戶依然可以用TeX的底層命令,來實現複雜的需求。
這下,TeX用戶數量大大大大大爆發。
而許多人用了很久的LaTeX命令,甚至不知道有TeX這個名字。
整個學術排版行業,也因爲LaTeX的誕生,受到了深遠的影響:
在這個領域,精確排版至關重要,從前只有手動排版才能滿足需求;但現代世界裏,論文、期刊、書籍和其他出版物大量產出,遠遠超過了手動排版能達到的吞吐量。
LaTex在實現自動化的同時,又不會損失排版質量。
現在,許多學術出版機構,都接受用LaTeX排版的稿件。
除此之外,連ArXiv這片機器學習論文的沃土,也是在LaTex的滋養下,纔有更加蓬勃的生機。
因爲,即便沒有出版商排版,作者也可以把嚴謹整齊的研究成果,送給全球的人類觀賞。
真是一個美好的世界。
One More Thing
那麼問題來了,LaTeX的鼻祖高德納,爲什麼會有個中文名字呢?
1977年夏天,他在中國度過了三個星期。中文名便是在那時解鎖的。
巧的是,排版計劃也是在那個夏天啓動的。
原文傳送門:
https://increment.com/open-source/the-lingua-franca-of-latex/
— 完 —
小程序|全類別AI學習教程
AI社羣|與優秀的人交流
量子位 QbitAI · 頭條號簽約作者
վ'ᴗ' ի 追蹤AI技術和產品新動態
喜歡就點「在看」吧 !