この記事では、LaTeXでマクロを作るときに用いる\def
と\newcommand
について入門的な解説をします。
マクロが使えるようになれば、複雑で長いコマンドを簡略化でき、作業能率が格段に上がります。 マクロはとても便利なテクニックなので、必ずマスターしておきましょう。
マクロはプリアンブルでも本文内でも定義可能です。 定義された場所以降でそのマクロは有効になります。 一般的に、マクロはプリアンブルの最後の方で記述されることが多いです。
ただし、\def
または\newcommand
を本文中(\begin{document}~\end{document}
)に記述するならば、文書モードで入力してください。
数式モード($ $
の中)で入力したらコマンドは無効になります。
\def
\def\マクロ名{文字列}
\def\a{\alpha}
$\a$
$\def\a{\alpha}$ $\a$
このように\a
を入力するだけでアルファ $\a$ が表示されます。
\def\Z{\mathbb{Z}}
$\Z$
$\def\Z{\mathbb{Z}}$ $\Z$
このように、\Z
を入力するだけで $\Z$ が表示されます。
\def\マクロ名#1#2 …{引数付き文字列}
引数は #1 から #9 までの任意の個数を設定できます。
\def\norm#1{\| #1 \|}
$\norm{A}$
$\def\norm#1{\| #1 \|}$ $\norm{A}$
上記のとおり、\def
によって\norm{}
という新しいコマンドをつくりました。
この{}
の中にA
や\alpha
などの文字列を入れると、そのノルムが出力されます。
※\|
は $\|$ を出力するコマンドです。
\def\dd#1#2{\frac{\partial #1}{\partial #2}}
$\dd{f}{x} \dd{g}{y}$
$\def\dd#1#2{\frac{\partial #1}{\partial #2}}$ $\displaystyle\dd{f}{x} \ \dd{g}{y}$
上記のとおり、\def
によって\dd{}{}
という新しいコマンドをつくりました。
1つ目の{}
にfやgなどの関数を、2つ目の{}
にxやyなどの変数を入れると、その偏微分が出力されます。
※\partial
は $\partial$ を出力するコマンドです。
\newcommand
\newcommand{マクロ名}{文字列}
\newcommand{\a}{\alpha}
$\a$
$\newcommand{\b}{\alpha}$ $\b$
\newcommand{マクロ名}[引数]{文字列}
\newcommand{\norm}[1]{\| #1 \|}
$\norm{A}$
$\norm{A}$
\newcommand{\dd}[2]{\frac{\partial #1}{\partial #2}}
$\dd{f}{x} \dd{g}{y}$
$\displaystyle\dd{f}{x} \ \dd{g}{y}$
\newcommand{\hoge}[2]{#1 は #2 である}
\hoge{我輩}{猫}
$\newcommand{\hoge}[2]{#1 は #2 である}$ $\hoge{我輩}{猫}$
\def
と\newcommand
の違い
\def
はTeXで定義されているコマンドであり、
\newcommand
はLaTeX で定義されているコマンドです。
すでにあるマクロ名を定義しようとする場合、\def
の場合は後から定義されたマクロが使われます。それに対して、\newcommand
はエラーメッセージが表示されます。
\newcommand
のほうがバグが起きる心配は少ない
\newcommand
のほうがバグが起きる心配は少ないです。
というのも、amsmathやamsfontsなどのパッケージでは多くのマクロが定義されています。複雑に定義されたマクロも少なくありません。
\def
によって新しく定義したコマンドが、パッケージ内にあるマクロと一致してしまうと、エラーが起きたり、変な出力表示がされる可能性があります。
やっかいなことは\def
で定義したら、そのバグはすぐにはわからないことです。
一方で、\newcommand
では、エラーが表示されるので、新しいコマンド名がすでに定義されているものだとすぐにわかります。
そういうわけで、マクロを定義する場合は\newcommand
を用いるほうが望ましいです。