2012/12/19

マクロの作り方("TeX & LaTeX Advent Calendar")

1. はじめに
本投稿は "TeX & LaTeX Advent Calendar" の参加記事です (http://atnd.org/events/34318)。
人手が足りず,参加者募集中です。

さて,私の投稿も3回目となりました。
さすがにfp-packageネタは私が疲れたので,今回はマクロについて書こうかと。
とはいえ,初心者な人たち向けです。

2. マクロを作るコマンド
マクロを作ると言えば,正しくは "マクロを定義する" なのでしょうが,マクロを定義するコマンドは "\def" と "\newcommand" の2つあります。
"\def" はTeXで定義されているコマンドなので,LaTeXじゃなくても使えます。
"\newcommand" はLaTeXで定義されているコマンドなので,このコマンドをTeXで使おうとするとエラーが出ます。
とはいえ,TeXを触りだした人々はLaTeXを使っているはずですので,マクロの定義にはどちらを使っても大丈夫です。

違いは,"\def" の場合は既に同じ名前のマクロが存在する場合,上書きします。
"\newcommand" の場合は同じ名前のマクロがあると組版処理をするときにエラーが出るので,既に存在しているマクロを上書きしません。
そういうわけで,新しいマクロを作るときはなるべく後者を使うと良いのでは,と思います。

3. マクロの作り方
新しくマクロを定義するコマンドについて書きましたが,書式は次のとおりです。
\def<マクロ名><引数>{<処理>}
\newcommand{<マクロ名>}[<引数>]{<処理>}
<マクロ名>には新しく定義するマクロの名前が入ります。
たとえば "\hoge" とか "\eltaso" とかです。
基本的にマクロの名前には数字や特殊文字("_","^","&","%"など)は使えません。
(どこかでTeXで配列のようなものを実現しようとしているのは数字使っていた気がしましたが,あれは "\namedef" っていう別のコマンド使ってます。参照:[1],[2])

<引数>にはマクロが取る引数の数を入れます。
"\def" と "\newcommand" とで,引数の表記の仕方が違います。
"\def" の場合,"#1#2#3..." といった感じにし,引数の個数だけつなげます。
"\newcommand" の場合,[3]といった感じで,[]の中に数字を入れるだけです。
どちらの場合も1つのマクロには9個までしか引数が取れないので,"\def" の場合はいくら長くても "#1#2#3#4#5#6#7#8#9" までです。

<処理>にはマクロの処理内容が入ります。
たとえば,"\hoge" というマクロが "ほげほげ" という文字列になるようにしたいときは
\def\hoge{ほげほげ}
とすればいいです。
引数を使う場合,例として,図の参照を考えてみます。
レポートを書くときにはよく "図 ~" とか "Fig ~" という形式にしますが,これをマクロで実現すると
\def\figref#1{図\ref{#1}}
\newcommand\figref[1]{図\ref{#1}} 
 のように記述して,参照するときに \figref{<図のラベル>} のように記述してやると,図1といった感じになります。

例えば私は,図,表,数式の参照に次のマクロを定義して使っています。
\def\figref#1{図\ref{#1}}
\def\tabref#1{表\ref{#1}}
\def\eqnref#1{式(\ref{#1})}
こうすると,いちいち図とか表とか書かなくて済むので少し楽になります。
こういったマクロは1つのスタイルファイルにまとめておくと,いちいちプリアンブルで定義する必要が無いのでまた少し楽になりますが,スタイルファイルについてはこの記事中では触れません。

4. おわりに
マクロを使うと,何回も繰り返し使うようなものをコマンド1つで実現できるようになるため,省力化が期待できます。
とはいえ,ここに書いたことはごく基本的な部分です。
LaTeXについての本は多く出版されているので,マクロの定義についてもっと知りたい場合はそちらを見ると良いかと思います。

また,インターネットで探すと誰かが作ったマクロが見つかる場合もあります。
たとえば均等割付とか。

というわけで,今日はこのくらいで。

TeX & LaTeX Advent Calendar は今も空きがあり,参加者募集中です。
ぜひ参加して下しあ。初心者歓迎のようです。

参照webページ
[1] それでも TeX でプログラミングしたい人のための何か (8) - マクロツイーター
[2] それでも TeX でプログラミングしたい人のための何か (9) - マクロツイーター

0 件のコメント:

コメントを投稿