Manpages

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
系 统 的 演 变 与 操 作 系 统 的 历 史 紧 密 联 系 。 它 的 “先 祖 ” runoffJerry SaltzerCTSS 操 作 系 统 (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 来 写 - - 那 是 编 程 语 言 的 “祖 母 ”。 在 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)

eqn 数 学 公

式 (mathematical formulæ)
pic
绘 图 (diagram)

refer 书 目 索

引 (bibliographic references)

soelim 包 含 标 准 位

置 的 宏 文 件 (macro) 其 他 已 知 预 处 理 器 , 但 不 是 在 所 有 系 统 上 都 可 用 , 包 括

chem 化 学 公 式

(chemical formulæ)

grap 构 造 图 元

(graphical elements)

grn 插 入

gremlin(1) 图 片 排 版 程 序 Formatter Programs

A roff formatter 排 版 程 序 是 一 个 解 释 用 roff 排 版 语 言 或 roff 宏 包 写 成 的 文 档 的 程 序 。 它 产 生 中 间 结 果 intermediate output, 将 送 入 单 一 设 备 后 处 理 器 。 后 处 理 器 必 须 在 排 版 程 序 的 命 令 行 选 项 中 指 定 。 文 档 必 须 已 经 通 过 了 所 有 需 要 的 预 处 理 器 处 理

roff 排 版 程 序 的 输 出 以 另 外 一 种 语 言 表 示 : intermediate output formattroff 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 PROGRAMMING

roff 文 档 是 加 入 了 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:
.\" mode: nroff
.\" End:

• 有 一 系 列 的 文 件 扩 展 名 , 例 如 手 册 页 的 扩 展 名 , 会 自 动 触 发

nroff 模 式

• 理 论 上 , 可 以 将 下 面 的 序 列

.\" -*- nroff -*- 作 为 文 件 的 第 一 行 , 也 可 以 使 emacs 在 加 载 文 件 时 启 用 nroff 模 式 。 不 幸 的 是 , 一 些 程 序 例 如 man 在 这 种 方 法 中 会 出 错 ; 因 此 请 不 要 用 它 所 有 的 roff 排 版 程 序 都 提 供 了 自 动 的 断 行 以 及 水 平 和 竖 直 间 距 。 为 了 不 干 扰 它 的 功 能 , 应 当 注 意 以 下 几 点 :

• 不 要 在

roff 文 档 中 包 含 空 行 或 只 包 含 空 格 的 行 , 而 是 使 用 “空 行 ”命 令 (一 行

中 只 包 含 一 个 点 ), 或 者 一 行 注 释 .\" (如 果 需 要 一 个 构 造 元 素 的 话 )

• 不 要 在 行 首 用 空 格 , 因 为 这 会 导 致 不 可 预 测 的 行 为 。 段 落 缩 进 可 以 以 受 控 的 方 式 , 用

roff 命 令 构 造 出 来

• 每 句 话 应 当 放 到 自 己 的 一 行 中 , 因 为 句 号 后 面 的 空 格 的 处 理 方 法 是 根 据 它 结 束 的 是 短 语 还 是 句 子 而 不 同 的 。 要 区 别 这 两 种 情 况 , 在 每 句 话 后 面 加 上 一 个 换 行

• 另 外 要 使 用

Emacs 的 auto-fill 模 式 的 话 , 最 好 在 每 句 话 后 面 添 加 一 个 空 的 roff 命 令 (一 行 中 只 包 含 一 个 点 ) 下 面 的 例 子 显 示 了 最 佳 的 roff 编 辑 习 惯 是 怎 样 的 这 是 一 个 roff 文 档 的 例 子 .
. 这 是 同 一 段 中 的 下 一 句
.
. 这 是 下 一 个 句 子 , 它 比 较 长 , 分 成 了 多 行 ; 类 似
’cf.’ 这 样 的 短 语 可 以 很 容 易 地 识 别 , 因 为 其 中 的 “点 ”后 面 没 有 换 行
.
.
(在 输 出 时 , 它 们 仍 会 在 同 一 段 中 .)
.
(译 注 : 如 果 使 用 中 文 的 标 点 “。 ”就 不 用 考 虑 这 些 , 但 是 每 句 话 后 面 换 行 总 是 个 好 主 意 。 少 用
’.’ 为 妙 ) 除 了 Emacs, 其 他 一 些 编 辑 器 也 提 供 了 nroff 格 式 文 件 的 支 持 , 例 如 vim(1), 它 是 vi(1) 程 序 的 扩 展

BUGS

UNIX® 是 Open Group 的 注 册 商 标 。 但 是 在 Caldera 在 2001 年 收 购 SCO UNIX 之 后 , 事 情 发 生 了 极 大 的 好 转

(译 注 : 为 什 么 2003 年 SCO 又 会 成 为 M$ 的 走 狗 呢 ?)

参 见 SEE ALSO

有 大 量 的 讲 述 roff 的 文 档 。 讲 述 传 统 troff 的 原 始 文 档 仍 可 获 得 , groff 的 所 有 方 面 也 都 详 细 地 记 录 在 文 档 中

Internet sites
troff.org

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">“贝尔实验室计算和数学科学研究所” 提 供 了 搜 索 早 期 开 发 者 信 息 的 功 能

Plan 9

http://plan9.bell-labs.com">“Plan 9 操作系统” AT&T Bell Labs 贝 尔 实 验 室 的 作 品

runoff

http://web.mit.edu/Saltzer/www/publications/pubs.html">“Jerry Saltzer 的主页” 保 存 了 古 老 的 runoff 排 版 语 言 写 成 的 一 些 文 档

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) 是 个 很 好 的 起 点

作 者 AUTHORS

Copyright (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手 册 翻 译 计 划 》 :

http://cmpp.linuxforum.net

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh