MDOC.SAMPLES(7) | Miscellaneous Information Manual | MDOC.SAMPLES(7) |
mdoc.samples
—
-mdoc
を使って BSD
マニュアルを書くためのチュートリアルサンプル
man mdoc.samples
troff(1) 用の
コンテントベース
でかつ
領域ベース
なフォーマットパッケージである
-mdoc
マクロパッケージを使って
BSD
マニュアルを書くためのチュートリアルサンプルです。
前身である -man(7)
パッケージはフォントの操作や他の写植方法の
詳細は個々の作者に任せたページレイアウトベースのものでした。
-mdoc
では、ページレイアウトマクロは
タイトル、セクションのヘッダー、ディスプレイ、リストのマクロからなる
ページ構造領域
を形成しています。これらの項目は整形された
ページでのテキストの物理的な位置に影響を持ちます。
ページ構造領域に加え、さらにマニュアル領域および一般テキスト領域
の 2
つの領域があります。
一般テキスト領域はテキストの一部をクォートしたり、
強調するといったような作業を実行するマクロとして定義されています。
マニュアル領域はコマンドやルーチン、それに
BSD
の関連ファイルを記述するための日常使用されるインフォーマルな言葉の
サブセットであるマクロとして定義されています。
マニュアル領域のマクロはコマンド名、コマンド行の引数とオプション、
関数名、関数のパラメーター、パス名、変数名、他のマニュアルページへの
クロスリファレンスなどを扱います。
これらの領域の項目は作者とマニュアルページの将来のユーザーの両者に
とって価値のあるものです。
マニュアル間で一貫性を高めることによって将来のドキュメントツールへの
移行が容易になることが望まれます。
マニュアルのエントリーは、実際の長さに関わらず、 また男女の区別をするような意図なしで、 UNIX のマニュアルページを通して、 単純に man ページとして参照されています。
通常チュートリアルドキュメントは、そこに示された題材をすぐに使いたい時 に読むものですので、このドキュメントのユーザーはせっかちな人だと仮定して います。このドキュメントの残りの部分で説明されている題材は以下のような 構成になっています。
-mdoc
パッケージは man
ページを記述するプロセスを簡単にすること
を目的としています。
-mdoc
を使うために troff(1)
の
ゴタゴタした詳細を学ぶ必要がないのが理想ですが、いくつか片付けるべき
避けられない制限事項があります。また、このパッケージは高速で
ない
ということも予め警告しておきます。
troff(1)
のように、マクロは
‘.
’
(ドット文字)
を行頭に置き、
それに続けて 2
文字からなるマクロの名称を指定することによって呼び出され
ます。引数はマクロの後にスペースで区切って指定することができます。
行頭にドット文字を指定することによって
troff(1) にそれに続く
2 文
字をマクロ名として解釈するよう指示しています。マクロを起動せずに、ある
文脈の行の先頭に
‘.
’
(ドット文字)
を置くためには、
‘.
’ (ドット)
の前にエスケープシーケンス
‘\&
’
を指定します。
‘\&
’
は文字通りスペース幅が
0
として解釈され、出力には現れません。
一般的に troff(1)
マクロは引数を 9
つまで取ることができ、
それ以上指定された引数は無視されます。
-mdoc
でのほとんどのマクロは
9
つの引数を取ることができ、
限られた場合にのみ引数は次の行に続けて指定することができます
(
拡張引数
セクションを参照)。
いくつかのマクロは引用符に囲まれた引数を扱うことができます
(下の
引数に空白文字を指定する
セクションを参照)。
-mdoc
での一般テキスト領域とマニュアル領域のほとんどのマクロは特別であり、
その引数のリストは呼び出し可能なマクロ名として
解析 されます。
これは一般テキスト領域またはマニュアル領域のマクロ名に一致し、
呼び出し可能であると判断された引数リストの中の引数は、
実行されるか、それが処理される時に呼び出されることを意味しています。
この場合、引数はマクロ名にも関わらず、
‘.
’ (ドット)
で前置されません。
このようにしてたくさんのマクロを入れ子にすることができます。
例えばオプションマクロ
‘.Op
’
はフラグマクロ
‘Fl
’ と
引数マクロ
‘Ar
’ を
呼び出して 、
オプションのフラグを引数とともに指定することができます。
-s
bytes].Op Fl s Ar bytes
によって生成される2
文字からなる文字列をマクロ名として解釈されないようにするには、
その文字列の前にエスケープシーケンス
‘\&
’
を指定します。
.Op \&Fl s \&Ar bytes
によって生成されるここで文字列
‘Fl
’ と
‘Ar
’
はマクロとして解釈されていませ
ん。本ドキュメントと関連のクイックリファレンスマニュアル
mdoc(7)
を通して、引数リストが呼び出し可能な引数として解析されるマクロは「解析
される」、引数リストから呼び出されることができるマクロは「呼び出し可能」
と表現します。
-mdoc
のほとんどすべてのマクロは解析されるのです
から、これは技術的には
不謹慎な
ことですが、常にマクロを「呼び出
し可能である」とか「他のマクロを呼び出すことができる」と表現するのは面
倒なことであるため、「解析される」という用語が使われています。
ひとつ以上の空白文字を含む文字列をひとつの引数として指定したい場合がよ
くあります。これは 9
個を越える引数を指定できないという制限に対処したり、
引数のリストにある特有な配置をおこなうことが必要なマクロに引数を指定す
るような場合に必要となることがあります。
たとえば、関数マクロ
‘.Fn
’
では最初の引数は関数名であり、残りの
引数が関数のパラメーターであることが必要です。
ANSI C の括弧で
囲まれたパラメーターリストにおける関数のパラメーターの宣言の規定により、
各パラメーターは最低でも
2
語の文字列となります。
たとえば int foo
のようになります。
空白を含む引数を指定するには 2 通りの方法があります。 実装上の注意: 解析の前に個々の引数を再割り当てすることによって、 引用符の間に空白を含めて渡すのが最も便利な方法なのですが、 AT&T の troff のすべてのマクロを実装するには処理速度およ びメモリー使用量の点でかなり高価な方法となります。 groff では高価な処理にはなりませんが、移植性のため、この方法は 空白を含めることが最も必要である以下のマクロだけに限っています。
空白を含む文字列を渡すのに、固定空白、すなわち詰め込まれない
空白文字
‘\
’
を使う方法があります。
すなわち、空白の前にエスケープ文字
‘\
’
を指定する方法です。
この方法はどのマクロでも使うことができますが、1
行を越える長さの
テキストの調整の邪魔になるという副作用があります。
Troff では
固定空白は他の印刷可能文字と同様に扱われ、通常期待されるように、
そこで文字列を空白や改行で分けることを行なわなくなります。
この方法は文字列が行の境界をまたがないであろう場合に有用です。
例えば、
fetch
(char *str).Fn fetch char\ *str
’
によって生成されるfetch
(char *str).Fn fetch "char
*str"
’
でも生成されるもし ‘\
’
や引用符が省かれると、
‘.Fn
’ は引数を
3 つ取り、
その結果は以下のようになります。
fetch
(char,
*str)
パラメーターのリストが改行の境界をまたぐ場合に何がおこるかについては、 バグ のセクションを参照してください。
Troff
は行末に空白文字があると混乱してしまうことがあります。
<空白> <行末>
の文字シーケンスからすべての
空白文字を取り除くのは良い予防策です。
どうしても行末に空白文字をおく必要性が出てきた場合は、
詰め込まれない空白とエスケープ文字
‘\&
’ を
使用することによって対応できます。
例えば、
‘string\ \&
’
のようにします。
改行 ‘\n
’
のような特殊文字は
‘\
’ を
‘\e
’
で置き換える
(すなわち
‘\en
’ とする)
ことによって、
バックスラッシュを残して扱うことができます。
man ページの本文はファイル /usr/share/misc/mdoc.template の基本テンプレートを使って容易に作り上げることができます。 /usr/share/examples/mdoc にはいくつかのサンプルの man ページが収められています。
.\" 以下の項目はすべての man ページで必要な項目です。 .Dd 月 日, 年 .Os オペレーティングシステム [バージョン/リリース] .Dt ドキュメントタイトル [セクション番号] [ボリューム] .Sh NAME .Nm 名前 .Nd 名前の 1 行での説明 .Sh SYNOPSIS .Sh DESCRIPTION .\" 以下の項目については、必要に応じてコメントをはずして .\" 使用してください。 .\" この次の項目はセクション 2, 3, 9 でのみ必要な、関数の .\" 戻り値です。 .\" .Sh RETURN VALUE .\" 次の項目はセクション 1, 6, 7, 8, 9 でのみ必要なものです。 .\" .Sh ENVIRONMENT .\" .Sh FILES .\" .Sh EXAMPLES .\" 次の項目はセクション 1, 6, 7, 8, 9 でのみ必要なものです。 .\" ((シェルへの) コマンドの戻り値と .\" fprintf/stderr の型の診断です。) .\" .Sh DIAGNOSTICS .\" 次の項目はセクション 2, 3, 9 でのみ必要な、 .\" エラーハンドリングとシグナルハンドリングです。 .\" .Sh ERRORS .\" .Sh SEE ALSO .\" .Sh CONFORMING TO .\" .Sh HISTORY .\" .Sh AUTHORS .\" .Sh BUGS
このテンプレートにおける最初の項目はマクロ
(.Dd
, .Os
,
.Dt
)
であり、それぞれドキュメントの日付、
man
ページもしくは題材となっているソースの開発や変更のベースとなった
オペレーティングシステム、
(大文字で) man
ページタイトルをそのページが属するマニュアルの
セクション番号とともに指定したもの、となっています。
これらのマクロはそのページを識別するものであり、
後述の
タイトルマクロ
で議論されています。
テンプレート中の残りの項目はセクションのヘッダー
(.Sh
) であり、
それらのうち
NAME と
SYNOPSIS と
DESCRIPTION
は必須項目です。
これらのヘッダーについては
マニュアル領域
を説明した後、
ページ構造領域
で議論されます。
いくつかのコンテントマクロはページレイアウトマクロの説明に
使われていますので、ページレイアウトマクロの前にコンテントマクロについて
読むことを推奨します。
タイトルマクロはページ構造領域の最初の部分ですが、man ページを 前日に書き始めたいという人のために、最初に分けて記述されます。 3 つのヘッダーマクロでドキュメントか man ページのタイトル、 オペレーティングシステム、および原著の日付を指定します。 これらのマクロはドキュメントの最初に一度だけ呼び出されるもので、 ヘッダーとフッタを構成するためだけに使用されます。
.Dt
ドキュメントタイトル
セクション番号
[ボリューム]
AMD |
UNIX Ancestral Manual Documents |
SMM |
UNIX System Manager's Manual |
URM |
UNIX Reference Manual |
PRM |
UNIX Programmer's Manual |
デフォルトのボリュームラベルは
セクション 1, 6, 7 では
URM
、
セクション 8 では
SMM
、
セクション 2, 3, 4, 5 では
PRM
となっています。
.Os
オペレーティングシステム
リリース番号
.Os 4.3BSD
や
.Os FreeBSD 2.2
やローカルで生成されたセット
.Os CS Department
Berkeley
でのデフォルトである、引数なしの
‘.Os
’
はサイト固有の
ファイル
/usr/share/tmac/mdoc/doc-common
において BSD
として定義されています。
これは実際には LOCAL
として定義すべきです。
‘.Os
’
マクロがない場合は、ページの左下角は見にくくなるであろうことに
注意してください。
.Dd 月
日, 年
January 25, 1989
マニュアル領域のマクロ名はコマンドやサブルーチン、それに関連ファイルを
説明するために使われている日常のインフォーマルな言葉から取られています。
この言葉と少し違うバリエーションのものが
man ページを書く上での
3
つの異なった面を記述するのに使われます。
最初のものは
-mdoc
マクロ使用方法の説明です。
2 番目のものは
-mdoc
マクロを用いた
UNIX
コマンドの記述です。
3
番目はコマンドを通常の言葉の感覚でユーザーに示したものです。
これはすなわち、man
ページのテキスト中でのコマンドの議論となります。
最初のケースでは、 troff(1) マクロはそれ自身、 一種のコマンドとなっています。 troff コマンドは一般的に以下のような形式をとります。
‘.Va
’
はマクロコマンドもしくは要求を示しており、
それに続くものはすべて引数として処理されます。
2
番目のケースでは、コンテントマクロを使用する
UNIX
コマンドの記述がもう少し含まれます。
典型的な SYNOPSIS
コマンド行はこのように表示されます。
filter
[-flag
] infile outfileここで filter
はコマンド名であり、
角括弧で囲まれた文字列
-flag
は
フラグ 引数で、
これは角括弧で囲むことによってオプションであることを示しています。
-mdoc
の用語では
infile と outfile は
引数
と称されています。
上の例のフォーマットを行なったマクロは以下のものです。
.Nm filter .Op Fl flag .Ar infile outfile
3 番目のケースでは、コマンドの説明や構文に上記の例の両方が使われ、 さらに細かい記述が追加されるでしょう。 上の例での引数 infile と outfile は オペランド もしくは ファイル引数 として参照されます。 コマンド行の引数のリストはかなり長くなる場合もあります。
make
-eiknqrstv
] [-D
variable] [-d
flags] [-f
makefile]
[-I
directory]
[-j
max_jobs]
[variable=value]
[target ...]ここではコマンド
make
について記述しており、
makefile をフラグ
-f
の引数としています。またオプションの
ファイルオペランド
target
についても議論しています。
言葉での説明では、こういった詳細な記述が混乱を防いでくれますが、
-mdoc
パッケージにはフラグ
への
引数のための
マクロがありません。その代わりに
target のような
オペランドやファイル引数に使われる引数マクロ
‘Ar
’ が
variable
のようなフラグへの引数にも使われます。
この make
コマンド行は以下の指定により生成されています。
.Nm make .Op Fl eiknqrstv .Op Fl D Ar variable .Op Fl d Ar flags .Op Fl f Ar makefile .Op Fl I Ar directory .Op Fl j Ar max_jobs .Op Ar variable=value .Bk -words .Op Ar target ... .Ek
マクロ
‘.Bk
’ と
‘.Ek
’ は
キープ
セクションにおいて解説されています。
マニュアル領域と一般テキスト領域のマクロはいくつかの小さな違い
があるものの、同様な構文を使用しています。
‘.Ar
’,
‘.Fl
’,
‘.Nm
’,
‘.Pa
’
は引数なしで呼び出された時のみ異なります。
‘.Fn
’ と
‘.Xr
’
は引数のリストの順番が異なります。
マクロ ‘.Op
’
と ‘.Fn
’
には入れ子の制限があります。
すべてのコンテントマクロが句読点を認識し、正しく扱うには、
各々の句読点文字が先行する空白で分離されている必要があります。
以下のように指定されている場合、
.Li sptr, ptr),
結果は以下のようになります。
sptr,
ptr),
ここでは句読点は認識されずすべての出力はリテラルなフォントで行なわれて います。句読点が空白文字で区切られている場合、
.Li sptr , ptr ) ,
結果は以下のようになります。
sptr
,
ptr
今度は句読点が認識され、出力はデフォルトのフォントで行なわれ リテラルフォントの文字列と区別されています。
‘\&
’
でエスケープすることによって句読点文字の特別な意味を
取り除くことができます。
troff
はマクロ言語としての限界から、
数学、論理学、もしくは以下の引用符の集合のメンバを含んだ文字列を
表現するのは困難です。
{+,-,/,*,%,<,>,<=,>=,=,==,&,`,',"}
troff
が文字によって示唆されている操作もしくは評価を実際に
行なっていることが、その問題の原因となっています。
‘\&
’
でこれらをエスケープすることによって、
これらの文字が予期せずに評価されることを防止することができます。
最初のコンテントマクロは、以下の
‘.Ad
’
において、
その典型的な構文が示されています。
アドレスマクロは addr1[,addr2[,addr3]] の形式からなる アドレスを識別します。
使い方: .Ad address
... [.,:;()[]?!
.Ad
addr1
.Ad
addr1 .
.Ad
addr1 , file2
.Ad
f1 , f2 , f3 :
.Ad
addr ) ) ,
‘.Ad
’
を引数なしで呼び出すのはエラーです。
‘.Ad
’
は他のマクロから呼び出し可能で解析されます。
‘.An
’
マクロは文書化されている項目の作者の名前、もしくは実際の
マニュアルページの作者の名前を指定するために使われます。
名前の情報の後のすべての引数は句読点として扱われます。
使い方: .An
author_name [.,:;()[]?!
.An
Joe Author
.An
Joe Author ,
.An
Joe Author Aq nobody@FreeBSD.ORG
.An
Joe Author ) ) ,
‘.An
’
マクロは解析され、呼び出し可能です。
‘.An
’
を引数なしで呼び出すのはエラーです。
引数マクロ
‘.Ar
’
はコマンド行の引数を参照する際に
使用することができます。
使い方: .Ar
argument ... [.,:;()[]?!
.Ar
.Ar file1
.Ar file1 .
.Ar file1 file2
.Ar f1 f2 f3 :
.Ar file ) ) ,
‘.Ar
’
が引数なしで呼び出されると、
‘.Ar
’
として扱われます。
‘.Ar
’
マクロは解析され、呼び出し可能です。
‘.Cd
’
マクロはセクション 4
のマニュアルにおいて、
デバイスインターフェースの
config(8)
による宣言の説明に使われます。
このマクロは引用符
(二重引用符のみ)
で囲まれた引数を取ることができます。
device le0 at scode?
.Cd device le0 at scode?
’
によって生成されます。コマンド修飾子は
‘.Cm
’
マクロがすべての引数の前にダッシュ文字を
付けないことを除いて、
‘.Fl
’ (フラグ)
コマンドと同じです。
伝統的にフラグはダッシュ文字に引き続いて指定されますが、
いくつかのコマンドやコマンドのサブセットはこの方法を使っていません。
コマンド修飾子はエディタコマンドのような対話的なコマンドでも
指定されることがあります。
フラグ
のセクションを参照してください。
インクルードファイルにおいて定義されている変数は
‘.Dv
’
マクロによって指定します。
使い方: .Dv
defined_variable ... [.,:;()[]?!
‘.Dv
’
を引数なしで呼び出すのはエラーです。
‘.Dv
’
は解析され、呼び出し可能です。
エラーマクロ
‘.Er
’
はセクション 2
のライブラリルーチンにおける
エラーの戻り値を指定します。
下記の 2 番目の例では
‘.Er
’
は一般テキスト領域マクロである
‘.Bq
’
(これはセクション 2
のマニュアルページで使われています)
と共に使われています。
使い方: .Er
ERRNOTYPE ... [.,:;()[]?!
.Er
ENOENT
ENOENT
.Er
ENOENT ) ;
ENOENT
);.Bq Er ENOTDIR
ENOTDIR
]‘.Er
’
を引数なしで呼び出すのはエラーです。
‘.Er
’
は解析され、呼び出し可能です。
‘.Ev
’
マクロは環境変数を指定します。
使い方: .Ev
argument ... [.,:;()[]?!
‘.Ev
’
を引数なしで呼び出すのはエラーです。
‘.Ev
’
は解析され、呼び出し可能です。
‘.Fa
’
マクロは関数の引数
(パラメーター) を
マニュアルの
SYNOPSIS
のセクション外、
もしくは SYNOPSIS
のセクション内で参照する場合に使われます。
パラメーターのリストが
‘.Fn
’
マクロでは長すぎる場合は、
囲って使うマクロ
‘.Fo
’ と
‘.Fc
’
を使わなければなりません。
‘.Fa
’
は構造体のメンバを参照する場合にも使われます。
使い方: .Fa
function_argument ... [.,:;()[]?!
.Fa
d_namlen ) ) ,
.Fa
iov_len
‘.Fa
’
を引数なしで呼び出すのはエラーです。
‘.Fa
’
は解析され、呼び出し可能です。
‘.Fd
’
マクロは SYNOPSIS
セクションにおいて、
セクション 2 または 3
の関数の説明で使われます。
‘.Fd
’
マクロから他のマクロを呼び出すことはなく、
他のマクロから呼び出すこともできません。
使い方: .Fd
include_file (or defined variable)
SYNOPSIS
セクションにおいて、関数がすでに示されていて改行が
入っていない場合、
‘.Fd
’
によって改行が挿入されます。これによって
前の関数呼び出しと次の関数の宣言の間に最適な行間が設定されます。
‘.Fl
’
マクロはコマンド行のフラグを扱います。
フラグの前にはダッシュ
‘-
’
が挿入されます。
対話的なコマンドのフラグでは、ダッシュがフラグの前には挿入されませんが、
‘.Cm
’
(コマンド修飾子)
マクロは、ダッシュを付けないことを除き、
同じ働きをします。
使い方: .Fl
argument ... [.,:;()[]?!
引数なしで
‘.Fl
’
マクロを指定すると、
標準入力/標準出力を意味するダッシュとなります。
ひとつのダッシュに
‘.Fl
’
マクロを使用すると、
2
つダッシュとなることに注意して下さい。
‘.Fl
’
マクロは解析され、呼び出し可能です。
‘.Fn
’
マクロは ANSI C
の記法を規範としています。
使い方: .Fn [type] function [[type] parameters ... [ .,:;()[]?! ]]
.Fn
getchar
getchar
().Fn strlen
) ,
strlen
()),.Fn
"int align" "const * char *sptrs"
,align
(const
* char *sptrs),‘.Fn
’
を引数を指定せずに呼び出すのはエラーです。
‘.Fn
’
マクロは解析され、呼び出し可能です。
他のマクロの呼び出しは
‘.Fn
’
の呼び出しの終了を意味することに
注意して下さい
(閉じ括弧がその点で挿入されます)。
9
個以上のパラメーターをとる関数
(これは滅多にないことですが)
では、 ‘.Fo
’
マクロ (関数オープン)
と ‘.Fc
’
マクロ (関数クローズ)
を ‘.Fa
’
(関数引数)
と共に使って、
この制限を回避することができます。
以下にその例を示します。
.Fo "int res_mkquery" .Fa "int op" .Fa "char *dname" .Fa "int class" .Fa "int type" .Fa "char *data" .Fa "int datalen" .Fa "struct rrec *newrr" .Fa "char *buf" .Fa "int buflen" .Fc
これは以下のような結果になります。
int
res_mkquery
(int op, char
*dname, int class, int type,
char *data, int datalen,
struct rrec *newrr, char *buf,
int buflen);‘.Fo
’ と
‘.Fc
’
マクロは解析され、呼び出し可能です。
SYNOPSIS
セクションでは、関数は常に行の先頭から開始されます。
SYNOPSIS
セクションにおいて、複数の関数が示されており、
関数の型が示されない場合、改行が挿入され、現在の関数名とその前の関数名
の間に最適な改行量が設定されます。現在、
‘.Fn
’ は troff
の行の長さ
に対して、語の境界をチェックしておらず、予期しない場所で改行が挿入され
てしまうことがあります。これは近い将来修正されるでしょう。
このマクロは SYNOPSIS セクションで使うものです。 man ページ中の他の場所でも問題なく使うことができますが、 セクション 2 と 3 の SYNOPSIS セクションでカーネルの通常の形式で 関数の型を示すことがこのマクロの目的です (このマクロは関数名が次の行に 置かれるように改行を挿入します)。
使い方: .Ft type
... [.,:;()[]?!
.Ft struct
stat
‘.Ft
’
は他のマクロからは呼び出せません。
‘.Ic
’
マクロは対話的なコマンド、もしくは内部コマンドを指定します。
使い方: .Ic
argument ... [.,:;()[]?!
‘.Ic
’
を引数なしで呼び出すのはエラーです。
‘.Ic
’
マクロは解析され、呼び出し可能です。
‘.Nm
’
マクロは文書のタイトルやサブジェクト名を指定するために
使われます。このマクロは最初に呼び出された時の引数を覚えておくという
特性を持っており、それは常にそのページのサブジェクト名であるべきです。
引数なしで呼び出されると
‘.Nm
’
は作者の作業を少なくするためだけの
目的で、最初の名称を出力します。注意:
セクション 2 または 3
のドキュメント
の関数名は NAME
セクションにおいて
‘.Nm
’
で指定され、
SYNOPSIS
セクションや残りのセクションでは
‘.Fn
’
で指定され ます。
csh(1) での
‘while
’
コマンドのキーワードのような対話的
なコマンドでは
‘.Ic
’
マクロを使うべきです。
‘.Ic
’ は
ほとんど ‘.Nm
’
と同一ですが、それが最初に使われたときの引数を
記憶することはできません。
使い方: .Nm
argument ... [.,:;()[]?!
.Nm mdoc.sample
mdoc.sample
.Nm \-mdoc
-mdoc
..Nm foo ) ) ,
foo
) ),
.Nm
mdoc.samples
‘.Nm
’
マクロは解析され、呼び出し可能です。
‘.Op
’
マクロはコマンド行の残りのすべての引数をオプションである
ことを示す角括弧で囲み、末尾の句読点は角括弧の外に置きます。
‘.Oc
’ マクロと
‘.Oo
’
マクロは複数行に渡って使うことが
できます。
使い方: .Op options
... [.,:;()[]?!
.Op
.Op Fl k
-k
].Op Fl k ) .
-k
])..Op Fl k Ar kookfile
-k
kookfile].Op Fl k Ar kookfile ,
-k
kookfile],.Op Ar objfil Op Ar corfil
.Op Fl c Ar objfil Op Ar corfil ,
-c
objfil
[corfil]],.Op word1 word2
‘.Oc
’
マクロと ‘.Oo
’
マクロ:
.Oo .Op Fl k Ar kilobytes .Op Fl i Ar interval .Op Fl c Ar count .Oc
生成結果: [[-k
kilobytes] [-i
interval] [-c
count]]
‘.Op
’ と
‘.Oc
’ と
‘.Oo
’ マクロは
解析され、呼び出し可能です。
‘.Pa
’
マクロはパス名もしくはファイル名をフォーマットします。
使い方: .Pa
pathname [.,:;()[]?!
.Pa
/usr/share
.Pa
/tmp/fooXXXXX ) .
‘.Pa
’
マクロは解析され、呼び出し可能です。
一般的な変数への参照です。
使い方: .Va
variable ... [.,:;()[]?!
.Va
count
.Va
settimer
,.Va
int *prt ) :
.Va
char s ] ) ) ,
‘.Va
’
を引数なしで呼び出すのはエラーです。
‘.Va
’
マクロは解析され、呼び出し可能です。
‘.Xr
’
マクロは最初の引数にマニュアルページの名称を取り、
もしあれば次の引数にセクションのページ数か句読点を取ります。
すべての残りの引数は句読点と見なされます。
使い方: .Xr
man_page [1,...,8] [.,:;()[]?!
‘.Xr
’
マクロは解析され、呼び出し可能です。
‘.Xr
’
を引数なしで呼び出すのはエラーです。
使い方: .At [v6 | v7 | 32v | V.1 | V.4] ... [ .,:;()[]?! ]
.At
.At v6 .
‘.At
’
マクロは解析
されず
、呼び出し 不可
です。 最大 2
つまでの引数を取ることができます。
使い方: .Bx
[Version/release] ... [.,:;()[]?!
]
.Bx
.Bx 4.3 .
‘.Bx
’
マクロは解析され、呼び出し可能です。
使い方: .Fx Version.release ... [ .,:;()[]?! ]
.Fx 2.2
.
‘.Fx
’
マクロは解析
されず
、呼び出し 不可
です。 最大 2
つまでの引数を取ることができます。
使い方: .Ux ...
[.,:;()[]?!
]
.Ux
‘.Ux
’
マクロは解析され、呼び出し可能です。
囲いの概念はクォートと似たものです。
1
つ以上の文字列が引用符や括弧のような文字のペアで囲まれている
オブジェクトを指します。
クォートと囲いという用語はこの文書を通して同じ意味で使われます。
ほとんどの 1
行の囲いマクロはクォート
(quote)
のヒントとするために、
小文字の ‘q
’
で終了しますが、いくつかの例外があります。
各々の囲いマクロに対し、開始マクロと終了マクロのペアもあり、
それぞれ小文字の
‘o
’ と
‘c
’
で終了します。
これらは 1
行以上のテキストに渡って使うことができますが、
入れ子にする場合に制限があります。
その中では 1
行形式のクォートマクロのみ使用することができます。
クォート | 終了 | 開始 | 機能 | 結果 | |
.Aq | .Ac | .Ao | カギ括弧による囲い | <文字列> | |
.Bq | .Bc | .Bo | 角括弧による囲い | [文字列] | |
.Dq | .Dc | .Do | 二重引用符 | ``文字列'' | |
.Ec | .Eo | 囲い文字列 (XXによる) | XX文字列XX | ||
.Pq | .Pc | .Po | 括弧による囲い | (文字列) | |
.Ql | クォートされたリテラル | `st' or 文字列 | |||
.Qc | .Qo | まっすぐな二重引用符 | 文字列 | ||
.Sq | .Sc | .So | 一重引用符 | `文字列' |
下記の不正なマクロを除き、すべてのクォートマクロは解析され、呼び出し 可能です。句読点がひとつずつ置かれていて、スペースで区切られていれば、 すべてのクォートマクロは句読点を適切に扱います。クォートマクロは開く 句読点、閉じる句読点(訳注: 句読点には括弧なども含みます) を調べ、 それが囲む文字列より前か後かを決めます。これによって、ある程度の入れ子 が可能になっています。
.Ec
,
.Eo
.Ql
.Pf
.Pf ( Fa name2
‘.Ns
’
(空白なし)
マクロはサフィックス機能と同様の作用があります。
クォートの例:
囲いマクロの入れ子についての良い例については、
オプションマクロ
‘.Op
’
を参照してください。
このマクロは上でリストされているような囲いマクロと同じベースの上に
作られています。
拡張引数リストマクロ
‘.Xo
’ と
‘.Xc
’
もまた同じルーチンを
ベースに作られており、
-mdoc
マクロの使い方の非常に良い例と
なっています。
‘.No
’
マクロはマクロコマンド行において、コンテントマクロの構文
形式に従うが、フォーマットされては
ならない
単語をハックする
ものです。
‘.Ns
’
マクロはマクロ間での不要な空白を除去します。
これはフラグと引数の間に空白を含まない古いスタイルの引数リストを使う
場合に便利です。
.Op Fl I Ns Ar directory
-I
directory]
という結果になります。注: ‘.Ns
’
マクロは他のマクロ名が続かなければ、
スペースを除去したあとに
‘.No
’
マクロを常に起動します。
‘.Ns
’
マクロは解析され、呼び出し可能です。
‘.Sx
’
マクロは同一文書内でのセクションのヘッダーへの参照を
指定します。これは解析され、呼び出し可能です。
以下のマクロは多少なりとも参考文献を扱えるようにと意図したものです。 これらのマクロは、せいぜい参照スタイルの参考文献のサブセットを手動で 作成しやすくする程度です。
‘%
’
で始まるマクロは呼び出し不可能ですが、
呼び出し側に戻る商標名マクロだけは解析されます。
(現時点では予期できないことです。)
商標名のみ解析されるのは
troff/ditroff
の出力を
きれいにするためです。
‘.Rv
’
マクロは RETURN
VALUE のセクション
で使うテキストを生成します。
使い方: .Rv [-std
function]
‘.Rv -std atexit
’
は以下のテキストを生成します。
The atexit
() function returns the value 0 if
successful; otherwise the value -1 is returned and the global
variable errno is set to indicate the error.
-std
オプションはセクション
2 と 3
のマニュアルページでのみ有効です。
商標名マクロは一般的に長さが 2 文字を越えるすべてが大文字の単語用に 使われる小さな大文字のマクロです。
使い方: .Tn symbol
... [.,:;()[]?!
‘.Tn
’
マクロは解析され、他のマクロから呼び出し可能です。
‘.Xo
’ と
‘.Xc
’
マクロでマクロの境界における引数リストを
拡張することができます。引数リストは
‘.Op
’
のようなすべての引数
が 1
行中に指定されていることを前提としているマクロの中では行に渡って
拡張することができません。
以下に空白モードマクロをスペーシングをオフにするために
使った ‘.Xo
’
での例を示します。
.Sm off .It Xo Sy I Ar operation .No \en Ar count No \en .Xc .Sm on
これは以下のような結果になります。
例をもうひとつ:
.Sm off .It Cm S No / Ar old_pattern Xo .No / Ar new_pattern .No / Op Cm g .Xc .Sm on
これは以下のような結果になります。
S
/old_pattern/new_pattern/[g
]囲いマクロを使った
‘.Xo
’
の他の例:
変数の値をテストして下さい。
.It Xo .Ic .ifndef .Oo \&! Oc Ns Ar variable .Op Ar operator variable ... .Xc
これは以下のような結果になります。
.ifndef
[!]variable [operator variable
...]上のすべての例では
‘.It
’
(リスト項目) マクロの
引数リストに
‘.Xo
’
マクロを使用しています。
拡張マクロが使われることはあまりありません。使われるとすれば、リスト
項目の引数リストを拡張する場合です。残念なことに、これが拡張マクロが
最も懲り性であるところでもあります。最初の
2
つの例では、スペーシングは
オフになっています。3
番目では、ある箇所にはスペーシングを入れることが
望ましいのですが、出力全体に入れたいわけではありません。そのような状況
でこれらのマクロが適切に動作するためには、
‘.Xo
’ と
‘.Xc
’ マクロが
3
番目の例にあるように指定されていることを確認してください。
‘.Xo
’
マクロが置かれた
‘.It
’
の引数リストに他のものが
置かれると、スペーシングがどうなるかは予測不可能です。
この場合、
‘.Ns
’
(空白なしマクロ)
は行中の最初もしくは最後の
マクロに指定してはいけません。現在
BSD
でリリースされている
900 の
マニュアルページ
(実際のページでは約
1500 ページ) のうち 15 の
マニュアルページでのみしか
‘.Xo
’
が使われていません。
以下にリストされている、最初の
3
つのセクションヘッダーマクロ
‘.Sh
’
はすべての man
ページで必須のものです。
残りのセクションヘッダーはマニュアルページの作者の裁量において、
推奨されているものです。
‘.Sh
’ マクロは
9
つまでの引数を取ることができます。
これは解析されますが、呼び出し不可能です。
(NAME)
マクロは必須のものです。
これが指定されていないと、ヘッダーとフッタ、それにデフォルトの
ページレイアウトが設定されず、結果はかなり好ましくないものになるでしょう。
NAME
セクションは最低 3
つの項目からなります。
最初のものは名称マクロ
‘.Nm
’
であり、man
ページのサブジェクトと
なります。2
番目のものは名称説明マクロ
‘.Nd
’ であり、
サブジェクト名を 3
つめの項目、すなわちその名称の説明と分離します。
説明に割り当てられるスペースは小さいものですので、
できるだけ簡潔で分かりやすいものでなければなりません。
書式 (SYNOPSIS)
セクションはその man
ページのサブジェクト
となっている項目の典型的な使用法を説明します。
必須のマクロは
‘.Nm
’,
‘.Cd
’,
‘.Fn
’
のいずれかです。
(他には ‘.Fo
’,
‘.Fc
’,
‘.Fd
’,
‘.Ft
’ の
マクロも必要な場合があります。)
関数名マクロ
‘.Fn
’
はセクション 2 と 3
のマニュアルページに
おいて必須のもので、コマンドと一般名称マクロ
‘.Nm
’ は
セクション 1, 5, 6, 7, 8
で必須の項目です。
セクション 4
のマニュアルでは
‘.Nm
’ か
‘.Fd
’
、もしくは
コンフィギュレーションデバイス使用法マクロ
‘.Cd
’
が必要です。
その他のいくつかのマクロが下に示すような書式行を生成するために必要な
ことがあります。
cat
[-benstuv
] [-
]
file ...以下のマクロが使われています。
.Nm cat
.Op Fl benstuv
.Op Fl
.Ar
注: マクロ
‘.Op
’,
‘.Fl
’,
‘.Ar
’ は
パイプの文字
‘|
’
を認識し、下記のようなコマンド行
.Op Fl a | Fl b
はうまくいきません。 troff は通常 | を特別のオペレータとして 解釈します。この他で | が使える場合については 定義済みの文字列 セクションを参照して下さい。
.Bl
’
、リスト項目マクロ
‘.It
’ 、
リスト終了マクロ
‘.El
’
を使います (後述の
リストと列
セクションを参照)。以下の
‘.Sh
’
のセクションヘッダーはマニュアルページの好ましい
レイアウトの一部であり、一貫性を保つために適切に使われなければ
なりません。これらは使われる順番にリストされています。
.Pa
’
によってリスト
されます。.Xr
’
マクロによって指定
されます。
関連項目
セクションでのクロスリファレンスは
セクション番号順に並べ、セクション中ではカンマで区切って
アルファベット順に並べなければなりません。以下に例を示します。
ls(1), ps(1), group(5), passwd(5).
ここで参考スタイルである refer(1) は適応されていません。
.Er
’
マクロが errno
を記述するために使われます。ユーザー指定の
‘.Sh
’
セクションを追加することができます。
たとえば、このセクションは以下のように設定されています。
.Sh ページ構造領域
.Pp
’
段落コマンドは必要な場合に行スペースを指定するために使われます。
このマクロは、
‘.Sh
’
マクロや
‘.Ss
’
マクロの後や、
‘.Bl
’
マクロの前では必要ありません。
( ‘.Bl
’
マクロは -compact
フラグが指定されていなければ、
縦方向の距離を宣言します)。現在実装されているキープは単語に対するものだけです。
それらは ‘.Bk
’
(キープ開始) マクロと
‘.Ek
’
(キープ終了)
マクロです。
‘.Bk
’
に指定できるオプションは
-words
のみで
あり、これはオプションの途中で改行が入らないようにするのに便利です。
コマンド行の引数を生成する例
(
この名前には何が...?
セクションを 参照)
において、キープは
nroff
がフラグと引数を別の行に分けない
ように使われています。
(実際には、オプションマクロがこの目的で使われて
いましたが、オプションが行中にわたって散らばってしまうと一般的に見栄え
が悪くなるという理由により
troff
で右揃えのマージンを強制的に
行なう (宗教的な)
決定がなされてから、オプションマクロをこの目的で
使わないようになりました。キープマクロについてはもっと機能を向上する
作業が必要であり、
-line
オプションを追加していく必要があります。)
ディスプレイには 5
つのタイプがあります。
即席 1
行インデントディスプレイ
‘.D1
’ 、 即席 1
行リテラルディスプレイ
‘.Dl
’ 、それに
ディスプレイ開始マクロ
‘.Bd
’ と
ディスプレイ終了マクロ
‘.Ed
’
を使用する
リテラルブロック、フィルブロックおよび凸凹ブロックです。
.D1
-ldghfstru
これは次の指定で生成されます:
.Dl
-ldghfstru
.Dl
.Dl
’
マクロの例は本ファイルの中に渡って使われています。
これによって 1
行のテキストのインデント
(表示)
が可能になります。
このマクロは解析され、他のマクロを認識することができますが、
デフォルトのフォントは固定幅
(リテラル)
にセットされています。
しかしながら、呼び出しは不可能です。
% ls -ldg
/usr/local/bin
これは次の指定で生成されます:
.Dl % ls -ldg /usr/local/bin
.
.Bd
.Bd
’
によるディスプレイは
‘.Ed
’
マクロによって
終了しなければなりません。
ディスプレイはディスプレイ内およびリスト内で入れ子にすることができます。
‘.Bd
’
は以下の書式をとります。
.Bd
ディスプレイタイプ
[-offset オフセット値]
[-compact]
ディスプレイタイプは以下の
4 つのタイプの内の 1
つでなければならず、
インデント
‘.Bd
’
のオフセット値を指定することができます。
-ragged
-filled
-literal
-file
ファイル名-file
フラグに続く名称のファイルが読み込まれ、表示されます。表示
はリテラルなモードで行われ、タブは定幅文字
8
つ分に固定されますが、
ファイル中のすべての
troff/-mdoc
コマンドは解釈されます。-offset
string-offset
が以下の文字列のいずれかとともに指定されていると、
その文字列は次のテキストのブロックのインデントのレベルを示すものとして
解釈されます。
.Bd
’
のデフォルトのモードです。.D1
’
でも使われ、
これら 2
つのタイプのディスプレイを使った場合、
行が揃うことが保証されています。
このインデントは通常
6n か約 2/3 インチ
(定幅文字 6 つ分)
です。マニュアルページのテキストの見栄えを変更するマクロは 5 つあります。
.Em
’
マクロで強調することができます。
強調の場合、通常イタリック体のフォントが使われます。
使い方: .Em
argument ... [.,:;()[]?!
‘.Em
’
マクロは解析され、呼び出し可能です。
‘.Em
’
を引数なしで呼び出すのはエラーです。
.Li
’
は特殊文字や変数定数、その他タイプされた
通りに表示する必要があるものに使用することができます。
使い方: .Li
argument ... [.,:;()[]?!
‘.Li
’
マクロは解析され、呼び出し可能です。
使い方: .Sy
symbol ... [.,:;()[]?!
.Sy
Important Notice
‘.Sy
’
マクロは解析され、呼び出し可能です。
‘.Sy
’
の引数は引用符で囲むことができます。
.Bf
.Bf
’ は
‘.Ef
’
マクロで
終了しなければなりません。
フォントモードは他のフォントモードと入れ子にすることができます。
‘.Bf
’
は次の構文を取ります。
.Bf font-mode
font-mode は以下の 3 つのタイプのうちのいずれかでなければなりません。
リスト開始マクロ
‘.Bl
’
で開始されるリストにはいくつかのタイプが
あります。リスト中の項目は項目マクロ
‘.It
’
で指定され、各リスト
は ‘.El
’
マクロで終了しなければなりません。リストはリスト自身や
ディスプレイの中で入れ子にすることができます。列はリストの中で使うこと
ができますが、リストが列の中で使えるかどうかは検証されていません。
さらに、タグの幅、リストのオフセット、コンパクトさ(項目間の空白行が
許されているかどうか)
のような、いくつかのリストの属性を指定することが
できます。本ドキュメントのほとんどはタグ
(-tag
)
スタイルリストで
フォーマットされています。各種リストタイプは、調子を変えるために
オーバーハング
(-ohang
)
でリストしました。
このリストのタイプは
TeX
のユーザーに非常に人気のあるものですが、
tag
リストで構成されたページを何ページも読んだ後には幾分変に見える
でしょう。以下のリストタイプを
‘.Bl
’
で使うことができます。
-bullet
-item
-enum
.Bl
’
マクロが与えられると、リスト中の項目は
単に ‘.It
’
マクロによってのみ構成される行で指定されます。
例として、簡単な列挙リストのソーステキストは、このようになります。
.Bl -enum -compact .It ひとつめはここ。 .It そしてふたつめ。 .It 最後にみっつめはここ。 .El
これらの結果は以下のようになります。
簡単な bullet リスト構成の例を示します。
.Bl -bullet -compact .It ひとつめの bullet。 .It これはふたつめの bullet。 .El
これは以下のような結果になります。
-tag
-diag
-hang
-ohang
-inset
.It
’
マクロによって指定されている引数
からラベルを生成します。
そして、 inset
では、次のテキストへそのラベルを挿入します。
hang
では、次のテキストをラベルの位置へインデントします。
ohang
(オーバーハング)
では、次のテキストをラベルの位置に
ぶら下げ、インデントしません。
tag
では、タグつきテキストの形式にします。ちなみに上のリストは
‘Fl ohang
’
リストタイプで構成されています。
‘.It
’
マクロは inset, hang, tag
のリストタイプでのみ解析され、
呼び出し不可能です。以下に
inset
ラベルの例を示します。-mdoc
マニュアルを他の形式に変換する時に役立ちます。上の例を生成したソーステキストはこうなっています。
.Bl -inset -offset indent .It Em Tag tag リスト (tag 段落とも呼ばれる) は、 Berkely マニュアルで使われているリストのうち最も一般的なタイプです。 .It Em Diag 診断リストはセクション 4 の診断リストを生成するもので、 呼び出し可能なマクロが無視されることを除き、inset リストと似ています。 .It Em Hang hang ラベルは好みの問題です。 .It Em Ohang ohang ラベルはスペースに制限がある時に便利です。 .It Em Inset inset ラベルは段落のブロックを制御するのに便利で、 .Nm -mdoc マニュアルを他の形式に変換する時に役立ちます。 .El
以下は 2 つの項目を持つ hang リストです。
これを生成している元のテキストは以下の通りです。
.Bl -hang -offset indent .It Em Hanged ラベルがラベルの幅より小さいときには、 ラベルは tag リストと同じようになります。 .It Em 長い hang リストラベル は、tag 段落のラベルとは異なり、 段落の中に埋め込まれます。 .El
タグ幅を制御するためのオプションの幅指定を使ったタグつきリストは 以下の通りです。
The raw text:
.Bl -tag -width "PAGEIN" -compact -offset indent .It SL プロセスが sleep している時間 (ブロックされた秒数) .It PAGEIN そのプロセスによるコアにロードされていないページへの参照によるディスク .Tn I/O の回数 .It UID プロセスの所有者の数字表記によるユーザーID .It PPID 親プロセスの数字表記によるID、プロセスの優先度 (割り込み不可のウエイトであるときには非正値) .El
幅指定として以下のものを使うことができます。
タグつきリストタイプで幅が指定されていないと、
‘.It
’ が最初に
起動された時に適した幅を決定することが試みられます。
‘.It
’ の
最初の引数が呼び出し可能なマクロであれば、そのマクロのデフォルトの幅が
そのマクロ名が幅として指定されたように使用されます。しかしながら、その
リスト中に他の項目が別の呼び出し可能なマクロ名で与えられていると、
新しく入れ子となったリストとして処理されます。
以下の文字列はあらかじめ定義されているものであり、troff
の文字列解釈
シーケンス
‘\*(xx
’
もしくは ‘\*x
’
を前に伴って使われます。
ここで、
xx
もしくは
x
は定義されている文字列の名称です。
解釈シーケンスはテキストのどこでも使うことができます。
文字列 | Nroff | Troff |
<= |
<= | ≤ |
>= |
>= | ≥ |
Rq |
'' | ” |
Lq |
`` | “ |
ua |
^ | ↑ |
aa |
' | ´ |
ga |
` | ` |
q |
" | " |
Pi |
pi | pi |
Ne |
!= | ≠ |
Le |
<= | ≤ |
Ge |
>= | ≥ |
Lt |
< | > |
Gt |
> | < |
Pm |
+- | ± |
If |
infinity | infinity |
Na |
NaN | NaN |
Ba |
| | | |
注:
‘q
’
の名称がつけられている文字列は、
1 文字であるため
‘\*q
’
と書かなければなりません。
-mdoc
は限られたデバッグ機能しか持っていませんが、
引数名と内部レジスターやマクロ名との衝突のような
潜在的なエラーを検出するのに役立ちます。
(A って何?)
レジスターは troff
での演算用記憶クラスであり、
1 文字か 2
文字の名称がついています。
troff と ditroff での
-mdoc
のすべての内部レジスターは
‘Ar
’ のように2
文字からなる
<大文字><小文字>
の形式か、
‘aR
’ のように
<小文字><大文字>
の形式か、
‘C1
’ のように
<大文字もしくは小文字><数字>
の形式を取ります。
さらに混乱することに、
troff
はそれ自身の内部レジスターを持ち、
それらすべては小文字
2
文字か、ドットに文字もしくはメタ文字が続く形式を取ります。
紹介例の 1
つに、エスケープシーケンス
‘\&
’
でマクロ名を
解釈させない方法がありました。これは内部レジスター名にも有効です。
エスケープされていないレジスター名が引数リストに指定されると、 予期できない振舞いとなります。 一般的には、テキストのかなり大きな部分が出力されるべきところに 出力されないとか、リストのタグのような小さな文字列が消えてしまうとか、 引数リストの中の引数のタイプが間違って解釈されるとかいうことが、起こり得ます。 きっとあなたのお母さんは、あなたにこんな面倒なことを覚えるようにとは 考えていないでしょう。 そこで、与えられた引数が有効か無効かを判断する方法があります。
そんなときには、
‘.Db
’
(デバッグ)
マクロによってほとんどのマクロ
の引数リストがどう解釈されるかを表示することができます。
‘.Pp
’ (段落)
マクロのようなマクロはデバッグ情報を含んでいません。呼び出し可能
なマクロはすべてデバッグ情報を含んでおり、疑いがある場合はいつでも
‘.Db
’
マクロをオンにすることを強くお勧めします。
使い方: .Db [on |
off]
以下の例では、問題が故意に発生するようにされた部分の上と下で
デバッグマクロが指定されています
(フラグ引数
‘aC
’
は正しく動作するためには
‘\&aC
’
でなければなりません)。
.Db on .Op Fl aC Ar file ) .Db off
この結果の出力は以下の通りです。
DEBUGGING ON DEBUG(argv) MACRO: `.Op' Line #: 2 Argc: 1 Argv: `Fl' Length: 2 Space: `' Class: Executable Argc: 2 Argv: `aC' Length: 2 Space: `' Class: Executable Argc: 3 Argv: `Ar' Length: 2 Space: `' Class: Executable Argc: 4 Argv: `file' Length: 4 Space: ` ' Class: String Argc: 5 Argv: `)' Length: 1 Space: ` ' Class: Closing Punctuation or suffix MACRO REQUEST: .Op Fl aC Ar file ) DEBUGGING OFF
この情報の最初の行では呼び出されているマクロの名称が出力されています。
ここでは ‘.Op
’
とそれが現れた行番号が表示されています。
複数のファイルが処理されている場合
(特にテキストが他のファイルからインクルードされている場合)、
行番号は正しくないでしょう。
ファイルが 1
つだけの場合には正しい行番号が出力されます。
2
番目の行では引数の個数と引数
(‘Fl
’)
とその長さが
出力されています。引数の長さが
2 文字であれば、
その引数が実行可能
(ゼロでない値を含むすべてのレジスターは実行可能なように見えます)
かどうかテストされます。
3
番目の行ではそのクラスで指定されているスペースとクラスタイプが
出力されています。
ここでの問題は引数 aC
が実行不可能でなければならないことです。
クラスの 4
つのタイプは文字列、実行可能、閉じる句読点、開く句読点です。
最後の行では引数リスト全体が読み込まれた通りに表示されています。
次の例では問題の原因となっている
‘aC
’
がエスケープされています。
.Db on .Em An escaped \&aC .Db off
DEBUGGING ON DEBUG(fargv) MACRO: `.Em' Line #: 2 Argc: 1 Argv: `An' Length: 2 Space: ` ' Class: String Argc: 2 Argv: `escaped' Length: 7 Space: ` ' Class: String Argc: 3 Argv: `aC' Length: 2 Space: ` ' Class: String MACRO REQUEST: .Em An escaped &aC DEBUGGING OFF
‘\&
’
シーケンスは長さが 0
となるために 引数
‘\&aC
’
は先の例と同様に長さ
2
と表示されています。
しかし、
‘\&aC
’
という名称のレジスターが見つからず、
タイプは文字列と判断されています。
この他の診断は使用方法を報告するものであり、 それ自身が説明を含んでいます。
-mdoc
パッケージは groff
との互換モードは
必要ではありません。
このパッケージでは改ページと、
nroff
で改ページ時に通常挿入
されるヘッダーとフッタは禁止されており、マニュアルをオンラインで効率良く
見ることができるようになっています。現在の所、
-T
ascii が
指定された groff
はページ内容の無いファイル末の残りの部分まで
出力します。改ページを禁止することによって
nroff による出力は
ハードコピーには適さないものとなっています。サイト依存のスタイル
ファイル
/usr/src/share/tmac/doc-nroff
において 0
にセットする
ことができる
‘cR
’
の名称を持つレジスターが古いスタイルの振る舞い
を実現するために用意されています。
フラグ引き数のダッシュが意図せずハイフンにより折り返しになるバグは まだ修正されておらず、 DESCRIPTION セクションでときどき 意図しない動作 (ハイフンでの改行) が起こることがある。
あらかじめ定義されている文字列は文書において宣言されていません。
セクション 3f はヘッダールーチンには追加されていません。
‘.Nm
’
フォントは
名前
セクションにおいて
変更されるべきです。
‘.Fn
’
は分割されるのを防止するために、行の長さが短すぎないか
どうかをチェックする必要があります。ときどき、最後の括弧が分割される
ことがあり、行がフィルモードであるときには全くおかしな結果になること
があります。
nroff 使用時に、(最初のヘッダーとフッタ以外の) 改ページ時のヘッダーと フッタの挿入を行わないようにするのに使用される命令によって、 ときどき見るに耐えない部分的な行詰め (や空行) がページの末尾に 発生する場合がある。
リストマクロとディスプレイマクロはキープを行いませんが、 これはキープを行うべきです。
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
December 30, 1993 | Debian |