Skip to content

Instantly share code, notes, and snippets.

@Yarakashi-Kikohshi
Created February 9, 2021 07:36
Show Gist options
  • Save Yarakashi-Kikohshi/1234154314d2d1afdee8df8d3bcaa33c to your computer and use it in GitHub Desktop.
Save Yarakashi-Kikohshi/1234154314d2d1afdee8df8d3bcaa33c to your computer and use it in GitHub Desktop.
physics パッケージを自分好みに

physics パッケージを自分好みに

physics パッケージは物理で用いられる数学記号等を簡便に利用できるようにxparse パッケージを利用してコマンドを作成している.また,amsmath パッケージにも依存している.

physics.sty | CTAN

目的

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点になる.

  1. より簡単かつ可読性が高まるようにコマンドを作成
  2. コマンド名は目的が明瞭かつ覚えやすいように定義
  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 パッケージを用いると良いだろう.

esvect | CTAN

ベクトル書きたい - Qiita

勾配,発散,回転に関してナブラ記号のみでしか利用を許していない点に関して追加しておいた方が良いように思う.

% Operator name で定義しておく
\DeclarMathOperator{\gradopn}{grad}
\DeclarMathOperator{\divopn}{div}
\DeclarMathOperator{\curlopn}{curl}
\DeclarMathOperator{\rotopn}{rot}

微分記号 : 微分に関してはdiffcoeff パッケージを利用する方が有用の可能性がある.高階の偏微分に関して非常に良い.

diffcoeff | CTAN

diffcoeff パッケージのすゝめ - Qiita

ブラケット記法 : ブラケット記法にはbraket パッケージがあるが,physics パッケージの方が有用だろう.

braket | CTAN

TeX でディラックのブラケットを書く - Qiita

行列 : 行列を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 パッケージをより拡張的に利用することを考えたい.

Meta automatic bracing

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 としても良いだろう.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment