NAME
roff - roff 排 版 系 統 的 概 念 和 歷 史
描 述 DESCRIPTION
roff 是 一 系 列 排 版 程 序 , 如 troff, nroff, ditroff, groff, 等 等 的 通 稱 。 一 個 roff 排 版 系 統 包 含 一 個 可 擴 展 的 文 本 格 式 化 語 言 和 一 系 列 程 序 用 以 打 印 和 轉 換 爲 其 他 文 本 格 式 。 傳 統 的 , 它 是 Unix 的 主 要 文 本 處 理 系 統 ; 現 在 , 每 個 類 Unix 操 作 系 統 仍 然 附 帶 一 個 roff 系 統 作 爲 核 心 軟 件 包 。 當 今 最 普 遍 的 roff 系 統 是 自 由 軟 件 的 實 現 GNU roff, groff(1). groff 之 前 的 實 現 被 稱 爲 傳 統 的 classical 實 現 (從 1973 年 開 始 )。 groff 實 現 了 它 的 傳 統 的 前 輩 的 用 法 和 功 能 , 並 且 加 入 了 更 多 擴 展 。 當 前 , 由 於 groff 是 唯 一 可 以 在 (幾 乎 是 ) 任 何 計 算 機 系 統 上 都 可 用 的 roff 系 統 , 因 此 它 是 事 實 上 的 roff 標 準 。 在 一 些 古 老 的 Unix 系 統 中 , 有 一 個 叫 做 roff 的 可 執 行 文 件 , 實 現 了 甚 至 更 加 古 老 的 Multics 操 作 系 統 中 的 runoff 。 參 見 HISTORY 段 落 。 它 的 功 能 非 常 有 限 , 即 使 與 古 老 的 troff 相 比 ; 它 不 再 被 支 持 了 。 因 此 , 在 本 文 檔 中 , roff 總 是 泛 指 roff 系 統 roff system , 不 是 古 老 的 roff 可 執 行 文 件 儘 管 歷 史 悠 久 , roff 當 前 還 在 廣 泛 使 用 中 , 例 如 , UNIX 系 統 的 手 冊 頁 (man pages) , 很 多 軟 件 書 籍 , 系 統 文 檔 , 標 準 和 團 體 組 織 的 文 檔 都 是 用 roff 來 寫 的 。 roff 在 文 本 設 備 上 的 輸 出 效 果 仍 然 是 無 可 比 擬 的 , 並 且 , 與 其 他 自 由 的 排 版 系 統 相 比 , 它 的 圖 形 輸 出 也 不 差 , 甚 至 強 於 很 多 商 業 的 系 統 最 普 遍 的 roff 的 應 用 是 手 冊 頁 manual pages (簡 稱 man pages); 它 是 很 多 操 作 系 統 中 的 標 準 文 檔 系 統 此 文 檔 描 述 了 圍 繞 roff system 開 發 的 一 些 歷 史 事 件 ; 所 有 roff 版 本 在 用 法 方 面 的 一 些 共 同 點 , roff 管 道 的 細 節 - - 它 經 常 被 掩 蓋 在 類 似 groff(1) 等 等 的 “前 端 ” 之 後 ; 對 排 版 語 言 的 一 般 的 概 述 ; 一 些 寫 roff 文 檔 的 技 巧 ; 還 有 到 更 多 資 料 的 鏈 接
歷 史 HISTORY
roff
文 本 處 理 系 統
有 很 長 的 一 段
歷 史 , 可 以 回
溯 到 60 年 代 。 roff
系 統 自 身 與 Unix 操
作 系 統 關 係 密
切 , 但 是 它 的
起 源 要 從 更 早
的 操 作 系 統 CTSS 和
Multics 開 始 。 祖 先 The
Predecessor runoff
roff 系 統 的 演 變
與 操 作 系 統 的
歷 史 緊 密 聯 繫
。 它 的 “先 祖 ”
runoff 是 Jerry Saltzer 在
CTSS 操 作 系 統
(Compatible Time Sharing System , 兼
容 分 時 系 統 (?),
1961) 上 的 作 品 。 CTTS
後 來 發 展 成 爲
操 作 系 統
http://www.multicians.org">Multics, Unix
的 一 個 著 名 的
來 源 , 出 現 於
1963, 同 時 runoff 成
爲 文 檔 和 文 本
處 理 的 主 要 格
式 。 當 時 , 這
兩 種 操 作 系 統
只 能 運 行 在 非
常 昂 貴 的 計 算
機 之 上 , 因 此
它 們 大 部 分 用
於 研 究 和 官 方
及 軍 隊 的 任 務
之 中 與 現 代 的 roff
相 比 , runoff 語 言
可 以 做 的 事 非
常 有 限 。 在 60 年
代 , 只 能 產 生
文 本 的 輸 出 。
這 可 以 用 一 個
長 度 爲 2 的 命
令 (request) 的 集 合 實
現 , 這 些 命 令
的 絕 大 部 分 都
保 持 不 變 地 被 roff
採 用 。 這 種 語
言 的 模 型 是 根
據 “前 計 算 機 時
代 ” 的 排 版 習
慣 而 建 立 的 ,
那 時 , 以 點 (dot,
’.’) 開 頭 的 行
被 寫 在 手 稿 中
, 向 之 後 進 行
手 工 排 版 工 作
的 工 人 指 示 格
式 化 的 要 求 開
始 , runoff 程 序 是 用
PL/1 語 言 寫 成 的
, 後 來 用 BCPL 來
寫 - - 那 是
C 編 程 語 言 的
“祖 母 ”。 在 Multics
操 作 系 統 中 ,
幫 助 系 統 由 runoff 來
處 理 , 與 roff 管 理
Unix 手 冊 頁 的 作 用
類 似 。 仍 然 有 runoff
語 言 寫 成 的 文
檔 , 例 如 可 以
到 Saltzer 的 主 頁 看
看 。 參 見 SEE ALSO 段
傳 統 的 nroff/troff 系 統
The Classical nroff/troff System 在 70 年
代 , Multics 的 後 裔
(offspring) Unix 變 得 越 來
越 普 遍 , 因 爲
它 可 以 運 行 在
廉 價 的 計 算 機
上 , 並 且 那 時
在 大 學 裏 可 以
很 容 易 地 獲 得
。 在 MIT (麻 省 理 工
, the Massachusetts Institute of Technology),
有 人 想 在 一 臺
運 行 Unix 的 PDP-11 計 算
機 上 驅 動 Wang (王 安
公 司 ?) 的 Graphic Systems CAT
排 字 機 , 一 種
圖 形 化 的 輸 出
設 備 。 由 於 runoff 在
這 種 任 務 上 能
力 有 限 , 它 被
Josef F. Osanna, (Multics 操 作 系
統 的 主 要 開 發
者 之 一 , 幾 個 runoff
移 植 系 統 的 作
者 ) 繼 續 開 發 ,
成 爲 一 種 更 強
大 的 文 本 排 版
系 統
runoff 這 個 名 字 被 簡 化 爲 roff. Ocsanna 所 設 想 的 , 極 大 擴 展 了 的 語 言 已 經 包 含 了 一 個 完 整 的 roff 系 統 的 所 有 元 素 。 所 有 現 代 的 roff 系 統 都 試 圖 實 現 同 這 個 系 統 兼 容 。 因 此 Joe Osanna 是 當 之 無 愧 的 所 有 roff 系 統 之 父 最 早 的 roff 系 統 有 三 個 排 版 程 序
troff |
(typesetter roff) 爲 它 唯 一 支 持 的 CAT 排 字 機 產 生 一 個 圖 形 的 輸 出 | ||
nroff |
爲 終 端 和 文 本 打 印 機 產 生 合 適 的 文 本 輸 出
roff 對 最 初 的 |
runoff 程 序 的 有 限 功 能 進 行 重 新 實 現 ; 這 個 程 序 在 後 來 的 版 |
本 中 被 拋 棄 。 現 在 , roff 這 個 名 字 只 用 來 指 代 一 個 troff/nroff 系 統 的 整 體
Osanna 的 第 一 版 用 PDP-11 的 彙 編 語 言 實 現 , 發 佈 於 1973. Brian Kernighan 加 入 到 roff 的 開 發 中 , 使 用 C 編 程 語 言 將 它 進 行 了 重 寫 。 C 版 本 發 佈 於 1975.
nroff/troff 程 序 使 用 的 排 版 語 言 的 語 法 記 載 在 著 名 的 Troff User’s Manual [CSTR #54] 中 , 出 版 於 1976, Brian Kernighan 對 它 不 斷 修 訂 , 直 到 1992 年 。 此 文 檔 是 對 傳 統 的 classical troff 的 說 明 . 所 有 後 來 的 roff 系 統 都 試 着 與 這 個 說 明 實 現 兼 容
1977 年 , Osanna 在 他 50 歲 時 , 由 於 一 次 突 發 的 心 臟 病 而 去 世 。 Kernighan 繼 續 開 發 troff。 下 一 個 開 發 目 標 是 賦 予 troff 一 個 更 一 般 的 接 口 , 以 支 持 更 多 設 備 , 中 間 輸 出 格 式 和 “後 處 理 ” 系 統 。 這 使 得 roff 系 統 的 結 構 趨 於 完 整 , 現 在 仍 然 被 使 用 。 參 見 USING ROFF 段 。 1979 年 , 它 們 被 寫 入 論 文 [CSTR #97]. 這 個 新 的 troff 版 本 是 所 有 現 存 的 較 新 的 troff 系 統 的 基 礎 , 包 括 groff. 在 一 些 系 統 上 , 這 個 設 備 無 關 的 troff 有 一 個 可 執 行 文 件 叫 做 ditroff(7). 所 有 現 代 的 troff 程 序 都 已 經 自 動 提 供 了 對 distroff 完 整 的 兼 容 性 商 業 化 Commercialization 免 費 的 Unix 7 操 作 系 統 商 業 化 之 後 , 出 現 了 嚴 重 的 退 步 。 一 大 批 不 同 的 操 作 系 統 浮 出 水 面 , 爲 他 們 所 作 的 擴 展 間 的 互 不 兼 容 而 爭 鬥 。 幸 好 , 這 種 不 兼 容 沒 有 影 響 到 原 始 的 troff。 所 有 不 同 的 商 業 版 本 的 roff 系 統 都 大 量 使 用 了 Osanna/ Kernighan 的 開 放 的 源 代 碼 和 文 檔 , 但 是 卻 將 其 作 爲 它 們 的 系 統 (“their” system) 出 售 — 只 有 很 少 的 修 改 古 老 的 Unix 和 傳 統 的 troff 的 源 代 碼 在 長 達 20 年 時 間 裏 不 再 可 以 自 由 獲 得 。 幸 運 的 是 , Caldera 收 購 了 SCO UNIX (2001). 隨 後 , Caldera 使 得 源 代 碼 可 以 在 網 上 獲 得 , 允 許 用 於 非 商 業 用 途 。 參 見 SEE ALSO 段
(譯 註 : 誰 能 想 到 , 現 在 , 2003 年 , SCO會 成 爲 自 由 軟 件 和 開 源 軟 件 界 共 同 的 敵 人 呢 ? 而 Caldera 又 在 什 麼 地 方 呢 ? ) 自 由 的 Free roff 任 何 商 業 的 roff 系 統 都 無 法 成 爲 roff 開 發 中 的 後 繼 者 。 商 業 社 會 中 的 每 個 人 都 只 對 他 們 自 己 的 事 情 感 興 趣 。 這 使 得 曾 經 如 此 優 秀 的 Unix 操 作 系 統 在 80 年 代 一 蹶 不 振 作 爲 對 如 此 快 速 的 商 業 化 過 程 的 補 救 (As a counter-measure to the galopping commercialization, 還 請 重 新 翻 譯 ), AT&T Bell Labs 貝 爾 實 驗 室 試 圖 發 起 一 個 恢 復 性 的 項 目 (? , a rescue project) , 使 用 他 們 的 Plan 9 操 作 系 統 。 它 可 以 免 費 用 於 非 商 業 用 途 , 甚 至 包 含 了 源 代 碼 。 但 是 它 有 一 個 專 利 許 可 證 , that empedes the free development ( 還 請 解 釋 詞 義 )。 這 種 想 法 早 已 過 時 , 因 此 Plan 9 沒 有 被 主 流 開 發 者 接 受 爲 自 己 的 平 臺 真 正 的 補 救 措 施 (? , remedy) 是 不 斷 出 現 的 自 由 操 作 系 統 (386BSD, GNU/ Linux, 等 等 .) 和 80 年 代 到 90 年 代 的 自 由 軟 件 工 程 。 他 們 實 現 了 傳 統 的 Unix 的 特 性 和 很 多 擴 展 , 因 此 舊 的 “XP體 驗 ” 不 會 丟 掉 (such that the old experience is not lost)。 進 入 21 世 紀 , 類 Unix 系 統 重 新 成 爲 計 算 機 工 業 中 的 主 導 因 素 — 這 要 感 謝 自 由 軟 件 最 重 要 的 自 由 roff 計 劃 是 GNU 移 植 版 本 的 troff, 由 James Clark 建 立 , 使 用 http://www.gnu.org/copyleft">GNU Public License. 它 叫 做 groff (GNU roff). 參 見 groff(1) 中 的 概 述
groff 系 統 仍 然 在 繼 續 開 發 。 它 與 傳 統 troff 兼 容 , 但 是 還 添 加 了 很 多 擴 展 。 它 是 第 一 個 可 以 在 幾 乎 所 有 操 作 系 統 上 運 行 的 roff 系 統 並 且 — 它 是 自 由 開 放 的 。 這 使 得 groff 成 爲 現 在 roff 的 事 實 標 準
使 用 USING ROFF
很 多 人 不 會 注 意 到 他 們 在 使 用 roff。 當 你 閱 讀 一 份 手 冊 頁 (man page) 時 , roff 工 作 在 後 臺 。 roff 文 檔 可 以 使 用 xditview(1x) 程 序 查 看 , 它 是 一 個 X 發 行 版 的 標 準 程 序 。 參 見 X(7x). 但 是 顯 式 地 使 用 roff 也 不 困 難 一 些 roff 實 現 提 供 了 包 裝 程 序 , 使 得 人 們 可 以 簡 單 地 在 命 令 行 使 用 roff 系 統 。 例 如 , GNU 的 roff 實 現 groff(1) 提 供 了 命 令 行 選 項 來 避 免 傳 統 troff 中 過 長 的 的 命 令 管 道 ; grog(1) 程 序 試 着 從 文 檔 猜 測 應 當 使 用 什 麼 參 數 來 運 行 groff; 不 習 慣 於 指 定 命 令 行 選 項 的 人 應 當 用 groffer(1) 程 序 來 圖 形 化 地 顯 示 groff 文 件 和 手 冊 頁 管 道 The roff Pipe
roff 系 統 由 預 處 理 器 (preprocessor), roff 排 版 程 序 和 後 處 理 器 (postprocessor) 組 成 。 這 種 結 構 使 用 了 大 量 的 管 道 piping 機 制 , 意 思 是 , 一 系 列 的 程 序 陸 續 地 被 調 用 , 隊 列 中 的 每 個 程 序 的 輸 出 就 作 爲 下 一 個 程 序 的 輸 入
sh# cat file | ... | preproc | ... | troff options | postproc 預 處 理 器 產 生 roff 代 碼 , 傳 給 一 個 roff 處 理 器 (例 如 , troff), 然 後 roff 處 理 器 接 下 來 產 生 中 間 輸 出 , 傳 給 一 個 後 處 理 器 程 序 , 用 來 打 印 或 者 產 生 最 終 輸 出 所 有 這 些 組 件 都 使 用 它 們 自 己 的 程 序 語 言 ; 每 種 語 言 是 與 其 他 組 件 完 全 無 關 的 。 此 外 , 還 可 以 包 括 爲 特 殊 目 標 而 製 作 (tailor) 的 roff 宏 包 大 多 數 roff 文 檔 中 摻 雜 着 使 用 一 些 包 中 的 宏 、 一 個 或 多 個 預 處 理 器 的 代 碼 , 還 會 添 加 roff 語 言 中 的 一 些 元 素 。 用 戶 很 少 需 要 用 到 roff 排 版 語 言 的 完 整 功 能 ; 只 有 宏 包 的 作 者 需 要 知 道 底 層 細 節 (gory details) 預 處 理 器 Preprocessors 預 處 理 器 是 任 何 產 生 符 合 roff 排 版 語 言 語 法 的 輸 出 的 程 序 。 每 個 預 處 理 器 都 有 它 自 己 的 語 言 , 在 預 處 理 器 運 行 時 被 翻 譯 爲 roff 代 碼 。 roff 文 檔 中 可 以 包 含 以 這 種 語 言 寫 成 的 片 段 ; 它 們 可 以 被 特 殊 的 roff 命 令 或 宏 識 別 (they are identified by special roff requests or macros)。 加 入 了 預 處 理 器 代 碼 的 文 檔 必 須 通 過 所 有 相 應 的 預 處 理 器 處 理 之 後 , 才 能 傳 給 真 正 的 roff 排 版 程 序 , 因 爲 真 正 的 roff 排 版 程 序 會 忽 略 所 有 陌 生 的 代 碼 。 預 處 理 器 只 會 分 析 並 轉 換 指 定 由 它 處 理 的 文 檔 部 分 有 大 量 的 自 由 /商 業 roff 預 處 理 器 。 一 些 不 能 在 所 有 系 統 上 使 用 , 還 有 一 些 預 處 理 器 被 認 爲 是 roff 系 統 不 可 分 割 的 部 分 。 傳 統 的 預 處 理 器 有
tbl 製 表 |
(table)
式 (mathematical
formulæ)
引 (bibliographic references) 置 的 宏 文 件 (macro) 其 他 已 知 預 處 理 器 , 但 不 是 在 所 有 系 統 上 都 可 用 , 包 括
gremlin(1) 圖 片 排 版 程 序 Formatter Programs A roff formatter 排 版 程 序 是 一 個 解 釋 用 roff 排 版 語 言 或 roff 宏 包 寫 成 的 文 檔 的 程 序 。 它 產 生 中 間 結 果 intermediate output, 將 送 入 單 一 設 備 後 處 理 器 。 後 處 理 器 必 須 在 排 版 程 序 的 命 令 行 選 項 中 指 定 。 文 檔 必 須 已 經 通 過 了 所 有 需 要 的 預 處 理 器 處 理 roff 排 版 程 序 的 輸 出 以 另 外 一 種 語 言 表 示 : intermediate output format 或 troff output. 這 種 語 言 最 初 詳 述 在 [CSTR #97] 中 ; 它 的 GNU 擴 展 記 載 在 groff_out(5) 中 。 中 間 輸 出 語 言 與 高 級 的 roff 語 言 相 比 像 一 種 彙 編 指 令 語 言 。 產 生 的 中 間 輸 出 是 爲 一 種 特 定 的 設 備 優 化 過 的 , 但 是 對 於 所 有 設 備 , 這 種 語 言 都 適 用 roff 排 版 程 序 是 整 個 roff 系 統 的 核 心 。 傳 統 roff 有 兩 個 排 版 程 序 : 對 應 字 符 設 備 的 nroff 和 對 應 圖 形 設 備 的 troff 通 常 , troff 這 個 名 字 泛 指 這 兩 種 排 版 程 序 (is used as a general term to refer to both formatters)。 設 備 後 處 理 器 Devices and Postprocessors 設 備 是 類 似 打 印 機 、 字 符 或 圖 形 終 端 等 的 硬 件 接 口 , 或 者 是 用 於 轉 換 爲 另 一 種 字 符 或 圖 形 設 備 的 軟 件 接 口 後 處 理 器 是 將 troff 輸 出 轉 化 爲 一 種 適 於 某 種 特 殊 設 備 的 格 式 的 程 序 。 對 於 輸 出 目 標 來 說 , roff 後 處 理 器 像 是 它 們 的 設 備 驅 動 每 種 設 備 都 有 爲 其 優 化 的 後 處 理 器 程 序 。 . 後 處 理 器 解 釋 中 間 輸 出 , 產 生 設 備 相 關 的 代 碼 , 傳 送 給 設 備 設 備 名 和 後 處 理 器 程 序 的 名 稱 是 不 固 定 的 , 因 爲 它 們 依 賴 於 計 算 機 的 軟 硬 件 的 能 力 。 例 如 , [CSTR #54] 中 提 到 的 傳 統 的 設 備 名 已 經 有 了 極 大 的 改 變 。 舊 的 硬 件 不 再 存 在 , 舊 的 圖 形 轉 換 程 序 與 現 代 同 等 功 能 的 程 序 相 比 太 不 精 確 了 例 如 , Postscript 設 備 post 在 傳 統 troff 中 分 辨 率 是 720, 而 groff 的 ps 設 備 是 72000, 提 高 了 100 倍 現 在 , 操 作 系 統 爲 大 多 數 類 似 打 印 機 的 硬 件 提 供 了 設 備 驅 動 , 因 此 不 必 爲 每 個 打 印 機 寫 一 個 特 殊 的 後 處 理 器 roff 編 程 ROFF PROGRAMMINGroff 文 檔 是 加 入 了 roff 排 版 元 素 的 普 通 文 檔 。 roff 排 版 語 言 非 常 強 大 ; 它 幾 乎 是 一 個 完 整 的 程 序 語 言 , 並 且 提 供 了 擴 充 自 身 的 元 素 。 使 用 這 些 元 素 , 就 可 以 開 發 爲 特 殊 程 序 定 製 的 宏 包 。 這 樣 的 宏 包 比 普 通 的 roff 要 容 易 上 手 得 多 。 所 以 大 多 數 人 會 選 擇 一 中 宏 包 , 不 用 去 關 心 roff 語 言 的 內 部 實 現 宏 包 Macro Packages 宏 包 是 一 些 適 於 以 便 利 的 辦 法 格 式 化 某 種 特 殊 文 檔 的 宏 的 集 合 。 它 們 簡 化 了 roff 的 使 用 。 一 個 包 的 宏 定 義 保 存 在 一 個 叫 做 name.tmac 的 文 件 中 (傳 統 的 命 名 是 tmac.name). 所 有 tmac 文 件 保 存 在 標 準 位 置 的 一 個 或 多 個 目 錄 中 。 有 關 宏 包 的 命 名 和 位 置 的 細 節 可 以 看 groff_tmac(5). 文 檔 中 用 到 的 宏 包 可 以 使 用 命 令 行 選 項 -m 提 供 給 排 版 程 序 , 參 見 troff(1), 它 們 也 可 以 在 文 檔 中 指 定 , 使 用 roff 語 言 的 “包 含 文 件 ” 命 令 , 參 見 groff(7). 著 名 的 傳 統 宏 包 有 man 用 來 處 理 傳 統 手 冊 頁 mdoc 處 理 BSD 樣 式 的 手 冊 頁 ; 此 類 書 籍 、 文 檔 和 信 件 的 宏 集 合 是 me (命 名 也 許 是 根 據 它 的 創 造 者 之 名 Eric Allman 而 來 ), ms (命 名 來 自 Manuscript Macros), 還 有 mm (命 名 來 自 Memorandum Macros). roff 排 版 語 言 The roff Formatting Language 傳 統 的 roff 排 版 語 言 記 述 在 troff 用 戶 手 冊 Troff User’s Manual [CSTR #54] 中 . roff 語 言 是 完 整 的 編 程 語 言 , 提 供 了 命 令 (request), 宏 定 義 , 轉 義 序 列 (escape sequence), 字 符 串 變 量 , 數 字 或 數 量 寄 存 器 (number or size registers), 還 有 流 程 控 制 語 句 Requests “命 令 ” 是 預 定 義 的 基 礎 的 排 版 命 令 , 與 shell 提 示 下 的 命 令 類 似 。 用 戶 可 以 定 義 類 似 “命 令 ” 的 元 素 , 使 用 roff 的 “預 定 義 ” 元 素 。 用 戶 定 義 的 命 令 就 被 叫 做 “宏 ” macros. 文 檔 作 者 不 會 體 會 到 命 令 和 宏 之 間 用 法 的 任 何 區 別 ; 它 們 都 寫 在 一 行 中 , 並 以 一 個 點 (dot, ’.’) 開 始 Escape sequences “轉 義 序 列 ” 是 以 反 斜 槓 (backslash, ’\’. ) 開 始 的 roff 元 素 。 它 們 可 以 被 插 入 到 任 何 地 方 , 包 括 文 本 的 一 行 中 間 。 它 們 用 來 實 現 不 同 的 功 能 , 可 以 使 用 \( 插 入 非 ASCII 字 符 , 使 用 \f 改 變 字 體 , 使 用 \" 插 入 行 內 註 釋 , 它 們 也 可 以 轉 義 特 殊 的 控 制 字 符 , 像 這 樣 \\, 還 有 很 多 很 多 其 他 的 功 能 Strings “字 符 串 ” 是 存 儲 一 個 字 符 串 的 變 量 。 字 符 串 以 .ds 命 令 存 儲 。 存 儲 的 字 符 串 可 以 用 \* 轉 義 序 列 獲 得 Registers “寄 存 器 ” 存 儲 數 字 和 數 量 。 寄 存 器 可 以 用 .nr 命 令 設 置 , 然 後 用 控 制 序 列 \n 來 獲 得 它 的 值 文 件 擴 展 名 FILE NAME EXTENSIONS手 冊 頁 使 用 章 節 號 作 爲 文 件 擴 展 名 , 例 如 本 文 檔 的 文 件 名 是 roff.7, 也 就 是 說 它 放 在 手 冊 頁 的 第 7 章 傳 統 的 宏 包 使 用 包 名 稱 作 爲 文 件 擴 展 名 , 例 如 file.me 意 思 是 使 用 了 me 宏 包 的 文 件 , file.mm 使 用 了 宏 包 mm, file.ms 用 的 是 ms, file.pic 則 是 pic 等 等 但 是 沒 有 roff 文 檔 統 一 的 命 名 方 式 , 儘 管 file.tr 用 於 troff file 在 現 在 和 當 時 都 是 一 樣 的 也 許 應 當 有 roff 文 件 擴 展 名 的 一 個 標 準 文 件 擴 展 名 與 less(1) 格 式 化 工 具 結 合 , 會 非 常 好 用 。 它 提 供 了 用 單 一 的 方 式 打 開 各 種 輸 入 的 可 能 性 , 方 法 是 定 義 一 個 shell 環 境 變 量 LESSOPEN. 這 種 辦 法 沒 有 什 麼 文 檔 , 這 是 一 個 例 子 : sh# LESSOPEN=’|lesspipe %s’ lesspipe 可 以 是 一 個 系 統 提 供 的 命 令 或 者 是 你 自 己 的 腳 本 。 編 輯 EDITING ROFF最 好 的 roff 文 檔 編 輯 器 是 Emacs, 參 見 emacs(1). 它 提 供 了 nroff 模 式 , 適 於 所 有 種 類 的 roff “方 言 ”。 可 以 用 下 面 的 命 令 來 激 活 這 種 模 式 當 用 Emacs 編 輯 文 檔 時 可 以 輸 入 ’M-x nroff-mode’ 來 改 變 模 式 , 這 裏 M-x 意 思 是 按 住 Meta 鍵 (或 Alt) 同 時 點 一 下 x 鍵 也 可 以 在 編 輯 器 加 載 文 件 的 時 候 , 自 動 改 變 模 式
.\"
Local Variables:
.\" -*- nroff -*- 作 爲 文 件 的 第 一 行 , 也 可 以 使 emacs 在 加 載 文 件 時 啓 用 nroff 模 式 。 不 幸 的 是 , 一 些 程 序 例 如 man 在 這 種 方 法 中 會 出 錯 ; 因 此 請 不 要 用 它 所 有 的 roff 排 版 程 序 都 提 供 了 自 動 的 斷 行 以 及 水 平 和 豎 直 間 距 。 爲 了 不 干 擾 它 的 功 能 , 應 當 注 意 以 下 幾 點 :
中 只 包 含 一 個 點 ), 或 者 一 行 註 釋 .\" (如 果 需 要 一 個 構 造 元 素 的 話 )
roff 命 令 構 造 出 來
Emacs 的 auto-fill
模 式 的 話 , 最
好 在 每 句 話 後
面 添 加 一 個 空
的 roff 命 令 (一 行 中
只 包 含 一 個 點 )
下 面 的 例 子 顯
示 了 最 佳 的 roff 編
輯 習 慣 是 怎 樣
的 這 是 一 個 roff 文
檔 的 例 子 . BUGSUNIX® 是 Open Group 的 註 冊 商 標 。 但 是 在 Caldera 在 2001 年 收 購 SCO UNIX 之 後 , 事 情 發 生 了 極 大 的 好 轉 (譯 註 : 爲 什 麼 2003 年 SCO 又 會 成 爲 M$ 的 走 狗 呢 ?) 參 見 SEE ALSO有 大 量 的 講 述 roff 的 文 檔 。 講 述 傳 統 troff 的 原 始 文 檔 仍 可 獲 得 , groff 的 所 有 方 面 也 都 詳 細 地 記 錄 在 文 檔 中 Internet
sites http://www.troff.org">“歷史上的 troff” 提 供 了 roff 所 有 歷 史 方 面 的 概 述 和 指 引 。 這 個 網 站 仍 在 建 設 ; 但 是 , 它 將 成 爲 roff 歷 史 的 主 要 來 源 Multics http://www.multicians.org">“Multics 的官方站點” 包 含 很 多 MIT 的 項 目 的 信 息 , CTSS, Multics, 早 期 的 Unix, 還 包 括 runoff; 尤 其 有 用 的 是 一 個 術 語 字 典 , 還 有 很 多 到 古 老 的 文 檔 的 鏈 接 Unix Archive http://www.tuhs.org/Archive/">“古老的 Unix 的檔案館” 提 供 了 古 老 的 Unix 的 源 碼 和 一 些 二 進 制 文 件 (包 括 troff 的 源 碼 和 它 的 文 檔 ), 它 們 是 Caldera 自 2001 年 以 來 公 開 的 , 例 如 著 名 的 Unix 版 本 7 的 PDP-11 平 臺 版 本 位 置 是 http://www.tuhs.org/Archive/PDP-11/Trees/V7">Unix V7 site. Developers at AT&T Bell Labs http://cm.bell-labs.com/cm/index.html">“貝爾實驗室計算和數學科學研究所” 提 供 了 搜 索 早 期 開 發 者 信 息 的 功 能
CSTR Papers http://cm.bell-labs.com/cm/cs/cstr.html">“貝爾實驗室 CSTR 網站” 保 存 了 原 始 的 troff 手 冊 (CSTR #54, #97, #114, #116, #122) 還 有 著 名 的 有 關 編 程 的 歷 史 文 檔 GNU roff http://www.gnu.org/software/groff">“groff 的官方網站” 提 供 了 自 由 的 roff 實 現 : groff, 並 且 它 是 roff 的 事 實 標 準 歷 史 文 檔 Historical roff Documentation 很 多 歷 史 文 檔 仍 然 可 以 在 線 獲 得 。 troff 語 言 主 要 的 兩 部 手 冊 是 [CSTR #54] J. F. Osanna, http://cm.bell-labs.com/cm/cs/54.ps">Nroff/Troff User's Manual; (《 用 戶 手 冊 》 ) Bell Labs, 1976; revised by Brian Kernighan, 1992. [CSTR #97] Brian Kernighan, http://cm.bell-labs.com/cm/cs/97.ps">A Typesetter-independent TROFF, (《 設 備 無 關 的 troff》 ) Bell Labs, 1981, revised March 1982. 將 roff 作 爲 一 種 “小 語 言 ”("little language") 來 講 述 的 論 文 有 [CSTR #114] Jon L. Bentley and Brian W. Kernighan, http://cm.bell-labs.com/cm/cs/114.ps">GRAP — A Language for Typesetting Graphs; (《 grap: 一 種 圖 形 排 版 語 言 》 ) Bell Labs, August 1984. [CSTR #116] Brian W. Kernighan, http://cm.bell-labs.com/cm/cs/116.ps">PIC -- A Graphics Language for Typesetting; (《 pic: 一 種 排 版 用 的 圖 形 控 制 語 言 》 ) Bell Labs, December 1984. [CSTR #122] J. L. Bentley, L. W. Jelinski, and B. W. Kernighan, http://cm.bell-labs.com/cm/cs/122.ps">CHEM — A Program for Typesetting Chemical Structure Diagrams, Computers and Chemistry; (《 chem: 排 版 化 學 結 構 圖 的 程 序 , 計 算 機 與 化 學 》 ) Bell Labs, April 1986. 手 冊 頁 Manual Pages 由 於 它 結 構 複 雜 , 完 整 的 roff 系 統 包 含 很 多 很 多 手 冊 頁 , 每 一 個 都 描 述 了 roff 的 一 個 方 面 。 不 幸 的 是 , 不 同 的 roff 實 現 之 間 , 它 們 的 手 冊 沒 有 相 同 的 命 名 格 式 在 groff 中 , 手 冊 頁 groff(1) 包 含 了 groff 相 關 的 所 有 文 檔 的 索 引 其 他 系 統 中 , 你 需 要 自 己 探 索 , 但 是 troff(1) 是 個 很 好 的 起 點 作 者 AUTHORSCopyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. This document is distributed under the terms of the FDL (GNU Free Documentation License) version 1.1 or later. You should have received a copy of the FDL on your system, it is also available on-line at the http://www.gnu.org/copyleft/fdl.html">GNU copyleft site. 此 文 檔 是 groff, GNU roff 套 件 的 一 部 分 。 它 的 作 者 是 bwarken [AT] mayn.de">Bernd Warken; 它 的 管 理 者 是 wl [AT] gnu.org">Werner Lemberg. [中 文 版 維 護 人 ]bbbush <bbbush [AT] 163.com> [中 文 版 最 新 更 新 ]2003.11.28 《 中 國 linux論 壇 man手 冊 翻 譯 計 劃 》 :跋本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh |