math delimiter - yarakos95/LaTeX-for-math GitHub Wiki

括弧と垂直棒をコマンドで表示させたい

コマンドで表示させなくても,直接的に(, )| を打つことが出来るだろうと思われるだろう.しかし,場合によっては直接的に打たない方が良い場合がある.[^paren]

[^paren]: empheq パッケージでは括弧をコマンドで表現する必要があるようだ.

括弧

通常,括弧は丸括弧 (, )と角括弧 [, ] を利用することが多い.この内,角括弧はamsmath で定義されているが,丸括弧は定義されていない.しかし,mathtools では丸括弧がコマンドとして定義されている.

括弧の種類 ひだり みぎ
丸括弧 (Parenthesis) (, ) \lparen \rparen mathtools
波括弧 (Brace) {, } \{ \} $\rm\LaTeX$
角括弧 (Bracket) [, ] \lbrack \rbrack amsmath
山括弧 (Angle bracket) <, > \langle \rangle $\rm\LaTeX$

垂直棒 (Vertical bar)

絶対値やノルムを表すには|\| を用いられることがあるが,これは数学的な意味に応じた記号を選んでいることにならない(らしい).したがって,これに代わる垂直棒がamsmath パッケージでは提供されている.

ひだり みぎ 単体で用いる
1本の垂直線 \lvert \rvert \vert
2本の垂直線 \lVert \rVert \Vert

左側の垂直線と右側の垂直線は異なるコマンドで定義されているが,特に対応関係がなさているわけではなく,独立して出力することが出来る.

括弧(デリミタ)のサイズを手動で調整したい

数式に括弧を付ける場合には\left\right を用いて自動的にサイズを生成させることが多いだろう.しかし,この方法には2つの制限がある.

  • デリミタで囲まれる最大の大きさに対応するものを機械的に作ってしまうこと
  • サイズの変更の範囲が連続的でなく,離散的な変化になることがあること(3pt 毎に変化するようだ)

すなわち,思ったよりも大きいデリミタが生成されることがあるということである.

デリミタが上手く自動調整されない例 (折りたたみ)

初めに考えられるような状況は,総和作用素の上下に範囲を指定する添え字を置くことのようだ.

\left[
    \sum_i a_i\Bigl\lvert\sum_j x_{ij}\Bigr\rvert^p
\right]^{1/p}, 
\biggl[
    \sum_i a_i\Bigl\lvert\sum_j x_{ij}\Bigr\rvert^p
\biggr]^{1/p}

math-tall.png

あるいは,括弧内に括弧が挿入されている場合である.

\left((a_1 b_1) - (a_2 b_2)\right) \times 
\left((a_2 b_1) + (a_1 b_2)\right)\\
\shortintertext{Compare parenthesis size}
\bigl((a_1 b_1) - (a_2 b_2)\bigr) \times 
\bigl((a_2 b_1) + (a_1 b_2)\bigr)

math-bracket.png

手動的にデリミタのサイズを調整する方法は以下のようなコマンドのセットがある.

table-math-bracket.png

これらのデリミタのサイズを調整するセットは,\left\right を除いて対応関係を持っていない.すなわち,単独で使用することが出来る.

対応するデリミタを定義したい

括弧や垂直棒は,数式を囲う場合がよくある.手動か自動かを問わずとも,一つ一つにサイズ調整のコマンドをデリミタに付与していくのは煩雑である. 新たなコマンドとして定義してしまった方が良い.

<

amsmath での方法(折りたたみ)

amsmath パッケージでは以下のような方法による定義を紹介している..

