2012/11/06

LaTeXで "千反田える" してみた(2)

(前:LaTeXで "千反田える" してみた(1))

~とりあえず解説(命令編)~

はい,解説(命令編)です。
マクロに使われている命令について大雑把に解説するだけの記事です。
正直TeX / LaTeXというものに対する理解は大したものではないので,大雑把にしか説明できません。
よくインターネットで検索すると見つかるくらいの情報しか書けないよ。
それでもいいならのんびりやっていくのでどうぞ。

ソースコードを追いながら解説はひどく面倒くさいので,使われている命令とその意味を書いておきます。
また,真面目にやろうとしたら面倒くさくなったため,「これを見ればなんとなくこんな動きをしていることが分かる」くらいのレベルのつもりです。

○@付のカウンタやマクロを使う
\makeatletter
\makeatother
こいつは@のついたカウンタやを使うための命令です。
通常,@のついたカウンタやマクロは本文のあるソースファイルで使わず,スタイルファイルやクラスファイル中に書いておくものなのですが,プリアンブルにマクロ定義を書きたかったりするときはこいつを前後に入れます。

(追記)
本文中でも使えますが,基本的にはプリアンブルかスタイルファイル,クラスファイルに入れておく方がいいでしょう。
そもそも,こういうマクロは分けておいた方がいいです。
プログラムを作るときにモジュールに分割することと同じようなものです。

○マクロを定義する(1)
\def
Example : \def\eltaso#1#2#3{処理}
\defは新しいマクロを作る命令です。
同じことをするコマンドに\newcommandがありますが,あれはLaTeXで用意されたものだったかな。
ただし,\defは同じ名前のマクロが存在しても無視して上書きするので,そこが気になる人は同じ名前のマクロがあるとエラーを出してくれる\newcommandを使いましょう。
使用例では引数を取るマクロを作ってますが,もちろん引数なしでもいけます。
ただし,取れる引数の数には上限があったはず(後で調べて追記します)。

(追記)
取れる引数の数は9が上限です。


○マクロの定義(2)
\edef
Example : \edef\@list{反田}
Example : \edef\@list{\@list える}  
\def命令と似たようなものですが,こいつの場合は\edefで定義したマクロは\edefを使わないと再定義できません。
途中で\def\@list{ちーちゃんかわいい}とか入れたって上書きされません。
ちなみに2個目の例では定義しようとしているマクロの中に同じ名前のものがありますが,これは再定義するときに使えて,既に定義されているものに新しく "える" という文字列をくっつけられます。
これを利用して,千反田えるマクロでは数字を頭につけています。


○新しいカウンタを定義する
\newcount
Example : \newcount\@a
新しいカウンタをつくる命令です。
例で示したように, \newcountの後にカウンタ名を書きます。
基本的に整数のみしか扱えません。
固定小数点を扱えるパッケージ(fp-package)もあるようです。

○カウンタに値を代入する
\@a = 1
\@a = \@loop
\@a = #1
カウンタに値を代入する操作?命令?です。
定数を代入できますし,別のカウンタの値も代入できます。
ここで,マクロの引数に与えたものだってもちろん代入できます。
その場合は#1,#2,#3といった感じになりますが,これは引数の順番です。

○カウンタの四則演算
\advance xxx by ...
\multiply xxx by ... 
\divide xxx by ... 
Example : \advance\@a by \@k
上から順番にカウンタ(xxx)に対してbyの後ろの値(...)を加算,乗算,除算する命令です。
byの後ろに来るものはカウンタでも定数でも引数でも構いません。
ただし,計算結果はカウンタ(xxx)に代入されます。

○ループ構文
\@whilenum
Example : \@whilenum \@loop < \@limit \do{処理}
LaTeXで用意されているループ構文の1つです。
\@whilenum と \do の間にある条件が満たされている間,カッコでくくられた処理を続けます。
比較には不等号と等号が使えます。
比較はカウンタ同士やカウンタと引数,変数と定数ができます。

○条件分岐
\ifcase
\ifcase\@a <0のとき> \or <1のとき> \or ...
Example : \ifcase\@a \edef\@list{零反田} \or \edef\@list{一反田} \or ...
これはカウンタの値を判定し,その数値によって出力を変えられますが,
一番最初の処理はカウンタの値が0のとき,その次は1のとき,と既に決まっております。
これを利用して1の時は一をくっつけ,2の時は二をくっつけ…とかやってます。

さて,これだけ書いておけばなんとなく分かるでしょう。

○最後に:\relaxって何?

なに?\relaxの説明がない?ああ,すまない。
すっかり忘れていた。
\relax
こいつを入れると精神的に穏やかになれます。
LaTeXで "千反田える" してみた(1) 参考webページ[1]参照)

(次:LaTeXで "千反田える" してみた(3))

○追記(2012/11/10)
変数と表記されていたところをカウンタやマクロに変えました。
また,使用している命令の分類ごとに見出しを付けました。
これで少しはより正確な表現に近付いたと思われます。
とはいっても,また正確にはほど遠いものだと思いますが。

0 件のコメント:

コメントを投稿