amsmath とmathtools のパッケージオプション

# amsmath とmathtools のパッケージオプション

amsmath とmathtools を使う際に，数式に対していくつかのオプションを課すことが出来る．把握しておこう．

## ! amsmath パッケージのオプション

### ■ オプションの使い方

これらのパッケージオプションのいずれかを使用するには，`\usepackage` コマンドのオプション引数を入れる．以下のようにして，オプション名を入れる．

```latex
\usepackage[intlimits]{amsmath}
```

AMS ドキュメントクラスと，amsmath が読み込まれているクラスでは，必要なオプションは`\documentclass` に以下のように特定する．

```latex
\documentclass[intlimits,tbtags,reqno]{amsart}
```

jscalasses やBXjscls などではamsmath を読み込まないので，これらを使用する際には無視してよい．

### ■ mathtools との併用

> **cf.** **The mathtools Package, §2 Package loading**

mathtools はamsmath を自動的に読み込むため，以下のようにamsmath のオプションを設定することも可能だ．

```latex
\usepackage[fleqn,tbtags]{mathtools}
```

これは以下と同様である．

```latex
\usepackage[fleqn,tbtags]{amsmath}
\usepackage{mathtools}
```

しかし，他のパッケージも使用することを思えば，明示的に読み込んでおいた方が良いだろう．


## ○ 式番号の位置

デフォルトでは右側に式番号を置くようになっている．

|        オプション        | 説明               |
| :----------------------: | :----------------- |
| `reqno` <br>(デフォルト) | 数式番号を右に置く |
|         `leqno`          | 数式番号を左に置く |


## ○ split 環境における式番号の位置

split 環境での式番号の出力場所を指定する．

|             オプション              | 説明                                                                   |
| :---------------------------------: | :--------------------------------------------------------------------- |
|    `centertags` <br>(デフォルト)    | split 環境に含まれる数式の高さの中央に配置する                         |
| `tbtags` <br>("Top-or-bottom tags") | 式番号が右側のときは垂直最下，式番号が左側のときは垂直最上に配置される |

おりたたみにサンプルを置いておく．

<details>
<summary>Sample (折りたたみ)</summary><div><br>

式の垂直中央に式番号が配置される．

