LoginSignup
15
9

More than 5 years have passed since last update.

diffcoeff パッケージのすゝめ

Last updated at Posted at 2018-12-12

LaTeX で偏微分を書くのは面倒くさい!

\nabla^2 = \frac{1}{r^2}\frac{\partial}{\partial r}\left(r^2\frac{\partial}{\partial r}\right)+\frac{1}{r^2\sin\theta}\frac{\partial}{\partial\theta}\left(\sin\theta\frac{\partial}{\partial\theta}\right)+\frac{1}{r^2\sin^2\theta}\frac{\partial^2}{\partial\varphi^2}

これ直打ちするとこう

\nabla^2 =
\frac{1}{r^2}\frac{\partial}{\partial r}\left(r^2\frac{\partial}{\partial r}\right) + 
\frac{1}{r^2\sin\theta}\frac{\partial}{\partial\theta}\left(\sin\theta\frac{\partial}{\partial\theta}\right) +
\frac{1}{r^2\sin^2\theta}\frac{\partial^2}{\partial\varphi^2}

diffcoeff パッケージを使うとこう!

% \usepackage{diffcoeff}
\nabla^2 =
\frac{1}{r^2}\diffp*{\left(r^2\diffp{}r\right)}r +
\frac{1}{r^2\sin\theta}\diffp*{\left(\sin\theta\diffp{}\theta\right)}\theta +
\frac{1}{r^2\sin^2\theta}\diffp*[2]{}\varphi

あんまり短くなってない? うるせえ!

diffcoeff パッケージを使うと、短く書けるだけでなく、適切にスペースを入れてくれるのできれいに書けるぞ!

パッケージの読み込み

普通に usepackage するだけ。

\usepackage{diffcoeff}

ISO オプション

ISO 80000-2 にしたがった表記になるオプション。

\usepackage[ISO]{diffcoeff}

左が普通に読み込んだときのイメージ、右が ISO を付けて読み込んだときのイメージ。

\left.\frac{d\hspace{1mu}f(x)}{d\hspace{1mu}x}\right|_{x=x_0}\qquad\left(\frac{\mathrm{d}f(x)}{\mathrm{d}x}\right)_{\hspace{-6mu}x=x_0}

細かい指定

ファイルから読み込む方法と、LaTeX でオプション指定する方法がある。
後者を紹介する。

\diffdef コマンドで、オプションをリストにして表記する。

\usepackage{diffcoeff}
\diffdef{}{
  op-symbol = \bigstar ,
  op-symbol-alt = \heartsuit ,
  left-delim = \left[ ,
  right-delim = \right]
}

これで上と同じ数式を出すとこんな感じになる。

\left[\frac{\bigstar\hspace{1mu}f(x)}{\heartsuit\hspace{1mu}x}\right]_{x=x_0}

ISO オプションは次のように指定したのと同じ。

\diffdef{}{
  op-symbol = \mathrm{d} ,
  op-order-sep = 0mu ,
  left-delim = \left( ,
  right-delim = \right) ,
  subscr-nudge = -6mu
}

細かなオプションはマニュアル参照のこと。

特定の場合だけテンプレートを指定する方法

熱力学のときだけ ISO っぽい表記をしたい、みたいなとき。
\diffdef の第一引数に名前を指定すると、使用時にオプションとしてテンプレートが選べるようになる。

\diffdef{hoge}{
  op-symbol = \bigstar ,
  op-symbol-alt = \heartsuit ,
  left-delim = \left[ ,
  right-delim = \right]
}

としておいて、

\diff{f(x)}{x}[x=x_0] \qquad
\diff.hoge.{f(x)}{x}[x=x_0]

とすると、

\left.\frac{d\hspace{1mu}f(x)}{d\hspace{1mu}x}\right|_{x=x_0}\qquad
\left[\frac{\bigstar\hspace{1mu}f(x)}{\heartsuit\hspace{1mu}x}\right]_{x=x_0}

となる。

デフォルトで有効なのは次の 3 つ。

p

偏微分モード。

\diff.p.yx[x=3]
\left(\frac{\partial\hspace{1mu}y}{\partial\hspace{1mu}x}\right)_{\hspace{-6mu}x=a}

delta / Delta

微分の記号がデルタになる。

\diff.delta.y/x
\delta\hspace{1mu}y/\delta\hspace{1mu}x

なお、diffd / Diffd コマンドでも代用できる。
上の式は \diffd y/x でも出せる。

D

ISO オプション時のみ有効。
微分の記号が \mathrm{D} になる。

