LaTeXで数式を書くときにもともと定義されていない記号を使いたくなるときがあります.そういうとき,大抵の参考書には\newcommand
が紹介されているので,数式でもこちらを使いたくなります.しかし,数式で新しい記号を書きたいとき,それが演算子のときは\DeclareMathOperator
を使うほうがより適切であることもあります.
\newcommandの復習
\newcommand
はLaTeXで最初から使うことができる,コマンドを定義するためのコマンドです.使い方は以下のようになります.
%% 数式環境内で使うことが出来るコマンドを定義 \newcommand{\diff}{\mathrm{d}} % 引数がないとき \newcommand{\norm}[1]{\lvert #1 \rvert} % 引数が1つのとき \newcommand{\henbibun}[2]{\partial #1}{\partial #2} % 引数が2つのとき
\newcommandの問題点
では何が問題かといいますと,\newcommand
は単純な置き換えであるということになります.
例えばハイパボリックセカント(sech)関数は元々定義されていないので自分で用意しなければなりません.ここで
\newcommand{\sech}{\mathrm{sech}}
と定義して
\sech x
と使うと非常に汚い式になってしまいます.
\sin
などは演算子として定義されているので余白の調整を自動で行ってくれます.\sin x
ならばxの前に自動で小さな余白を入れてくれるし,sinのsの前にも小さな余白が自動で入ります.
一方,上記の\newcommand
を利用したときは単に\mathrm{sech}
と書いたのと同じになるので余白などの調整は行われずにTeXの美しさが損なわれてしまいます.
もう一つ気になる点があります.それは\newcommand
はただのコマンドであるので演算子としての意味がない点です.セマンティクスが正確に記述できないので演算子を定義する際には適当ではありません.
\DeclareMathOperatorを使おう
LaTeXを使う日本人でamsmathパッケージを使わない人は殆どいないと思います.\DeclareMathOperator
はこのamsmathパッケージで実装されている,新しい演算子を定義するためのコマンドです.
使い方は簡単で,例えばハイパボリックセカントを定義したいなら
\DeclareMathOperator{\sech}{sech}
としてあげれば使い方は後の使い方は同じです.これなら元々定義されている\sin
などと全く同じ形式で使えるし,コマンドの意味としても演算子として処理系に情報を渡すことが出来ます.
例えば
\newcommand{\divergence}{\mathrm{div}\,} %ダイバージェンス \newcommand{\grad}{\mathrm{grad}\,} %グラディエント \newcommand{\rot}{\mathrm{rot}\,} %ローテーション引用:物理のかぎプロジェクト
と定義しているのをたまに見かけますが,これは
\DeclareMathOperator{\divergence}{div} %ダイバージェンス \DeclareMathOperator{\grad}{grad} %グラディエント \DeclareMathOperator{\rot}{rot} %ローテーション
とするのが今風でしょう.