[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
Texinfoは,新しいコマンドを定義する様々なコマンドを提供します.
さらに,これらのマクロは@defmac
コマンドと関係が無く,それは,マ
ニュアルのサブジェクトでドキュメント化されるマクロです(see section 定義のテンプレート).
18.1 マクロの定義 | Defining and undefining new commands. | |
18.2 マクロの呼び出し | Using a macro, once you’ve defined it. | |
18.3 マクロの詳細 | Beyond basic macro usage. | |
18.4 ‘@alias new=existing’ | Command aliases. | |
18.5 ‘definfoenclose’: 強調のカスタマイズ | Customized highlighting. |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
マクロを定義するため,以下のようにTexinfoの@macro
コマンドを使用
します.
@macro macroname{param1, param2, …} text … \param1\ … @end macro |
パラメータ(parameters)のparam1,param2,…は,後 でマクロをドキュメントで使用するとき(次のセクションで記述します)に供給さ れる引数に対応します.
マクロがTeXで動作するため,macronameは完全に文字から成り立って いる必要があります.数字,ハイフン,アンダースコア,または他の特別な文字 を含めてはいけません.
マクロがパラメータを必要としない場合,空のリスト(‘@macro foo {}’),またはカッコ無し(‘@macro foo’)で定義することが可能です.
定義やマクロの本体(body)は,前に定義されたマクロを含め,ほとんどの
Texinfoコマンドを含めることが可能です.まだ定義されていないマクロの呼び
出しはできません.このため,相互に繰り返されるTexinfoマクロを持つことは
不可能です.また,他のマクロを定義するマクロ定義は,@macro
の設計
の制限のため,TeXでは動作しません.
マクロの本体では,上記の例では‘\param1\’のようにバックスラッ シュで囲まれているパラメータ名のインスタンスは,マクロ呼び出しでの対応す る引数で置換されます.パラメータ名は,ゼロ回を含め何度でも本体で使用可能 です.
マクロ式での単一の‘\’を得るため,‘\\’を使用してください.ほか のあらゆる本体での‘\’の使用は警告されます.
@macro
行の後と@end macro
行の前の改行は無視されるので,マ
クロ本体に含まれません.全ての他の空白は通常のTexinfoの規則に従って扱わ
れます.
マクロを再帰的に使用可能にするため,すなわち,引数としてそれ自身を呼び出 すため,以下のように‘@rmacro’で定義する必要があります.
@rmacro rmac {arg} a\arg\b @end rmacro … @rmac{1@rmac{text}2} |
これは,出力‘a1atextb2b’を生成します.‘@rmacro’の代わりに ‘@macro’を用いた場合,エラーメッセージが表示されるでしょう.
@unmacro foo
を用いて,マクロfooを未定義にすることが
可能です.既に未定義にされたマクロを未定義にすることはエラーではありませ
ん.例えば以下のようにします.
@unmacro foo |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
マクロの定義後(前のセクションを参照してください),以下のようにドキュメン トで使用(呼び出し(invoke))可能です.
@macroname {arg1, arg2, …} |
そして,結果はその場所にmacroname本体を入力したかのようになります. 例えば以下のようにします.
@macro foo {p, q} Together: \p\ & \q\. @end macro @foo{a, b} |
以下を生成します.
Together: a & b. |
このため,引数とパラメータはカンマで分けられ,カッコで範囲を制限します. カンマの後(前は違います)のあらゆる空白は無視されます.マクロが引数を取ら ない場合でもカッコは呼び出しで(定義では違います)要求され,他の全ての Texinfoコマンドとの一貫性を保ちます.
@macro argless {} ここに引数はありません. @end macro @argless{} |
以下を生成します.
ここに引数はありません. |
カンマ,カッコ,またはバックスラッシュを引数に挿入するため,以下のように バックスラッシュを前置します.
@macname {\\\{\}\,} |
それは,引数‘\{},’をmacnameに渡します(ほとんど確実にエラー を生成します).しかし,カッコ内のカンマはバックスラッシュでエスケープさ れていても.TeXで問題になるでしょう.
マクロが単一の引数を取るように定義されていて,カッコ無しで呼び出された場 合,マクロ名の後の行の残り全体は引数として供給されます.例えば,以下のよ うになります.
@macro bar {p} Twice: \p\ & \p\. @end macro @bar aah |
以下を生成します.
Twice: aah & aah. |
マクロが単一の引数を取るように定義されていて,カッコ付で呼び出された場合, カンマにかかわらずカッコ付のテキストは引数として渡されます.例えば以下の ようになります.
@macro bar {p} Twice: \p\ & \p\. @end macro @bar{a,b} |
以下を生成します.
Twice: a,b & a,b. |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
TeXとmakeinfo
の実装には避けることのできない相違があるので,
Texinfoマクロは以下の制限があります.
@set
とその他の類似のコマンドはマクロで効果がないことを意味します.
@ifnottex @macro ctor {name, arg} @macro \name\ something involving \arg\ somehow @end macro @end macro @end ifnottex @tex \gdef\ctor#1{\ctorx#1,} \gdef\ctorx#1,#2,{\def#1{something involving #2 somehow}} @end tex |
マニュアルの印刷バージョンを生成しているとき,マクロ機能でエラーが生じる
場合,texi2dvi
を‘-E’オプションを用いて呼び出し,
makeinfo
でマクロの展開を試みてください.texi2dvi
での書式化を参照してください.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
‘@alias’コマンドは,新しいコマンドを既存のものと同じように定義しま す.これは追加のマークアップ名の定義に便利で,このため出力結果が同じであっ ても,入力の意味論的な情報を維持します.
‘@alias’コマンドを単独行に書き,新しいコマンド名,等号,そして既存 のコマンド名を続けてください.等号の周りの空白は無視されます.このため以 下のようにします.
@alias new = existing |
例えば,ドキュメントが本と他のメディア(例えば動画)の両方への引用を含んで
いる場合,通常の@cite{}
と同じことを行いますが,同じような余分
な意味論的情報をもたらすマクロ@moviecite{}
を定義したい可能性が
あります.このため以下のようにします.
@alias moviecite = cite |
気まぐれな引数の解析のため,マクロは常に同じ結果となるわけではありません. また,別名はマクロより定義が簡単です.そのため,コマンドは重複しません. (また,専門語ファイルで大量に使用されました!)
別名は,直接的や間接的に,再帰的してはいけません.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
@definfoenclose
コマンドは,Infoに対しては使用しTeXに対しては
使用しない強調コマンドの定義として使用してもかまいません.
@definfoenclose
で定義されたコマンドは,前後のテキストの文字列内
の,そのコマンドで囲んだテキストに印を付けます.Info出力に似た制御を行な
うためこれを使用することも可能です.
おそらく,Infoに対し@definfoenclose
でコマンドを定義する場合,
‘texinfo.tex’,‘texinfo.cnf’,またはドキュメントの
‘@iftex’の中でTeXに対し対応するコマンドを作成することになるでしょ
う.
@definfoenclose
コマンドを一行で書き,カンマで区切られた三つの引
数を続けてください.@definfoenclose
の最初の引数は(@
がな
い) @-コマンド名です.二番目の引数はInfoを開始するデリミタ文字列です.
そして,三番目の引数はInfoを終了するデリミタ文字列です.デリミタ文字列は
スペースを含めてもかまいません.開始と終了のデリミタは必須ではありません.
開始デリミタが不要で,終了デリミタが欲しい場合,コマンド名で同じ行に二つ
のカンマを続ける必要があります.そうしない場合,Info書式化コマンドは,当
然,終了デリミタ文字列を開始デリミタ文字列だと誤って解釈します.
(@emph
,@strong
,@t
,または@i
のように)前
もって定義されているマクロ名で@definfoenclose
する場合,囲まれた
定義は組込み定義に優先されます.
囲みコマンドはカッコ内の一つの引数を取り,以下のように定義されます.これ は,新しいマークアップコマンドを意図しています(see section 単語と句の印付け).
例えば,以下のように書くことが可能です.
@definfoenclose phoo,//,\\ |
@phoo
の引数の前に‘//’,後ろに‘\\’を挿入するInfo書式化コマンドと
して@phoo
を定義するために,Texinfoファイルの最初の方に書きます.
そして,Infoで強調された‘//bar\\’が必要な場所ならどこでも,
@phoo{bar}
を書くことが可能です.
また,TeX書式化で以下のように書くことも可能でしょう.
@iftex @global@let@phoo=@i @end iftex |
@phoo
をTeXに@phoo
の引数をイタリック対で植字させるコマ
ンドとして@phoo
を定義します.
それぞれの定義は独自のフォーマッタに適用さます.一つはTeXに対し,もう1
つはtexinfo-format-buffer
やtexinfo-format-region
に対するも
のです.@definfoenclose
コマンドは‘@ifinfo’の中に書く必要は
ありませんが,生のTeXコマンドは‘@iftex’の中に書く必要があります.
もう一つの例です.以下のように書きます.
@definfoenclose headword, , : |
@headword
の引数の前には何も挿入せず,後にコロンを挿入するInfo書
式化コマンドとして@headword
を定義するために,ファイルの最初の方
に書いてください.
‘@definfoenclose’定義は,直接的または間接的に,再帰的してはいけま せん.
[ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は新堂 安孝によって2009年9月22日にtexi2html 1.82を用いて生成されました。