doc/ja_JP.eucJP/man/man5/groff_tmac.5
Jun Kuriyama 04a05699f2 Fix typo.
Submitted by:	kano@na.rim.or.jp (via metal@gc5.so-net.ne.jp)
2004-04-07 13:59:26 +00:00

1290 lines
28 KiB
Groff

.
.\" $FreeBSD$
.\" WORD: typesetting system 清書システム
.\" WORD: naming 名称付け
.\" WORD: inclusion 取り込み
.\" WORD: convention 約束事
.\" WORD: The Filesystem Hierarchy Standard ファイルシステム階層標準
.\" WORD: diversion 転換
.TH GROFF_TMAC 5 "1 May 2003" "Groff Version 1.19"
.SH 名称
groff_tmac \- roff 清書システム内にあるマクロファイル
.SH 解説
.\" The .SH was moved to this place to make `apropos' happy.
.
.
.\" --------------------------------------------------------------------
.\" Legalize
.\" --------------------------------------------------------------------
.
.ig
groff_tmac.5
File position: <groff-source>/man/groff_tmac.man
Last update: 13 Mar 2003
This file is part of groff, the GNU roff type-setting system.
Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
written by Bernd Warken <bwarken@mayn.de> and Werner Lemberg
<wl@gnu.org>
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
Invariant Sections being this .ig-section and AUTHOR, with no
Front-Cover Texts, and with no Back-Cover Texts.
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
.
.\" --------------------------------------------------------------------
.\" Setup
.\" --------------------------------------------------------------------
.
.mso www.tmac
.
.if n \{\
. mso tty-char.tmac
. ftr CR R
. ftr CI I
. ftr CB B
.\}
.
.ds Ellipsis \&.\|.\|.\&\"
.
.\" Global static variables for inter-macro communication
.rr @+Example_font
.
.\" --------------------------------------------------------------------
.\" setup for the macro definitions below
.\"
.\" naming: namespace:cathegory_macro.variable_name (experimental)
.
.\" --------------------------------------------------------------------
.\" configuration of prompt for `.Shell_cmd'* macros
.ds groffer:Shell_cmd.prompt_text sh#\" prompt for shell commands
.ds groffer:Shell_cmd+.prompt_text >\" prompt on continuation lines
.ds groffer:Shell_cmd_base.prompt_font I\" font for prompts
.
.\" automatically determine setup from the configuration above
.als @f groffer:Shell_cmd_base.prompt_font\"
.als @t groffer:Shell_cmd.prompt_text\"
.als @t+ groffer:Shell_cmd+.prompt_text\"
.ds groffer:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed
.ds groffer:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed
.nr @w \w'\*[groffer:Shell_cmd.prompt]'\"
.nr @w+ \w'\*[groffer:Shell_cmd+.prompt]'\"
.ft \*[@f]
.\" Full prompt width is maximum of texts plus 1m
.nr groffer:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed
.ft
.rm @f
.rm @f+
.rm @t
.rm @t+
.rr @w
.rr @w+
.
.\"--------------------------------------------------------------------
.\" Ignore all arguments like a comment, even after a .eo call.
.de c
..
.c --------------------------------------------------------------------
.de BIR
. ie (\\n[.$] < 3) \
. BI \\$@
. el \{\
. ds @tmp@ \fB\\$1\f[]\fI\\$2\f[]
. shift 2
. Text \\*[@tmp@]\fR\\$*\f[]
. rm @tmp@
. \}
..
.c --------------------------------------------------------------------
.c .Env_var (<env_var_name> [<punct>])
.c
.c Display an environment variable, with optional punctuation.
.c
.de Env_var
. nh
. SM
. Text \f[CB]\\$1\f[]\\$2
. hy
..
.c --------------------------------------------------------------------
.c .Error (<text>...)
.c
.c Print error message to terminal and abort.
.c
.de Error
. tm \\$*
. ab
..
.c --------------------------------------------------------------------
.de Example
. if r@+Example_font \
. Error previous .Example was not terminated by a ./Example
. nr @+Example_font \\n[.f]
. nh
. nf
. RS
. ft CR
..
.c --------------------------------------------------------------------
.de /Example
. if !r@+Example_font \
. Error no previous call to .Example
. ft \\n[@+Example_font]
. RE
. fi
. hy
. rr @+Example_font
..
.
.c --------------------------------------------------------------------
.c .Shell_cmd (<CR> [<CI>] ...)
.c
.c A shell command line; display args alternating in fonts CR and CI.
.c
.c Examples:
.c .Shell_cmd "groffer --dpi 100 file"
.c result: `sh# groffer --dpi 100 file'
.c with 'sh#' in font I, the rest in CR
.c
.c .Shell_cmd groffer\~--dpi\~100\~file
.c result: the same as above
.c
.c .Shell_cmd "groffer --dpi=" value " file"
.c result: sh# groffer --dpi=value file
.c with `groffer --dpi=' and `file' in CR; `value' in CI
.c
.c .Shell_cmd groffer\~--dpi= value \~file
.c result: the same as the previous example
.c
.de Shell_cmd
. groffer:Shell_cmd_base "\*[groffer:Shell_cmd.prompt]" \\$@
..
.c --------------------------------------------------------------------
.c .Shell_cmd+ (<CR> [<CI>] ...)
.c
.c A continuation line for .Shell_cmd.
.c
.de Shell_cmd+
. groffer:Shell_cmd_base "\*[groffer:Shell_cmd+.prompt]" \\$@
..
.c --------------------------------------------------------------------
.c .Shell_cmd_base (<prompt> [<CR> [<CI>] ...])
.c
.c A shell command line; display args alternating in fonts CR and CI.
.c Internal, do not use directly.
.c
.c Globals: read-only register @.Shell_cmd_width
.c
.de groffer:Shell_cmd_base
. if (\\n[.$] <= 0) \
. return
. nr @+font \\n[.f]\"
. ds @prompt \\$1\"
. ft CR
. c gap between prompt and command
. nr @+gap \\n[groffer:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\"
. ds @res \\*[@prompt]\h'\\n[@+gap]u'\"
. shift
. ds @cf CR\"
. while (\\n[.$] > 0) \{\
. as @res \\f[\\*[@cf]]\\$1\"
. shift
. ie '\\*[@cf]'CR' \
. ds @cf I\"
. el \
. ds @cf CR\"
. \}
. br
. ad l
. nh
. nf
. Text \\*[@res]\"
. fi
. hy
. ad
. br
. ft \\n[@+font]
. rr @+font
. rr @+gap
. rm @cf
. rm @res
..
.c --------------------------------------------------------------------
.c .Text (<text>...)
.c
.c Treat the arguments as text, no matter how they look.
.c
.de Text
. if (\\n[.$] == 0) \
. return
. nop \)\\$*\)
..
.c --------------------------------------------------------------------
.c .Topic ([<indent>])
.c
.c A bulleted paragraph
.c
.de Topic
. ie (\\n[.$] = 0) \
. ds @indent 2m\"
. el \
. ds @indent \\$1\"
. TP \\*[@indent]
. Text \[bu]
. rm @indent
..
.c --------------------------------------------------------------------
.c .TP+ ()
.c
.c Continuation line for .TP header.
.c
.de TP+
. br
. ns
. TP \\$1
..
.c --------------------------------------------------------------------
.de 'char
. ds @tmp@ `\f(CR\\$1\f[]'
. shift
. Text \\*[@tmp@]\\$*
. rm @tmp@
..
.c --------------------------------------------------------------------
.de option
. ds @tmp@ \f(CB\\$1\f[]
. shift 1
. Text \\*[@tmp@]\\$*
. rm @tmp@
..
.c --------------------------------------------------------------------
.de argument
. ds @tmp@ \f(CI\\$1\f[]
. shift 1
. Text \\*[@tmp@]\\$*
. rm @tmp@
..
.c --------------------------------------------------------------------
.de request
. ds @tmp@ \f(CB\\$1\f[]
. shift 1
. Text .\\*[@tmp@]\\$*
. rm @tmp@
..
.c --------------------------------------------------------------------
.de escape
. ds @tmp@ \f[CB]\\$1\f[]
. shift 1
. Text \[rs]\\*[@tmp@]\\$*
. rm @tmp@
..
.\" --------------------------------------------------------------------
.\" SH DESCRIPTION
.\" --------------------------------------------------------------------
.
.BR roff (7)
清書システムは、特殊な用途の文書に適したマクロパッケージを提供しています。
.
それぞれのマクロパッケージは、そのパッケージの
.BR "tmac ファイル"
と呼ばれるファイル中に、マクロおよび定義を格納しています。
tmac という名前は、
.RB ` T\c
.IB roff MAC\c
.IR ros '
を縮めたものです。
.
.P
tmac ファイルは、普通の roff で書かれたソースの文書です。
ただし、通常このファイルには定義および設定コマンドしか含まれておらず、
テキストは入っていません。
.
tmac ファイルはすべて
.B tmac
ディレクトリという 1 つあるいは少数のディレクトリ内に
保管されています。
.
.
.\" --------------------------------------------------------------------
.SH "GROFF マクロパッケージ"
.\" --------------------------------------------------------------------
.
.I groff
は、すべての古典マクロパッケージ、いくつかの完全パッケージ、
そしていくつかの特殊な用途の補助パッケージを提供しています。
.
主要なマクロパッケージは同時に複数個使用できないことに注意してください。
例えば
.
.IP
.Shell_cmd "groff \-m man \-m ms foo"
.
.P
.
.IP
.Shell_cmd "groff \-m man foo \-m ms bar"
.
.P
は失敗します。
.
.
.\" --------------------------------------------------------------------
.SS "man\~ページ"
.\" --------------------------------------------------------------------
.
.TP
.B man
UNIX マニュアルページ (man\~ページ) 用の古典マクロパッケージです。
これはとても便利で使いやすいものです。
.BR groff_man (7)
を参照してください。
.
.TP
.B doc
.TP+
.B mdoc
man\~ページ用のもう 1 つのマクロパッケージで、
主に BSD システムで使用されています。
これはたくさんの新しい機能を提供していますが、
man\~ページの標準ではありません。
.BR groff_mdoc (7)
を参照してください。
.
.
.\" --------------------------------------------------------------------
.SS "完全パッケージ"
.\" --------------------------------------------------------------------
.
この節のパッケージは、どのような種類の文書 (本をまるごとでさえ) も
執筆できる完全なマクロの組を提供します。
.
これらは機能的には類似しています。
どれを使用するかは、好みの問題です。
.
.
.TP
.B me
古典的な
.I me
マクロパッケージです。
.BR groff_me (7)
を参照してください。
.
.
.TP
.B mm
半古典的な
.I mm
マクロパッケージです。
.BR groff_mm (7)
を参照してください。
.
.
.TP
.B mom
新しい
.I mom
マクロパッケージです。
これは groff でのみ利用できます。
.
これは他のパッケージを元にしていないため、
自由に設計することができます。
.
したがって、これは非常によい、現代的なマクロパッケージになると
期待されています。
.
.BR groff_mom (7)
を参照してください。
.
.
.TP
.B ms
古典的な
.I ms
マクロパッケージです。
.BR groff_ms (7)
を参照してください。
.
.
.\" --------------------------------------------------------------------
.SS "特殊パッケージ"
.\" --------------------------------------------------------------------
.
この節のマクロパッケージは、単独で使用するように意図されたものではなく、
他のマクロパッケージや素の groff に特殊な機能を追加するために
使用されるものです。
.
.
.TP
.B papersize
このマクロファイルは既に起動時に
.B troff
が読み込み済なので、明示的に呼び出す必要はありません。
.
コマンドラインオプション \f[B]\%\-dpaper=\f[]\f[I]size\f[]
用紙サイズを設定するインタフェースを提供しています。
.
.I size
に指定可能な値は、DESC ファイルでの定義済の
.B papersize
値 (小文字だけです。
詳細は
.BR groff_font (5)
を参照してください) ですが
.BR a7 - d7
は指定できません。
.
文字
.B l
(エル) を後に付けると、ランドスケープの向きを意味します。
.
例:
.BR a4 ,
.BR c3l ,
.BR letterl
.
.IP
ドライバ固有の DESC ファイルのデフォルト用紙長や向きに優先させるためには、
ほとんどの出力ドライバで追加のコマンドラインスイッチ
.B \-p
および
.B \-l
が必要となります。
.
例えば、ランドスケープの向きの A4 用紙に PS 出力を行う場合次のようにします:
.
.IP
.Shell_cmd "groff \-Tps \-dpaper=a4l \-P\-pa4 \-P\-l \-ms foo.ms > foo.ps"
.
.
.TP
.B pspic
このマクロでは、PostScript 画像を文書に取り込むために、1 個のマクロ
.BR PSPIC
が提供されています。
.
PS 画像の取り込みをサポートする出力デバイス
.BR \-Tps ,
.BR \-Tdvi ,
.BR \-Thtml
でのみ意味があります。
ファイルは自動的にロードされます。
.
構文:
.RS
.IP
\&\fB.PSPIC\fP [\fB\-L\fP|\fB-R\fP|\fB\-I\fP \fIn\fP]\ \fI\|file\fP [\fIwidth\fP [\fIheight\fP]]
.RE
.
.IP
.I file
は画像を含むファイルの名前、
.I width
.I height
は画像の望みの幅と高さです。
.
.I width
.I height
の引数には、スケール指示子を付けられます。
デフォルトのスケール指示子は
.BR i
です。
.
このマクロは、x および y 方向に画像を一様にスケールしますので、画像は幅
.I width
も高さ
.I height
も越えません。
.
デフォルトで、画像は水平位置の中央に置かれます。
.
.BI \-L
および
.BI \-R
のオプションは、それぞれ画像を左寄せおよび右寄せにします。
.
.B \-I
オプションは、画像を
.I n
だけインデントします (デフォルトのスケール指示子は
.BR m
です)。
.
.TP
.B tty-char
tty デバイス用に、troff の標準文字や groff のいくつかの文字の定義を
上書きします。
.
貧弱な機器で処理できるようにするため、
通常の tty 形式のものと比べて、見た目を意図的に落しています。
.
.
.TP
.B www
インターネット (World Wide Web) ページで使用されている
HTML フォーマットで知られている要素を追加します。
これには URL リンクやメールアドレスが含まれます。
.BR groff_www (7)
を参照してください。
.
.
.\" --------------------------------------------------------------------
.SH 名称付け
.\" --------------------------------------------------------------------
.
古くからある roff システムには、
オプションを解釈する部分の過度に単純化された設計のせいで
奇妙な名称付けの体系がありました。
.
マクロパッケージは、常にオプション
.option -m
を用いて指定されていました。
このオプションの後に、区切りの空白もなしに直接引数が続くと、
1 つのマイナスに続く長い名前のオプションに見えます。
これは、コンピュータの石器時代には驚くべきことでした。
.
これをマクロパッケージの名前に対して実際に動くようにするため、
すべての古典的なマクロパッケージには
.'char m
の文字で始まる名前がつけられており、
この文字はマクロファイルの名前からは省略されていました。
.
.
.P
例えば、man ページ用のマクロパッケージは
.IR man
と呼ばれますが、このマクロファイルは
.IR tmac.an
でした。
したがって、これは引数
.I an
をオプション
.option -m
に指定すること、もしくは短く
.option -man
と指定することで有効にできました。
.
.
.P
同様の理由で、
.'char m
で始まらないマクロパッケージには、文書化の際や会話において、先頭に
.'char m
が付けられていました。
例えば、
.I tmac.doc
に対応するパッケージでは、より適切な名前は
.IR doc
であるのに関わらず、文書中では
.I mdoc
と呼ばれていました。
なぜなら、オプションとその引数との間の空白を省略すると、
このパッケージを有効にするコマンドラインオプションは
.option "-mdoc"
と表されるからです。
.
.
.P
すべての状況に対処するため、現在のバージョンの
.BR groff (1)
では、この虐げられてきたマクロパッケージに対して、先頭に
.'char m
が付くものと付かないものの 2 つのマクロファイルを提供することによって、
両方の名称付け体系をうまく扱うことができます。
.
したがって
.IR groff
では、
.I man
マクロパッケージは以下の 4 つの方法のうちの 1 つで指定することができます:
.
.IP
.Shell_cmd "groff\~\-m\~man"
.Shell_cmd "groff\~\-man"
.Shell_cmd "groff\~\-mman"
.Shell_cmd "groff\~\-m\~an"
.
.
.P
最近のパッケージで
.'char m
で始まらないものは、文書化の際に追加の
.'char m
を使用しません。
.
例えば、
.I www
マクロパッケージは次の 2 つの方法のうちの 1 つのみで指定できます:
.
.IP
.Shell_cmd "groff\~\-m\~www"
.Shell_cmd "groff\~\-mwww"
.
.
.P
明らかに
.I -mmwww
のようなものは意味をなしません。
.
.
.P
古典的な troff の持つ 2 番目の奇妙な特徴は、マクロファイルに
.BIR tmac. name
のような名前を付けることです。
現代的なオペレーティングシステムでは、ファイルの種類は接尾辞、
つまりファイル名の拡張子によって指定されます。
.
先ほどと同様に、groff は、
.I anything
のみが指定された場合
.IB anything .tmac
.BI tmac. anything
のどちらも検索することによって、この状況に対処します。
.
.
.P
システムでどのマクロパッケージが利用可能であるかを調べる最も簡単な方法は、
man\~ページ
.BR groff (1)
、もしくは
.I tmac
ディレクトリの内容を確認することです。
.
.
.P
.IR groff
では、マクロパッケージのほとんどは
.BR groff_\f[I]name\f[] (7)
という man ページで説明されています。
古典的パッケージについては、先頭に
.'char m
がついています。
.
.
.\" --------------------------------------------------------------------
.SH 取り込み
.\" --------------------------------------------------------------------
.
文書中でマクロパッケージを使用する方法はいくつかあります。
.
古典的な方法は、実行時に troff/groff のオプション
.option \-m
.argument name
を指定することです。
これによってマクロパッケージ
.I name
の内容が有効になります。
.
groff では、ファイル
.IB name .tmac
は tmac パス内で検索されます。
見つからなかった場合、代わりに
.BI tmac. name
が検索されます。
.
.
.P
別の方法として、文書中にリクエスト
.request so
.I filename
を追加することによって、マクロファイルを取り込むこともできます。
引数は、存在するファイルの完全なファイル名でなくてはなりません。
つまり、そのファイルのあるディレクトリをつけることが、おそらく必要です。
.
groff では、これは同様のリクエスト
.request mso
.IR package
によって改善されました。
これは、オプション
.option -m
がするように、tmac パス内を検索します。
.
.
.P
取り込まれるファイルに前処理が必要な場合、
.request so
.request mso
リクエストを解決するために、
roff プリプロセッサ
.BR soelim (1)
が、呼び出される必要があることに注意してください。
.
これは、直接コマンドライン上のパイプラインで、
もしくは troff/groff オプション
.option \-s
のどちらでも行うことができます。
.
.I man
は、soelim を自動的に呼び出します。
.
.
.P
例えば、マクロファイルが
.I /usr/share/tmac/macros.tmac
に保存されており、
.IR docu.roff
と呼ばれる文書で使われるとします。
.
.
.P
実行時において、この文書に対するフォーマッタの呼び出しは
次のようになります。
.
.IP
.Shell_cmd "groff\~\-m\~" "macrofile\~document.roff"
.
.
.P
文書内にマクロファイルを直接取り込むには、
.
.IP
.Example
. Text .mso macrofile.tmac
./Example
.
.P
あるいは
.
.IP
.Example
. Text .so /usr/share/tmac/macros.tmac
./Example
.
.P
を使用します。
.
.
.P
どちらの場合でも、フォーマッタは
.
.IP
.Shell_cmd "groff\~\-s\~" docu.roff
.
.P
を使用して呼び出されます。
.
.
.P
もし独自の groff マクロファイルを書きたい場合には、
それを
.IB whatever .tmac
と名付けて tmac パスのどこかのディレクトリに置くとよいでしょう。
.BR FILES
を参照してください。
すると文書は、それを
.request mso
リクエスト、もしくはオプション
.option -m
を使用して取り込むことができます。
.
.
.ig
.\" --------------------------------------------------------------------
.SH CONVENTION
.\" --------------------------------------------------------------------
.
.\" This section does not fit into the framework of this document.
.
There is a convention that is supported by many modern roff
type-setters and
.BR man (1)
programs, the
.I preprocessor word
described in the following.
.
.P
If the first line in a document is a comment, the first word (after the
comment characters and a blank) constitutes the
.B preprocessor
.BR word .
That means that the letters of this word are interpreted as
abbreviations for those preprocessor commands that should be run
when formatting the document.
.
Mostly, only the letters corresponding to the options for the
preprocessors are recognized,
.'char e
(for
.BR eqn ),
.\" 'char G ,
.\" 'char g ,
.'char p ,
(for
.BR pic ),
.'char R
(for
.BR refer ),
.'char s
(for
.BR soelim ),
and
.'char t
(for
.BR tbl ).
(see
.BR roff (7)).
.
.
.P
Besides being a good reminder for the user, some formatters (like the
.BR man (1)
program) are even able to automatically start the preprocessors
specified in the preprocessor word, but do not bet on this.
.
.
.P
The
.I man
program handles some preprocessors automatically, such that in
man\~pages only the following characters should be used:
.'char e ,
.'char p ,
and
.'char t .
.
.
..
.\" --------------------------------------------------------------------
.SH "マクロの記述"
.\" --------------------------------------------------------------------
.
.BR roff (7)
文書は、リクエストやエスケープシーケンス、文字列、数値レジスタ、
マクロパッケージのマクロなどの定義済みフォーマット構造によって
拡充されたテキストファイルです。
.
これらの要素は
.BR roff (7)
に説明されています。
.
.
.P
文書を個人的なスタイルにしたい場合は、繰り返し行われることに対して
マクロを定義して、既存の要素を拡張するのが最も役に立ちます。
これを行うのは、文書の最初に近いところ、もしくは別のファイルに
するのが最もよいでしょう。
.
.
.P
引数のないマクロは、ちょうど文字列のようなものです。
.
しかしマクロの本当の力は、マクロ呼び出しに引数が渡された時に現れます。
.
マクロ定義内では、引数は次のエスケープシーケンスとして
利用することができます:
.BR $1 ,
\*[Ellipsis],
.BR $9 ,
.BR $[ \*[Ellipsis] ] ,
.BR $* ,
.BR $@
マクロが呼び出された時のマクロ名は
.BR $0
に格納され、引数の数はレジスタ
.BR \n[.$]
に格納されています。
.BR groff (7)
を参照してください。
.
.
.\" --------------------------------------------------------------------
.SS "コピーイン (copy-in) モード"
.\" --------------------------------------------------------------------
.
groff がマクロを読む込むフェーズを、roff では
.I "コピーインモード"
と言います。
.
これは、C\~言語でプログラムを開発する時の C\~プリプロセッサが処理を
行うフェーズに似ています。
.
.
.P
このフェーズでは、groff はすべてのバックスラッシュを解釈します。
これは、マクロ本体のすべてのエスケープシーケンスが解釈され、
それぞれの値に置き換えられることを意味します。
.
変化しない表現であれば、これは望まれた動作ですが、
マクロ呼び出しのたびに変化するかもしれない文字列やレジスタは、
値を評価しないように保護しなくてはなりません。
.
これは、エスケープシーケンスの先頭にあるバックスラッシュを
二重にすることでとても容易に行うことができます。
.
位置パラメータにとって、この二重化は最も重要です。
.
例として、マクロに渡された引数の情報を端末に表示するには、
例えば以下のような `.print_args' という名前のマクロを定義します。
.
.
.P
.ds @1 \[rs]f[I]\[rs]\[rs]$0\[rs]f[]\"
.ds @2 arguments:\"
.Example
. Text .ds midpart was called with
. Text .de print_args
. Text .\~\~tm\~\*[@1]\~\[rs]\[rs]*[midpart]\~\[rs]\[rs]n[.$]\~\*[@2]
. Text .\~\~tm\~\[rs]\[rs]$*
. Text ..
./Example
.rm @1
.rm @2
.
.
.P
このマクロが次のように呼ばれると、
.
.P
.Example
. Text .print_args arg1 arg2
./Example
.
.P
以下のようなテキストが端末に表示されます:
.
.P
.Example
. Text \f[CI]print_args\f[] was called with the following 2 arguments:
arg1 arg2
./Example
.
.
.P
では、マクロ定義中の各バックスラッシュを解析してみましょう。
.
位置パラメータと引数の数は、各マクロ呼び出しで変化するので、
先頭のバックスラッシュは二重化しなければなりません。
よって、
.I \[rs]\[rs]$*
.IR \[rs]\[rs][.$]
となります。
同様にマクロ名にもこれを適用します。
なぜなら、別名で呼ばれるかも知れないからです。
したがって、
.IR \[rs]\[rs]$0
となります。
.
.
.P
一方、
.I midpart
は文字列定数であり変化しないので、
.IR \[rs]*[midpart]
は二重化しません。
.I \[rs]f
エスケープシーケンスは、テキスト中のフォントを設定する
定義済み groff 要素です。
.
もちろん、この動作も変化しないので
.I \[rs]f[I]
.IR \[rs]f[]
は二重化しません。
.
.
.\" --------------------------------------------------------------------
.SS "ドラフトモード"
.\" --------------------------------------------------------------------
.
エスケープ機構を一時的に無効にすると、マクロを記述するのは簡単になります。
.
groff では、マクロ定義を
.B .eo
.B .ec
リクエストの組で囲むことで無効にすることができます。
.
するとマクロ定義の本体は、通常の文書部分と同じようになります。
ここで通常の文書部分とは、リクエストやマクロ、文字列、
レジスタなどの呼び出しで拡張されたテキストのことです。
.
例えば、上記のコードは以下のように簡単に書くことができます。
.
.
.P
.ds @1 \[rs]f[I]\[rs]$0\[rs]f[]\"
.ds @2 arguments:\"
.Example
. Text .eo
. Text .ds midpart was called with
. Text .de print_args
. Text .\~\~tm\~\*[@1]\~\[rs]*[midpart]\~\[rs]n[.$]\~\*[@2]
. Text .\~\~tm\~\[rs]$*
. Text ..
. Text .ec
./Example
.rm @1
.rm @2
.
.
.P
よくないことに、ドラフトモードは常に使えるわけではありません。
.
これは通常のマクロを定義するには十分ですが、ドラフトモードは
間接的に定義された文字列やレジスタなどの高度な応用には使えません。
.
最もよい方法は、すべてのマクロをドラフトモードで定義してテストをし、
そして最後の段階としてバックスラッシュを二重化することです。
.I .eo
リクエストを外すのを忘れないようにしてください。
.
.
.\" --------------------------------------------------------------------
.SS "マクロ定義のための助言"
.\" --------------------------------------------------------------------
.
.Topic
すべての行をドットで始めるようにします。
例えば、テキスト行に groff リクエスト
.B .nop
を使用したり、先頭がドットのテキスト行も扱うあなた独自のマクロを書きます。
.
.IP
.Example
. Text .de Text
. Text .\~\~if (\[rs]\[rs]n[.$] == 0)\~\[rs]
. Text .\~\~\~\~return
. Text .\~nop\~\[rs])\[rs]\[rs]$*[rs]\)
. Text ..
./Example
.
.Topic
コピーインモードでもドラフトモードでも動作するように、
コメントマクロを記述するようにします。
なぜなら、ドラフトモードではエスケープが無効になるので、
通常のコメントが使用された時、問題が起こるかも知れないからです。
.
例えば、以下のマクロは単に引数を無視するので、
コメント行のように動作してしまいます。
.
.IP
.Example
. Text .de\~c
. Text ..
. Text .c\~This\~is\~like\~a\~comment\~line.
./Example
.
.Topic
長いマクロ定義中では、コメント行や構造化のための空行を
たくさん使用するようにします。
.
.Topic
読みやすくするために、リクエストやマクロ呼び出しに対して
groff のインデント機能を使用するようにします
(先頭のドットの後に、任意の空白を置けます)。
.
.
.\" --------------------------------------------------------------------
.SS "転換 (diversion)"
.\" --------------------------------------------------------------------
.
転換は、非常に高度なプログラミング構造を実現するために使用されます。
.
これらは C\~プログラミング言語における大きなデータ構造へのポインタに
似ていますが、その使用方法はとても異なっています。
.
.
.P
過度に単純化された形式では、転換は複数行の文字列ですが、
転換の能力は、それがマクロ中で動的に使用された時に現れます。
.
転換内に保持された情報は、転換をちょうどマクロのように呼び出すことで
取り出すことができます。
.
.
.P
転換に関して起こるほとんどの問題は、転換は常に完全な行を
扱うのだという事実を意識することで避けることができます。
.
行バッファがフラッシュされてない時に転換が使用された場合、
奇妙な結果が生成されます。
このことを知らないと、多くの人が転換を使いものにならないと
思ってしまいます。
.
転換が動作することを保証するには、
改行を適切な場所で入れることが必要です。
.
安全のために、転換に関するものはすべて、1 対の改行の間に入れます。
例えば、
.B .br
リクエストを多用します。
.
この規則は、転換の定義の中と外の両方、
そしてすべての転換の呼び出しに適用するのがよいでしょう。
.
これは少しやりすぎですが、これでちゃんと動作します。
.
.
.P
[もし現在行の途中までを無視して転換を行う必要がある時には、
現在行の途中までを保存するのに環境を使用するか、または
.B .box
リクエストを使用するか、もしくはこの両方を使用します]
.
.
.P
転換の最も強力な特徴は、あるマクロ定義中で転換を開始し、
他のマクロ中で転換を終えることです。
.
すると、このマクロの組のそれぞれの呼び出しの間のすべてが
転換に格納され、マクロ中で操作することができます。
.
.
.\" --------------------------------------------------------------------
.SH 関連ファイル
.\" --------------------------------------------------------------------
.
tmac の機構を完全に使用するためには、すべてのマクロの名前は
.IB name .tmac
と名付けなければなりません。
.
古典パッケージのように
.BI tmac. name
も同様に可能ですが、使用しない方がよいでしょう。
.
.
.P
マクロファイルは
.IR "tmac ディレクトリ"
に保持されています。
.IR "tmac パス"
は、これらのコロン区切りのリストで構成されます。
.
.
.P
マクロファイルの検索手順は以下のように (この順で) 行われます:
.
.Topic
troff/groff の
.B \-M
コマンドラインオプションで指定されたディレクトリ
.
.Topic
.Env_var $GROFF_TMAC_PATH
環境変数で与えられたディレクトリ
.
.Topic
カレントディレクトリ
(安全でないモードの時のみ。これは
.B \-U
コマンドラインスイッチで有効になります)
.
.Topic
ホームディレクトリ
.
.Topic
プラットフォーム特有のディレクトリ。
このインストールでは
.B /usr/share/tmac
です。
.
.Topic
サイト特有 (プラットフォーム非依存) のディレクトリ。
このインストールでは
.B /usr/share/tmac
です。
.
.Topic
主要の tmac ディレクトリ。
このインストールでは
.B /usr/share/tmac
です。
.
.
.\" --------------------------------------------------------------------
.SH 環境変数
.\" --------------------------------------------------------------------
.
.TP
.Env_var $GROFF_TMAC_PATH
追加された tmac ディレクトリのコロン区切りのリストで、
このリストからマクロファイルを探します。
.
詳細は、前の節を参照してください。
.
.
.\" --------------------------------------------------------------------
.SH 作者
.\" --------------------------------------------------------------------
.
Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
.
.P
この文書は、FDL (GNU Free Documentation License) バージョン 1.1 か
それ以降のものに基づいて配布されています。
.
あなたは、システム上に FDL のコピーを受け取っているはずですが、
これは
.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site"
からもオンラインでも入手可能です。
.
.P
この文書は
.IR groff
、すなわち GNU roff 配布物の一部です。
.
これは
.MTO bwarken@mayn.de "Bernd Warken"
によって書かれ、
.MTO wl@gnu.org "Werner Lemberg"
によって保守されています。
.
.
.\" --------------------------------------------------------------------
.SH "関連項目"
.\" --------------------------------------------------------------------
.
groff システムのすべての部分の完全なリファレンスは、
groff
.BR info (1)
ファイル中にあります。
.
.TP
.BR groff (1)
groff システムの全体像です。
.
.TP
.BR groff_man (7),
.TP+
.BR groff_mdoc (7),
.TP+
.BR groff_me (7),
.TP+
.BR groff_mm (7),
.TP+
.BR groff_mom (7),
.TP+
.BR groff_ms (7),
.TP+
.BR groff_www (7).
groff tmac マクロパッケージです。
.
.TP
.BR groff (7)
groff 言語です。
.
.
.P
ファイルシステム階層標準 (FHS) は
.URL http://\:www.pathname.com/\:fhs/ "FHS web site"
から入手可能です。
.
.\" Local Variables:
.\" mode: nroff
.\" End: