大型演算子の取り扱い
積分記号や総和記号などの大型演算子では,ほとんどの場合で上限や下限を記述する.
これについて,いくつかまとめておきたい.
この記事ではamsmath を利用することを標準とし,mathtools を発展的に利用するものとします
○ 上限と下限の位置を変更したい
ディスプレイスタイルの数式における大型演算子にはlimits 型とnolimits 型の2つがある.1
型 | 積分記号 | 積分以外の記号 |
---|---|---|
limits 型 | ||
nolimits 型 |
これをamsmath のオプションで設定する方法と手動で変更する方法の2つがある.
以下の表にあるオプションをプリアンブルで設定することで利用できる.
\usepackage[intlimits]{amsmath}
Option | 積分記号 | 積分以外の記号 |
---|---|---|
sumlimits (デフォルト) | ||
nosumlimits | ||
intlimits | ||
nointlimits (デフォルト) |
この他のamsmath パッケージオプションについては以下の記事に詳しい.
amsmath とmathtools のパッケージオプション - Qiita
■ 手動で個々に変更したい
コマンド | |
---|---|
右側から上下に変更する | \limits |
上下から右側に変更する | \nolimits |
% amsmath オプションはsumlimits(デフォルト)
\begin{equation*}
\int\limits^\infty_0, \qquad % インテグラルの上下に
\sum\nolimits_X % 総和記号の右側に
\end{equation*}
■ limits とnolimits を両方同時に利用したい
cf. The amsmath Package, 7.2 The \sideset command
上のようにしたい場合には\sideset
を使おう.
\sideset{}{^A}\sum_{i > 0}^N A_i
\sideset
の仕様は以下のようになっている.
\sideset{^1_2}{^3_4}\sum
このほかにもmathtools から提供されている\mathclap
や\smashoperator
を用いることで同様の結果を得られるようだがここでは紹介しない.
○ 長い添え字をコンパクトにしたい
条件を指定するために非常に長い添え字で条件を書く場合がある.
\int_{0 \le x < 10, 0 \le y < 10, 0 \le z < 10}
\mathrm{d}x \mathrm{d}y \mathrm{d}z \, f(x,y,z)
\sum_{0 \le i \le m, 0 < j < n}
P(i,j)
このようにしたとき,大型演算子の左右に大きな空白が生じてしまい見た目に良くない.また,空白が非常に大きい場合には,タイプセットミスが生じているのではないかと誤解を招く可能性もある.
そこで,以下の2つの方法でコンパクトにしてしまおう.2
■ substack を使う
cf. The amsmath Package, §7.1 Multiline subscripts and superscripts
amsmath から提供されている\substack
を使って改行してしまおう.
\int_{\substack{
0 \le x < 10 \\
0 \le y < 10 \\
0 \le z < 10
}}
\mathrm{d}x \mathrm{d}y \mathrm{d}z \,
f(x,y,z)
\sum_{\substack{
0 \le i \le m \\
0 < j < n
}}
P(i,j)
積分に関してはlimits 型に変更した方がよりきれい見えるだろう.
\int\limits_{\substack{
0 \le x < 10 \\
0 \le y < 10 \\
0 \le z < 10
}}
\mathrm{d}x \mathrm{d}y \mathrm{d}z \,
f(x,y,z)
■ smashoperator を使う
cf. The mathtools Package, §3.1.3 Smashing an operator
mathtools から提供されている\smashoperator
を使ってスペースを詰めよう.
\smashoperator[<option>]{
<operator with limits> % ex. \int_0^\infty
}
オプションは以下のようになっている.
オプション | 詰まる場所 |
---|---|
オプションなし | 左右両側 |
r |
みぎ |
l |
ひだり |
\begin{equation*}
V = \sum_{1 \le i \le j \le n}^\infty V_{ij} , \qquad
X = \smashoperator{\sum_{1 \le i \le j \le n}^\infty} X_{ij} , \qquad
Y = \smashoperator[r]{\sum_{1 \le i \le j \le n}^\infty} Y_{ij} , \qquad
Z = \smashoperator[l]{\sum_{1 \le i \le j \le n}^\infty} Z_{ij} .
\end{equation*}
積分記号であっても同様の結果を得る.しかし,オプションでintlimits にしていなくても強制的にlimits 型になるので注意が必要.
そこで,\substack
と併用すると良いのかもしれない.(\substack
ではlimits 型にしている方が綺麗だった)
\smashoperator[r]{
\int_{\substack{
0 \le x < 10 \\
0 \le y < 10 \\
0 \le z < 10
}}
}
\mathrm{d}x \mathrm{d}y \mathrm{d}z \,
f(x,y,z)
また,nosumlimits のオプションを有効にしていてもlimits 型のまま\smashoperator
が有効になる.
個人的には,右側を詰めるのは良いがそれ以外はあまり綺麗に思えない.
使い方には注意しておきたい.
○ 積分記号いろいろ
\int
以外にも積分記号はいくつかある.
- 多重積分
以下の4つが挙げられる.
\iint_A f(x,y) \mathrm{d}x \mathrm{d}y, % 2重積分
\iiint_A f(x,y,z) \mathrm{d}x \mathrm{d}y \mathrm{d}z, % 3重積分
\iiiint_A f(t,x,y,z) \mathrm{d}t \mathrm{d}x \mathrm{d}y \mathrm{d}z, % 4重積分
\idotsint_A f(x_1 \cdots x_n) \mathrm{d}x_1 \cdots \mathrm{d}x_n, % 多重積分
i
の数だけインテグラルが増やされる単純なものになっている.
もしも,5重積分を作りたい場合には,\!
でインテグラルの間隔を詰めると良いだろう.
\newcommand{\intfive}{%
\mathop{\int\!\!\!\int\!\!\!\int\!\!\!\int\!\!\!\int} %
}
- 周回積分
\oint_C \mathrm{d}z \frac{1}{z}
■ esint パッケージを利用する
esint パッケージ3では,積分記号を新たに提供している.
読み込みは必ずamsmath の後にする.
また,積分記号に関してamsmath をオーバーロードする形を採るので,積分記号に関するオプション設定はesint パッケージ側で行う必要がある.(amsmath 側で行っても反映されない)
\usepackage{amsmath} % 積分記号に関するオプションは無効
\usepackage[intlimits]{esint} % intlimits or nointlimits(default)
以下の積分記号を使用できる.
○ 大型演算子を定義したい
\mathop
を用いることで大型演算子と同じ取り扱いをしてくれるようになる.ただし,数学シンボルのサイズは変更できない.
例 :
E
という大型演算子を新たに定義する.
\newcommand{\opE}{\mathop{E}} % E をOperator クラスにしている
\begin{equation*}
\opE^\infty_0
\end{equation*}
これでE
が大型演算子\opE
として利用できるようになった.
しかし,この大型演算子はnosumlimits 等のamsmath のオプションを受け付けないようだ.
参考
- fonts - which package for \oiint symbol - TeX - LaTeX Stack Exchange
- math mode - What are the LaTeX codes for clockwise and counter-clockwise integrals (∱ and ⨑)? - TeX - LaTeX Stack Exchange
-
$
で囲うようなテキストスタイルではいずれもnolimits 型になる. ↩ -
条件指定に非常に長い数式を用いるのであれば,"条件$\mathcal{A}$は~~" と宣言しておいて,
\int_{\mathcal{A}}
とすれば良いようにも思う.ただし,計算中に条件を変更する場合には条件をあからさまにしておいた方が記述しやすいだろう.適宜考える必要がある. ↩ -
esint.sty | CTAN から. ↩