\widehat はどこまで伸びるのか——答えは「1.44 em まで」です。LaTeX の広い山形アクセントは cmex10 というフォントの 三つの字形しか持っておらず、10 pt 換算で幅 5.55557 pt・10.00002 pt・14.44447 pt。四つ目は存在しないので、\widehat{f(x+y+z)} のような長い式に載せると、帽子は途中で成長をやめて中央にちょこんと残ります。一方 \overline や \overbrace、\overrightarrow は罫線を継ぎ足して組むため いくらでも伸びます。式の上下に何かを載せる道具は、この「伸びるか、伸びないか」で二つに分かれ、選択を誤ると見た目が壊れる——このページはその境目を測定値で示し、\overset/\stackrel/\xrightarrow の使い分けまで通します。
伸びるか、伸びないか — \hat と \widehat と \overline の違い
三つは どこから字形を取ってくるか が違います。fontmath.ltx を見ると \hat は operators(本文用ローマン体)の一文字ぶんのアクセント、\widehat は largesymbols(cmex10)の可変幅アクセント、\overline は文字ではなく 罫線 です。だから \hat{x} は一文字ぶんで固定、\widehat{xy} は三段階のうち収まる最大のものが選ばれ、\overline{xyz} は中身の幅ぴったりに引かれます。実測では、幅 60 pt の材料に \overline をかけると線もきっちり 60 pt。同じ材料に \widehat をかけても、帽子は 14.44447 pt のままです。
| 分類 | 命令 | 振る舞い |
|---|---|---|
rules & braces | \overline \underline \overbrace \underbrace | 罫線を継ぎ足すので 無制限に伸びる |
extensible arrows | \overrightarrow \overleftarrow \overleftrightarrow | \rightarrowfill で軸を継ぐので 無制限に伸びる |
wide accents | \widehat \widetilde | 三つの字形のみ。14.44447 pt で打ち止め |
fixed accents | \hat \tilde \bar \vec \dot \ddot ほか | 一文字ぶんで固定。まったく伸びない |
arbitrary material | \overset \underset \stackrel \xrightarrow | 任意の記号を小さく載せる。軸は \xrightarrow だけ伸びる |
式全体に線を引く — \overline と \underline
\overline{…} は引数の上に、\underline{…} は下に、中身の幅ちょうどの罫線 を引きます。どちらも LaTeX 標準で、追加パッケージは要りません。補集合や複素共役、そして「この部分をひとまとまりと見る」という合図に使われます。\underline の線は y や g のようにベースラインより下に垂れる文字(ディセンダ)を避けて置かれるので、下線が文字を切ることはありません。そして装飾のなかで きれいに入れ子にできる数少ない例 でもあり、\overline{\overline{z}} は二重線としてきちんと組めます。実測では \overline{z} の高さ 6.30544 pt に対し二重にすると 8.30533 pt——一段につき約 2 pt ずつ持ち上がります。
\[
\overline{a + b} = \overline{a} + \overline{b}, \qquad
\underline{x + y}, \qquad \overline{\overline{z}} = z
\]波括弧で範囲を示す — \overbrace{…}^{…} と \underbrace{…}_{…}
横向きの波括弧を式の上下に渡し、^ や _ でその外側にラベルを付けられます。\overbrace と \underbrace は LaTeX 標準で、括弧は中身の幅いっぱいに伸びます。ラベルが付けられるのは、fontmath.ltx の定義が \mathop{…}\limits で終わっているからです。\mathop にしたおかげで ^/_ が使え、\limits を書き込んであるおかげで、上下配置が 本文中(インライン)でも変わりません。つまり \overbrace は総和記号と同じ仕組みでラベルを載せています。
\[
\underbrace{1 + 2 + \cdots + n}_{n \text{ terms}}
= \frac{n(n+1)}{2}
\qquad
\overbrace{x + x + \cdots + x}^{k}
\]ラベルに単語を書くときは、数式モードの中なので \text{…}(amsmath)で包みます。そして、その \limits には代償があります。実測すると、$\underbrace{a+b}_{n}$ の 深さは 14.19992 pt。素の $a+b$ が 0.83333 pt、10 pt 文書の行送り \baselineskip が 12 pt ですから、インラインに置くと一行ぶんより深く沈み、前後の行間が押し広げられます。だから波括弧は別行立ての数式で使うのが定石です。どうしても本文中に置きたいなら、\underbrace{a+b}\nolimits_{n} と書けばラベルが右側に移り、深さは 8.53328 pt まで戻ります。なお、総和記号の下に条件を二段重ねる \substack は隣の話題で、大型作用素のページが扱います。
\widehat と \widetilde はどこで伸びるのをやめるか
打ち止めは 14.44447 pt、10 pt 文書でおよそ 1.44 em です。fontmath.ltx の宣言 \DeclareMathAccent{\widehat}{\mathord}{largesymbols}{"62} が指しているのは cmex10 の "62 番の字形で、そこから "63、"64 へと大きい版が連なっています。\fontcharwd で測ると三つの幅は 5.55557 pt、10.00002 pt、14.44447 pt。TeX は 中身の幅を超えない範囲でいちばん大きい字形 を選ぶので、材料が 14.44447 pt 未満なら小さいほうが選ばれ、それ以上どれだけ長くなっても最大の字形のまま中央に置かれます。\widetilde の三つも同じ幅です。つまり \widehat{x} \widehat{xy} は自然でも、\widehat{f(x+y+z)} になると帽子が式の一部にしか届きません。
\[
\widehat{x + y} \neq \hat{x} + \hat{y}, \qquad
\widetilde{ab}, \qquad
\overline{f(x+y+z)} % use a rule once the hat runs out
\]式の上に矢印を引く — \overrightarrow と \vec の落とし穴
有向線分 AB を書きたいなら \overrightarrow{AB}、\vec{AB} ではありません。\vec は fontmath.ltx で \DeclareMathAccent{\vec}{\mathord}{letters}{"7E} と宣言された 一文字ぶんの固定アクセント で、\vec{AB} と書くと小さな矢印が実質 B の上だけに載ってしまいます。対して \overrightarrow は矢印そのものを組み立てる仕組みで、軸は \rightarrowfill——\cleaders でマイナス記号を敷き詰めて矢尻を付ける——ですから、幅の上限がありません。左向きは \overleftarrow、両向きは \overleftrightarrow。下側に置く \underrightarrow \underleftarrow \underleftrightarrow は amsmath が必要です。
\usepackage{amsmath} % needed for \underrightarrow and friends
\[
\vec{a} \quad \text{vs.} \quad \overrightarrow{AB},
\qquad \overleftrightarrow{PQ}, \qquad \underrightarrow{x}
\]一文字に付ける固定アクセント — \dot \bar \hat と \imath
固定アクセントは 一文字を修飾するための道具 です。時間微分の \dot、二階微分の \ddot、平均や共役の \bar、推定量の \hat、近似の \tilde ——理工系の文章に絶えず出てくる印がここに集まっています。すべて LaTeX 標準で、複数文字に付けても伸びず、一文字ぶんの大きさのまま中央に置かれます。ひとつだけ古典的な作法があり、i や j に印を付けると もとの点とぶつかる ので、点のない \imath \jmath を土台にします。\hat{\imath} と書けば、山形だけがすっきり載ります。
| 命令 | 載るもの | 伸びる? |
|---|---|---|
\hat | 山形(サーカムフレックス) | 固定。広い版は \widehat |
\tilde | 波形(チルダ) | 固定。広い版は \widetilde |
\bar | 短い横線(マクロン) | 固定。式全体には \overline |
\vec | 小さな右向き矢印 | 固定。広い矢印は \overrightarrow |
\dot \ddot | 点一つ・点二つ | 固定。\dddot \ddddot は amsmath |
\acute \grave | 鋭アクセント・重アクセント | 固定 |
\check \breve | ハーチェク(ˇ)・ブレーヴェ(˘) | 固定 |
\mathring | 小さな輪(˚) | 固定 |
\imath \jmath | 点のない i・j | アクセントの土台。\hat{\imath} のように使う |
ここで一つ注意があります。アクセントは二重に重ねてもきれいに乗りません。\hat{\vec{x}} のように重ねると、上の印が浮いたり高すぎたり中心からずれたりします(きちんと入れ子にできるのは、前に見た \overline と \underline くらいです)。点を増やしたいだけなら \ddot や amsmath の \dddot \ddddot を使い、本当に別種の印を重ねたいなら、次節の \overset で明示的に組み立てるか、専用パッケージに任せます。位置を微調整したいときは fontmath.ltx に用意された \skew も使えます。
\[
\dot{x}, \quad \ddot{x}, \quad \bar{x}, \quad \hat{p},
\quad \tilde{a}, \quad \check{s}, \quad \hat{\imath}, \quad \vec{\jmath}
\]\overset と \stackrel の違い — 測ると 1.11109 pt ずれる
違いは 土台の種類を引き継ぐかどうか です。\stackrel は latex.ltx に \mathrel{\mathop{#2}\limits^{#1}} と定義されていて、何を載せても結果は 必ず関係子 になります。amsmath の \overset は \binrel@ という仕掛けで土台の種類を調べ、二項演算子なら二項演算子、関係子なら関係子として 組み直します。実測すると、a\overset{f}{+}b は 21.79968 pt で a\mathbin{+}b と完全に一致、a\stackrel{f}{+}b は 22.91077 pt で a\mathrel{+}b と一致します。差の 1.11109 pt は、中空き 4 mu と太空き 5 mu の違いが両側に効いたぶんです。土台が = のように元から関係子なら両者は一致するので、迷ったら \overset が安全です。
\usepackage{amsmath} % \overset, \underset, \overunderset
\[
A \overset{f}{\longrightarrow} B, \qquad
X \underset{n \to \infty}{\longrightarrow} x, \qquad
a \overset{\text{def}}{=} b, \qquad
\overunderset{a}{b}{X}
\]\overset{上}{土台} は上に、\underset{下}{土台} は下に、任意の記号や式を小さく載せます。第二引数が土台、第一引数が加えるもので、加える側は scriptstyle(添字と同じ大きさ)で組まれるため、何もしなくても小さくなります。上下の両方に置きたいときは入れ子にしてもよいのですが、amsmath には \overunderset{上}{下}{土台} が用意されていて、こちらのほうが読みやすく書けます。固定アクセントとの違いは、載せるものを自由に選べる 点です。なお ^ と _ が記号の 右肩・右下 に付くのに対し、\overset/\underset は 真上・真下 に置きます。
文字を載せて伸びる矢印 — \xrightarrow と \xleftarrow
矢印に名前を付けたいなら、\stackrel ではなく amsmath の \xrightarrow{…} を使います。理由は幅にあります。長いラベルを載せた A\xrightarrow{\text{very long label}}B は 79.12704 pt で、軸そのものがラベルの幅まで伸びます。同じラベルを \stackrel で \longrightarrow に載せると全体は 72.7536 pt ですが、その下の矢印は固定長の 37.25343 pt のままなので、文字だけが矢印の両端からはみ出します。さらに \xrightarrow は角括弧の省略可能引数を取り、\xrightarrow[n \to \infty]{f} と書けば上に写像の名前、下に条件を同時に置けます。逆向きは \xleftarrow です。
\usepackage{amsmath}
% mathtools adds \xLeftarrow, \xhookrightarrow, \xmapsto and more
\[
A \xrightarrow{\;f\;} B \xleftarrow{\;g\;} C,
\qquad a_n \xrightarrow[n \to \infty]{} L
\]- 一文字だけを飾る → 固定アクセント(
\hat\bar\dot\vec) - 式全体を覆う →
\overline\overrightarrow。\widehatは 14.44447 pt で頭打ち - 範囲を波括弧で示す →
\overbrace{…}^{…}\underbrace{…}_{…}。別行立てで使う - 本文中に
\underbraceを置く → 深さ 14.19992 pt が行間を押し広げる。\nolimitsで横へ逃がす - 任意の記号を上下に載せる → amsmath の
\overset\underset\overunderset - 矢印に名前を付ける →
\xrightarrow{…}。\stackrelは軸が伸びない iやjに印を付ける → 点のない\imath\jmathを土台にする