Imported upstream version 1.5
[manpages-zh.git] / src / man7 / roff.7
blobd9aad39edb67ad02f491375ad8e6b5e29e48fc65
1 .ig
2 roff.man
4 Last update: 22 Apr 2002
6 This file is part of groff, the GNU roff type-setting system.
8 Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
9 written by Bernd Warken <bwarken@mayn.de>
10 maintained by Werner Lemberg <wl@gnu.org>
12 Permission is granted to copy, distribute and/or modify this document
13 under the terms of the GNU Free Documentation License, Version 1.1 or
14 any later version published by the Free Software Foundation; with the
15 Invariant Sections being this .ig-section and AUTHORS, with no
16 Front-Cover Texts, and with no Back-Cover Texts.
18 A copy of the Free Documentation License is included as a file called
19 FDL in the main directory of the groff source package.
22 .\" --------------------------------------------------------------------
23 .\" Setup
24 .\" --------------------------------------------------------------------
26 .mso www.tmac
28 .if n \{\
29 .  mso tty-char.tmac
30 .  ftr CR R
31 .  ftr CI I
32 .  ftr CB B
33 .\}
35 .if '\*[.T]'dvi' \{\
36 .  ftr CB CW
37 .\}
40 .\" --------------------------------------------------------------------
41 .\" String definitions
43 .\" Final `\""' comments are used to make Emacs happy, sic \""
45 .\" The `-' sign for options.
46 .ie t \{\
47 .  ds @- \-\"
48 .  ds @-- \-\-\"
49 .\}
50 .el \{\
51 .  ds @- -\"
52 .  ds @-- --\"
53 .\}
55 .ds Comment \.\[rs]\[dq]\"
56 .ds Ellipsis \.\|.\|.\&\"
59 .\" --------------------------------------------------------------------
60 .\" Begin of macro definitions
62 .de c
63 .\" this is like a comment request when escape mechanism is off
66 .eo
68 .c ---------------------------------------------------------------------
70 .de Text
71 .  nop \)\$*
74 .de CodeSkip
75 .  ie t \
76 .    sp 0.2v
77 .  el \
78 .    sp
81 .de Esc
82 .  ds @1 \$1\"
83 .  shift
84 .  Text \f[B]\[rs]\*[@1]\f[]\$*
85 .  rm @1
88 .de QuotedChar
89 .  ds @1 \$1
90 .  shift
91 .  nop `\f[B]\*[@1]\f[]'\$*
92 .  rm @1
95 .c --------------------------------------------------------------------
97 .c a shell command line
98 .de ShellCommand
99 .  br
100 .  ad l
101 .  nh
102 .  Text \f[I]sh#\h'1m'\f[]\f[CR]\$*\f[]\&\"
103 .  ft R
104 .  ft P
105 .  hy
106 .  ad
109 .c --------------------------------------------------------------------
111 .c ShortOpt ([c [punct]])
113 .c `-c' somewhere in the text.
114 .c The second argument is some trailing punctuation.
116 .de ShortOpt
117 .  ds @1 \$1\"
118 .  shift
119 .  nh
120 .  Text \f[CB]\*[@-]\f[]\f[B]\*[@1]\f[]\/\$*
121 .  hy
122 .  rm @1
125 .de TP+
126 .  br
127 .  ns
128 .  TP \$1
131 .c --------------------------------------------------------------------
133 .c Topic
135 .de Topic
136 .  TP 2m
137 .  Text \[bu]
141 .\" End of macro definitions
144 .\" --------------------------------------------------------------------
145 .\" Title
146 .\" --------------------------------------------------------------------
148 .TH ROFF 7 "23 April 2002" "Groff Version 1.18.1"
149 .SH NAME
150 roff \- roff 排版系统的概念和历史
153 .\" --------------------------------------------------------------------
154 .SH "描述 DESCRIPTION"
155 .\" --------------------------------------------------------------------
157 .I roff
158 是一系列排版程序,如
159 .IR troff ,
160 .IR nroff ,
161 .IR ditroff ,
162 .IR groff ,
163 等等的通称。
165 一个 roff 排版系统包含一个可扩展的文本格式化语言和一系列程序用以打印和转换为其他文本格式。
167 传统的,它是 Unix 的主要文本处理系统;现在,每个 类Unix 操作系统仍然附带一个 roff 系统作为核心软件包。
170 当今最普遍的 roff 系统是自由软件的实现
171 .IR "GNU roff",
172 .BR groff (1).
174 groff 之前的实现被称为传统的
175 .I classical
176 实现 (从 1973 年开始)。
178 .I groff
179 实现了它的传统的前辈的用法和功能,并且加入了更多扩展。
181 当前,由于
182 .I groff
183 是唯一可以在 (几乎是) 任何计算机系统上都可用的 roff 系统,因此它是事实上的 roff 标准。
186 在一些古老的 Unix 系统中,有一个叫做
187 .B roff
188 的可执行文件,实现了甚至更加古老的
189 .I Multics
190 操作系统中的
191 .B runoff 。
192 参见
193 .BR HISTORY
194 段落。
195 它的功能非常有限,即使与古老的 troff 相比;它不再被支持了。
197 因此,在本文档中,
198 .I roff
199 总是泛指 roff 系统
200 .IR "roff system" 
201 ,不是古老的 roff 可执行文件
204 尽管历史悠久,roff 当前还在广泛使用中,例如,UNIX 系统的手册页
205 .RI ( man\~pages\/ )
206 ,很多软件书籍,系统文档,标准和团体组织的文档都是用 roff 来写的。
208 roff 在文本设备上的输出效果仍然是无可比拟的,
209 并且,与其他自由的排版系统相比,它的图形输出也不差,
210 甚至强于很多商业的系统
213 最普遍的 roff 的应用是手册页
214 .I manual pages
215 (简称
216 .IR "man pages") ;
217 它是很多操作系统中的标准文档系统
220 此文档描述了围绕
221 .IR "roff system" 
222 开发的一些历史事件;
223 所有 roff 版本在用法方面的一些共同点,
224 roff 管道的细节--它经常被掩盖在类似
225 .BR groff (1)
226 等等的 “前端” 之后;
227 对排版语言的一般的概述;
228 一些写 roff 文档的技巧;
229 还有到更多资料的链接
232 .\" --------------------------------------------------------------------
233 .SH "历史 HISTORY"
234 .\" --------------------------------------------------------------------
236 .I roff
237 文本处理系统有很长的一段历史,可以回溯到60 年代。
239 roff 系统自身与 Unix 操作系统关系密切,
240 但是它的起源要从更早的操作系统 CTSS 和 Multics 开始。
243 .\" --------------------------------------------------------------------
244 .SS "祖先 The Predecessor runoff"
245 .\" --------------------------------------------------------------------
248 .I roff
249 系统的演变与操作系统的历史紧密联系。
251 它的 “先祖”
252 .B runoff
254 .I Jerry Saltzer
256 .I CTSS
257 操作系统
258 .RI ( "Compatible Time Sharing System" 
259 ,兼容分时系统 (?),1961)
260 上的作品。
262 CTTS 后来发展成为操作系统
263 .URL http://\:www.multicians.org "Multics" ,
264 Unix 的一个著名的来源,出现于 1963,同时
265 .I runoff
266 成为文档和文本处理的主要格式。
268 当时,这两种操作系统只能运行在非常昂贵的计算机之上,
269 因此它们大部分用于研究和官方及军队的任务之中
272 与现代的 roff 相比,
273 .I runoff
274 语言可以做的事非常有限。
276 在 60 年代,只能产生文本的输出。
278 这可以用一个长度为\~2 的命令 (request) 的集合实现,
279 这些命令的绝大部分都保持不变地被 roff 采用。
281 这种语言的模型是根据 “前计算机时代” 的排版习惯而建立的,
282 那时,以点 (dot, `.') 开头的行被写在手稿中,
283 向之后进行手工排版工作的工人指示格式化的要求
286 开始,runoff 程序是用
287 .I PL/1
288 语言写成的,后来用
289 .IR BCPL 
290 来写--那是
291 .IR C \~\c
292 编程语言的 “祖母”。
294 在 Multics 操作系统中,帮助系统由 runoff 来处理,
295 与 roff 管理 Unix 手册页的作用类似。
297 仍然有 runoff 语言写成的文档,
298 例如可以到 Saltzer 的主页看看。参见
299 .BR "SEE ALSO" 
303 .\" --------------------------------------------------------------------
304 .SS "传统的 nroff/troff 系统 The Classical nroff/troff System"
305 .\" --------------------------------------------------------------------
307 在 70 年代,Multics 的后裔 (offspring)
308 .I Unix
309 变得越来越普遍,因为它可以运行在廉价的计算机上,
310 并且那时在大学里可以很容易地获得。
312 在 MIT (麻省理工,the Massachusetts Institute of Technology), 
313 有人想在一台运行 Unix 的 PDP-11 计算机上驱动 Wang (王安公司?) 的
314 .I Graphic Systems CAT
315 排字机,一种图形化的输出设备。
317 由于 runoff 在这种任务上能力有限,它被
318 .IR "Josef F. Osanna" ,
319 (Multics 操作系统的主要开发者之一,几个 runoff 移植系统的作者)
320 继续开发,成为一种更强大的文本排版系统
323 .I runoff
324 这个名字被简化为
325 .IR roff .
326 Ocsanna 所设想的,极大扩展了的语言已经包含了一个完整的
327 .IR "roff" 
328 系统的所有元素。
330 所有现代的 roff 系统都试图实现同这个系统兼容。
332 因此 Joe Osanna 是当之无愧的所有 roff 系统之父
335 最早的
336 .I roff 
337 系统有三个排版程序
340 .B troff
341 .RI ( "typesetter roff\/" )
342 为它唯一支持的
343 .I CAT
344 排字机产生一个图形的输出
347 .B nroff
348 为终端和文本打印机产生合适的文本输出
351 .B roff
352 对最初的 runoff 程序的有限功能进行重新实现;
353 这个程序在后来的版本中被抛弃。
355 现在,
356 .I roff
357 这个名字只用来指代一个 troff/\:nroff 系统的整体
360 Osanna 的第一版用 PDP-11 的汇编语言实现,发布于 1973.
362 .I Brian Kernighan
363 加入到
364 .I roff
365 的开发中,使用 C\~编程语言将它进行了重写。
367 C\~版本发布于 1975.
370 .BR nroff / troff
371 程序使用的排版语言的语法记载在著名的
372 .IR "Troff User's Manual [CSTR\~#54]"
373 中,出版于 1976, Brian Kernighan 对它不断修订,直到 1992 年。
375 此文档是对传统的
376 .IR "classical troff" 
377 的说明. 所有后来的
378 .I roff
379 系统都试着与这个说明实现兼容
382 1977 年,Osanna 在他\~50 岁时,由于一次突发的心脏病而去世。
383 Kernighan 继续开发 troff。
385 下一个开发目标是赋予 troff 一个更一般的接口,以支持更多设备,
386 中间输出格式和 “后处理” 系统。
388 这使得
389 .I "roff"
390 系统的结构趋于完整,现在仍然被使用。参见
391 .BR "USING ROFF" 
392 段。
394 1979 年,它们被写入论文
395 .IR "[CSTR\~#97]" .
396 这个新的 troff 版本是所有现存的较新的 troff 系统的基础,包括
397 .IR groff .
399 在一些系统上,这个设备无关的
400 .I troff
401 有一个可执行文件叫做
402 .BR ditroff (7).
404 所有现代的
405 .B troff
406 程序都已经自动提供了对 distroff 完整的兼容性
409 .\" --------------------------------------------------------------------
410 .SS "商业化 Commercialization"
411 .\" --------------------------------------------------------------------
413 免费的 Unix\~7 操作系统商业化之后,出现了严重的退步。
415 一大批不同的操作系统浮出水面,为他们所作的扩展间的互不兼容而争斗。
417 幸好,这种不兼容没有影响到原始的 troff。
419 所有不同的商业版本的 roff 系统都大量使用了 
420 Osanna/\:Kernighan 的开放的源代码和文档,但是却将其作为
421 .BI "它们的" 
422 系统 (\[lq]their\[rq] system) 出售\[em] 只有很少的修改
425 古老的 Unix 和传统的 troff 的源代码在长达 20 年时间里不再可以自由获得。
428 幸运的是,Caldera 收购了 SCO UNIX (2001).
430 随后,Caldera 使得源代码可以在网上获得,允许用于非商业用途。参见
431 .BR "SEE ALSO" 
435 (译注:谁能想到,现在,2003 年,SCO会成为自由软件和开源软件界共同的敌人呢?
436 而Caldera 又在什么地方呢?)
439 .\" --------------------------------------------------------------------
440 .SS "自由的 Free roff"
441 .\" --------------------------------------------------------------------
443 任何商业的 roff 系统都无法成为 roff 开发中的后继者。
445 商业社会中的每个人都只对他们自己的事情感兴趣。
447 这使得曾经如此优秀的 Unix 操作系统在 80 年代一蹶不振
450 作为对如此快速的商业化过程的补救
451 (As a counter-measure to the galopping commercialization,还请重新翻译),
452 AT&T Bell Labs 贝尔实验室试图发起一个恢复性的项目 (?,a rescue project) ,使用他们的
453 .I Plan\~9
454 操作系统。
456 它可以免费用于非商业用途,甚至包含了源代码。
457 但是它有一个专利许可证,that empedes the free development ( 还请解释词义)。
459 这种想法早已过时,因此 Plan\~9 没有被主流开发者接受为自己的平台
462 真正的补救措施 (?, remedy) 是不断出现的自由操作系统
463 (386BSD, GNU/\:Linux, 等等.) 和 80 年代到 90 年代的自由软件工程。
465 他们实现了传统的 Unix 的特性和很多扩展,因此旧的 “XP体验” 不会丢掉
466 (such that the old experience is not lost)。
468 进入 21 世纪,类 Unix 系统重新成为计算机工业中的主导因素 \[em] 这要感谢自由软件
471 最重要的自由 roff 计划是 GNU 移植版本的 troff,
472 由 James Clark 建立,使用
473 .URL http://\:www.gnu.org/\:copyleft "GNU Public License" .
475 它叫做
476 .I groff
477 .RI ( "GNU roff" ).
478 参见
479 .BR groff (1)
480 中的概述
483 groff 系统仍然在继续开发。
485 它与传统 troff 兼容,但是还添加了很多扩展。
487 它是第一个可以在几乎所有操作系统上运行的 roff 系统并且 \[em] 它是自由开放的。
489 这使得 groff 成为现在 roff 的事实标准
492 .\" --------------------------------------------------------------------
493 .SH "使用 USING ROFF"
494 .\" --------------------------------------------------------------------
496 很多人不会注意到他们在使用 roff。
498 当你阅读一份手册页 (man page) 时,roff 工作在后台。
500 roff 文档可以使用
501 .BR xditview (1x)
502 程序查看,它是一个 X 发行版的标准程序。参见
503 .BR X (7x).
505 但是显式地使用 roff 也不困难
508 一些 roff 实现提供了包装程序,使得人们可以简单地在命令行使用 roff 系统。
510 例如,GNU 的 roff 实现
511 .BR groff (1)
512 提供了命令行选项来避免传统 troff 中过长的的命令管道;
513 .BR grog (1)
514 程序试着从文档猜测应当使用什么参数来运行 groff;
515 不习惯于指定命令行选项的人应当用
516 .BR groffer (1)
517 程序来图形化地显示 groff 文件和手册页
520 .\" --------------------------------------------------------------------
521 .SS "管道 The roff Pipe"
522 .\" --------------------------------------------------------------------
524 roff 系统由预处理器 (preprocessor),roff 排版程序和后处理器 (postprocessor) 组成。
526 这种结构使用了大量的管道
527 .I piping
528 机制,意思是,一系列的程序陆续地被调用,
529 队列中的每个程序的输出就作为下一个程序的输入
531 .CodeSkip
533 .ds @1 "cat \f[I]file\f[P] |\""
534 .ds @2 "\*[Ellipsis] | \f[I]preproc\f[P] | \*[Ellipsis] |\""
535 .ds @3 "troff \f[I]options\f[P] | \f[I]postproc\f[P]\""
537 .ShellCommand "\*[@1] \*[@2] \*[@3]"
539 .rm @1
540 .rm @2
541 .rm @3
543 预处理器产生 roff 代码,传给一个 roff 处理器 (例如,troff),
544 然后 roff 处理器接下来产生中间输出,传给一个后处理器程序,
545 用来打印或者产生最终输出
548 所有这些组件都使用它们自己的程序语言;
549 每种语言是与其他组件完全无关的。
551 此外,还可以包括为特殊目标而制作 (tailor) 的 roff 宏包
554 大多数 roff 文档中掺杂着使用一些包中的宏、
555 一个或多个预处理器的代码,还会添加 roff 语言中的一些元素。
557 用户很少需要用到 roff 排版语言的完整功能;
558 只有宏包的作者需要知道底层细节 (gory details)
562 .\" --------------------------------------------------------------------
563 .SS "预处理器 Preprocessors"
564 .\" --------------------------------------------------------------------
566 预处理器是任何产生符合 roff 排版语言语法的输出的程序。
568 每个预处理器都有它自己的语言,在预处理器运行时被翻译为 roff 代码。
570 roff 文档中可以包含以这种语言写成的片段;
571 它们可以被特殊的 roff 命令或宏识别
572 (they are identified by special roff requests or macros)。
574 加入了预处理器代码的文档必须通过所有相应的预处理器处理之后,
575 才能传给真正的 roff 排版程序,
576 因为真正的 roff 排版程序会忽略所有陌生的代码。
578 预处理器只会分析并转换指定由它处理的文档部分
581 有大量的自由/商业 roff 预处理器。
583 一些不能在所有系统上使用,
584 还有一些预处理器被认为是 roff 系统不可分割的部分。
586 传统的预处理器有
589 .de @TP
590 .\" local indent for .TP
591 .TP \\w'\\f[B]soelim\\f[P]'u+2n
595 .PD 0
596 .@TP
597 .B tbl
598 制表 (table)
599 .@TP
600 .B eqn
601 数学公式 (mathematical formul\[ae])
602 .@TP
603 .B pic
604 绘图 (diagram)
605 .@TP
606 .B refer
607 书目索引 (bibliographic references)
608 .@TP
609 .B soelim
610 包含标准位置的宏文件 (macro)
615 其他已知预处理器,但不是在所有系统上都可用,包括
619 .PD 0
620 .@TP
621 .B chem
622 化学公式 (chemical formul\[ae])
623 .@TP
624 .B grap
625 构造图元 (graphical elements)
626 .@TP
627 .B grn
628 插入
629 .BR gremlin (1)
630 图片
634 .rm @TP
636 .\" --------------------------------------------------------------------
637 .SS "排版程序 Formatter Programs"
638 .\" --------------------------------------------------------------------
641 .I roff formatter
642 排版程序是一个解释用 roff 排版语言或 roff 宏包写成的文档的程序。
644 它产生中间结果
645 .IR "intermediate output" ,
646 将送入单一设备后处理器。后处理器必须在排版程序的命令行选项中指定。
648 文档必须已经通过了所有需要的预处理器处理
651 roff 排版程序的输出以另外一种语言表示:
652 .IR "intermediate output format"
654 .IR "troff output" .
655 这种语言最初详述在
656 .IR "[CSTR\~#97]" 
657 中;它的 GNU 扩展记载在
658 .BR groff_out (5)
659 中。
661 中间输出语言与高级的 roff 语言相比像一种汇编指令语言。
663 产生的中间输出是为一种特定的设备优化过的,
664 但是对于所有设备,这种语言都适用
667 roff 排版程序是整个 roff 系统的核心。
669 传统 roff 有两个排版程序:
670 对应字符设备的
671 .B nroff
672 和对应图形设备的
673 .B troff
676 通常,
677 .I troff
678 这个名字泛指这两种排版程序
679 (is used as a general term to refer to both formatters)。
682 .\" --------------------------------------------------------------------
683 .SS "设备 后处理器 Devices and Postprocessors"
684 .\" --------------------------------------------------------------------
686 设备是类似打印机、字符或图形终端等的硬件接口,
687 或者是用于转换为另一种字符或图形设备的软件接口
690 后处理器是将 troff 输出转化为一种适于某种特殊设备的格式的程序。
692 对于输出目标来说,roff 后处理器像是它们的设备驱动
695 每种设备都有为其优化的后处理器程序。.
697 后处理器解释中间输出,产生设备相关的代码,传送给设备
700 设备名和后处理器程序的名称是不固定的,
701 因为它们依赖于计算机的软硬件的能力。
703 例如,
704 .I [CSTR\~#54]
705 中提到的传统的设备名已经有了极大的改变。
707 旧的硬件不再存在,旧的图形转换程序与现代同等功能的程序相比太不精确了
710 例如,Postscript 设备
711 .I post
712 在传统 troff 中分辨率是 720,而 groff 的
713 .I ps
714 设备是 72000, 提高了 100 倍
717 现在,操作系统为大多数类似打印机的硬件提供了设备驱动,
718 因此不必为每个打印机写一个特殊的后处理器
721 .\" --------------------------------------------------------------------
722 .SH "roff 编程 ROFF PROGRAMMING"
723 .\" --------------------------------------------------------------------
725 roff 文档是加入了 roff 排版元素的普通文档。
727 roff 排版语言非常强大;
728 它几乎是一个完整的程序语言,并且提供了扩充自身的元素。
730 使用这些元素,就可以开发为特殊程序定制的宏包。
732 这样的宏包比普通的 roff 要容易上手得多。
734 所以大多数人会选择一中宏包,
735 不用去关心 roff 语言的内部实现
738 .\" --------------------------------------------------------------------
739 .SS "宏包 Macro Packages"
740 .\" --------------------------------------------------------------------
742 宏包是一些适于以便利的办法格式化某种特殊文档的宏的集合。
744 它们简化了 roff 的使用。
746 一个包的宏定义保存在一个叫做
747 .IB name .tmac
748 的文件中 (传统的命名是
749 .BI tmac. name\c
752 所有 tmac 文件保存在标准位置的一个或多个目录中。
754 有关宏包的命名和位置的细节可以看
755 .BR groff_tmac (5).
758 文档中用到的宏包可以使用命令行选项
759 .ShortOpt m 
760 提供给排版程序, 参见
761 .BR troff (1),
762 它们也可以在文档中指定,使用 roff 语言的 “包含文件” 命令,参见
763 .BR groff (7).
766 著名的传统宏包有
767 .I man
768 用来处理传统手册页
769 .I mdoc
770 处理 BSD 样式的手册页;此类书籍、文档和信件的宏集合是
771 .I me
772 (命名也许是根据它的创造者之名
773 .I Eric
774 Allman 而来),
775 .I ms
776 (命名来自
777 .IR "Manuscript Macros\/" ),
778 还有
779 .I mm
780 (命名来自
781 .IR "Memorandum Macros\/" ).
784 .\" --------------------------------------------------------------------
785 .SS "roff 排版语言 The roff Formatting Language"
786 .\" --------------------------------------------------------------------
788 传统的 roff 排版语言记述在 troff 用户手册
789 .I Troff User's Manual
790 .IR "[CSTR\~#54]" 
791 中.
793 roff 语言是完整的编程语言,提供了命令 (request),宏定义,转义序列 (escape sequence),
794 字符串变量,数字或数量寄存器 (number or size registers),还有流程控制语句
797 .I Requests
798 “命令” 是预定义的基础的排版命令,与 shell 提示下的命令类似。
800 用户可以定义类似 “命令” 的元素,使用 roff 的 “预定义” 元素。
802 用户定义的命令就被叫做 “宏”
803 .IR macros .
805 文档作者不会体会到 命令和宏 之间用法的任何区别;
806 它们都写在一行中,并以一个点 (dot, `.') 开始
809 .I Escape sequences
810 “转义序列” 是以反斜杠 (backslash, 
811 .QuotedChar \[rs] .
812 ) 开始的 roff 元素。
813 它们可以被插入到任何地方,包括文本的一行中间。
815 它们用来实现不同的功能,可以使用
816 .Esc ( 
817 插入非 ASCII 字符,使用
818 .Esc f 
819 改变字体,使用
820 .Esc \[dq] 
821 插入行内注释,它们也可以转义特殊的控制字符,像这样
822 .Esc \[rs] ,
823 还有很多很多其他的功能
826 .I Strings
827 “字符串” 是存储一个字符串的变量。
829 字符串以
830 .B .ds
831 命令存储。
833 存储的字符串可以用
834 .B \[rs]*
835 转义序列获得
838 .I Registers
839 “寄存器” 存储数字和数量。
841 寄存器可以用
842 .B .nr
843 命令设置,然后用控制序列
844 .BR "\[rs]n" 
845 来获得它的值
848 .\" --------------------------------------------------------------------
849 .SH "文件扩展名 FILE NAME EXTENSIONS"
850 .\" --------------------------------------------------------------------
852 手册页使用章节号作为文件扩展名,例如本文档的文件名是
853 .IR roff.7 ,
854 也就是说它放在手册页的第 \~7 章
857 传统的宏包使用包名称作为文件扩展名,例如
858 .IB file. me
859 意思是使用了
860 .I me
861 宏包的文件,
862 .IB file. mm
863 使用了宏包
864 .IR mm ,
865 .IB file. ms
866 用的是
867 .IR ms ,
868 .IB file. pic
869 则是
870 .I pic
871 等等
874 但是没有 roff 文档统一的命名方式,尽管
875 .IB file. tr
876 用于
877 .I troff file
878 在现在和当时都是一样的
880 也许应当有 roff 文件扩展名的一个标准
883 文件扩展名与
884 .BR less (1)
885 格式化工具结合,会非常好用。
887 它提供了用单一的方式打开各种输入的可能性,
888 方法是定义一个 shell 环境变量
889 .BR LESSOPEN .
890 这种办法没有什么文档,这是一个例子:
892 .CodeSkip
893 .ShellCommand LESSOPEN='|lesspipe %s'
894 .CodeSkip
896 .B lesspipe
897 可以是一个系统提供的命令或者是你自己的脚本。
900 .\" --------------------------------------------------------------------
901 .SH "编辑 EDITING ROFF"
902 .\" --------------------------------------------------------------------
904 最好的 roff 文档编辑器是 Emacs,参见
905 .BR emacs (1).
906 它提供了
907 .I nroff
908 模式,适于所有种类的 roff “方言”。
910 可以用下面的命令来激活这种模式
913 当用 Emacs 编辑文档时可以输入
914 .RI ` "M-x nroff-mode" '
915 来改变模式,这里
916 .B M-x
917 意思是按住
918 .B Meta
919 键 (或
920 .BR Alt )
921 同时点一下
922 .BR x\~ 
926 也可以在编辑器加载文件的时候,自动改变模式
928 .Topic
929 最好的办法是将下面三行注释包含在文件末尾
931 .CodeSkip
933 .B \*[Comment] Local Variables:
934 .B \*[Comment] mode: nroff
935 .B \*[Comment] End:
938 .Topic
939 有一系列的文件扩展名,例如手册页的扩展名,会自动触发 nroff 模式
941 .Topic
942 理论上,可以将下面的序列
943 .CodeSkip
944 .B \*[Comment] \%-*-\ nroff\ -*-
945 .CodeSkip
946 作为文件的第一行,也可以使 emacs 在加载文件时启用 nroff 模式。
948 不幸的是,一些程序例如
949 .B man
950 在这种方法中会出错;因此请不要用它
953 所有的 roff 排版程序都提供了自动的断行以及水平和竖直间距。
955 为了不干扰它的功能,应当注意以下几点:
957 .Topic
958 不要在 roff 文档中包含空行或只包含空格的行,
960 而是使用“空行”命令 (一行中只包含一个点),或者一行注释
961 .B \*[Comment]
962 (如果需要一个构造元素的话)
964 .Topic
965 不要在行首用空格,因为这会导致不可预测的行为。
967 段落缩进可以以受控的方式,用 roff 命令构造出来
969 .Topic
970 每句话应当放到自己的一行中,因为句号后面的空格的处理方法是根据它结束的是短语还是句子而不同的。
972 要区别这两种情况,在每句话后面加上一个换行
974 .Topic
975 另外要使用 Emacs 的 auto-fill 模式的话,最好在每句话后面添加一个空的 roff 命令 (一行中只包含一个点)
978 下面的例子显示了最佳的 roff 编辑习惯是怎样的
982 这是一个 roff 文档的例子.
983 .Text .
984 这是同一段中的下一句.
985 .Text .
986 这是下一个句子,它比较长,分成了多
987 行;类似 `cf.' 这样的短语可以很容易地
988 识别,因为其中的“点”后面没有换行.
989 .Text .
990 (在输出时,它们仍会在同一段中.)
991 .Text .
992 (译注:如果使用中文的标点“。”就不用考虑这些,
993 但是每句话后面换行总是个好主意。少用 `.' 为妙)
997 除了 Emacs,其他一些编辑器也提供了 nroff 格式文件的支持,例如
998 .BR vim (1),
999 它是
1000 .BR vi (1)
1001 程序的扩展
1004 .\" --------------------------------------------------------------------
1005 .SH BUGS
1006 .\" --------------------------------------------------------------------
1008 .I UNIX\[rg]
1009 是 Open Group 的注册商标。
1011 但是在 Caldera 在 2001 年收购 SCO UNIX 之后,事情发生了极大的好转
1014 (译注:为什么 2003 年 SCO 又会成为 M$ 的走狗呢?)
1017 .\" --------------------------------------------------------------------
1018 .SH "参见 SEE ALSO"
1019 .\" --------------------------------------------------------------------
1021 有大量的讲述 roff 的文档。
1023 讲述传统 troff 的原始文档仍可获得,groff 的所有方面也都详细地记录在文档中
1026 .\" --------------------------------------------------------------------
1027 .SS "Internet sites"
1028 .\" --------------------------------------------------------------------
1031 troff.org
1032 .URL http://\:www.troff.org "“历史上的 troff”"
1033 提供了 roff 所有历史方面的概述和指引。
1035 这个网站仍在建设;但是,它将成为 roff 历史的主要来源
1038 Multics
1039 .URL http://\:www.multicians.org "“Multics 的官方站点”"
1040 包含很多 MIT 的项目的信息,CTSS,Multics,早期的 Unix,还包括
1041 .IR  runoff ;
1042 尤其有用的是一个术语字典,还有很多到古老的文档的链接
1045 Unix Archive
1046 .URL http://\:www.tuhs.org/\:Archive/ \
1047      "“古老的 Unix 的档案馆”"
1049 提供了古老的 Unix 的源码和一些二进制文件
1050 (包括 troff 的源码和它的文档),它们
1051 是 Caldera 自 2001 年以来公开的,例如著名的 Unix 版本\~7
1052 的 PDP-11 平台版本位置是
1053 .URL http://\:www.tuhs.org/\:Archive/\:PDP-11/\:Trees/\:V7 \
1054      "Unix V7 site" .
1057 Developers at AT&T Bell Labs
1058 .URL http://\:cm.bell-labs.com/\:cm/\:index.html \
1059      "“贝尔实验室计算和数学科学研究所”"
1061 提供了搜索早期开发者信息的功能
1064 Plan 9
1065 .URL http://\:plan9.bell-labs.com "“Plan\~9 操作系统”"
1067 AT&T Bell Labs 贝尔实验室的作品
1070 runoff
1071 .URL http://web.mit.edu/\:Saltzer/\:www/\:publications/\:pubs.html \
1072 "“Jerry Saltzer 的主页”"
1074 保存了古老的 runoff 排版语言写成的一些文档
1077 CSTR Papers
1078 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html \
1079      "“贝尔实验室 CSTR 网站”"
1081 保存了原始的 troff 手册 (CSTR #54, #97, #114, #116, #122)
1082 还有著名的有关编程的历史文档
1085 GNU roff
1086 .URL http://\:www.gnu.org/\:software/\:groff "“groff 的官方网站”"
1087 提供了 自由的 roff 实现:groff,并且它是 roff 的事实标准
1090 .\" --------------------------------------------------------------------
1091 .SS "历史文档 Historical roff Documentation"
1092 .\" --------------------------------------------------------------------
1094 很多
1095 .troff
1096 历史文档仍然可以在线获得。
1098 troff 语言主要的两部手册是
1101 [CSTR\~#54]
1102 J. F. Osanna,
1103 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:54.ps \
1104      "\fINroff/\:Troff User's Manual\fP" ;
1106 (《用户手册》) Bell Labs, 1976; revised by Brian Kernighan, 1992.
1110 [CSTR\~#97]
1111 Brian Kernighan,
1112 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:97.ps \
1113      "\fIA Typesetter-independent TROFF\fP" ,
1115 (《设备无关的 troff》) Bell Labs, 1981, revised March 1982.
1118 将 roff 作为一种“小语言”("little language") 来讲述的论文有
1121 [CSTR\~#114]
1122 Jon L. Bentley and Brian W. Kernighan,
1123 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:114.ps \
1124      "\fIGRAP \(em A Language for Typesetting Graphs\fP" ;
1126 (《grap: 一种图形排版语言》) Bell Labs, August 1984.
1129 [CSTR\~#116]
1130 Brian W. Kernighan,
1131 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:116.ps \
1132      "\fIPIC -- A Graphics Language for Typesetting\fP" ;
1134 (《pic: 一种排版用的图形控制语言》) Bell Labs, December 1984.
1137 [CSTR\~#122]
1138 J. L. Bentley, L. W. Jelinski, and B. W. Kernighan,
1139 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:122.ps \
1140 "\fICHEM \(em A Program for Typesetting Chemical Structure Diagrams, \
1141 Computers and Chemistry\fP" ;
1143 (《chem: 排版化学结构图的程序,计算机与化学》) Bell Labs, April 1986.
1146 .\" --------------------------------------------------------------------
1147 .SS "手册页 Manual Pages"
1148 .\" --------------------------------------------------------------------
1150 由于它结构复杂,完整的 roff 系统包含很多很多手册页,
1151 每一个都描述了 roff 的一个方面。
1153 不幸的是,不同的 roff 实现之间,它们的手册没有相同的命名格式
1157 .IR groff 
1158 中,手册页
1159 .BR groff (1)
1160 包含了 groff 相关的所有文档的索引
1163 其他系统中,你需要自己探索,但是
1164 .BR troff (1)
1165 是个很好的起点
1168 .\" --------------------------------------------------------------------
1169 .SH "作者 AUTHORS"
1170 .\" --------------------------------------------------------------------
1172 Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
1175 This document is distributed under the terms of the FDL (GNU Free
1176 Documentation License) version 1.1 or later.
1178 You should have received a copy of the FDL on your system, it is also
1179 available on-line at the
1180 .URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
1183 此文档是
1184 .IR groff ,
1185 GNU roff 套件的一部分。
1187 它的作者是
1188 .MTO bwarken@mayn.de "Bernd Warken" ;
1189 它的管理者是
1190 .MTO wl@gnu.org "Werner Lemberg".
1193 .SH "[中文版维护人]"
1194 .B bbbush <bbbush@163.com>
1195 .SH "[中文版最新更新]"
1196 .B 2003.11.28
1197 .SH "《中国linux论坛man手册翻译计划》:"
1198 .BI http://cmpp.linuxforum.net 
1200 .\" --------------------------------------------------------------------
1201 .\" Emacs setup
1202 .\" --------------------------------------------------------------------
1204 .\" Local Variables:
1205 .\" mode: nroff
1206 .\" End: