添字とスペーシング

数式の見た目を決める細部のうち、もっとも使う二つが 添字(上付き・下付き)スペーシング です。添字は ^_ のたった二文字で書けますが、波括弧の付け方ひとつで結果が変わります。スペーシングは、TeX が自動で入れる空きに対して、書き手が \, などで微調整するための仕組み。このページでは両者の規則と、そのときどきの「なぜ」を、確認できた事実だけにしぼって見ていきます。

上付き・下付き文字

数式モードでは、^上付き(superscript)_下付き(subscript) を作ります。たとえば x^2 は x の右肩に 2、a_n は a の右下に n が付きます。この二文字は地の文では特別な意味を持たないので、添字は必ず $ ... $\[ ... \] などの数式モードの中で書きます。

大切な規則が一つあります。^_直後の「1 トークン」だけ を添字にします。トークンとは、1 文字、あるいは 1 つの命令です。だから 2 文字以上をまとめて上げ下げしたいときは、**波括弧 { } でくくって 1 つの塊にする** 必要があります。

latex
$x^{10}$    % 10 全体が上付き:x の右肩に「10」
$x^10$      % 1 だけが上付き、0 は本行の大きさ:x¹0
$a_{ij}$    % ij をまとめて下付き
$2^{n+1}$   % n+1 全体が指数

つまり x^{10} は「10」全体が指数になりますが、波括弧を落とした x^10「1」だけが上付きになり、「0」は通常の大きさで本行に残ります(x¹0 のような並び)。誤りではなくコンパイルは通ってしまうので、かえって気づきにくい落とし穴です。指数や添字が 1 文字でないときは、迷わず波括弧で囲む癖をつけると安全です。

一つの記号に 上付きと下付きを同時に 付けることもできます。x_i^2 でも x^2_i でも、順序によらず LaTeX が正しく重ねて配置します。さらに添字を 入れ子(多段) にもできますが、ここでも各段で波括弧が要ります。x^{y^z} は z を y の指数とし、その y^z 全体を x の指数とします。波括弧を省いた x^y^z「Double superscript」エラー になり、組版が止まります。下付きの x_{i_0} も同様です。

添字を記号の に付けたいとき(同位体表記の左上・左下など)は、**空の波括弧 {}** を土台に使います。{}_{Z}^{A}X のように書くと、最初の {} が「何もない要素」として添字の取り付け先になり、A・Z を X の左肩・左下へ置けます。

微分の プライム記号 は、アポストロフィ ' で手軽に書けます。f'(x) は f の右肩にプライムが付き、f''(x) は二つ並びます。これは内部的に ^{\prime} の省略形で、f^{\prime} と書いても結果は同じです。プライムは自動で上付きになるので、f^' のように自分で ^ を付ける必要はありません。

\limits と \nolimits — 大型作用素の添字の位置

\sum、積分 \int、極限 \lim、総乗 \prod のような 大型作用素 では、^_ で付けた添字を 「記号の上下」に置くか「右側」に置くか という選択が生じます。たとえば和の上下に付く添字は「上端・下端の値」を表すので、これを リミット(limits) と呼びます。

既定の位置は 数式のスタイル で決まります。別行立て(display style)では、\sum_{i=1}^{n} の添字は記号の 真上・真下 に中央揃えで置かれます。一方、本文中(inline/text style)の $\sum_{i=1}^{n}$ では、同じ添字が 右側に小さく 並びます。これは行間を押し広げないための配慮です。\lim など多くの作用素も同じ挙動です。

\int だけは例外で、**定義に \nolimits が組み込まれて いるため、別行立てでも添字は 右側** に付きます(積分の上下に限界を置くと縦に間延びして見えるためです)。この既定を上書きするのが次の二つです。\limits は直前の作用素の添字を 上下 に、\nolimits右側 に強制します。

latex
\[ \sum_{i=1}^{n} i           % display:i=1 が下、n が上に中央配置\]
\[ \int_{0}^{1} f(x)\,dx     % \int は既定で 0,1 を右側に\]
\[ \int\limits_{0}^{1} f(x)\,dx  % 0,1 を上下に置く\]
$\displaystyle\sum_{i=1}^{n} i$  % 本文中でも上下配置を強制