\diff.D.y/x
\mathrm{D}y/\mathrm{D}x

使い方

微分

\diff{f(x)}{x}

これで

\frac{d\hspace{1mu}f(x)}{d\hspace{1mu}x}

となる。

偏微分

\diffp{f(x,t)}{x}

これで

\frac{\partial\hspace{1mu}f(x,t)}{\partial\hspace{1mu}x}

となる。

n 階の微分・偏微分

\diffp[n]{f(x,t)}{x}

これで

\frac{\partial^n\hspace{1mu}f(x,t)}{\partial\hspace{1mu}x^n}

こう。

変数が複数のとき

\diffp{F}{x,y}

これで

\frac{\partial^{2}\hspace{1mu}F}{\partial\hspace{1mu}x\hspace{2mu}\partial\hspace{1mu}y}

こう。さらに、

\diffp[n+1,2n+1,m]{f(t,u,v)}{t,u,v}

これで

\frac{\partial^{3n+m+2}\hspace{1mu}f(t,u,v)}{\partial\hspace{1mu}t^{n+1}\hspace{2mu}\partial\hspace{1mu}u^{2n+1}\hspace{2mu}\partial\hspace{1mu}v^m\hspace{1mu}}

こう。最高。

分母の次数を勝手に計算してほしくないときは、オプションで指定できる。

\diffp[a,b,c][N]{f(t,u,v)}{t,u,v}
\frac{\partial^{N}\hspace{1mu}f(t,u,v)}{\partial\hspace{1mu}t^a\hspace{2mu}\partial\hspace{1mu}u^b\hspace{2mu}\partial\hspace{1mu}v^c\hspace{1mu}}

微分される関数を外に出したいとき

アスタリスクをつける。

\diff*{\diff{f(x)}{x}}{x}

これで

\frac{d}{d\hspace{1mu}x}\frac{d\hspace{1mu}f(x)}{d\hspace{1mu}x}

こんなふうになる。

ある点での微分

$x=a$ のときの値を示すやつ。最後につければよい。

\diff[2]{f(x)}{x}[x=a]

これはこうなる。

\left.\frac{d^2\hspace{1mu}f(x)}{d\hspace{1mu}x^2}\right|_{x=a}

偏微分の周りにカッコを付ける

最後のカッコに何も入れないことで、偏微分全体をカッコで囲える。
これは上の $x=a$ できるやつが縦棒表記のときも有効。

\diffp{L}{q_i}-\diff*{\diffp{L}{\dot{q}_i}[]}{t}=0
\frac{\partial\hspace{1mu}L}{\partial\hspace{1mu}q_i}-\frac{d}{d\hspace{1mu}t}\left(\frac{\partial\hspace{1mu}L}{\partial\hspace{1mu}\dot{q}_i}\right)=0

みんな大好きオイラー=ラグランジュ方程式。

1 行表記

分母分子の間にスラッシュを入れると 1 行で出力してくれる。
インラインの場合などに便利。

\diffp[2,3]{F(x,y)}/{x,y}[x=a,y=b]
\left(\partial^5\hspace{1mu}F(x,y)/\partial\hspace{1mu}x^2\hspace{2mu}\partial\hspace{1mu}y^3\right)_{x=a,y=b}

ヤコビアン

\jacob コマンド。謎の機能。

\left|\jacob{x,y}{r,\theta}\right|
= \left|\begin{matrix}\cos\theta & -r\sin\theta \\ \sin\theta & r\cos\theta \end{matrix}\right|
= r
\left|\frac{\partial(x,y)}{\partial(r,\theta)}\right| = \left|\begin{matrix}\cos\theta & -r\sin\theta \\ \sin\theta & r\cos\theta \end{matrix}\right| = r

詳細な順序

diff コマンドは次のオプションが指定できる。

  • 1: テンプレートの名前
  • 2: 分子の関数を外に出すオプション(*
  • 3: 微分の次数
  • 4: 合計次数のオーバーライド
  • 5: 微分されるもの
  • 6: スラッシュ
  • 7: 微分する変数のリスト
  • 8: 右下の評価する点

全部使うと次のようになる。

\diff.p.*[n,m,l][p]{F(x,y,z)}/{x,y,z}[(x,y,z)=(a,b,c)]

これは次のようになる。

\left(\left(\partial^p/\partial\hspace{1mu}x^n\hspace{1mu}y^m\hspace{1mu}z^l\right)F(x,y,z)\right)_{(x,y,z)=(a,b,c)}

まとめ

diffcoeff パッケージでよい偏微分ライフを。

15
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
9