physics パッケージは物理で用いられる数学記号等を簡便に利用できるようにxparse パッケージを利用してコマンドを作成している.また,amsmath パッケージにも依存している.
The physics package §1.1 The purpose of this package には以下のように書かれている.
The goal of this package is to make typesetting equations for physics simpler, faster, and more humanreadable. To that end, the commands included in this package have names that make the purpose of each command immediately obvious and remove any ambiguity while reading and editing physics code. From a practical standpoint, it is handy to have a well-defined set of shortcuts for accessing the long-form of each of these commands. The commands listed below are therefore defined in terms of their long-form names and then shown explicitly in terms of the default shorthand command sequences. These shorthand commands are meant make it easy to remember both the shorthand names and what each one represents.
これらから,physics パッケージの目的を要約すると以下の3点になる.
- より簡単かつ可読性が高まるようにコマンドを作成
- コマンド名は目的が明瞭かつ覚えやすいように定義
- 各コマンドには長い形式と短い形式の2種ある
また,この2種類のコマンドの形式は同じコマンドの言い換えのものと言い換えでないものの2つがあるようだ.
\bmqty
などの行列コマンドは\begin{bmatrix}
~ \end{bmatrix}
を再定義したコマンドになっている.
physics パッケージのオプションは3つある.
- 三角関数の自動調整デリミタの有効/無効
オプション | |
---|---|
trig (デフォルト) | 有効 |
notrig | 無効 |
- 微小量を示す
d
のスタイル
オプション | ||
---|---|---|
uprightdiff (デフォルト) | 立体のd |
\mathrm{d} |
italicdiff | イタリックのd |
d |
\nabla
のベクトルスタイル
オプション | ||
---|---|---|
bolddel (デフォルト) | ボールド体の\nabla |
\boldstyle\nabla |
arrowdel | 矢印の\nabla |
\vec{\boldsymbol\nabla} |
コマンドは以下のサブセットが用意されている.
- Automatic bracing
- Vector notation
- Operators
- Quick quad text
- Derivatives
- Dirac bra-ket notation
- Matrix macros
いくつかコマンドに関してコメントしておきたい.
ベクトル
: ベクトルは自分で定義してしまった方が良いように思う.
また,矢印ベクトルに関しては\vec
を利用せずにesvect パッケージを用いると良いだろう.
勾配,発散,回転に関してナブラ記号のみでしか利用を許していない点に関して追加しておいた方が良いように思う.
% Operator name で定義しておく
\DeclarMathOperator{\gradopn}{grad}
\DeclarMathOperator{\divopn}{div}
\DeclarMathOperator{\curlopn}{curl}
\DeclarMathOperator{\rotopn}{rot}
微分記号 : 微分に関してはdiffcoeff パッケージを利用する方が有用の可能性がある.高階の偏微分に関して非常に良い.
ブラケット記法 : ブラケット記法にはbraket パッケージがあるが,physics パッケージの方が有用だろう.
行列 : 行列をXmatrix 環境を再定義してコマンドとして提供するなどしているが,Xmatrix 環境のまま使用する方が見やすいように思う. ただし,いくつかのコマンドは有用である.
以下はデリミタのない行列が出力される.
name | command | |
---|---|---|
identity matrix | \imat{n} |
n×n の単位行列 |
zero matrix | \zmat{n}{m} |
n×m の零行列 |
pauli matrix | \pmat{n} |
パウリ行列 (n に0~3 の値を入れる) |
ここまではphysics パッケージガイドにも書かれている内容であり,さまざまな記事で紹介されている.
以下では,physics パッケージをより拡張的に利用することを考えたい.
physics パッケージが有用にはたらく機能の1つとして代表的なものに\exp( \frac{a}{b} )
などとすると丸括弧の高さを自動調整して生成してくれるコマンドが挙げられるだろう.この機能を流用したい.
この\exp
は元の"exp" のみが出力される再定義された\exponential
とデリミタの自動調整をすることのできるコマンドを組み合わせて作成されている.
このような自動調整を含むデリミタには以下のようなコマンドが定義されている.
コマンド | 対応するデリミタ | 引数の付与 | 例 |
---|---|---|---|
\trigbraces |
() |
可 | \sin (三角関数), \log ... |
\opbraces |
() , [] , {} |
不可 | \exp , \det , \tr ... |
注意
: 三角関数に関してtrig
オプションがあるが,\trigbraces
に組み込まれたオプション機能ではないことを注意しておきたい.また,引数は累乗を付与することが出来る.
もちろんこれらのコマンドはパッケージ内部で定義されているコマンドであるが,その詳細については記載しない.パッケージの内部を直接参照してほしい.
また,\order
や\abs
は特定のデリミタが予約されているが,これらは\fbraces
(Function braces with automatic and manual sizing) や\braces
コマンドによって定義されている.
xparse パッケージを利用しているので,\newcommand
で上手く定義することが出来ない.そのため,\DeclareDocumentCommand
を利用する.このコマンドから上書き定義も可能である.
例
: \HOGE
を新たに\hoge
として再定義する.
\hoge
の次の{}
は引数の条件を加えることになるが,再定義するのみの場合にはブランクで問題ない.
\DeclareDocumentCommand\hoge{}{\HOGE}
また,\rot
は定義されておらず\curl
のみが定義されている.これを書き変えておくことも出来るだろう.
\DeclareDocumentCommand\rot{}{\curl}
physics で提供されている\sin
や\cos
などの演算子でもデリミタが使用できるようになっている.
これと同様にphysics で提供されていない演算子に対しても同様のコマンドを定義したい.
physics パッケージでは\exp
, \log
は以下のように定義されている.
\DeclareDocumentCommand\exp{}{
\opbraces{\exponential}
}
\DeclareDocumentCommand\log{}{
\trigbraces{\logarithm}
}
したがって,\opbraces
, \trigbraces
に続く{}
内に演算子を挿入することで,演算子に続く自動調整デリミタを利用することが出来る.
使用例は以下のようになる.
\begin{align}
\exp( \frac{a}{b} ), \exp[ \frac{a}{b} ], \exp{ \frac{a}{b} }
\\
\log( \frac{a}{b} ), \log[ \frac{a}{b} ], \log{ \frac{a}{b} }
\end{align}
例
: 以下のように\hoge
コマンドを定義してみる.
% 立体の"hoge" が出力されるコマンドを定義(amsmath 提供)
\DeclarMathOperator{\HOGE}{hoge}
% \hoge によってデリミタが付与されるコマンドを定義(xparse 提供)
\DeclareDocumentCommand\hoge{}{
\opbraces{\HOGE}
}
これによって,\exp
と同じ仕様のコマンドが再現される.
新たにコマンドを定義しつつ利用しよう.
これらで定義したコマンドはphysics パッケージを読み込んだ後に定義する. my-physics.tex 等として別ファイルを作成し,以下のようにプリンブルに読み込むと良いだろう.
\usepackage{xparse}
\usepackage{amsmath}
\usepackage{physics}
\input{my-physics}
ライセンスはThe LaTeX Project Public License となっている.
physics で定義されている\log
では対数の底を挿入することが出来ない.これは,コマンドの直後には対応するデリミタの有無のみでしか定義されいないためである.
以下のように,常用対数(Common logarithm)と自然対数(Natural logarithm)を定義しておこう.
\DeclareDocumentCommand\clog{}{
% \trigbraces{\logarithm}
\opbraces{\logarithm_{10}}
}
\DeclareDocumentCommand\nlog{}{
% \trigbraces{\naturallogarithm}
\opbraces{\logarithm_{\mathrm{e}}}
}
\log
/ \ln
としてコマンドを提供するため,もとの"log" / "ln" を生成するコマンドは\logarithm
/ \naturallogarithm
で再定義されている.
また,physics パッケージで定義されている\log
は\trigbraces
を利用している.これは対数の底を右上に書く表記方法を反映させるためだろう.
個人的には右下に付与したいので,上のように定義している.
あるいは,\trigbraces
を真似て\logbraces
を作成しても良いだろう.
\DeclareDocumentCommand\logbraces{ m o d() }
{
\IfNoValueTF{#3}
{#1 \IfNoValueTF{#2}{}{[#2]}}
{#1 \IfNoValueTF{#2}{}{_{#2}} \argopen(#3\argclose)}
}
\DeclareDocumentCommand\Log{}{
% \trigbraces{\logarithm}
\logbraces{\logarithm}
}
これで,\Log[2]
など自由な対数の底を右下に示すことが出来るようになる.
ただし,このように作成するとき,()
のみしか利用できないことに注意しておきたい.
\DeclareDocumentCommand
によって上書き定義することも可能となっているので,\log
としても良いだろう.