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


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

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

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

■ オプションの使い方

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

\usepackage[intlimits]{amsmath}

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

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

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

■ mathtools との併用

cf. The mathtools Package, §2 Package loading

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

\usepackage[fleqn,tbtags]{mathtools}

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

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

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

○ 式番号の位置

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

オプション 説明
reqno
(デフォルト)
数式番号を右に置く
leqno 数式番号を左に置く

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

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

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

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


Sample (折りたたみ)

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


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


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

○ 数式の配置

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

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

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

オプション 積分記号 積分以外の記号
sumlimits
(デフォルト)
nosumlimits
intlimits
nointlimits
(デフォルト)

nointlimitssumlimits は同一の出力になる.

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

コマンド 説明
\limits 右側から上下に変更する
\nolimits 上下から右側に変更する
% amsmath オプションはsumlimits(デフォルト)
\int\limits_0^\infty,  % インテグラルの上下に
\sum\nolimits_X  % 総和記号の右側に

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

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

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

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

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

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

○ 演算子

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

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

オプション 演算子
namelimits
(デフォルト)
nonamelimits

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

namelimits 型 nonamelimits 型
\DeclareMathOperator* \DeclareMathOperator
\operatorname* \operatorname

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

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

\DeclareMathOperator*{\grad}{grad}

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

\operatorname*{grad}

○ aligned とgathered 環境

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

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

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

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

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

cf. The mathtools Package, §2.1 Special mathtools Options

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

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

■ amsmath のバグ修正1

cf. LaTeX バグデータベースより.AMS-LaTeX のバグレポート#3591#3614

  • fixamsmath (デフォルト)
  • donotfixamsmathbugs

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

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

% 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 オプションを追加する.

■ amsmath のバグ修正2

  • disallowspaces (デフォルト)
  • allowspaces

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

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

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

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

参考

追記