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 |