troff
原作者 | 喬伊·歐桑納 |
---|---|
開發者 | AT&T Bell Laboratories |
作業系統 | Unix, Unix-like, Plan 9 |
平台 | 跨平台 |
類型 | 命令 (電腦) |
許可協議 | |
網站 | troff |
歷史
troff的歷史能夠回溯到一個叫做RUNOFF的排版程序,在20世紀六十年代中期由Jerome H. Saltzer為MIT的CTSS作業系統編寫。(其名稱據傳是來自於當時一個短語I'll run off a document的縮寫。)
Robert Morris把它移植到GE 635體系結構上並稱其roff(runoff的縮寫)。它為了能在PDP-7上運行被重寫為rf,與此同時,Douglas McIlroy用BCPL程式語言重寫了一個roff的擴展和簡化了的版本。
Unix的第一個版本是在貝爾實驗室里的一台PDP-7上開發出來的。在1971年開發者們為了能在作業系統上做進一步的工作想獲得一台PDP-11。為了能夠協調這台設備的成本,他們建議說他們應該為AT&T的專利部門開發一個文檔處理系統。第一個處理程序是對McIlroy的roff的重新編寫,由Joe F. Ossanna完成。
當他們需要一個更加靈活的語言時,編寫了一個roff的新版本叫做nroff(Newer 『roff』)。該版本有着更加複雜的句法,但是它為未來的版本奠定了基礎。當他們獲得了一個圖像設備CAT照相排版機時,為了能夠驅動它,Ossanna又編寫了nroff的一個版本。這個版本被叫做troff,因為它是排字機(typesetter)的roff。為此,troff的發音應該是t-roff而不是trough。 隨troff而來的有nroff,它是為針式打印機和字符終端設備產生輸出的。它理解troff所理解的任何事情,並且不再使用不合適的命令(比如字體改變)。
不幸的是,Ossanna的troff是用PDP-11的匯編語言編寫的,所以只能產生CAT照相排版機的輸出。他用C語言進行了重寫,儘管這變成了7000行無註釋的代碼並且仍然依賴CAT。隨着CAT越來越不常見,並且不再受到製造商的支持,使troff支持其他設備就成為了一個要優先解決的問題。可是在這被完成之前Ossanna就去世了。Brian Kernighan接手了重寫troff的工作。新寫的版本產生了一個與設備無關的代碼,這讓後繼者非常容易閱讀並改寫成適合其他打印機的代碼。同時,這個新版本的troff(因為是device independent troff被稱為ditroff)具有了幾項擴展,其中包含了繪圖函數。該版在貝爾實驗室的一篇題為《一個與排版機無關的troff》的計算機科學技術報告中得到描述,該報告經gzip壓縮的PostScript版可在計算機科學技術網這裏獲得。該文章定義了ditroff的輸出格式,該格式被像GNUgroff這樣的許多現代troff的克隆版本所使用。
troff的工具集最終被稱作Documenter's WorkBench(DWB),並且直到1994年還在貝爾實驗室和後來抽資脫離貝爾實驗室的UNIX系統實驗室(USL)中繼續開發。當時,SoftQuad公司接管了維護任務,儘管Kernighan自己還在改進troff。因此現在有四個起初貝爾實驗室的troff的變體:
troff及其家族的使用在20世紀九十年代有了某種程度的減少,但是仍然被廣泛地使用着。雖然troff正在被像Interleaf、FrameMaker和LaTeX這樣的其他程序所取代,但它仍然是Unix手冊的缺省格式。 始於1990年的GNU項目重新編寫了該軟件,起名為groff。另外,由於早期Unix版本的開源化,以及其現代的後繼者OpenSolaris和9號計劃,AT&T的troff的幾個版本均可在不同的開源許可證下獲得。
特性
troff的特性在於其能夠設置字體、間距、段落、邊距和腳標等的命令。不像其他的文本處理程序,troff能夠在頁面上的任意位置放置字符,甚至使字符相互重疊,並且它有一個完全可程式的輸入語言。獨立的預處理程序被用來更加方便地產生表格、圖和數學公式。troff的輸入是能夠被任何文本編輯器所創建的普通文本。
為了處理不同的文本種類,擴展的宏軟件包已經被開發出來。一個典型的troff發行版包含了處理研究論文的me宏,創建Unix手冊的man宏,和處理信件、書籍、技術備忘文檔和報告的ms、mm宏。隨着troff的演化,由於有幾件事情並不容易用troff完成,所以幾種預處理程序被開發出來。這些程序把一個文檔的特定部分經轉換後送入troff的輸入,恰好符合Unix中管道的使用原理——把一個程序的輸出作為另一個程序的輸入(參見管道流和過濾程序)。
eqn預處理程序允許以一種更加簡單和直觀的方式編寫數學公式。tbl是一個格式化表格的預處理程序。refer預處理程序(以及與之相似的bib程序)根據參考書目數據庫處理一個文檔中的引用書目。後來又出現了其他幾個預處理程序。pic預處理程序提供了一種與區域相關的程式語言以及一組使用廣泛的繪圖函數。ideal預處理程序差不多能做相同的事情,只不過其編程范型與前者有很大差異。grap預處理程序關注於對圖表的處理,與其他預處理程序不同的是,它產生pic代碼。