Imported upstream version 1.5
[manpages-zh.git] / src / man7 / mdoc.samples.7
blobac0c3fe72092ec65c8e35d2a8bf7472b0883bdf2
1 .\" Copyright (c) 1990, 1993
2 .\"     The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. All advertising materials mentioning features or use of this software
13 .\"    must display the following acknowledgement:
14 .\"     This product includes software developed by the University of
15 .\"     California, Berkeley and its contributors.
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\"
33 .\" This tutorial sampler invokes every macro in the package several
34 .\" times and is guaranteed to give a worst case performance
35 .\" for an already extremely slow package.
36 .\"
37 .Dd December 30, 1993
38 .Os
39 .Dt MDOC.SAMPLES 7
40 .Sh NAME (名字)
41 .Nm mdoc.samples
42 .Nd 用
43 .Nm \-mdoc
44 编写
45 .Bx
46 手册 的 示范教程
47 .Sh SYNOPSIS (总览)
48 .Nm man mdoc.samples
49 .Sh DESCRIPTION (描述)
50 这个 示范教程 用于 编写
51 .Bx
52 手册页 (manual page), 它 使用了
53 .Nm \-mdoc
54 宏定义包, 这是个
55 .Em 基于内容
56
57 .Em 基于宏域 (domain Ns \-base)
58 的 格式化包, 交由
59 .Xr troff 1 
60 处理. 它的 前身
61 .Xr \-man 7
62 包, 定义了 页面布局 (page layout), 但是 把 诸如 字体控制 和 其他 排版 细节 
63 留给了 每一个 作者. 在
64 .Nm \-mdoc 
65 包里, 页面布局宏 构成了
66 .Em "页结构宏域 (page structure domain)"
67 它 由 标题, 小节首部, 显示 (displays) 和 列表 宏 组成. 这些 基本项目 影响
68 正文 在 格式化页上 的 物理位置.
69 作为 页结构宏域 的 补充, 这里 还 定义了 另外 两个 宏域, 手册宏域 和
70 基本正文宏域. 基本正文宏域 定义了 一些 宏, 执行 例如 引文 或 文字强调 
71 之类的任务.
72 手册宏域 定义的宏 是 非正式 日常用语 的 子集, 用于 描述 命令, 例程
73 和 相关的
74 .Bx
75 文件.
76 手册宏域里 的 宏 用来处理 命令名, 命令行参数和选项, 函数名称, 函数参数,
77 路径, 变量, 以及 到 其他手册页 的 参照 等.
78 这些 域项 留有 为 作者 和 手册页的 未来用户 设置的 值.
79 希望 从 手册集中 获得的 一致性 能够为 将来的 文档工具 提供 更简单的 转换.
80 .Pp
81 从 整个的
82 .Ux
83 手册页 上 来看, 每个 手册项
84 可以 简单的 理解为 一个 man page, 不用 注意 它的 实际长度, 
85 也没有 性别歧视 意图. (译注: 可能是双关语, man page...男人页)
86 .Sh 开始 GETTING STARTED
87 因为 人们 通常是 为了 能够 马上 使用 这些材料 的 时候 才 阅读 教程,所以 
88 我们 假设 此文档的 用户 是 缺乏耐心的.下面 简述一下 这份文档 剩余部分 
89 的 组织:
90 .Bl -enum -offset indent
91 .It
92 .Tn "TROFF 特性"
93 .Bl -tag -width flag -compact -offset indent
94 .It "使用宏" .
95 .It "参数中传递空白符" .
96 .It "尾部的空白符" .
97 .It "转义特殊字符" .
98 .El
99 .It
100 .Tn "手册页的结构分析"
101 .Bl -tag -width flag -compact -offset indent
102 .It "手册页的模板" .
105 .Tn "标题宏" .
107 .Tn "手册宏域和基本正文宏域的介绍" .
108 .Bl -tag -width flag -compact -offset indent
109 .It "名称背后 ..." .
110 .It "基本语法" .
113 .Tn "手册宏域"
114 .Bl -tag -width flag -compact -offset indent
115 .It "地址" .
116 .It "作者名字" .
117 .It "参数" .
118 .It "配置声明 (仅用于手册第四部分)" .
119 .It "命令修饰" .
120 .It "已定义的变量" .
121 .It "Errno's (仅用于手册第二部分)" .
122 .It "环境变量" .
123 .It "函数参数" .
124 .It "函数声明" .
125 .It "标志 (Flags)" .
126 .It "函数 (库例程)" .
127 .It "函数类型" .
128 .\" .It "头文件 Header File (源代码嵌入 including source code)" .
129 .It "交互命令" .
130 .It "名称" .
131 .It "选项" .
132 .It "路径" .
133 .It "变量" .
134 .It "参照" .
137 .Tn "基本正文宏域"
138 .Bl -tag -width flag -compact -offset indent
139 .It "AT&T 宏" .
140 .It "BSD 宏" .
141 .It "FreeBSD 宏" .
142 .It "UNIX 宏" .
143 .It "嵌入/引用宏 (Enclosure/Quoting)"
144 .Bl -tag -width flag -compact -offset indent
145 .It "尖括弧引用/嵌入" .
146 .It "方括弧引用/嵌入" .
147 .It "双引号引用/嵌入宏" .
148 .It "圆括弧引用/嵌入" .
149 .It "单引号引用/嵌入" .
150 .It "前缀宏" .
152 .It "No\-Op 或正文宏" .
153 .It "消除空白宏" .
154 .It "手册节对照" .
155 .It "参考和引用" .
156 .It "返回值 (仅用于手册页第二和第三部分)"
157 .It "Trade Names (缩略和类型名称)" .
158 .It "参数扩展" .
161 .Tn "页结构宏域"
162 .Bl -tag -width flag -compact -offset indent
163 .It "小节首部" .
164 .It "段落和空行" .
165 .It "保持 (Keeps)" .
166 .It "显示" .
167 .It "字体模式 (加重, 原文和 Symbolic)" .
168 .It "列表和栏" .
171 .Tn "预定义串"
173 .Tn "诊断"
175 .Tn "用 GROFF, TROFF 和 NROFF 格式化"
177 .Tn "臭虫 BUGS"
179 .ne 7
180 .Sh TROFF 特性
181 使用
182 .Nm \-mdoc
183 宏包 的 目的 是 简化 写手册页 的 过程. 理论上讲, 要使用
184 .Nm \-mdoc
185 不一定 要 学习
186 .Xr troff 1
187 的 腌脏细节; 然而, 有些 限制 无法回避, 最好 把它们 摆平.
188 而且 你 应该 知道, 这个 宏包 的 速度 比较
189 .Em 慢.
190 .Ss 宏的用法 Macro Usage
192 .Xr troff 1 
193 里, 宏调用的形式 是 在行首 以
194 .Ql \&\.
195 (句点符) 起始, 紧随其后 是 作为 宏名 的 两个字符. 参数 跟在 宏名 之后,
196 用 空格符 隔开. 这个 位于行首的 句点符 使
197 .Xr troff 1
198 把 紧随其后 的 两个字符 视作 宏名. 在 某些情况下 要把
199 .Ql \&\.
200 (句点符) 放在 行首, 但不希望 被理解成 宏请求, 方法是 在
201 .Ql \&\.
202 (句点) 前 使用
203 .Ql \e&
204 转义序列.
205 .Ql \e&
206 被 解释成 一段 长度为零 的 空白, 所以 不会 在 输出端 显示 出来.
208 一般说来,
209 .Xr troff 1
210 宏 最多 接受 九个参数, 忽略掉 其余的. 大多数 在
211 .Nm \-mdoc
212 里的 宏 支持 九个参数, 某些场合 可以 续加 参数, 或扩展到 下一行. (见
213 .Sx 扩展 Extensions ) .
214 有些宏 能够 处理 引号 引起来的 参数 (见 下面的
215 .Sx 在参数中传递空格符 ) .
217 大多数
218 .Nm \-mdoc
219 的 基本正文宏域 和 手册宏域 的宏 拥有 一种特性, 表现在 把 参数列表 当成
220 可调用的宏 
221 .Em 分析 (解释) .
222 这意味着 如果 参数列表里的参数 是 普通正文宏域 或 手册宏域
223 里的 宏, 并且 是 可调用宏, 那么 处理的时候 会 执行 或 调用.
224 这种情况下的 参数, 即 宏名, 不需要 用
225 .Ql \&\.
226 (句点符) 引导.
227 这种风格 使 很多 宏 嵌套 在 一起; 例如 这个 选项宏
228 .Ql \&.Op ,
229 可能
230 .Em 调用
231 标志和参数宏,
232 .Ql \&Fl
234 .Ql \&Ar ,
235 用来 说明 一个 带参数的 选项:
236 .Bl -tag -width "\&.Op \&Fl s \&Ar bytes" -offset indent
237 .It Op Fl s Ar bytes
238 来自
239 .Li \&.Op \&Fl s \&Ar bytes
242 为了 防止 把 两个字符的字符串 解释成 宏名, 在这个 字符串 前面 加上
243 .Ql \e& 
244 转义序列:
245 .Bl -tag -width "\&.Op \&Fl s \&Ar bytes" -offset indent
246 .It Op \&Fl s \&Ar bytes
247 来自
248 .Li \&.Op \e&Fl s \e&Ar bytes
251 这里的 字符串
252 .Ql \&Fl
254 .Ql \&Ar
255 没有 被解释成 宏.
256 在 这篇文档 和 相应的 快速参考手册
257 .Xr mdoc 7
258 中, 参数列表 按 可调用参数 分析 的 宏 称为 已分析, 可以 从 参数列表
259 调用 的 宏 称为 可调用.
260 这里 用的 术语 '分析' 可能是个 技术失误, 几乎 所有的
261 .Nm \-mdoc
262 宏 都 被分析, 既 用它 指 可调用宏, 又 指 有 调用 其他宏的 能力, 显得 很笨拙.
263 .Ss 在参数中传递空格符 Passing Space Characters in an Argument
264 某些时候 我们 希望 能够 把 含有 一个或多个 空格符 的 字符串 作为 单个参数
265 传递. 如果 要 突破 九个参数的限制, 或者 传递给 宏 的 参数 需要 一些 特定布置, 
266 这个 能力 是必须的. 例如, 函数宏
267 .Ql \&.Fn
268 的 第一个参数 是 函数名称, 剩下的参数 作为 函数的参数.
269 .Tn "ANSI C"
270 规定 函数的参数 在 圆括弧内 声明, 每个 参数 至少 由 两个 标示符 组成.
271 例如,
272 .Fa int foo .
274 有 两个方法 传递 嵌有空格符 的 参数.
275 .Em 补充一点 :
276 不幸的是, 在
277 .Tn AT&T
278 .Xr troff 
279 中, 那个 最容易的方法, 就是 作为 单个 参数 传递 两个引号之间的 
280 字符串和空格符, 非常 消耗 时间 和 内存空间.
281 虽然 它 对
282 .Xr groff
283 并不费事, 但是 为了 可移植性, 这种 做法 只限于 下列 有迫切需要 的 宏:
285 .Bl -tag -width 4n -offset indent -compact
286 .It Li \&Cd
287 配置声明 (手册第四部分
288 .Sx 概要 SYNOPSIS )
289 .It Li \&Bl
290 列表开始 (指定宽度的)
291 .It Li \&Em
292 加重文字
293 .It Li \&Fn
294 函数 (手册第二, 四部分)
295 .It Li \&It
296 列表项
297 .It Li \&Li
298 原文
299 .It Li \&Sy
300 Symbolic text
301 .It Li \&%B
302 书题
303 .It Li \&%J
304 期刊名
305 .It Li \&%O
306 参考选注
307 .It Li \&%R
308 报告题目(在参考文件中)
309 .It Li \&%T
310 在书籍或期刊中的题目
313 一种 传递 含空格符字符串 的 方法 是 用
314 .Ql \e\  
315 硬编码 或 不可填充空格符, 也就是 在 空格符 前 加上 转义符
316 .Ql \e .
317 这个 方法 适用于 任何宏, 但 有个 副效应, 它 干扰了 对 长行 的 调整.
318 .Xr Troff
319 把 这种 硬编码的 空格符 看作 可显示字符, 因此 无法 在需要的时候 把 字符串
320 分段 或 换行. 这种 方法 适用于 字符串 不会 到达 行边界 时, 例如:
321 .Bl -tag -width "fetch(char *str)" -offset indent
322 .It Fn fetch char\ *str
323 来自
324 .Ql \&.Fn fetch char\e *str
325 .It Fn fetch "char *str"
326 也可以来自
327 .Ql \&.Fn fetch "\\*qchar *str\\*q"
330 如果 忽略
331 .Ql \e
332 或 引号,
333 .Ql \&.Fn
334 宏 会认为 有 三个参数, 结果 成为:
336 .Dl Fn fetch char *str
338 如果 想知道 参数列表 到达 行边界 时 出现什么, 参看
339 .Sx BUGS
340 小节.
341 .Ss 尾部的空白符 Trailing Blank Space Characters
342 .Xr Troff
343 可能 被 行尾的 空白符 搞乱, 它的防范规则 是 消除 所有 位于行末 的 空白符. 
344 如果 坚持 在 行末 加上 空白符, 可以 用 硬空格符 和
345 .Ql \e&
346 转义字符. 例如,
347 .Ql string\e\ \e& .
348 .Ss 转义特殊字符 Escaping Special Characters
349 特殊字符, 如 换行符
350 .Ql \en ,
351 是 通过 用
352 .Ql \ee
353 替换
354 .Ql \e
355 (e.g.例如
356 .Ql \een )
357 保留住 反斜杠.
358 .Sh "手册页结构分析 THE ANATOMY OF A MAN PAGE"
359 手册页 可以 很容易的 通过 模板 构建, 模板 放在
360 .Pa /usr/share/misc/mdoc.template . 
361 另外 在
362 .Pa /usr/share/examples/mdoc
363 目录下 有一些 手册页 的 例子.
365 .Ss 手册页的模板 A manual page template
366 .Bd -literal -offset indent
367 \&.\e" 所有的手册页都要求有下面的内容
368 \&.Dd 月 日, 年Month day, year
369 \&.Os 操作系统 [版本/发行号] 
370 \&.Dt 文档标题 [手册节号][卷] 
371 \&.Sh 名称 NAME
372 \&.Nm 名称 name
373 \&.Nd 对名称的简单描述 one line description of name
374 \&.Sh 总览 SYNOPSIS
375 \&.Sh 描述 DESCRIPTION
376 \&.\e" 后面的内容取消注释后可以用在你需要的任何地方.
377 \&.\e" 紧接着的这条命令用于手册第二和第三部分, 函数的返回值.
378 \&.\e" .Sh 返回值 RETURN VALUES
379 \&.\e" 下面的命令用于手册第1, 6, 7, 8部分.
380 \&.\e" .Sh 环境 ENVIRONMENT
381 \&.\e" .Sh 文件 FILES
382 \&.\e" .Sh 示例 EXAMPLES
383 \&.\e" 下面的命令用于手册第1, 6, 7, 8部分
384 \&.\e"     (在shell下的命令返回值和标准错误类型的诊断)
385 \&.\e" .Sh 诊断 DIAGNOSTICS
386 \&.\e" 下面的命令用于手册第二和第三部分中的错误和信号处理.
387 \&.\e" .Sh 错误 ERRORS
388 \&.\e" .Sh 另见 SEE ALSO
389 \&.\e" .Sh 遵循 CONFORMING TO
390 \&.\e" .Sh 历史 HISTORY
391 \&.\e" .Sh 作者 AUTHORS
392 \&.\e" .Sh BUGS
395 模板中 的 第一个部分 是
396 .Pq Li \&.Dd , \&.Os , \&.Dt 
397 宏; 文档日期, 手册或其内容 针对的 操作系统, 手册页的标题
398 .Pq Em (大写)
399 和 该手册页 所属的节 (部分号).
400 这些宏 确认和标识了 这个手册页. 在 后面的
401 .Sx 标题宏 TITLE MACROS
402 将 继续 讨论.
404 这个 模板中 的 其余部分 是 小节首部 (section header)
405 .Pq Li \&.Sh ;
406 其中
407 .Sx 名称 NAME ,
408 .Sx 总览 SYNOPSIS
410 .Sx 描述 DESCRIPTION
411 是 必不可少的.
412 这些 首部 在
413 .Sx 页结构宏域
414 中 讨论 ( 介绍完
415 .Sx 手册域
416 之后 ) .
417 有一些 内容宏 被用来 示范 页面布局宏; 建议 接触 页面布局宏 前 先看看 内容宏.
418 .Sh 标题宏 TITLE MACROS
419 标题宏 是 页结构宏域 的 第一部分, 但 在 过去, 人们 如果 编写 手册页, 
420 它 是 手册的 第一部分, 也是 独立部分. 这里 设计了 三个宏 分别 描述
421 文档标题 或 手册标题, 操作系统, 和 制作日期. 它们 放在 文档的 最前面, 
422 一次 只 调用 一个, 用来 构建 文档的 页头 和 页脚.
423 .Bl -tag -width 6n
424 .It Li \&.Dt 文档标题 手册区# [卷]
425 文档标题 是 手册页的 主题, 由于 troff 的 限制, 必须
426 .Tn 大写 .
427 手册节号 (部分号) 介于 1,\ ...,\ 8, 如果 指明了 手册节号, 可以 忽略 卷标.
428 卷标 用 下列 标识的 一个 或 任意个:
429 .\" .Cl
430 .\" USD UNIX 用户增补文档 User's Supplementary Documents
431 .\" .Cl
432 .\" PS1 UNIX 程序员增补文档 Programmer's Supplementary Documents
434 .Bl -column SMM -offset indent -compact
435 .It Li AMD      UNIX 历史遗留的手册文档 Ancestral Manual Documents
436 .It Li SMM      UNIX 系统管理员手册 System Manager's Manual
437 .It Li URM      UNIX 参考手册 Reference Manual
438 .It Li PRM      UNIX 程序员手册 Programmer's Manual
441 缺省的卷标
442 .Li URM
443 代表 手册区 1, 6, and 7;
444 .Li SMM
445 代表 手册区 8;
446 .Li PRM
447 代表 手册区 2, 3, 4, and 5.
448 .\" .Cl
449 .\" MMI UNIX Manual Master Index
450 .\" .Cl
451 .\" CON UNIX Contributed Software Manual
452 .\" .Cl
453 .\" LOC UNIX Local Manual
454 .It Li \&.Os 操作系统 发行号#
455 操作系统 的 名字 可能 是 缩写, 像
456 .Tn BSD
458 .Tn FreeBSD
460 .Tn ATT .
461 发行号 应该 是 系统 专用的 标准发行术语, 像 4.3, 4.3+Tahoe, V.3, V.4.
462 识别不出的 参数 就 照原样 显示在 页脚. 例如, 典型的页脚 可能是:
464 .Dl \&.Os BSD 4.3
467 .Dl \&.Os FreeBSD 2.2
469 或者 象 订制的产品
471 .Dl \&.Os CS Department
473 作为 伯克利的缺省设置, 不带 参数 的
474 .Ql \&.Os
475 定义为
476 .Tn BSD 
477 (指定在文件
478 .Pa /usr/share/tmac/mdoc/doc-common 
479 中). 你 应该 把缺省值 设成
480 .Tn 本机.
481 注意, 如果 不设置
482 .Ql \&.Os
483 宏, 页面的左下角 会 很难看.
484 .It Li \&.Dd 月 日, 年 (month day, year)
485 日期 应当 写的 正规点:
487 .ne 5
488 .Dl January 25, 1989
490 .Sh 手册宏域 和 基本正文宏域的介绍
491 .Ss 名称背后 What's in a name...
492 手册宏域 的 宏名 来自 非正式的 日常用语, 用来 描述 命令, 子程序 及其 
493 相关文件. 在 写 手册页 时, 文字用语 有些 轻微的变化, 分别描述 三个 
494 不同 应用面. 首先是
495 .Nm \-mdoc
496 宏请求 的 用法. 其次, 用
497 .Nm \-mdoc
498 宏 描述
500 命令. 最后, 对 用户 具体的描述 这条命令; 也就是 在 手册页 正文 里 
501 讨论这条命令.
503 第一种 情况 下,
504 .Xr troff 1
505 宏 本身 就是 一种 命令; troff 命令 的 基本语法 是:
506 .Bd -filled -offset indent
507 \&.Va argument1 argument2 ... argument9
510 这里的
511 .Ql \&.Va
512 是 宏命令 或 宏请求, 紧随其后 的 是 待处理的参数.
513 第二种 情况 下, 使用 内容宏 描述 一条
515 命令 要 复杂 些; 一个 典型的
516 .Sx 总览 SYNOPSIS
517 命令行 显示 如下:
518 .Bd -filled -offset indent
519 .Nm filter
520 .Op Fl flag
521 .Ar infile outfile
524 这里的
525 .Nm filter
526 是 命令名称, 方括弧内 的
527 .Fl flag
528 是一个
529 .Em 标志
530 参数, 作为 可选参数 放在 代表 选项 的 方括弧内. 在
531 .Nm \-mdoc
532 术语 中,
533 .Ar infile
535 .Ar outfile
536 称为
537 .Em 参数 .
538 产生 上述效果 的 宏 是 这样的:
539 .Bd -literal -offset indent
540 \&.Nm filter
541 \&.Op \&Fl flag
542 \&.Ar infile outfile
545 第三种 情况 讨论 命令 及其语法, 包括 它们的例子, 可能 还有 更多细节.
546 上面的例子里, 可以把
547 .Ar infile
549 .Ar outfile
550 理解为
551 .Em 操作参数 operands
553 .Em 文件参数 file arguments .
554 有些 命令行参数 罗列的 十分 长:
555 .Bl -tag -width make -offset indent
556 .It Nm make
557 .Op Fl eiknqrstv
558 .Op Fl D Ar variable
559 .Op Fl d Ar flags
560 .Op Fl f Ar makefile
561 .Bk -words
562 .Op Fl I Ar directory
564 .Op Fl j Ar max_jobs
565 .Op Ar variable=value
566 .Bk -words
567 .Op Ar target ...
571 这里 你 可能 讨论
572 .Nm make
573 命令 和 它的参数
574 .Ar makefile ,
575 作为 一个 标志的参数,
576 .Fl f ,
577 或者 讨论 一个 可选的文件操作对象
578 .Ar target .
579 在 具体的上下文 中, 这种细节 能够 防止 混淆. 然而
580 .Nm \-mdoc
581 宏包中 没有为 标志的参数 准备 宏. 作为 替代 是
582 .Ql \&Ar
583 参数宏, 用于 描述 操作对象 或 文件参数 如
584 .Ar target
585 以及 标志的参数 如
586 .Ar variable .
587 上面的 make 命令行 是 这样 产生的:
588 .Bd -literal -offset indent
589 \&.Nm make
590 \&.Op Fl eiknqrstv
591 \&.Op Fl D Ar variable
592 \&.Op Fl d Ar flags
593 \&.Op Fl f Ar makefile
594 \&.Op Fl I Ar directory
595 \&.Op Fl j Ar max_jobs
596 \&.Op Ar variable=value
597 \&.Bk -words
598 \&.Op Ar target ...
599 \&.Ek
602 在 
603 .Sx Keeps 
604 小节中 将会 解释
605 .Ql \&.Bk
607 .Ql \&.Ek
608 宏.
609 .Ss 基本语法 General Syntax
610 手册宏域 和 基本正文宏域 的 宏 有着 相似的语法, 仅有 微小差别:
611 .Ql \&.Ar ,
612 .Ql \&.Fl ,
613 .Ql \&.Nm ,
615 .Ql \&.Pa
616 仅当 无参数调用时 才有 区别;
617 .Ql \&.Fn
619 .Ql \&.Xr
620 的 参数列表 要求 一定的 顺序;
621 .Ql \&.Op
623 .Ql \&.Fn
624 宏有嵌套限制. 所有的 内容宏 能够 识别和正确处理 标点符号, 每个 标点符号 
625 要在 前面 用 空格 隔开. 如果 给出 这样的 宏请求:
627 .Dl \&.Li sptr, ptr),
629 结果是:
631 .Dl Li sptr, ptr),
633 标点符号 没有 被识别 出来, 全都按 原文字体 输出. 如果 标点符号 前面用
634 空格符 隔开:
636 .Dl \&.Li "sptr , ptr ) ,"
638 结果是:
640 .Dl Li sptr , ptr ) ,
642 标点符号 被 识别出来 了, 缺省的字体 也 有别于 原文文字的字体.
645 .Ql \e& .
646 转义符 可以 去掉 标点字符 的 特殊意义.
647 .Xr Troff
648 作为 宏语言 有一定 的 限制, 当 表达的字串 中 含有
649 数学, 逻辑 或 引用 符号时 将 难于 处理:
650 .Bd -literal -offset indent-two
651 \&{+,\-,/,*,\&%,<,>,<=,>=,=,==,&,`,',"}
654 问题是
655 .Xr troff
656 会 认为 它 应该 执行或运算 这些 符号 代表的操作.
657 要 防止 这一点 可以 用
658 .Ql \e&
659 转义 这些 字符. 典型语法 在 下面 显示的 第一个 内容宏 中 可以见到,
660 .Ql \&.Ad .
661 .Sh 手册域 MANUAL DOMAIN
662 .Ss 地址宏 Address Macro
663 地址宏 用 这种 格式 标明地址: addr1[,addr2[,addr3]].
665 .Dl Usage: .Ad address ... \*(Pu
666 .Bl -tag -width ".Ad f1 , f2 , f3 :" -compact -offset 14n
667 .It Li \&.Ad addr1
668 .Ad addr1
669 .It Li \&.Ad addr1\ .
670 .Ad addr1 .
671 .It Li \&.Ad addr1\ , file2
672 .Ad addr1 , file2
673 .It Li \&.Ad f1\ , f2\ , f3\ :
674 .Ad f1 , f2 , f3 :
675 .It Li \&.Ad addr\ )\ )\ ,
676 .Ad addr ) ) ,
679 不带参数 调用
680 .Ql \&.Ad
681 是个 错误.
682 .Ql \&.Ad
683 可以被 (其他宏) 调用和分析.
684 .Ss 作者名称 Author Name
686 .Ql \&.An
687 宏用以 说明 这个文档的 描述对象的 作者, 或者 这篇手册页的 作者.
688 名字 信息 后面的 其他参数 被认为是 标点符号.
690 .Dl Usage: .An author_name \*(Pu
691 .Bl -tag -width ".An Joe Author ) ) ," -compact -offset 14n
692 .It Li \&.An Joe\ Author
693 .An Joe Author
694 .It Li \&.An Joe\ Author\ ,
695 .An Joe\ Author ,
696 .It Li \&.An Joe\ Author\ \&Aq\ nobody@FreeBSD.ORG
697 .An Joe Author Aq nobody@FreeBSD.ORG
698 .It Li \&.An Joe\ Author\ )\ )\ ,
699 .An Joe Author ) ) ,
702 .Ql \&.An
703 宏可以被 (其他宏) 分析和调用, 
704 不带参数调用
705 .Ql \&.An
706 是个错误.
707 .Ss 参数宏 Argument Macro
708 当 引用 命令行参数时 可以使用
709 .Ql \&.Ar
710 参数宏.
712 .Dl Usage: .Ar argument ... \*(Pu
713 .Bl -tag -width ".Ar file1 file2" -compact -offset 15n
714 .It Li \&.Ar
716 .It Li \&.Ar file1
717 .Ar file1
718 .It Li \&.Ar file1\ .
719 .Ar file1 .
720 .It Li \&.Ar file1 file2
721 .Ar file1 file2
722 .It Li \&.Ar f1 f2 f3\ :
723 .Ar f1 f2 f3 :
724 .It Li \&.Ar file\ )\ )\ ,
725 .Ar file ) ) ,
728 如果不带参数调用
729 .Ql \&.Ar
730 宏, 缺省为
731 .Ql Ar .
732 .Ql \&.Ar
733 宏可以被 (其他宏) 分析和调用.
734 .Ss 配置定义 (手册第四部分) Configuration Declaration
735 .Ql \&.Cd
736 宏用于描述
737 .Xr config 8
738 对 设备接口的定义 (手册第四部分).
739 这个宏 接受 引号内的参数 (只能是双引号).
741 .Bl -tag -width "device le0 at scode?" -offset indent
742 .It Cd "device le0 at scode?"
743 来自:
744 .Ql ".Cd device le0 at scode?" .
746 .Ss 命令修饰 Command Modifier
747 命令修饰宏和
748 .Ql \&.Fl
749 (标志) 命令相似, 除了
750 .Ql \&.Cm
751 宏 不在 任何参数 前 加 短横线 (dash).
752 传统的标志 以 短横线 开头, 但 一些 命令 或 命令的子集 不用这个.
753 命令修饰宏 也可以 和 交互命令 结合 使用, 如 编辑命令. 另见
754 .Sx Flags .
755 .Ss 已定义的变量 Defined Variables
756 在 头文件 中 已经 定义了的变量 用
757 .Ql \&.Dv 
758 宏说明.
760 .Dl Usage: .Dv defined_variable ... \*(Pu
761 .Bl -tag -width ".Dv MAXHOSTNAMELEN" -compact -offset 14n
762 .It Li ".Dv MAXHOSTNAMELEN"
763 .Dv MAXHOSTNAMELEN
764 .It Li ".Dv TIOCGPGRP )"
765 .Dv TIOCGPGRP )
768 不带参数调用
769 .Ql \&.Dv
770 是个错误.
771 .Ql \&.Dv
772 宏可以被 (其他宏) 分析和调用.
773 .Ss Errno's (仅供手册第二部分)
774 这个
775 .Ql \&.Er
776 errno 宏 指明 手册 第二部分, 库函数 的 错误返回值.(译注: 应该是系统调用)
777 下面的 第二个 例子 显示了
778 .Ql \&.Er
779 配合
780 .Ql \&.Bq
781 基本正文宏 的 使用, 就象 用在 手册 第二部分 一样.
783 .Dl Usage: .Er ERRNOTYPE ... \*(Pu
784 .Bl -tag -width ".Bq Er ENOTDIR" -compact -offset 14n
785 .It Li \&.Er ENOENT
786 .Er ENOENT
787 .It Li \&.Er ENOENT\ )\ ;
788 .Er ENOENT ) ;
789 .It Li \&.Bq \&Er ENOTDIR
790 .Bq Er ENOTDIR
793 不带参数调用
794 .Ql \&.Er
795 宏是个错误.
796 .Ql \&.Er
797 宏可以被 (其他宏) 分析和调用.
798 .Ss 环境变量 Environment Variables
799 .Ql \&.Ev
800 宏说明一个环境变量.
802 .Dl Usage: .Ev argument ... \*(Pu
803 .Bl -tag -width ".Ev PRINTER ) ) ," -compact -offset 14n
804 .It Li \&.Ev DISPLAY
805 .Ev  DISPLAY
806 .It Li \&.Ev PATH\ .
807 .Ev PATH .
808 .It Li \&.Ev PRINTER\ )\ )\ ,
809 .Ev PRINTER ) ) ,
812 不带参数调用
813 .Ql \&.Ev
814 宏是个错误.
815 .Ql \&.Ev
816 宏可以被 (其他宏) 分析和调用.
817 .Ss 函数参数 Function Argument
818 .Ql \&.Fa
819 宏 用来 说明 在手册的
820 .Sx 总览 SYNOPSIS
821 小节 之外的 函数参数, 或者在
822 .Sx 总览 SYNOPSIS
823 小节内, 其 参数列表对
824 .Ql \&.Fn
825 宏 而言 过长, 并且 必须 使用
826 .Ql \&.Fo
828 .Ql \&.Fc
829 宏时.
830 .Ql \&.Fa
831 也 有可能 用来 说明 结构成员.
833 .Dl Usage: .Fa function_argument ... \*(Pu
834 .Bl -tag -width ".Fa d_namlen\ )\ )\ ," -compact -offset 14n
835 .It Li \&.Fa d_namlen\ )\ )\ ,
836 .Fa d_namlen ) ) ,
837 .It Li \&.Fa iov_len
838 .Fa iov_len
841 不带参数调用
842 .Ql \&.Fa
843 宏是个错误.
844 .Ql \&.Fa
845 宏可以被 (其他) 宏分析和调用.
846 .Ss 函数声明 Function Declaration
847 .Ql \&.Fd
848 宏 用于 第二或 第三部分 手册页 的
849 .Sx 总览 SYNOPSIS
850 小节.
851 .Ql \&.Fd
852 宏 既 不调用 其他宏, 也 不能 被 其他宏调用.
854 .Dl Usage: .Fd include_file (or defined variable)
857 .Sx 总览 SYNOPSIS
858 小节, 如果 已经 说明了 某个 函数, 并且 没有 出现 省略号, 则
859 .Ql \&.Fd
860 宏请求 能够 产生 一个 断行.
861 在 函数 和 函数声明 之间, 垂直方向上 产生 一定的 空白.
862 .Ss 标志 Flags
863 .Ql \&.Fl
864 宏 处理 命令行标志. 它 在 标志前 加一个 短横线
865 .Ql \- ,
866 对于 交互命令 标志, 它 不需要 短横线, 可以用
867 .Ql \&.Cm
868 (命令修饰 command modifier)
869 宏替换, 它 没有 短横线.
871 .Dl Usage: .Fl argument ... \*(Pu
872 .Bl -tag -width ".Fl \-s \-t \-v" -compact -offset 14n
873 .It Li \&.Fl
875 .It Li \&.Fl cfv
876 .Fl cfv
877 .It Li \&.Fl cfv\ .
878 .Fl cfv .
879 .It Li \&.Fl s v t
880 .Fl s v t
881 .It Li \&.Fl -\ ,
882 .Fl - ,
883 .It Li \&.Fl xyz\ )\ ,
884 .Fl xyz ) ,
887 如果
888 .Ql \&.Fl
889 宏 不带 任何 参数, 将 只产生 一个 短横线, 代表 stdin/stdout.
890 注意 如果 把 一个 短横线 做为
891 .Ql \&.Fl
892 的参数, 结果 会 得到 两个短横线.
893 .Ql \&.Fl
894 宏可以被 (其他宏) 分析和调用.
895 .Ss 函数(库函数) Functions (library routines)
896 宏 .Fn 是 ANSI C 函数风格 的 模型.
897 .Bd -literal
898 Usage: .Fn [type] function [[type] parameters ... \*(Pu]
900 .Bl -tag -width ".Fn int align. .const * char *sptrsxx" -compact
901 .It Li "\&.Fn getchar"
902 .Fn getchar
903 .It Li "\&.Fn strlen ) ,"
904 .Fn strlen ) ,
905 .It Li \&.Fn "\\*qint align\\*q" "\\*qconst * char *sptrs\\*q" ,
906 .Fn "int align" "const * char *sptrs" ,
909 不带参数调用
910 .Ql \&.Fn
911 是一个错误.
912 .Ql \&.Fn
913 宏可以被 (其他宏) 分析和调用,
914 注意 任何 对 其他宏 的 调用 应该在
915 .Ql \&.Fn
916 宏调用 的 结尾处 给出 标记 (反括弧).
918 对于 八个 参数 以上的 函数 (尽管少见), 可以 用 宏
919 .Ql \&.Fo
920 (function open) 和
921 .Ql \&.Fc
922 (function close) 配合
923 .Ql \&.Fa
924 (function argument) 宏 的 使用, 突破 参数 过多 的 限制, 例如:
925 .Bd -literal -offset indent
926 \&.Fo "int res_mkquery"
927 \&.Fa "int op"
928 \&.Fa "char *dname"
929 \&.Fa "int class"
930 \&.Fa "int type"
931 \&.Fa "char *data"
932 \&.Fa "int datalen"
933 \&.Fa "struct rrec *newrr"
934 \&.Fa "char *buf"
935 \&.Fa "int buflen"
936 \&.Fc
939 产生:
940 .Bd -filled -offset indent
941 .Fo "int res_mkquery"
942 .Fa "int op"
943 .Fa "char *dname"
944 .Fa "int class"
945 .Fa "int type"
946 .Fa "char *data"
947 .Fa "int datalen"
948 .Fa "struct rrec *newrr"
949 .Fa "char *buf"
950 .Fa "int buflen"
955 .Ql \&.Fo
957 .Ql \&.Fc
958 可以被 (其他宏) 分析和调用. 在
959 .Sx 总览 SYNOPSIS
960 小节, 函数 总是 位于 行的开始 处.
961 如果 在
962 .Sx 总览 SYNOPSIS
963 小节 有 一个以上的 函数声明, 而且 函数类型 没有 说明, 则 会产生 一个 断行.
964 在 函数 和 函数 的 垂直方向 上 产生 一定的 空白. 此时
965 .Ql \&.Fn
966 宏 不按 troff 的 行长 检查 单词 边界, 有可能 难看的 从 单词中间 断开.
967 以后 会 解决 这个 问题.
968 .Ss 函数类型 Function Type
969 这个宏 设计 用在
970 .Sx 总览 SYNOPSIS
971 小节. 它 可以 毫无困难的 用在 手册页的 其他 地方, 但 它的 主要 目的
972 是 为 第二 和 第三部分 手册页的
973 .Sx 总览 SYNOPSIS
974 小节, 以 核心标准形式 (kernel normal form) 描述 函数类型
975 (它 导致 断行, 在 下一行 显示 函数 名称).
977 .Dl Usage: .Ft type ... \*(Pu
978 .Bl -tag -width "\&.Ft struct stat" -offset 14n -compact
979 .It Li \&.Ft struct stat
980 .Ft struct stat
983 .Ql \&.Ft
984 宏不能被其他宏调用.
985 .Ss 交互命令 Interactive Commands
987 .Ql \&.Ic
988 用于 说明 交互 或 内部命令.
990 .Dl Usage: .Ic argument ... \*(Pu
991 .Bl -tag -width ".Ic setenv , unsetenvxx" -compact -offset 14n
992 .It Li \&.Ic :wq
993 .Ic :wq
994 .It Li \&.Ic do while {...}
995 .Ic do while {...}
996 .It Li \&.Ic setenv\ , unsetenv
997 .Ic setenv , unsetenv
1000 不带参数调用
1001 .Ql \&.Ic
1002 是个错误.
1003 .Ql \&.Ic
1004 宏可以被 (其他宏) 分析和调用.
1005 .Ss 名称宏 Name Macro
1006 .Ql \&.Nm
1007 宏 用于 说明 文档题目 或 主题. 它的特点 是 能够 记住 调用时 带的 第一个 
1008 参数, 这个 参数 就是 该页的 主题. 当 不带 参数 调用它 时,
1009 .Ql \&.Nm
1010 宏 把 以前 记住的 参数 显示 出来, 可以 为作者 省点劲.
1011 注意: 手册第二部分或第三部分的函数名称, 在
1012 .Sx 名称 NAME
1013 小节 用
1014 .Ql \&.Nm
1015 说明, 在
1016 .Sx 总览 SYNOPSIS
1017 和 其余 小节 用
1018 .Ql \&.Fn
1019 说明. 对于 交互命令, 例如 在
1020 .Xr csh 1
1021 中的
1022 .Ql while
1023 命令, 应该 使用
1024 .Ql \&.Ic
1025 宏.
1026 .Ql \&.Ic
1027 宏和
1028 .Ql \&.Nm ,
1029 宏 非常接近, 只是 它 不能够 记忆 调用时的 参数.
1031 .Dl Usage: .Nm argument ... \*(Pu
1032 .Bl -tag -width ".Nm mdoc.sample" -compact -offset 14n
1033 .It Li \&.Nm mdoc.sample
1034 .Nm  mdoc.sample
1035 .It Li \&.Nm \e-mdoc
1036 .Nm \-mdoc .
1037 .It Li \&.Nm foo\ )\ )\ ,
1038 .Nm foo ) ) ,
1039 .It Li \&.Nm
1043 .Ql \&.Nm
1044 宏可以被 (其他宏) 分析和调用.
1045 .Ss 选项 Options
1046 .Ql \&.Op
1047 宏 把 命令行上 剩余的 所有 参数 用 方括弧 括在一起, 把 最后的 标点符号
1048 放到 方括弧 外面. 宏
1049 .Ql \&.Oc
1051 .Ql \&.Oo
1052 用于 处理 跨行.
1054 .Dl Usage: .Op options ... \*(Pu
1055 .Bl -tag -width ".Op Fl c Ar objfil Op Ar corfil ," -compact -offset indent
1056 .It Li \&.Op
1058 .It Li ".Op Fl k"
1059 .Op Fl k
1060 .It Li ".Op Fl k ) ."
1061 .Op Fl k ) .
1062 .It Li ".Op Fl k Ar kookfile"
1063 .Op Fl k Ar kookfile
1064 .It Li ".Op Fl k Ar kookfile ,"
1065 .Op Fl k Ar kookfile ,
1066 .It Li ".Op Ar objfil Op Ar corfil"
1067 .Op Ar objfil Op Ar corfil
1068 .It Li ".Op Fl c Ar objfil Op Ar corfil ,"
1069 .Op Fl c Ar objfil Op Ar corfil ,
1070 .It Li \&.Op word1 word2
1071 .Op word1 word2
1074 应用
1075 .Ql \&.Oc
1077 .Ql \&.Oo
1078 宏:
1079 .Bd -literal -offset indent
1080 \&.Oo
1081 \&.Op \&Fl k \&Ar kilobytes
1082 \&.Op \&Fl i \&Ar interval
1083 \&.Op \&Fl c \&Ar count
1084 \&.Oc
1087 产生:
1089 .Op Fl k Ar kilobytes
1090 .Op Fl i Ar interval
1091 .Op Fl c Ar count
1095 .Ql \&.Op ,
1096 .Ql \&.Oc
1098 .Ql \&.Oo
1099 可以被 (其他宏) 分析和调用.
1100 .Ss 路径名 Pathnames
1101 .Ql \&.Pa
1102 宏 用于 格式化 路径 或 文件名.
1104 .Dl Usage: .Pa pathname \*(Pu
1105 .Bl -tag -width ".Pa /tmp/fooXXXXX ) ." -compact -offset 14n
1106 .It Li \&.Pa /usr/share
1107 .Pa /usr/share
1108 .It Li \&.Pa /tmp/fooXXXXX\ )\ .
1109 .Pa /tmp/fooXXXXX ) .
1112 .Ql \&.Pa
1113 宏可以被 (其他宏) 分析和调用.
1114 .Ss 变量 Variables
1115 基本的 变量 参考:
1117 .Dl Usage: .Va variable ... \*(Pu
1118 .Bl -tag -width ".Va char s ] ) ) ," -compact -offset 14n
1119 .It Li \&.Va count
1120 .Va count
1121 .It Li \&.Va settimer ,
1122 .Va settimer ,
1123 .It Li \&.Va int\ *prt\ )\ :
1124 .Va int\ *prt ) :
1125 .It Li \&.Va char\ s\ ]\ )\ )\ ,
1126 .Va char\ s ] ) ) ,
1129 不带参数调用
1130 .Ql \&.Va
1131 宏是个错误.
1132 .Ql \&.Va
1133 宏可以被 (其他宏) 分析和调用.
1134 .Ss 手册页参照 Manual Page Cross References
1135 .Ql \&.Xr
1136 宏 把 第一个参数 当做 手册页 名称, 第二个参数, 如果 存在,
1137 当做 标点符号 或 手册页 的 部分号 (节号). 剩下 所有的参数
1138 视做 标点符号.
1140 .Dl Usage: .Xr man_page [1,...,8] \*(Pu
1141 .Bl -tag -width ".Xr mdoc 7 ) ) ," -compact -offset 14n
1142 .It Li \&.Xr mdoc
1143 .Xr mdoc
1144 .It Li \&.Xr mdoc\ ,
1145 .Xr mdoc ,
1146 .It Li \&.Xr mdoc 7
1147 .Xr mdoc 7
1148 .It Li \&.Xr mdoc 7\ )\ )\ ,
1149 .Xr mdoc 7 ) ) ,
1152 .Ql \&.Xr
1153 宏可以被 (其他宏) 分析和调用.
1154 不带参数调用
1155 .Ql \&.Xr
1156 宏是个错误.
1157 .Sh 基本正文宏域 GENERAL TEXT DOMAIN
1158 .Ss AT&T 宏
1159 .Bd -literal -offset indent -compact
1160 Usage: .At [v6 | v7 | 32v | V.1 | V.4] ... \*(Pu
1162 .Bl -tag -width ".At v6 ) ," -compact -offset 14n
1163 .It Li ".At"
1165 .It Li ".At v6 ."
1166 .At v6 .
1169 .Ql \&.At
1171 .Em 不能
1172 被 (其他宏) 分析, 也
1173 .Em 不能
1174 被 (其他宏) 调用. 该宏 最多 接受 两个 参数.
1175 .Ss BSD 宏
1176 .Dl Usage: .Bx [Version/release] ... \*(Pu
1177 .Bl -tag -width ".Bx 4.3 ) ," -compact -offset 14n
1178 .It Li ".Bx"
1180 .It Li ".Bx 4.3 ."
1181 .Bx 4.3 .
1184 .Ql \&.Bx
1185 宏可以被 (其他宏) 分析和调用.
1186 .Ss FreeBSD 宏
1187 .Bd -literal -offset indent -compact
1188 Usage: .Fx Version.release ... \*(Pu
1190 .Bl -tag -width ".Fx 2.2 ) ," -compact -offset 14n
1191 .It Li ".Fx 2.2 ."
1192 .Fx 2.2 .
1195 .Ql \&.Fx
1197 .Em 不能
1198 被 (其他宏) 分析, 也
1199 .Em 不能
1200 被 (其他宏) 调用. 该宏 最多 接受 两个 参数.
1201 .Ss UNIX 宏
1202 .Dl Usage: .Ux ... \*(Pu
1203 .Bl -tag -width ".Ux 4.3 ) ," -compact -offset 14n
1204 .It Li ".Ux"
1208 .Ql \&.Ux
1209 宏可以被 (其他宏) 分析和调用.
1210 .Ss 嵌入和引用宏 Enclosure and Quoting Macros
1211 嵌入 的 概念 和 引用 类似. 把 一句 或 多句 引用对象 嵌到 一对 字符 中, 
1212 象 引号 或 括弧. 本篇 文档中 将 混用 术语
1213 .Ql 嵌入
1215 .Ql 引用.
1216 大多数 单行的 引用宏名 用 一个 小写字母
1217 .Ql q
1218 结尾, 表明 这是 一个 引用(quoting), 但 也有 不规则变化.
1219 每个 引用宏 都有 一对 开始(open) 和 结束(close) 宏, 各自 以
1220 .Ql o
1222 .Ql c
1223 结尾. 在 某些限制时 这些宏 可以 跨行 使用, 单行的引用宏 可以 嵌套在里面.
1225 .ne 5
1226 .Bd -filled -offset indent
1227 .Bl -column "quote " "close " "open " "Enclose Stringx(in XX) " XXstringXX
1228 .Em " Quote      Close   Open   Function        Result"
1229 \&.Aq   .Ac     .Ao     Angle Bracket Enclosure <string>
1230 \&.Bq   .Bc     .Bo     Bracket Enclosure       [string]
1231 \&.Dq   .Dc     .Do     Double Quote    ``string''
1232         .Ec     .Eo     Enclose String (in XX)  XXstringXX
1233 \&.Pq   .Pc     .Po     Parenthesis Enclosure   (string)
1234 \&.Ql                   Quoted Literal  `st' or string
1235 \&.Qq   .Qc     .Qo     Straight Double Quote   "string"
1236 \&.Sq   .Sc     .So     Single Quote    `string'
1240 除了 下面的 不规则宏, 所有的 引用宏 可以被 (其他宏) 分析和调用. 所有的 
1241 引用宏 能够 正确 处理 标点符号, 只要 一次 一个字符, 中间 用 空格 隔开.
1242 引用宏 检查 开始和结束 符号, 以决定 把 它 放在 引用串的 前面还是后面.
1243 这样 就 有了 一定的 嵌套能力.
1244 .Bl -tag -width xxx,xxxx
1245 .It Li \&.Ec , \&.Eo
1246 这些宏 的 第一个参数 是 各自的 开始和结束串.
1247 .It Li \&.Ql
1248 原文引用宏 的 表现在
1249 .Xr troff
1250 中和
1251 .Xr nroff 
1252 不一样. 如果用
1253 .Xr nroff 
1254 格式化, 引用的原文 始终 被引用. 如果用 troff 格式化,
1255 只有 宽度 小于 三个定宽字符 的 项 才被 引用.
1256 This is to make short strings more visible where the font change
1257 to literal (constant width) is less noticeable.
1258 当 字体 变成 原文(定宽) 时, 短串显得更容易被看到.
1259 .It Li \&.Pf
1260 前缀宏不能被 (其他宏) 调用, 但是可以被分析.
1261 .Bl -tag -width "(namexx" -offset indent
1262 .It Li ".Pf ( Fa name2"
1263 变成
1264 .Pf ( Fa name2 .
1267 这个
1268 .Ql \&.Ns
1269 (无空格) 宏 执行 类似的 后缀 功能.
1272 .ne 4
1273 引用举例:
1274 .Bl -tag -width ".Aq Pa ctype.h ) ,xxxxxxxx" -compact -offset indent
1275 .It Li \&.Aq
1277 .It Li \&.Aq \&Ar ctype.h\ )\ ,
1278 .Aq Ar ctype.h ) ,
1279 .It Li \&.Bq
1281 .It Li \&.Bq \&Em Greek \&, French \&.
1282 .Bq Em Greek , French .
1283 .It Li \&.Dq
1285 .It Li ".Dq string abc ."
1286 .Dq string abc .
1287 .It Li ".Dq \'^[A-Z]\'"
1288 .Dq \'^[A-Z]\'
1289 .It Li "\&.Ql man mdoc"
1290 .Ql man mdoc
1291 .It Li \&.Qq
1293 .It Li "\&.Qq string ) ,"
1294 .Qq string ) ,
1295 .It Li "\&.Qq string Ns ),"
1296 .Qq string Ns ),
1297 .It Li \&.Sq
1299 .It Li "\&.Sq string
1300 .Sq string
1303 作为 嵌套引用宏的 典型范例, 参见
1304 .Ql \&.Op
1305 选项宏. 它们 都 来自 上面 列出的 基本 引用宏.
1306 .Ql \&.Xo
1308 .Ql \&.Xc
1309 扩展的 参数列表宏 同样 来自 相同的 基本例程, 并且, 在 最坏的情况 下, 是
1310 .Nm \-mdoc
1311 宏 用法的 很好范例.
1312 .Ss No\-Op 或正文宏 or Normal Text Macro
1314 .Ql \&.No
1315 用在 某个 宏命令行 上, 意如其名, 将
1316 .Em 不
1317 被格式化, 语法 遵循 一般的 内容宏.
1318 .Ss 无空格宏 No Space Macro
1319 .Ql \&.Ns
1320 在 宏请求 之间 消除 不需要的 空格.
1321 它 用在 旧式风格的 参数列表 中, 标志和参数 间 没有 空格:
1322 .Bl -tag -width ".Op Fl I Ns Ar directoryxx" -offset indent
1323 .It Li ".Op Fl I Ns Ar directory"
1324 产生
1325 .Op Fl I Ns Ar directory
1328 注意:
1329 .Ql \&.Ns
1330 宏 在 消除空格后 总会 调用
1331 .Ql \&.No
1332 宏, 除非 还有 其他 宏名 跟在 后面.
1333 .Ql \&.Ns
1334 宏可以被 (其他宏) 分析和调用.
1335 .Ss 手册页对照参考 Section Cross References
1336 .Ql \&.Sx
1337 宏 指定了 到 同一个文档内的 小节首部 的 对照参考.
1338 该宏可以被 (其他宏) 分析和调用.
1340 .Bl -tag -width "Li \&.Sx FILES" -offset 14n
1341 .It Li \&.Sx FILES
1342 .Sx FILES
1344 .Ss 参考和引言 References and Citations
1345 The following macros make a modest attempt to handle references.
1346 At best, the macros make it convenient to manually drop in a subset of
1347 refer style references.
1348 下面的宏 试图 适度的 处理 参考资料. 最好情况时, 这些宏 便于 手工
1349 插入 一段 相关风格的 参考资料.
1351 .Bl -tag -width 6n -offset indent -compact
1352 .It Li ".Rs"
1353 参考开始. 它 导致 一次 断行, 并且 开始 收集 参考资料, 直到 遇到 参考结束宏.
1354 .It Li ".Re"
1355 参考结束. 则 打印出 参考信息.
1356 .It Li ".%A"
1357 参考资料 的 作者名字, 一次一个.
1358 .It Li ".%B"
1359 书名.
1360 .It Li ".\&%C"
1361 城市/地点.
1362 .It Li ".\&%D"
1363 日期.
1364 .It Li ".%J"
1365 期刊名.
1366 .It Li ".%N"
1367 发行号.
1368 .It Li ".%O"
1369 可选信息.
1370 .It Li ".%P"
1371 页码.
1372 .It Li ".%R"
1373 报告名.
1374 .It Li ".%T"
1375 文章题目.
1376 .It Li ".%V"
1377 卷.
1381 .Ql %
1382 符号 开始的 宏 不能被 (其他宏) 调用, 只能 被 trade name macro 分析,
1383 结果 返回给 调用者 (此时 结果 不太好 预测). 其目的 是 允许 trade name 
1384 能够 很好的 打印在
1385 .Xr troff Ns / Ns Xr ditroff
1386 的 输出端.
1387 .Ss 返回值 Return Values
1388 .Ql \&.Rv
1389 宏 产生 一些 用在
1390 .Sx 返回值 RETURN VALUES
1391 小节的 文字.
1393 .Dl Usage: .Rv [-std function]
1395 .Ql \&.Rv -std atexit
1396 将输出 下列文字:
1398 .Rv -std atexit
1400 这个
1401 .Fl std
1402 选项 仅用于 手册页的 第二和第三部分.
1403 .Ss Trade Names (或缩略和类型名)
1404 trade name 宏 一般说来 是 一个 很小的 大写字母宏, 用于 所有 大于
1405 两个字符的 大写单词.
1407 .Dl Usage: .Tn symbol ... \*(Pu
1408 .Bl -tag -width ".Tn ASCII" -compact -offset 14n
1409 .It Li \&.Tn DEC
1410 .Tn DEC
1411 .It Li \&.Tn ASCII
1412 .Tn ASCII
1415 .Ql \&.Tn
1416 宏可以被 (其他宏) 分析和调用.
1417 .Ss 扩展参数 Extended  Arguments
1418 .Ql \&.Xo
1420 .Ql \&.Xc
1421 宏 可以 在 宏的边界 扩展 参数列表. 如果 某个宏 要求 所有的参数 在 一行上 
1422 出现, 则 参数列表 不能 在 这儿 被 扩展. 例如
1423 .Ql \&.Op .
1425 这里有
1426 .Ql \&.Xo
1427 宏的一个示例, 用 空格模式宏 把 空格 去掉:
1428 .Bd -literal -offset indent
1429 \&.Sm off
1430 \&.It Xo Sy I Ar operation
1431 \&.No \een Ar count No \een
1432 \&.Xc
1433 \&.Sm on
1436 产生
1437 .Bd -filled -offset indent
1438 .Bl -tag -width flag -compact
1439 .Sm off
1440 .It Xo Sy I Ar operation
1441 .No \en Ar count No \en
1443 .Sm on
1447 还有一个:
1448 .Bd -literal -offset indent
1449 \&.Sm off
1450 \&.It Cm S No \&/ Ar old_pattern Xo
1451 \&.No \&/ Ar new_pattern
1452 \&.No \&/ Op Cm g
1453 \&.Xc
1454 \&.Sm on
1457 产生
1458 .Bd -filled -offset indent
1459 .Bl -tag -width flag -compact
1460 .Sm off
1461 .It Cm S No \&/ Ar old_pattern Xo
1462 .No \&/ Ar new_pattern
1463 .No \&/ Op Cm g
1465 .Sm on
1469 另一个示例用
1470 .Ql \&.Xo
1471 和 引用宏:
1472 测试一个变量的值.
1473 .Bd -literal -offset indent
1474 \&.It Xo
1475 \&.Ic .ifndef
1476 \&.Oo \e&! Oc Ns Ar variable
1477 \&.Op Ar operator variable ...
1478 \&.Xc
1481 产生
1482 .Bd -filled -offset indent
1483 .Bl -tag -width flag -compact
1484 .It Xo
1485 .Ic .ifndef
1486 .Oo \&! Oc Ns Ar variable
1487 .Op Ar operator variable ...
1492 上面 所有的例子 都在
1493 .Ql \&.It
1494 (list-item) 宏 的 参数列表 中 使用了
1495 .Ql \&.Xo
1496 宏. 扩展宏 不经常 使用, 一般用来 扩展 list-item 宏 的 参数列表.
1497 这也 不幸的 是 扩展宏 最苛刻的 地方. 前两个例子里 空格 被去掉; 第三个 例子中, 
1498 希望 能 输出 部分 空格, 而不是 全部. 在 这种情况下 用 这些宏, 要 确保
1499 .Ql \&.Xo
1501 .Ql \&.Xc
1502 宏 摆放到 第三个例子 中 示范的位置. 如果
1503 .Ql \&.Xo
1504 宏 没有 单独 出现在
1505 .Ql \&.It
1506 的 参数表 中, 则 无法预测 空格 情况. 这种情况下,
1507 .Ql \&.Ns
1508 (no space macro) 一定 不能 作为 一行的 第一个宏 或 最后一个宏. 当前
1510 发布的 超过 900个 手册页 (事实上大约1500个) 中,
1511 只有 十五个 用到了
1512 .Ql \&.Xo
1513 宏.
1514 .Sh 页结构宏宏域 PAGE STRUCTURE DOMAIN
1515 .Ss 小节首部 Section Headers
1516 每个 手册页 里 都用到了 下面 列出的 三个
1517 .Ql \&.Sh
1518 小节首部宏. 作者 写 手册页 时 可以 酌情考虑 其他 建议使用的 小节首部.
1519 .Ql \&.Sh
1520 宏 最多 带 九个 参数. 它 可以 被 (其他宏) 分析, 但不能 被调用.
1521 .Bl -tag -width ".Sh SYNOPSIS"
1522 .It \&.Sh 名称 NAME
1523 .Ql \&.Sh 名称 NAME
1524 宏是 必不可少的. 否则 无法设置 页头, 页脚 和 缺省的 页布局, 样子 会 很难看.
1525 .Sx 名称 NAME
1526 小节 至少 由 三项 组成. 第一个 是
1527 .Ql \&.Nm
1528 名称宏, 命名 手册页的 主题. 第二个 是 名称描述宏
1529 .Ql \&.Nd ,
1530 它 把 主题名称 和 第三项, 描述, 分离开来.
1531 描述 应该 尽可能的 精简易懂, 少占空间.
1532 .It \&.Sh 总览 SYNOPSIS
1533 .Sx SYNOPSIS
1534 总览小节 描述 该 手册页对象 的 典型用途.
1535 请求的宏 是 下面 的 任意一个,
1536 .Ql ".Nm" ,
1537 .Ql ".Cd" ,
1538 .Ql ".Fn" ,
1539 (也可能是
1540 .Ql ".Fo" ,
1541 .Ql ".Fc" ,
1542 .Ql ".Fd" ,
1543 .Ql ".Ft"
1544 宏). 函数名称宏
1545 .Ql ".Fn"
1546 用在 手册页 的 第二第三部分, 命令 和 基本名称宏
1547 .Ql \&.Nm
1548 用在 手册页 的 1, 5, 6, 7, 8 部分. 手册 第四部分 需要
1549 .Ql ".Nm" , 
1550 .Ql ".Fd"
1552 .Ql ".Cd"
1553 配制设备用途宏. 其他一些 宏 可能 用来 产生 概要行, 象下面的:
1555 .Bd -filled -offset indent
1556 .Nm cat
1557 .Op Fl benstuv
1558 .Op Fl
1562 下面 用到的 宏
1564 .Dl \&.Nm cat
1565 .Dl \&.Op \&Fl benstuv
1566 .Dl \&.Op \&Fl
1567 .Dl \&.Ar
1569 .Sy 注意 :
1571 .Ql \&.Op ,
1572 .Ql \&.Fl ,
1574 .Ql \&.Ar
1575 能够 识别 管道符
1576 .Ql \*(Ba ,
1577 因此 命令行 如:
1579 .Dl ".Op Fl a | Fl b"
1581 的 表现 会 出轨.
1582 .Xr Troff
1583 一般把 \*(Ba 当做 特殊符号. 参见
1584 .Sx 预定义串 PREDEFINED STRINGS ,
1585 在 其他情况下 \*(Ba 的使用.
1586 .It \&.Sh 描述 DESCRIPTION
1587 大多数 情况下
1588 .Sx 描述 DESCRIPTION
1589 小节 的 第一段话 是 关于 这个 命令, 函数 或 文件 的 摘要, 后跟 字典式的
1590 选项 以及 相应的解释. 创建 这样的 列表, 应该 使用
1591 .Ql \&.Bl
1592 列表开始,
1593 .Ql \&.It
1594 列表项和
1595 .Ql \&.El
1596 列表结束宏 (参见下面的
1597 .Sx 列表和栏目 Lists and Columns
1601 下面的
1602 .Ql \&.Sh
1603 小节首部 是 手册页 编排的 常见内容, 为了 保证 连续性, 应 适当 使用.
1604 它们 按照 应该 出现 的 顺序 排列.
1605 .Bl -tag -width SYNOPSIS
1606 .It \&.Sh 环境 ENVIRONMENT
1607 .Sx 环境 ENVIRONMENT
1608 小节 用来 揭示 相关的 环境变量 和 线索, 它们的 行为, 表现, 用法.
1609 .It \&.Sh 示例 EXAMPLES
1610 有 很多 办法 创建 示例, 详见 下面的
1611 .Sx 示例 EXAMPLES
1612 小节.
1613 .It \&.Sh 文件 FILES
1614 由 手册页的 主题对象 创建 或 使用 的 文件, 应该 通过
1615 .Ql \&.Pa
1616 宏在
1617 .Sx 文件 FILES
1618 小节 陈列 出来.
1619 .It \&.Sh 另见 SEE ALSO
1620 如果 提及 其他 手册页 或 参照 相应的 手册, 应 把它们 放在
1621 .Sx 另见 SEE ALSO
1622 小节. 参照主题 由
1623 .Ql \&.Xr
1624 宏指定. 在
1625 .Sx 另见 SEE ALSO
1626 小节 的 参照主题 应该按 手册节号 排序, 按 字母顺序 陈列, 并用 逗号 隔开, 
1627 例如:
1629 .Xr ls 1 ,
1630 .Xr ps 1 ,
1631 .Xr group 5 ,
1632 .Xr passwd 5 .
1634 这时候 不太适合 用
1635 .Xr refer 1
1636 风格 的 参考引用.
1637 .It \&.Sh 遵循 CONFORMING TO
1638 如果 那些 命令, 库函数 或 文件 遵循 一定的 标准 实现, 如
1639 .St -p1003.2
1641 .St -ansiC ,
1642 那就 不需要 这一小节. 如果 命令 不符合 任何标准, 应该 把 它的历史 放在
1643 .Sx 历史 HISTORY
1644 小节.
1645 .It \&.Sh 历史 HISTORY
1646 任何 不属于 已知标准 的 命令 应该 在 这一节 给出 它的 大致历史.
1647 .It \&.Sh 作者 AUTHORS
1648 如果 有 必要, 把 致谢名单 也 列这儿.
1649 .It \&.Sh 诊断 DIAGNOSTICS
1650 应该 把 诊断命令 放在 这一节.
1651 .It \&.Sh 错误 ERRORS
1652 特定的 错误处理, 尤其是 库函数 (手册页第二第三部分), 放这儿.
1653 .Ql \&.Er
1654 宏 用来 指定 一个 errno.
1655 .It \&.Sh BUGS
1656 明显的 问题 放这儿...
1659 可以 增加一些 用户 制定的
1660 .Ql \&.Sh
1661 小节, 例如, 这样 设 小节:
1662 .Bd -literal -offset 14n
1663 \&.Sh PAGE STRUCTURE DOMAIN
1665 .Ss 段落和空行 Paragraphs and Line Spacing.
1666 .Bl -tag -width 6n
1667 .It \&.Pp
1668 .Ql \&.Pp
1669 把 段落命令 放在 所需的位置, 可以 产生 一个空行. 在
1670 .Ql \&.Sh
1672 .Ql \&.Ss
1673 宏 后面 不需要 这个 宏, 
1674 .Ql \&.Bl
1675 宏 的 前面 也不需要. (
1676 .Ql \&.Bl
1677 声明了 垂直方向 的 距离, 除非 给出 -compact 标志).
1679 .\" This worked with version one, need to redo for version three
1680 .\" .Pp
1681 .\" .Ds I
1682 .\" .Cw (ax+bx+c) \ is\ produced\ by\ \&
1683 .\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
1684 .\" .Cl Cx \t\t
1685 .\" .Li \&.Cx\ (
1686 .\" .Cx
1687 .\" .Cl Cx \t\t
1688 .\" .Li \&.Va ax
1689 .\" .Cx
1690 .\" .Cl Cx \t\t
1691 .\" .Li \&.Sy \+
1692 .\" .Cx
1693 .\" .Cl Cx \&(\&
1694 .\" .Va ax
1695 .\" .Cx +
1696 .\" .Va by
1697 .\" .Cx +
1698 .\" .Va c )
1699 .\" .Cx \t
1700 .\" .Em is produced by
1701 .\" .Cx \t
1702 .\" .Li \&.Va by
1703 .\" .Cx
1704 .\" .Cl Cx \t\t
1705 .\" .Li \&.Sy \+
1706 .\" .Cx
1707 .\" .Cl Cx \t\t
1708 .\" .Li \&.Va c )
1709 .\" .Cx
1710 .\" .Cl Cx \t\t
1711 .\" .Li \&.Cx
1712 .\" .Cx
1713 .\" .Cw
1714 .\" .De
1715 .\" .Pp
1716 .\" This example shows the same equation in a different format.
1717 .\" The spaces
1718 .\" around the
1719 .\" .Li \&+
1720 .\" signs were forced with
1721 .\" .Li \e :
1722 .\" .Pp
1723 .\" .Ds I
1724 .\" .Cw (ax\ +\ bx\ +\ c) \ is\ produced\ by\ \&
1725 .\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
1726 .\" .Cl Cx \t\t
1727 .\" .Li \&.Cx\ (
1728 .\" .Cx
1729 .\" .Cl Cx \t\t
1730 .\" .Li \&.Va a
1731 .\" .Cx
1732 .\" .Cl Cx \t\t
1733 .\" .Li \&.Sy x
1734 .\" .Cx
1735 .\" .Cl Cx \t\t
1736 .\" .Li \&.Cx \e\ +\e\ \e&
1737 .\" .Cx
1738 .\" .Cl Cx \&(\&
1739 .\" .Va a
1740 .\" .Sy x
1741 .\" .Cx \ +\ \&
1742 .\" .Va b
1743 .\" .Sy y
1744 .\" .Cx \ +\ \&
1745 .\" .Va c )
1746 .\" .Cx \t
1747 .\" .Em is produced by
1748 .\" .Cl Cx \t\t
1749 .\" .Li \&.Va b
1750 .\" .Cx
1751 .\" .Cl Cx \t\t
1752 .\" .Li \&.Sy y
1753 .\" .Cx
1754 .\" .Cl Cx \t\t
1755 .\" .Li \&.Cx \e\ +\e\ \e&
1756 .\" .Cx
1757 .\" .Cl Cx \t\t
1758 .\" .Li \&.Va c )
1759 .\" .Cx
1760 .\" .Cl Cx \t\t
1761 .\" .Li \&.Cx
1762 .\" .Cx
1763 .\" .Cw
1764 .\" .De
1765 .\" .Pp
1766 .\" The incantation below was
1767 .\" lifted from the
1768 .\" .Xr adb 1
1769 .\" manual page:
1770 .\" .Pp
1771 .\" .Ds I
1772 .\" .Cw \&[?/]m_b1_e1_f1[?/]\& is\ produced\ by
1773 .\" .Cl Cx \t\t
1774 .\" .Li \&.Cx Op Sy ?/
1775 .\" .Cx
1776 .\" .Cl Cx \t\t
1777 .\" .Li \&.Nm m
1778 .\" .Cx
1779 .\" .Cl Cx Op Sy ?/
1780 .\" .Nm m
1781 .\" .Ad \ b1 e1 f1
1782 .\" .Op Sy ?/
1783 .\" .Cx \t
1784 .\" .Em is produced by
1785 .\" .Cx \t
1786 .\" .Li \&.Ar \e\ b1 e1 f1
1787 .\" .Cx
1788 .\" .Cl Cx \t\t
1789 .\" .Li \&.Op Sy ?/
1790 .\" .Cx
1791 .\" .Cl Cx \t\t
1792 .\" .Li \&.Cx
1793 .\" .Cx
1794 .\" .Cw
1795 .\" .De
1796 .\" .Pp
1797 .Ss 保持 Keeps
1798 目前 只实现了 对单词的 保持 能力. 这个宏 有
1799 .Ql \&.Bk
1800 (开始保持 begin-keep) 和
1801 .Ql \&.Ek
1802 (结束保持 end-keep ) .
1803 .Ql \&.Bk
1804 宏 的 唯一 参数是
1805 .Fl words ,
1806 用于 防止 在 选项语句 的 中间 断行. 在 make 命令行参数的 例子里 (参见
1807 .Sx 名称背后 What's in a name ) ,
1808 keep 宏防止
1809 .Xr nroff
1810 把 标志 和 参数 分成 两行.
1811 (事实上 可以 用 选项宏 防止 此类 事情, 但 当我们 决定 在
1812 .Xr troff
1813 中 作为 基本选项, 强制 右边界对齐 时, 它 在 稀疏行里 展开的 很糟糕.
1814 使用 保持宏 时 需要 多做点事, 增加 一个
1815 .Fl line
1816 选项 ) .
1817 .Ss 示例和显示
1818 有 五种类型 的 显示, 一个 快速的单行缩进显示
1819 .Ql \&.D1 ,
1820 快速的单行原文显示
1821 .Ql \&.Dl ,
1822 原文块, 填充块, 和由
1823 .Ql \&.Bd
1824 (begin-display) 显示开始 和
1825 .Ql \&.Ed
1826 (end-display) 显示结束 宏对 组成的 不规则块.
1828 .Bl -tag -width \&.Dlxx
1829 .It Li \&.D1
1830 (D-one) 显示 一行 缩进文字. 该宏 可以被 (其他宏) 分析, 但 不能 被调用.
1832 .Dl Fl ldghfstru
1834 上面是这样产生的:
1835 .Li \&.Dl Fl ldghfstru .
1836 .It Li \&.Dl
1837 (D-ell) 显示 一行 缩进的
1838 .Em 原文 literal .
1839 .Ql \&.Dl
1840 示例宏 已经 遍布 这篇 文档. 它 允许 缩进 (显示) 一行 文字.
1841 其 缺省字体 设为 定宽 (原文), 它 可以 被 其他宏 分析 和 识别.
1842 然而 不能 被 其他宏 调用.
1844 .Dl % ls -ldg /usr/local/bin
1846 上面是这样产生的
1847 .Li \&.Dl % ls -ldg /usr/local/bin .
1848 .It Li \&.Bd
1849 显示开始.
1850 .Ql \&.Bd
1851 的 显示 必须由
1852 .Ql \&.Ed
1853 宏 结束. 显示 可以 嵌套在 显示 和 列表中.
1854 .Ql \&.Bd
1855 有 这样的 语法:
1857 .Dl ".Bd display-type [-offset offset_value] [-compact]"
1859 显示类型 必须是 下面四个 之一, 可以 指定 一个 缩进量.
1860 .Ql \&.Bd .
1862 .Bl -tag -width "file file_name  " -compact
1863 .It Fl ragged
1864 以 打字 形式 显示 一块 正文, 其 右(和左)边界 是 不平整边界.
1865 .It Fl filled
1866 显示 填充 (格式化) 块. 块中文字 被 格式化 (边界 已经 填充过, 
1867 不再是 左边 不对齐 ).
1868 .It Fl literal
1869 显示 原文块, 适用于 源程序, 或 那种 简单的, 用 table 和
1870 空格 调整的 文字.
1871 .It Fl file Ar file_name
1872 阅读 并 显示 跟在
1873 .Fl file
1874 标志 后面的 文件. 原文模式 被打开, table 设为 8个字符 宽, 然而 文件中 
1875 出现的 任何
1876 .Xr troff/ Ns Nm \-mdoc
1877 命令 都将 被处理.
1878 .It Fl offset Ar string
1879 如果
1880 .Fl offset
1881 指定为 下面 字符串 之一, 这些 字符串 解释为 对 以后的 正文块的 缩进层次.
1883 .Bl -tag -width "indent-two" -compact
1884 .It Ar left
1885 正文块 按 当前 左边界 对齐, 这是
1886 .Ql \&.Bd 
1887 的 缺省模式.
1888 .It Ar center
1889 应该 是把 正文块 布在 中间. 不幸的是, 目前 只能在 大致的 中间位置
1890 靠左 对齐.
1891 .It Ar indent
1892 按 缺省 缩进值 或 table 值 缩进. 这个 缺省 缩进值 同时 用于
1893 .Ql \&.D1
1894 显示, 因此 你 应该 使 这两种 显示 一致. 缩进值 一般 设为 6n, 
1895 大约 2/3 英寸 (六个字符宽度).
1896 .It Ar indent-two
1897 缩进 缺省值的 两倍.
1898 .It Ar right
1899 在 距离 右边界 大约 两英寸处 把 正文块 靠
1900 .Em 左
1901 对齐. 这个宏 要 试验 效果, 有可能
1902 .Xr troff 
1903 怎么 都 弄不对.
1906 .It ".Ed"
1907 End-display.
1908 显示结束.
1910 .Ss 字体模式 Font Modes
1911 现有 五个宏 用于 改变 手册页的 文字外观:
1912 .Bl -tag -width \&.Emxx
1913 .It \&.Em
1914 文字 可以 用
1915 .Ql \&.Em
1916 宏 加重或强调. 常用的 强调字体 是 斜体 (italic).
1918 .Dl Usage: .Em argument ... \*(Pu
1919 .Bl -tag -width ".Em vide infra ) ) ," -compact -offset 14n
1920 .It Li ".Em does not"
1921 .Em does not
1922 .It Li ".Em exceed 1024 ."
1923 .Em exceed 1024 .
1924 .It Li ".Em vide infra ) ) ,"
1925 .Em vide infra ) ) ,
1928 .Ql \&.Em
1929 宏可以被 (其他宏) 分析和调用. 不带参数 调用
1930 .Ql \&.Em
1931 宏 是 一个错误.
1932 .It \&.Li
1933 .Ql \&.Li
1934 原文宏 用来 显示 字符, 变量, 常数, 任何 希望 照 输入文字 原样显示 的 内容.
1936 .Dl Usage: .Li argument ... \*(Pu
1937 .Bl -tag -width ".Li cntrl-D ) ,"  -compact -offset 14n
1938 .It Li \&.Li \een
1939 .Li \en
1940 .It Li \&.Li M1 M2 M3\ ;
1941 .Li M1 M2 M3 ;
1942 .It Li \&.Li cntrl-D\ )\ ,
1943 .Li cntrl-D ) ,
1944 .It Li \&.Li 1024\ ...
1945 .Li 1024 ...
1948 .Ql \&.Li
1949 宏可以被 (其他宏) 分析和调用.
1950 .It \&.Sy
1951 一般说来 symbolic 强调宏 无论在 象徵主义 角度, 还是 传统的英语 里,
1952 都是 用 黑体 (bold) 显示.
1954 .Dl Usage: .Sy symbol ... \*(Pu
1955 .Bl -tag -width ".Sy Important Noticex" -compact -offset 14n
1956 .It Li \&.Sy Important Notice
1957 .Sy Important Notice
1960 .Ql \&.Sy
1961 宏可以被 (其他宏) 分析和调用.
1962 .Ql \&.Sy
1963 的参数 可以 用 引号括起.
1964 .It Li \&.Bf
1965 字体模式开始.
1966 .Ql \&.Bf
1967 字体模式 必须用
1968 .Ql \&.Ef
1969 宏结束. 字体模式宏 可以 嵌套.
1970 .Ql \&.Bf
1971 宏 用 下面的 语法:
1973 .Dl ".Bf font-mode"
1975 字体模式 必须 是 下列 三种 之一:
1976 .Ql \&.Bf .
1978 .Bl -tag -width "file file_name  " -compact
1979 .It Sy \&Em | Fl emphasis
1980 就象 是 把
1981 .Ql \&.Em
1982 宏 用在 整个 正文块 一样.
1983 .It Sy \&Li | Fl literal
1984 就象 是 把
1985 .Ql \&.Li
1986 宏 用在 整个 正文块 一样.
1987 .It Sy \&Sy | Fl symbolic
1988 就象 是 把
1989 .Ql \&.Sy
1990 宏 用在 整个 正文块 一样.
1992 .It ".Ef"
1993 字体模式结束.
1995 .Ss 标记栏和列表 Tagged Lists and Columns
1996 有 多种 用
1997 .Ql ".Bl"
1998 列表开始宏 初始化的 列表. 表项 用
1999 .Ql ".It"
2000 项目宏 指定, 每一个 列表 必须 用
2001 .Ql ".El"
2002 宏结束. 列表 可以 嵌套在 列表和显示 中. 栏 可以 用在 列表 中, 但是 列表 
2003 不能 列在 栏里.
2005 另外 还可以 指定 列表属性, 像标记宽度, 列表偏移, 以及 紧凑模式
2006 (允许 或 不允许 表项间的 空行)
2007 在本文中 大多 使用了 标记风格 (tag style) 的 列表
2008 .Pq Fl tag .
2009 作为 步距变化, 表示 列表类型的 列表类型 是个 突出来 (overhanging) 的 列表
2010 .Pq Fl ohang .
2011 这种 列表类型 在
2012 .Tn TeX
2013 用户中 很流行, 但 看过 很多 页 的 标记列表 后 可能会 觉得 有点 滑稽.
2014 .Ql ".Bl" 
2015 宏 可以 接受 下面的 列表类型:
2017 .Bl -ohang -compact
2018 .It Fl bullet
2019 .It Fl item
2020 .It Fl enum
2021 这三个 是 最简单的 列表类型. 一旦 使用了
2022 .Ql ".Bl"
2023 宏, 只能用
2024 .Ql ".It"
2025 宏 组织 表项 . 例如, 可以 这样 写 一个 简单的 数字列表"
2026 .Bd -literal -offset indent-two
2027 \&.Bl -enum -compact
2028 \&.It
2029 \&Item one goes here.
2030 \&.It
2031 \&And item two here.
2032 \&.It
2033 \&Lastly item three goes here.
2034 \&.El
2037 结果是:
2039 .Bl -enum -offset indent-two -compact
2041 Item one goes here.
2043 And item two here.
2045 Lastly item three goes here.
2048 简单的布告栏:
2049 .Bd -literal -offset indent-two
2050 \&.Bl -bullet -compact
2051 \&.It
2052 \&Bullet one goes here.
2053 \&.It
2054 \&Bullet two here.
2055 \&.El
2058 产生:
2059 .Bl -bullet -offset indent-two -compact
2061 Bullet one goes here.
2063 Bullet two here.
2066 .It Fl tag
2067 .It Fl diag
2068 .It Fl hang
2069 .It Fl ohang
2070 .It Fl inset
2071 这些 列表类型 收集
2072 .Ql \&.It
2073 宏 指定的 参数, 并且 创建 一个 标签, 它 可能会
2074 .Em 插入 inset
2075 后面的 文字中,
2076 .Em 悬挂 (hanged)
2077 显示在 后面的 文字前,
2078 .Em 突前 (overhanged)
2079 显示在 更高 位置, 并且 不能 缩进 或
2080 .Em 标记 tagged .
2081 这个 列表 由
2082 .Ql Fl ohang
2083 列表类型 构建.
2084 .Ql \&.It
2085 宏 只能 被 插入 (inset), 悬挂 (hang), 和 标记列表类型宏 分析,
2086 且 不能 被调用. 
2088 这是 一个 插入标签 的 例子:
2089 .Bl -inset -offset indent
2090 .It Em Tag
2091 The tagged list (also called a tagged paragraph) is the
2092 most common type of list used in the Berkeley manuals.
2093 .It Em Diag
2094 Diag lists create section four diagnostic lists
2095 and are similar to inset lists except callable
2096 macros are ignored.
2097 .It Em Hang
2098 Hanged labels are a matter of taste.
2099 .It Em Ohang
2100 Overhanging labels are nice when space is constrained.
2101 .It Em Inset
2102 Inset labels are useful for controlling blocks of
2103 paragraphs and are valuable for converting
2104 .Nm \-mdoc
2105 manuals to other formats.
2108 下面是 产生 这个例子 的 源文本:
2109 .Bd -literal -offset indent
2110 \&.Bl -inset -offset indent
2111 \&.It Em Tag
2112 \&The tagged list (also called a tagged paragraph) is the
2113 \&most common type of list used in the Berkeley manuals.
2114 \&.It Em Diag
2115 \&Diag lists create section four diagnostic lists
2116 \&and are similar to inset lists except callable
2117 \&macros are ignored.
2118 \&.It Em Hang
2119 \&Hanged labels are a matter of taste.
2120 \&.It Em Ohang
2121 \&Overhanging labels are nice when space is constrained.
2122 \&.It Em Inset
2123 \&Inset labels are useful for controlling blocks of
2124 \&paragraphs and are valuable for converting
2125 \&.Nm \-mdoc
2126 \&manuals to other formats.
2127 \&.El
2130 这是 含有 两个表项 的 悬挂列表:
2131 .Bl -hang -offset indent
2132 .It Em Hanged
2133 labels appear similar to tagged lists when the
2134 label is smaller than the label width.
2135 .It Em Longer hanged list labels
2136 blend in to the paragraph unlike
2137 tagged paragraph labels.
2140 它们的 源文本为:
2141 .Bd -literal -offset indent
2142 \&.Bl -hang -offset indent
2143 \&.It Em Hanged
2144 \&labels appear similar to tagged lists when the
2145 \&label is smaller than the label width.
2146 \&.It Em Longer hanged list labels
2147 \&blend in to the paragraph unlike
2148 \&tagged paragraph labels.
2149 \&.El
2152 带有 可选 宽度项的 标记列表 可以 控制 标记的 宽度.
2154 .Bl -tag -width "PAGEIN" -compact -offset indent
2155 .It SL
2156 sleep time of the process (seconds blocked)
2157 .It PAGEIN
2158 number of disk
2159 .Tn I/O Ns 's
2160 resulting from references
2161 by the process to pages not loaded in core.
2162 .It UID
2163 numerical user-id of process owner
2164 .It PPID
2165 numerical id of parent of process process priority
2166 (non-positive when in non-interruptible wait)
2169 源文本是:
2170 .Bd -literal -offset indent
2171 \&.Bl -tag -width "PAGEIN" -compact -offset indent
2172 \&.It SL
2173 \&sleep time of the process (seconds blocked)
2174 \&.It PAGEIN
2175 \&number of disk
2176 \&.Tn I/O Ns 's
2177 \&resulting from references
2178 \&by the process to pages not loaded in core.
2179 \&.It UID
2180 \&numerical user-id of process owner
2181 \&.It PPID
2182 \&numerical id of parent of process process priority
2183 \&(non-positive when in non-interruptible wait)
2184 \&.El
2187 可接受的 宽度说明:
2188 .Bl -tag -width Ar -offset indent
2189 .It Fl width Ar "\&Fl"
2190 把 宽度 设置为 标志 (flag) 的 缺省 宽度. 所有 可调用的 宏 都有
2191 一个 缺省 宽度值. 目前
2192 .Ql \&.Fl 
2193 的 值 设为 十个 字符宽度, 大约 5/6 英寸.
2194 .It Fl width Ar "24n"
2195 设置 宽度 为 24 个 字符宽度, 大约 两英寸. 要使 比例 调整正常, 字母
2196 .Ql n
2197 必不可少
2198 .It Fl width Ar "ENAMETOOLONG"
2199 设置 宽度为 所给串的 长度.
2200 .It Fl width  Ar "\\*qint mkfifo\\*q"
2201 同样, 设置 宽度为 所给串的 长度.
2204 如果 没有 为 标记列表类型 指定 宽度, 第一次 调用
2205 .Ql \&.It
2206 的 时候, 格式化软件 试图 决定 适当的宽度. 如果
2207 .Ql ".It"
2208 的 第一个 参数 是 可调用宏, 就 使用 这个宏的 缺省宽度, 就像 把 宏名 当做宽度.
2209 可是 如果 列表中 的 其他表项 得到 另一个 可调用宏, 则 认为 它是 新的, 
2210 嵌套的 列表.
2211 .Sh 预定义串 PREDEFINED STRINGS
2212 下面的串 是 预定义的, 可以 用在 troff 的 串翻译序列
2213 .Ql \&\e*(xx
2214 中, 这里的
2215 .Em xx
2216 就是 定义的 串名; 以及 串翻译序列
2217 .Ql \&\e*x ,
2218 这里的
2219 .Em x
2220 是串名. 翻译序列 可以 用在 文本 的 任何地方.
2222 .Bl -column "String " "Nroff " "Troff " -offset indent
2223 .It Sy "String  Nroff   Troff"
2224 .It Li "<=" Ta \&<\&= Ta \*(<=
2225 .It Li ">=" Ta \&>\&= Ta \*(>=
2226 .It Li "Rq" Ta "''" Ta \*(Rq
2227 .It Li "Lq" Ta "``" Ta \*(Lq
2228 .It Li "ua" Ta ^ Ta \*(ua
2229 .It Li "aa" Ta ' Ta \*(aa
2230 .It Li "ga" Ta \` Ta \*(ga
2231 .\" .It Li "sL" Ta ` Ta \*(sL
2232 .\" .It Li "sR" Ta ' Ta \*(sR
2233 .It Li "q" Ta \&" Ta \*q
2234 .It Li "Pi" Ta pi Ta \*(Pi
2235 .It Li "Ne" Ta != Ta \*(Ne
2236 .It Li "Le" Ta <= Ta \*(Le
2237 .It Li "Ge" Ta >= Ta \*(Ge
2238 .It Li "Lt" Ta < Ta \*(Gt
2239 .It Li "Gt" Ta > Ta \*(Lt
2240 .It Li "Pm" Ta +- Ta \*(Pm
2241 .It Li "If" Ta infinity Ta \*(If
2242 .It Li "Na" Ta \fINaN\fP Ta \*(Na
2243 .It Li "Ba" Ta \fR\&|\fP Ta \*(Ba
2246 .Sy 注意 :
2247 那个 名为
2248 .Ql q
2249 的 串 应该 写成
2250 .Ql \e*q ,
2251 因为 它 只有 一个字符.
2252 .Sh 诊断 DIAGNOSTICS
2253 .Nm \-mdoc
2254 的 除错系统 比较 有限, 但是 可以 帮助你 检测出 微妙的 错误,
2255 例如 参数名 和 内部寄存器 或 宏名 冲突. (是什么?) 寄存器 是
2256 .Xr troff
2257 的 算术存储类, 用 一到二个字符 命名.
2258 .Nm \-mdoc
2260 .Xr troff
2262 .Xr ditroff
2263 而言, 所有
2264 .Nm \-mdoc
2265 的 内部寄存器 由 两个字符 组成, 格式是 <大写字母> <小写字母> 如
2266 .Ql \&Ar ,
2267 <小写字母> <大写字母> 如
2268 .Ql \&aR
2269 或 <字母> <数字> 如
2270 .Ql \&C\&1 .
2271 作为 乱上加乱,
2272 .Xr troff
2273 有 它 自己的 内部寄存器, 由 两个 小写字母 组成, 或者 是 一个点 加上 
2274 一个字母, 或者 是 转义字符 (meta-character) 和 字符. 已经 介绍过的 
2275 示例中 展示过 怎样用 转义序列
2276 .Ql \e& 
2277 防止 解释宏. 这办法 同样 适用于 内部寄存器名.
2279 .\" Every callable macro name has a corresponding register
2280 .\" of the same name (<upper_case><lower_case>).
2281 .\" There are also specific registers which have
2282 .\" been used for stacks and arrays and are listed in the
2283 .\" .Sx Appendix .
2284 .\" .Bd -ragged -offset 4n
2285 .\" [A-Z][a-z]  registers corresponding to macro names (example ``Ar'')
2286 .\" [a-z][A-Z]  registers corresponding to macro names (example ``aR'')
2287 .\" C[0-9]              argument types (example C1)
2288 .\" O[0-9]              offset stack (displays)
2289 .\" h[0-9]              horizontal spacing stack (lists)
2290 .\" o[0-9]              offset (stack) (lists)
2291 .\" t[0-9]              tag stack (lists)
2292 .\" v[0-9]              vertical spacing stack (lists)
2293 .\" w[0-9]              width tag/label stack
2294 .\" .Ed
2295 .\" .Pp
2296 如果 未经转义的 寄存器名 出现在 宏请求的 参数列表 中, 其 后果 不可预测.
2297 一般说来, 如果 大段的文字 没有 出现在 该出现的 地方, 或者 短句, 如标签, 
2298 消失了, 多半是 这个地方 误解了 参数列表中的 参数类型.
2299 既然 你的母亲 都 没打算 让你 记住 那些 乱七八糟的 东西, 那就 用 一种办法
2300 来 找出 参数 是否 有效: 
2301 .Ql \&.Db
2302 (debug) 宏 可以 显示出 对 大多数宏 的 参数列表的 解释.
2303 诸如
2304 .Ql \&.Pp
2305 之类 的 宏 不包含 调试信息, 但是 所有 可调用宏 包含, 我们 强烈建议 一旦
2306 有 疑点, 打开
2307 .Ql \&.Db
2308 宏.
2310 .Dl Usage: \&.Db [on | off]
2312 在 这个 示例中, 我们把 介于 debug 宏 之间 的 文本 故意 弄出点 错误 (标志参数
2313 .Ql \&aC
2314 应该 写成
2315 .Ql \e&aC
2317 .Bd -literal -offset indent
2318 \&.Db on
2319 \&.Op Fl aC Ar file )
2320 \&.Db off
2323 结果输出为:
2324 .Bd -literal -offset indent
2325 DEBUGGING ON
2326 DEBUG(argv) MACRO: `.Op'  Line #: 2
2327         Argc: 1  Argv: `Fl'  Length: 2
2328         Space: `'  Class: Executable
2329         Argc: 2  Argv: `aC'  Length: 2
2330         Space: `'  Class: Executable
2331         Argc: 3  Argv: `Ar'  Length: 2
2332         Space: `'  Class: Executable
2333         Argc: 4  Argv: `file'  Length: 4
2334         Space: ` '  Class: String
2335         Argc: 5  Argv: `)'  Length: 1
2336         Space: ` '  Class: Closing Punctuation or suffix
2337         MACRO REQUEST: .Op Fl aC Ar file )
2338 DEBUGGING OFF
2341 调试信息的 第一行 是 调用的 宏名, 这里是
2342 .Ql \&.Op 
2343 和 它 所在的 行号. 如果 涉及了 一个 或 多个 文件 (特别是 其他文件 
2344 包含进来), 行号有可能失灵. 但如果 只有 一个文件, 它 应该是 准的.
2345 第二行 给出了 参数计数, 参数
2346 .Pq Ql \&Fl
2347 和 它的长度. 如果 参数的长度 是 两个字符, 将会 测试 看它 能否 执行 
2348 (不幸的是,含有 非零值 的 寄存器 看上去 都能执行).
2349 第三行 给出 分配给类的 空间, 以及 类的类型. 这里的 问题是, 参数 aC 
2350 不应该 可执行. 类的 四种类型是 字符串, 可执行类, 结束标点, 和开始标点.
2351 最后一行 显示了 读入的 完整 参数行. 下个例子里, 惹祸的
2352 .Ql \&aC
2353 被转义了:
2354 .Bd -literal -offset indent
2355 \&.Db on
2356 \&.Em An escaped \e&aC
2357 \&.Db off
2359 .Bd -literal -offset indent
2360 DEBUGGING ON
2361 DEBUG(fargv) MACRO: `.Em'  Line #: 2
2362         Argc: 1  Argv: `An'  Length: 2
2363         Space: ` '  Class: String
2364         Argc: 2  Argv: `escaped'  Length: 7
2365         Space: ` '  Class: String
2366         Argc: 3  Argv: `aC'  Length: 2
2367         Space: ` '  Class: String
2368         MACRO REQUEST: .Em An escaped &aC
2369 DEBUGGING OFF
2372 参数
2373 .Ql \e&aC
2374 表现出 同样的 长度2, 这是 因为
2375 .Ql \e&
2376 序列的 长度 为零, 但是 不存在 叫做
2377 .Ql \e&aC
2378 的 寄存器, 因此 它的类型 是 字符串.
2380 其他 诊断内容 是 使用报告等, 能够 自我解释的.
2381 .Sh GROFF, TROFF AND NROFF
2383 .Nm \-mdoc
2384 宏包 不需要 和
2385 .Xr groff 
2386 的 兼容模式.
2388 为了 便于 在线阅读, 这个宏包 阻止了 分页, 页头, 页脚 之类 常常在
2389 .Xr nroff 
2390 中 出现的 中断. 此时 即使在 手册页 尾,
2391 .Xr groff
2392 (和参数
2393 .Fl T Ns Ar ascii
2394 ) 也 不会 提示 什么. 对 分页的 阻止 使得
2395 .Xr nroff Ns 'd
2396 文件 不适合 硬拷贝 (hardcopy). 有一个 名为
2397 .Ql \&cR
2398 的 寄存器 可以 通过 在 文件
2399 .Pa /usr/src/share/tmac/doc-nroff
2400 (依赖于宿主系统) 中置零, 恢复 传统风格.
2401 .Sh 相关文件 FILES
2402 .Bl -tag -width /usr/share/man0/template.doc -compact
2403 .It Pa /usr/share/tmac/tmac.doc
2404 手册宏包
2405 .It Pa /usr/share/misc/mdoc.template
2406 编写 手册 的 模板
2407 .It Pa /usr/share/examples/mdoc/*
2408 一些 手册页 的 例子
2410 .Sh 另见 SEE ALSO
2411 .Xr man 1 ,
2412 .Xr troff 1 ,
2413 .Xr mdoc 7
2414 .Sh BUGS
2415 仍然 没有 解决 在 标志参数中的 连字符, 在
2416 .Sx 描述 DESCRIPTION
2417 小节 偶尔 会 出点麻烦 (在 连字符处 断行).
2419 文档中 没有 声明 预定义串.
2421 还没有 把 3f 小节 加进 头例程 (header routine) 中.
2423 .Ql \&.Nm
2424 字体 不应当在
2425 .Sx NAME
2426 小节 中 改变.
2428 应该 检查
2429 .Ql \&.Fn
2430 防止 行 太短 的 时候 断行.
2431 偶然 它会 断开 反括弧, 而 有时候 如果 某行 已满时, 看上去 会 很可笑.
2433 当 使用 nroff 格式化 文档 时, 防止 页头和页脚 (不是 初始的 头和脚) 断开 的 方法
2434 有可能 偶尔 在 页的底部 产生 一个 不可见的 部分填满的 行 (空行).
2436 列表和显示宏不做任何保存, 显然它应该做的.
2437 .\" Note what happens if the parameter list overlaps a newline
2438 .\" boundary.
2439 .\" to make sure a line boundary is crossed:
2440 .\" .Bd -literal
2441 .\" \&.Fn struct\e\ dictionarytable\e\ *dictionarylookup struct\e\ dictionarytable\e\ *tab[]
2442 .\" .Ed
2443 .\" .Pp
2444 .\" produces, nudge nudge,
2445 .\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
2446 .\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
2447 .\" nudge
2448 .\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] .
2449 .\" .Pp
2450 .\" If double quotes are used, for example:
2451 .\" .Bd -literal
2452 .\" \&.Fn \*qstruct dictionarytable *dictionarylookup\*q \*qchar *h\*q \*qstruct dictionarytable *tab[]\*q
2453 .\" .Ed
2454 .\" .Pp
2455 .\" produces, nudge nudge,
2456 .\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
2457 .\" nudge
2458 .\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
2459 .\" nudge
2460 .\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" .
2461 .\" .Pp
2462 .\" Not a pretty sight...
2463 .\" In a paragraph, a long parameter containing unpaddable spaces as
2464 .\" in the former example will cause
2465 .\" .Xr troff
2466 .\" to break the line and spread
2467 .\" the remaining words out.
2468 .\" The latter example will adjust nicely to
2469 .\" justified margins, but may break in between an argument and its
2470 .\" declaration.
2471 .\" In
2472 .\" .Xr nroff
2473 .\" the right margin adjustment is normally ragged and the problem is
2474 .\" not as severe.
2476 .Sh "[中文版维护人]"
2477 .Sy 徐明 <xuming@users.sourceforge.net>
2478 .Sh "[中文版最新更新]"
2479 .Sy 2003/05/13
2480 .Sh "《中国Linux论坛man手册页翻译计划》"
2481 .Sy http://cmpp.linuxforum.net