スタイルそのものを切り替える手もあります。本文中で和の添字を上下に置きたいなら $\displaystyle\sum_{i=1}^{n}$、逆に別行立てで右側に寄せたいなら \textstyle を添えます。\limits / \nolimits が「その作用素だけ」を狙い撃ちするのに対し、\displaystyle / \textstyle以降の数式全体の体裁 を変える、という違いがあります。

数式中のスペーシングと mu

数式モードでは、TeX が記号の種類(演算子・関係子など)に応じて空きを 自動で 入れます。たとえば a+b+ の左右や、a=b= の左右の空きは書き手が指定したものではありません。とはいえ自動では足りない/多すぎる場面があり、そこを手で調整するのが スペーシング命令 です。

これらの幅は mu(math unit、数式単位) で定義されています。mu は 1/18 em で、em は「現在の数式記号フォントの大きさ」(おおむね大文字 M の幅)です。したがって 1 em = 18 mu。フォントサイズに比例する相対単位なので、文字を大きくすれば空きも同じ比率で広がります。代表的な命令と幅は次のとおりです。

命令使いどころ
\,3 mu(細space、= 1/6 em)微分の dx の前、\sqrt{2}\,x の区切りなど最も多用
\:4 mu(中space)やや広めに離したいとき(\medspace と同じ)
\;5 mu(太space)広めの区切り(\thickspace と同じ)
\!−3 mu(負の細space)空きを詰める。\, のちょうど逆向き
\quad18 mu(= 1 em)式と但し書き、場合分けの条件などを大きく離す
\qquad36 mu(= 2 em)\quad の倍。さらに大きく離す

最もよく使うのは細い空き \, です。典型例が積分の **被積分関数と dx の間** で、\int f(x)\,dx と書くと、f(x) と dx がわずかに離れて読みやすくなります(\, を省くと f(x)dx がくっついて見えます)。\quad\qquad は、数式とその但し書きを離す(たとえば「式 (n ≥ 1 のとき)」)といった、まとまった空きに向きます。

逆向きの \! は空きを 詰める ための負の空きです。二重積分を \int\!\!\int と書いて二つの積分記号を近づける、といった調整に使われます。なお、\ のあとに空白を一つ置く \ (制御綴り空白)は、数式中でも 地の文と同じ語間 の空きを入れます。

\phantom と \mathstrut — 見えない箱で高さ・幅をそろえる

組版では「場所だけ確保して、中身は見せない」という調整がしばしば要ります。これを担うのが \phantom の仲間です。\phantom{...} は、引数を 組んだときと同じ高さ・深さ・幅 を持つ、中身が空の見えない箱を作ります。文字は出ませんが、その分の空きはきっちり残ります。

寸法のうち一方向だけを取り出す版もあります。\hphantom{...}幅だけ を持ち、高さ・深さはゼロ。\vphantom{...} は逆に 高さ・深さだけ を持ち、幅はゼロです。つまり \vphantom は「縦の高さは確保したいが、横には場所を取りたくない」ときに使います。

具体例として、添字の入れ子で高さがそろわない場合を考えます。下の二項を並べると、右側は 3^{3^{3^j}} という指数の塔が高く、TeX は和の本体をその分だけ下げて配置します。すると左右の \sum の縦位置がずれます。左側に \vphantom{3^{3^{3^j}}} を仕込むと、見えないまま右と同じ高さ を確保でき、二つの和の高さがそろいます。

latex
\[
  \sum_{j \in \{0,\ldots,10\} \vphantom{3^{3^{3^j}}}}
  \sum_{i \in \{0,\ldots,3^{3^{3^j}}\}} i \cdot j
\]

よく似た用途の \mathstrut(マスストラット)は、\vphantom( として定義された 専用の見えない支柱(ストラット) です。すなわち **開き括弧 ( と同じ高さ・深さ** を持ち、幅はゼロ。引数を取らず、置くだけでその位置に括弧 1 文字分の縦の余白を確保します。\sqrt{a}\sqrt{a^2} のように高さの違う要素を並べたとき、各引数の頭に \mathstrut を入れると根号の高さがそろい、列がきれいに見えます。

latex
$\sqrt{\mathstrut a}\;\sqrt{\mathstrut a^2}\;\sqrt{\mathstrut b}$
% 各 \sqrt の中身が同じ高さになり、根号の天井がそろう

まとめると、**幅をそろえたいなら \hphantom高さをそろえたいなら \vphantom\mathstrut両方なら \phantom** が基本の使い分けです。いずれも「見えない箱で寸法だけを操る」という同じ発想に立っています。