0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

時間微分と空間微分のためのコマンド

Last updated at Posted at 2021-02-24

時間微分と空間微分のためのコマンド

時間微分にニュートンの記法,空間微分にラグランジュの記法を使用する場合,\dot{f}f^\prime とするだろう.

しかしながら,時間の3階微分は\dddot{f},空間の3階微分はf^{\prime\prime\prime} とする必要がある.分かりづらい上に打つのも面倒だ.
そこで,時間微分(ドット) と空間微分(ダッシュ) をオプション引数から微分階数を指定できるコマンドを作成してみた.

これらは条件分岐と反復処理のみで作成しているので,比較的コードは単純になっています.場合によっては適宜修正を加えてください.

使用パッケージ

ifthen パッケージでは条件分岐と反復処理,xparse パッケージでオプション引数の追加を行っている.

これらのパッケージについては以下の記事に詳しい.

作成したコマンド

以下の2つのコマンドを作成した.

コマンド
時間微分 (time derivative) \tdv[arg]{function}
空間微分 (spacial derivative) \sdv[arg]{function}

arg には微分階数(整数) を指定する.この引数なしに使用することも出来るが,この場合には引数が1 と同じとなる.

整数を指定することになるが,0 以下の数を入れるとfunction のみが出力される.また,小数を挿入するとエラーを吐く.

tdv and sdv commands

時間微分はドットを繰り返すのみになっている.あまり高階の時間微分には適していないだろう.
空間微分は3階微分まではダッシュ,4階以上の微分では(n) で示すようになっている.

コード

プリアンブルには上で示したパッケージを以下のように読み込んでおく.

\usepackage{ifthen}
\usepackage{xparse}
\usepackage{amsmath}

これらは独立して定義しているので,それぞれを一方のコードのみでも使用可能となっている.

時間微分と空間微分のためのコマンド コードまとめ (折りたたみ)

いくつかコメントアウトしている.適宜コメントアウトを解除してください.

\newcounter{CDots}
\NewDocumentCommand\tdv{ o m }
{
  \IfNoValueTF{#1}{\dot{#2}}
  {
    \ifthenelse{#1=1}{\dot{#2}}
    {
      \ifthenelse{#1=2}{\ddot{#2}}
      {
        \ifthenelse{#1=3}{\dddot{#2}}
        {
          \ifthenelse{#1=4}{\ddddot{#2}}
          {
            \overset{
              \setcounter{CDots}{0}
              \whiledo{\value{CDots}<#1}{
                .
                \addtocounter{CDots}{1}}
            }{#2}
  }}}}}
}
% \let\accentdot\dot
% \let\dot\tdv
\newcounter{CPrims}
\NewDocumentCommand\sdv{ o m }
{
  \IfNoValueTF{#1}
  {#2^{\prime}}
  {
    #2^{
      \ifthenelse{#1<4}
      {
        \setcounter{CPrims}{0}
        \whiledo{\value{CPrims}<#1}{
          \prime
          \addtocounter{CPrims}{1}}
      }
      {(#1)}}
  }
}
% \NewDocumentCommand{\dash}{}{\sdv}

時間微分

\newcounter{CDots}
\NewDocumentCommand\tdv{ o m }
{
  \IfNoValueTF{#1}{\dot{#2}}
  {
    \ifthenelse{#1=1}{\dot{#2}}
    {
      \ifthenelse{#1=2}{\ddot{#2}}
      {
        \ifthenelse{#1=3}{\dddot{#2}}
        {
          \ifthenelse{#1=4}{\ddddot{#2}}
          {
            \overset{
              \setcounter{CDots}{0}
              \whiledo{\value{CDots}<#1}{
                .
                \addtocounter{CDots}{1}}
            }{#2}
  }}}}}
}

以下を続けて挿入すれば,元の\dot\accentdot に代えて\dot\tdv に置き換えることが出来る.
これによって,オプション引数を加えた\dot とすることが出来る.

\let\accentdot\dot
\let\dot\tdv

オプション引数のない\dot も使用できるので,\dot を使用したパッケージ等と衝突することは無いと思われる.

空間微分

\newcounter{CPrims}
\NewDocumentCommand\sdv{ o m }
{
  \IfNoValueTF{#1}
  {#2^{\prime}}
  {
    #2^{
      \ifthenelse{#1<4}
      {
        \setcounter{CPrims}{0}
        \whiledo{\value{CPrims}<#1}{
          \prime
          \addtocounter{CPrims}{1}}
      }
      {(#1)}}
  }
}

以下を追加すれば,\sdv\dash とすることも出来る.

\NewDocumentCommand{\dash}{}{\sdv}

記号の定義

ドットやダッシュを利用する際には,微分操作と記号を一致させておく必要がある.
これを簡便にするコマンドも作成しておいた.

\NewDocumentCommand{\deftdv}{ o D(){\mathrm{d}} m O{\coloneqq} }%
{%
  \dot{\IfNoValueTF{#1}{\phantom{X}}{#1}}%
  #4%
  \IfNoValueTF{#1}{\frac{#2}{#2 #3}}{\frac{#2}{#2 #3}#1}%
}
\NewDocumentCommand{\defsdv}{ o D(){\mathrm{d}} m O{\coloneqq} }%
{%
  {\IfNoValueTF{#1}{\phantom{X}}{#1}}^\prime%
  #4%
  \IfNoValueTF{#1}{\frac{#2}{#2 #3}}{\frac{#2}{#2 #3}#1}%
}

以下のように使用する.

\defxdv[function](diff){dependent variable}[definition symbol]

オプションとして以下の3つを変更することが出来る.

  • 関数の挿入
  • 微小量d の変更(デフォルト:\mathrm{d})
  • 定義記号の変更(デフォルト:\coloneqq)

以下に使用例を紹介しておく.

使用例1
: 時間微分を"t", 空間微分を"x" で行う.

\begin{equation*}
  \deftdv{t},
  \quad
  \defsdv{x}
\end{equation*}

def tdv-sdv1

これを基本的な使用方法として想定している.

使用例2
: 関数を挿入する.

\begin{equation*}
  \deftdv[F]{t},
  \quad
  \defsdv[G]{x}
\end{equation*}

def tdv-sdv2

function を挿入する場合もあるだろう.

使用例3
: 微小量d\partial に変更,\coloneqq\equiv に変更する.

\begin{equation*}
  \deftdv[F](\partial){\tau}[\equiv],
  \quad
  \defsdv[G](\partial){\xi}[\equiv]
\end{equation*}

def tdv-sdv3

少し自由度高めに作成した.

まとめ

ifthen パッケージとxparse パッケージを利用すれば何でも出来そう.(TeX /LaTeX にプリミティブなコマンドはなるべく使用しない強いお気持ち)

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?