![centering](https://i.gyazo.com/7b4001fea9e86f45760ae200aa8c41bb.png)

----------

式の垂直最下に式番号が配置される．

![tbtags](https://i.gyazo.com/c0378b499f29962d33649e667b235720.png)

----------

式の垂直最上に式番号が配置される．
また，`leqno` によって左側になっている．

![tbtags+leqno](https://i.gyazo.com/e19d92b1536fb22f050592d795e56e49.png)

</div></details>

## ○ 数式の配置


| オプション | 説明                                                               |
| :--------: | :----------------------------------------------------------------- |
|  `fleqn`   | 数式の配置を文章幅の左右中央ではなく，左から一定の字下げの後で行う |

## ○ 総和記号 / 積分記号 等の大型演算子

ディスプレイスタイルの数式における総和記号や積分記号などの上限，下限を指定するような記号に対するオプション．

|           オプション           |    積分記号    | 積分以外の記号 |
| :----------------------------: | :------------: | :------------: |
|  `sumlimits` <br>(デフォルト)  | ![nointlimits] |  ![sumlimits]  |
|         `nosumlimits`          | ![nointlimits] | ![nosumlimits] |
|          `intlimits`           |  ![intlimits]  |  ![sumlimits]  |
| `nointlimits` <br>(デフォルト) | ![nointlimits] |  ![sumlimits]  |

`nointlimits` と`sumlimits` は同一の出力になる．

[intlimits]:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/7d283e14-2e71-5ac1-d80e-9983669dbe16.png
[sumlimits]:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/6edc46c0-0771-d662-e161-7158a35bdb7c.png
[nointlimits]:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/4bd934d1-baf6-ba8e-2096-c2a4c719aef9.png
[nosumlimits]:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/e0ed36d2-8bc8-27e9-b628-a0789d36b45e.png

### ■ 手動で個々に変更したい

|  コマンド   | 説明                   |
| :---------: | :--------------------- |
|  `\limits`  | 右側から上下に変更する |
| `\nolimits` | 上下から右側に変更する |

```latex
% amsmath オプションはsumlimits(デフォルト)
\int\limits_0^\infty,  % インテグラルの上下に
\sum\nolimits_X  % 総和記号の右側に
```

<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/4e9f2ccd-1a38-7b94-d1fa-69fe44b4415c.png" width = "60%" alt = "limit-nolimit">

### ■ limits とnolimits を両方同時に利用したい

> **cf.** **The amdmath Package, §7.2 The \sideset command**

下の図のようにしたい場合には`\sideset` を使おう．

```latex
\sideset{}{^A}\sum_{i > 0}^N A_i
```

<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/b7c02573-b451-0f94-10ab-c0b1d98a44a8.png" width = "60%" alt = "sideset-example">

`\sideset` の仕様は以下のようになっている．

```latex
\sideset{^1_2}{^3_4}\sum
```

<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/2fa4e8f6-f4ce-8edc-a259-c128264fca72.png" width = "60%" alt = "sideset">

## ○ 演算子

amsmath では事前に以下のような演算子が定義されている．

![amsmathoperator]

[amsmathoperator]: https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/21541c17-5014-9b07-5aee-94ede4c71ca7.png

これらは通常，下側に下付き文字を配置する(namelimits 型)．これを変更するオプションを紹介する．
ただし，`\log` はこのオプションの影響を受けない．

|          オプション           |     演算子      |
| :---------------------------: | :-------------: |
| `namelimits` <br>(デフォルト) |  ![namelimits]  |
|        `nonamelimits`         | ![nonamelimits] |

[namelimits]:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/e155a761-a2e3-94c5-9ec5-70d48c69b183.png
[nonamelimits]:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/2b185c5f-81a8-6756-77fe-7945f5b28e2e.png

新たにこれらの演算子を定義したい場合には`\DeclareMathOperator` を利用する．
一次的に利用したい場合には`\operatorname` を利用する．

|      namelimits 型      |    nonamelimits 型     |
| :---------------------: | :--------------------: |
| `\DeclareMathOperator*` | `\DeclareMathOperator` |
|    `\operatorname*`     |    `\operatorname`     |

nonamelimits 型に定義した場合には`\log` と同様にパッケージオプションの影響を受けない．

たとえば，勾配(gradient) を演算子`\grad` として定義する場合には以下のようにする．

```latex
\DeclareMathOperator*{\grad}{grad}
```

`\grad` を定義せずに利用したい場合には，以下のようにする．

```latex
\operatorname*{grad}
```

## ○ aligned とgathered 環境

aligned と gathered 環境の左に空白を制御するための3つのオプションが追加された．

新しいデフォルトの振る舞いは，ほとんどの場合，環境に細い空白が追加されないようにすることを目的としている．既存の文章に対しては，`\!\begin{aligned}` とすることで，以前と同じような結果になる．

|                 オプション                  | 説明                                                  |
| :-----------------------------------------: | :---------------------------------------------------- |
| `alignedleftspaceyesifneg` <br>(デフォルト) | 環境が負の空白で調整されているときに限り`\,` を入れる |
|            `alignedleftspaceyes`            | 常に`\,` を aligned と gathered の左に入れる          |
|            `alignedleftspaceno`             | `\,` を aligned と gathered の左に入れない            |

2017年以前には，これらの構造の左側には空白が追加されてたが，右側には追加されていなかったようだ．これは実装したときの偶発的な機能であると思われており，通常，環境の先頭に`\!` を付けることで逐次修正していたようだ．

## ! mathtools パッケージのオプション

> **cf.** **The mathtools Package, §2.1 Special mathtools Options**

amsmath のバグ修正のみのようだ．これらのバグは修正されるべきバグなので，デフォルトのバグ修正を有効にしておいた方が良いと思われる．
以下で，どのようなバグを修正するのかを把握しておこう．

これらのバグは修正されるべきで，修正しないと言う場合は無いだろうという思いから，ムズカシイ名前になっているようだ．

### ■ amsmath のバグ修正1

> *cf.* [LaTeX バグデータベース](http://www.latex-project.org/cgi-bin/ltxbugs2html)より．AMS-LaTeX のバグレポート[\#3591][3591]，[\#3614][3614]

- `fixamsmath` (デフォルト)
- `donotfixamsmathbugs`

`オプションfixamsmath` (デフォルト)は，amsmath の2つのバグを修正する．

[3591]: https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=amslatex/3591&category=AMS+LaTeX&responsible=anyone&state=anything&keyword=&search=
[3614]: https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=amslatex/3614&category=AMS+LaTeX&responsible=anyone&state=anything&keyword=&search=

この2つのバグは，amsmath を`fleqn`, `leqno` の2つのオプションを同時に使用すると以下のような結果を得てしまうというものだ．


```latex
% In preamble
% \usepackage[leqno,fleqn]{amsmath}
% \usepackage[donotfixamsmathbugs]{mathtools}
\begin{flalign}
  a & = b, & c & = d, & e & = g \\
  A & = B, & C & = D, & E & = G
\end{flalign}
```

![donotfixamsmathbugs](https://i.gyazo.com/cf7ecfc355e33f5ad07fd5c4bfd00ca2.png)

何らかの理由でこれらのバグを修正したくない場合 (タイプミスなしで実行できる場合) は`donotfixamsmathbugs` オプションを追加する．


### ■ amsmath のバグ修正2

- `disallowspaces` (デフォルト)
- `allowspaces`

以下のようにした場合，次のような結果を得てしまっていた．

```latex
% In preamble
% \usepackage{amsmath}
% \usepackage[allowspaces]{mathtools}
\begin{equation}
  \begin{gathered}
    [p] = 100 \\
    [v] = 200
  \end{gathered}
\end{equation}
```

![allowspaces](https://i.gyazo.com/937aeece16dd6da610cf5bd6eaa84695.png)

このとき，`[p]` は意図せずに消えてしまう．これは，amsmath 内で`[p]` を引数だと判断して，`[c]` として判断したためである．(引数を付与するとこの現象はなくなる)

このバグ修正は"aligned", "gathered", "multlined", 拡張マトリックス環境に適応される．(あれ? "alignedat" 環境は?)


# 参考

- [amsmathパッケージユーザガイド (Version 2.1)](https://www.latex-project.org/help/documentation/amsldoc_jpn.pdf) [pdf]
- [User’s Guide for the amsmath Package (Version 2.1)](http://texdoc.net/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf) [pdf]
- [The mathtools package](http://ftp.jaist.ac.jp/pub/CTAN/macros/latex/contrib/mathtools/mathtools.pdf) [pdf]
- [syntax - How to use limits and nolimits together? - TeX - LaTeX Stack Exchange](https://tex.stackexchange.com/questions/106219/how-to-use-limits-and-nolimits-together)

# 追記

- 2020/09/15 : 「[limits とnolimits を両方同時に利用したい](#-limits-とnolimits-を両方同時に利用したい)」を追加しました
- 2021/10/20 : いくつか画像を追加しました