\providecommand{\abs}[1]{\lvert #1\rvert}
\providecommand{\norm}[1]{\lVert #1\rVert}

上のようにすることで,\abs, \norm が定義される.しかし,このような定義を用いても,デリミタのサイズを調整することは出来ない.

定義コマンド内で\left~\right で対応関係を採っても良いのだが,それでは大きすぎる場合などが生じた際に手動で調整するには新たにコマンドを定義する必要が生じる. そこで,mathtools で定義されている\DeclarePairedDelimiter を用いよう.これは,\providecommand よりも対応するデリミタに対してフレキシブルなコマンドを定義することが出来る. <

mathtools では,対応するデリミタを定義する\DeclarePairedDelimiter をサポートしている.このコマンドで定義されたコマンドには,以下のような特徴がある.

  • * や引数を付けない場合には,\providecommand で定義されたコマンドと同様の結果を得る
  • * 付きでは,\left\right を用いたサイズが自動調整されたデリミタとなる
  • オプションで引数を付けることで,手動調整をすることが出来る

引数には,\big, \Big, \bigg, \Bigg を使うことが出来る.

以下のようにコマンドを組む.

\DeclarePairedDelimiter{<command>}{<left_delimiter>}{<right_delimiter>}

例 : 絶対値は以下のように定義する

\DeclarePairedDelimiter\abs{\lvert}{\rvert}

これによって定義された\abs は,以下のような結果を得る.

    \abs{\frac{a}{b}}, \quad    % そのまま
    \abs*{\frac{c}{d}}, \quad    % 自動調整
    \abs[\Bigg]{\frac{e}{f}}.    % \Bigg オプション付き

abs.png

このコマンドは,既に定義されているコマンドに対して上書きの機能はないようだ.したがって,physics パッケージ[^physics]等の数式を簡便に打つためのパッケージを利用している際には注意が必要である.

[^physics]: physics.sty | CTANから.使い方に関しては,「数式をもっと楽に書ける TeX の physics パッケージまとめ - Qiita」に詳しい.

\documentclass[uplatex,11pt,a4paper,dvipdfmx]{jsreport}
\usepackage{amsmath}
\usepackage{mathtools}
\DeclarePairedDelimiter\abs{\lvert}{\rvert}    % 先に定義する
\usepackage{physics}    % physics には\abs が定義されている
\begin{document}
\[
    \abs{\frac{a}{b}}, \quad    % physics では自動調整
    \abs*{\frac{c}{d}}, \quad    % physics ではそのまま
    \abs[\Bigg]{\frac{e}{f}}.    % physics では\Bigg オプション付きは定義されていない
\]
\end{document}

abs-example1.tex の場合,\DeclarePairedDelimiter で定義した\abs がphysics によって上書きされるため,\abs は自動調整,\abs* はデフォルトサイズ,\abs[\Bigg] はタイプセットエラーになる.

このようになることを避けるためには,\DeclarePairedDelimiter で定義するコマンド名を異なる名前にするか,physics パッケージを利用しないか,になるだろう.

\documentclass[uplatex,11pt,a4paper,dvipdfmx]{jsreport}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{physics}    % physics には\abs が定義されている
\DeclarePairedDelimiter\abs{\lvert}{\rvert}    % 後に定義する
\begin{document}
\[
    \abs{\frac{a}{b}}, \quad
    \abs*{\frac{c}{d}}, \quad
    \abs[\Bigg]{\frac{e}{f}}.
\]
\end{document}

abs-example2.tex ではphysics で\abs が定義されているため,新たに定義することが出来ない.(タイプセットエラーになる)

<

Extension DeclarePairedDelimiter(折りたたみ)

少し発展的なコマンドの利用方法を紹介しておくが,パッケージガイドを読んでいてもいま一つ理解できていないので,紹介程度にとどめておく. (cf: mathtools p.26, §3.6 Paired delimiters)

\DeclarePairedDelimiter では,一つの数式しか引数として取り込むことが出来ない.そこで,\DeclarPairDlimiterX を用いよう.

\DeclarePairedDelimiterX{<cmd>}[1]{<left_delim>}{<right_delim>}{#1}

例 : ディラックのブラケット記法

\DeclarePairedDelimiterX\innerp[2]{\langle}{\rangle}{#1,#2}
\DeclarePairedDelimiterX\braket[3]{\langle}{\rangle}%
{#1\,\delimsize\vert\,\mathopen{}#2\,\delimsize\vert\,\mathopen{}#3}

上のように定義することで,以下のような結果を得る.

    \innerp*{A}{ \frac{1}{2} } \quad
    \braket[\Big]{B}{\sum_{k} f_k}{C}

Bracket.png

しかしながら,ディラックのブラケット記法を定義するのであれば,braket パッケージ[^braket]を用いた方が平易なように思われる.(ちなみに,physics パッケージでもブラケット記法のコマンドは定義されている.)

[^braket]: braket.sty | CTAN から.使い方に関しては「TeX でディラックのブラケットを書く - Qiita」に詳しい.

この場合でももちろんphysics パッケージとの併用と同様の結果が生じる可能性がある. <

⚠️ **GitHub.com Fallback** ⚠️