2012.03.30 更新
スライド化しました.
新しいマクロ定義
以下に例を示す.\dev\hoge{ほげ}
これにより,\hogeが「ほげ」に変換される.引数を使うには,以下のように記述する.
\dev\hour#1{今は#1時です}
別の方法
上に示した処理は,以下のようにも記述できる.\newcommand{\hoge}{ほげ}
\newcommand{\hour}[1]{今は#1時です}
defとnewcommand違い
defとnewcommandが異なる箇所として,以下が上げられる.- 定義命令を定義している処理系
- マクロを多重定義した場合の動作
- 引数のとり方
まず,定義されている処理系が異なる.defはtexで定義されており,newcommandは,latexで定義されている.
次に,多重定義した際の動作が異なる.defでは,新しい定義で上書きする.一方,newcommandではエラーを出力する.
最後に,defでは,引数のとり方としてパターンマッチングを利用できる.例えば,以下のマクロ定義があるとする.
\def\Hatchr(#1,#2)(#3,#4)#5
これにより,以下に示すインターフェイスを実現する.
\Hatchr(3,4)(7,8){hoge}
マクロの複製
以下の処理では,\hogeの内容を\fugaに複製する.\let\fuga\hoge
マクロの初期化
以下のコードで,\hogeを初期化する.\let\fuga\relax
ここで,\relaxは初期化のために利用する空の定義である.
マクロに文字を追加し再定義
defによる定義は,マクロの多重展開をおこなわない.例えば,以下のコードを考える.\def\hoge{ほげ}
\def\hoge{\hogeふぇふぇ}
この後,\hogeを利用すると「\hogeふぇふぇ」と展開される.つまり,一度だけしかマクロは展開されない.
マクロを展開してから定義する際には,以下の記述を用いる.
\edef\hoge{\hogeふぇふぇ}
これにより,\hogeは 「ほげふぇふぇ」 に展開される.
カウンタの定義
カウンタは以下のようにして定義する.\newcount\n
値の代入
カウンタnに0を代入する式は,以下のようになる.\n=0
加減算
カウンタnに3を加算するには,以下を使用する.\advance\n by3
参照
数値を参照(展開)するには,以下を使用する.\number\n
特殊文字を含むマクロ
ここまでで述べたマクロの定義方法では,マクロ名に英語以外の文字は使用できない.数字を含むマクロ名を利用するには,以下の定義方法を使用する.\makeatletter
\@namedef{Test1}#1{test1のテストで,引数は#1}
\makeatother
そして,呼び出す際には,以下の書式を利用する.
\makeatletter
\@nameuse{Test1}{ABC}
\makeatother
分岐
条件によって処理内容をわけるには,以下の書式を用いる.\if(条件)(真の場合) \else(偽の場合) \fi
ここで「\else(偽の場合)」は,省略することもできる.\ifは,文字同士の比較のみ使用できる.
整数の比較には,以下のマクロを用いる.
\ifnum
例えば,カウンタnが1より大きいかを判定するには,以下の式を用いる.
\ifnum\n<1 br="">1>
文字列の比較には,以下のマクロを用いる.
\ifx
以下は,変数answerが,文字列Yesかどうかを判断する式である.
\ifx\answer{Yes }
また,スイッチを作成できる.これは,C言語のifdefに似た使い方をする.まず,以下のコマンドでスイッチhogeを作成する.
\newif\ifhoge
すると,\ifhoge,\hogetrue,\hogefalse,の3つのコントロールシーケンスが作成される.\ifhogeはスイッチに用いる.\hogetrueは,スイッチを真にする.\hogefalseは,スイッチを偽にする.
ループ
ループの書式を以下に示す.\loop(処理A) \if(継続条件)(処理B) \repeat
まず,処理Aを展開し,継続条件が真のとき,処理Bを展開した後,これらの過程を処理Aから繰り返す.条件が偽のとき,ループを抜ける.
以下は,ループを用いた例である.
\newcount\K
\def\MgcSqr#1{\K=0 %
\loop\ifnum\K<#1 \advance\K by1
\number\K,
\repeat}
ループの部分は,Kが0から引数で指定された数値まで,インクリメントする.このマクロを使用すると,例えば,\MgcSqr{5}の結果は,1,2,3,4,5に置き換わる.
入出力
例えば,キーボードからの入力を文字カテゴリ1としてhogeに登録するには,以下のとおり記述する.\read-1 to\hoge
コンパイルログに出力するには,次のマクロを使う.
\message{hoge hoge hoge}
参考文献
- TeXの数値処理
http://www.geocities.co.jp/HeartLand-Poplar/1240/latex/value.html