括弧類(\left \right)

\sin\left(x\right)\sin(x) は同じ式に見えて、幅が違います。TeX Live 2024 の pdfLaTeX で測ると前者は 27.4375 pt、後者は 25.77087 pt。差の 1.66663 pt は、LaTeX が \left\right の中身を Inner(内側)という種類のかたまり として扱い、その手前に細空き 3 mu を入れるからです。括弧を伸ばす道具は二系統あり——自動の \left \right と、四段階を手で選ぶ \big \Big \bigg \Bigg——「括弧が大きすぎる」「\left\right で改行できない」という定番の悩みは、どちらもこの選択に根があります。このページは、その選択を測定値で説明します。

\left\right はどうやって大きさを決めるのか

中身の高さをそのまま使うのではなく、フォントに用意された数段階の括弧から、条件を満たす最小のものを選びます。条件は二つのパラメータで決まっていて、TeX Live 2024 の LaTeX では \delimiterfactor が 901、\delimitershortfall が 5 pt です。「必要な高さの 90.1 % 以上」または「必要な高さより 5 pt 以上は短くならない」——このうち緩いほうを満たす最小の括弧が採用されます。\left\right の直後に書いた文字が実際の括弧で、丸括弧なら ( )、角括弧なら [ ]、波括弧は \{ \}、山括弧は \langle \rangle を続けます。

latex
\[
  \left( \frac{a^2 + b^2}{c^2} \right)
  \qquad
  \left[ \sum_{k=1}^{n} \frac{1}{k} \right]
  \qquad
  \left( a, b \right]
\]

この閾値が「括弧が大きすぎる」の正体です。10 pt の article で中身の高さをじわじわ上げていくと、9 pt までは 12 pt の括弧(\big と同じ段)で足りるのに、10 pt になった瞬間に 18 pt の括弧、つまり \Big の段へ一気に飛びます。12 pt にしても同じ 18 pt のままです。段が離散的なので、ほんの少し背が伸びただけで括弧が一段派手に見えるわけです。もう一点、対になる括弧は 同じ種類でなくてかまいません\left( a, b \right] のような半開区間はこれで書きます。

\left…\right\bigl…\bigr の違い — 間隔が変わる

スタイルガイドが「固定サイズなら \left…\right より \bigl…\bigr」と言うのは趣味の問題ではなく、測れる差 があるからです。TeX は数式の要素それぞれに「種類(atom)」を割り当て、種類の組み合わせで前後の空きを決めます。\left\right の結果は Inner\biglOpen(開き)\bigrClose(閉じ)、そして裸の \bigOrd(ふつうの記号) になります。関数名 \sin は Op(作用素)で、Op の直後に Open が来れば空きゼロ、Ord や Inner が来れば細空き 3 mu が入る——これが冒頭の 1.66663 pt です。

書き方種類(atom)\sin…(x) の実測幅
( x )Open / Close25.77087 pt — 基準
\bigl( x \bigr)Open / Close27.15979 pt — 増えたのは括弧の字形だけ
\left( x \right)Inner27.4375 pt — 細空き 3 mu が加わる
\big( x \big)Ord28.82642 pt — Op→Ord でやはり 3 mu

表の最後の行が、\bigl\bigr を面倒がってはいけない理由です。裸の \big( は Ord なので、\bigl( より 1.66663 pt——ちょうど細空き一つぶん——広くなります。latex.ltx を開くと、この区別は一行ずつ素朴に書かれています。\bigl\mathopen\big\bigr\mathclose\big、そして \bigm\mathrel\bigl は left、r は right、m は middle の頭文字で、\bigm は括弧ではなく「括弧と同じ大きさの関係子」 を作ります。内包的記法の縦棒 \bigm| がその典型で、実測では両側に太空き 5 mu ずつ、合わせて 5.55542 pt が入ります。

latex
\[
  \sin\bigl( x \bigr)          % Open/Close: no stray space
  \qquad
  \biggl\{\, x \bigm| x > 0 \,\biggr\}
  \qquad
  \bigl( \Bigl[ \,\cdots\, \Bigr] \bigr)
\]

\big \Big \bigg \Bigg の実寸 — 12 pt 文書で \big が効かない理由

四つの大きさは 絶対値で決め打ち されています。fontmath.ltx の定義はどれも一行で、\big\vbox to 8.5pt\Big は 11.5 pt、\bigg は 14.5 pt、\Bigg は 17.5 pt の見えない箱を \left\right で囲むだけ。単位が em ではなく pt なので、本文の文字サイズを変えても要求される高さは変わりません。結果、10 pt の article では ( が 10 pt、\big( が 12 pt と差が出るのに、12pt オプションを付けた瞬間、通常の ( がすでに 12 pt になり、\big( は高さ 9.0 pt・深さ 3.0 pt で 素の ( と完全に一致 します。「\big を書いたのに何も変わらない」の答えがこれです。12 pt 文書では \Big から使ってください。

命令fontmath.ltx が要求する高さ10pt article での実測(高さ+深さ)
(—(フォントの通常字形)7.5 + 2.5 = 10 pt
\big8.5 pt8.5 + 3.5 = 12 pt
\Big11.5 pt11.5 + 6.5 = 18 pt
\bigg14.5 pt14.5 + 9.5 = 24 pt
\Bigg17.5 pt17.5 + 12.5 = 30 pt

どの段も深さが高さより 5 pt 小さいのは、括弧が 数式の軸(axis) に対して上下対称に置かれるからです。10 pt の標準数式フォントでは軸の高さが 2.5 pt なので、12 pt の括弧は 8.5 pt 上・3.5 pt 下に分かれます。手動サイズを選ぶ実務上の理由は三つ。複数行で高さをそろえたい\left\right は行ごとに中身を測るので、並べた式で括弧の背丈がばらつきます)、一段大きい括弧に飛ばれたくない、そして 前後の空きを自分で決めたい。逆に、中身の高さが読めない一回きりの式なら、\left\right のほうが速くて安全です。

\left\right で改行できない — 何が起きて、どう回避するか

\left\right はひとつのグループを作るので、その内側に \\ を書くとコンパイルが止まります。align 環境で試すと、TeX Live 2024 の pdfLaTeX はこう言います——! Extra }, or forgotten \right.、続けて ! Missing \right. inserted.。前者は「まだ \right が来ていないのに行が終わった」、後者は「仕方がないので \right. を補った」という意味です。回避策は二つあり、どちらも実際にコンパイルが通ることを確認しています

latex
\begin{align}
  % 1. fixed manual sizes: close and reopen, same size on both lines
  a &= \biggl( b + c \notag\\
    &\qquad + d \biggr)\\
  % 2. null delimiters: end each fragment with \right. and reopen with \left.
  e &= \left( f + g \right. \notag\\
    &\qquad \left. + h \right)
\end{align}

一つ目は手動サイズで括弧を固定し、行末と行頭で閉じ・開きを完結させる方法。二行の括弧が同じ段になるので見た目もそろいます。二つ目は次節の見えない括弧を使い、各断片を \right. で閉じて \left. で開き直す方法。こちらは自動サイズのままですが、行ごとに測り直すので左右の括弧の高さが揃わないことがあります。分数や総和をまたいで折り返すなら、一つ目の手動サイズを選ぶのが実務的です。分数や行列そのものの折り返しかたは、それぞれの専門ページに譲ります。

! Missing \right. inserted.! Extra \right.

この二つは対応が崩れたときのエラーで、どちらの側が足りないか を言い分けています。\left を書いて \right を書かずに数式を閉じると ! Missing \right. inserted.——LaTeX が \right. を補って続行しようとした合図です。逆に \left なしで \right) だけ現れると ! Extra \right.。前者は ! LaTeX Error: Bad math environment delimiter.! Missing $ inserted. を巻き添えで連れてくるので、エラーの一番上まで遡って \left の数を数える のが最短経路です。

片側だけ括弧を出す — \left.\right.

\left または \right の直後に ピリオド . を置くと、その側には何も描かれません。. は「何も描かない括弧(null delimiter)」として扱われ、対の規則は満たしたまま姿だけ消えます。もっとも多い用途が 評価の縦棒 で、\left. \frac{dy}{dx} \right|_{x=0} と書けば左側は空白、右側だけが中身の高さに伸びた縦線になり、その右下に条件が付きます。定積分の \left. \frac{x^3}{3} \right|_{0}^{1} も同じ形です。手動サイズなら f(x) \bigr|_{0}^{1} のように対の \left すら要りません。逆に括弧をまったく描かずグループだけ作りたいときは、両側を . にして \left. … \right. と書きます。

latex
\[
  \left. \frac{dy}{dx} \right|_{x=0}
  \qquad
  \left. \frac{x^3}{3} \right|_{0}^{1}
  \qquad
  f(x) \bigr|_{0}^{1}   % fixed size, no \left needed
\]

\middle — 括弧と同じ高さの仕切りを入れる

\left\right のあいだに \middle と区切り記号を書けば、外側と 同じ高さに伸びる仕切り が何本でも入ります。集合の内包的記法 \left\{ x \;\middle|\; \dots \right\} がその代表です。この命令はクヌースのオリジナルの TeX にはなく、e-TeX が追加した拡張 です(TeX Live 2024 の pdfLaTeX は \eTeXversion に 2 と答えます)。そして e-TeX のマニュアルには、\right が「Inner atom を現在のリストに追加する」と明記されています。このページ冒頭の 3 mu は、まさにその一文の帰結です。

latex
\[
  \left\{\, x \in \mathbb{R} \;\middle|\; x^2 < \frac{1}{2} \,\right\}
  \qquad
  \biggl\{\, x \bigm| x^2 < 1 \,\biggr\}
\]

一つ落とし穴があります。e-TeX のマニュアルによれば、\middle の右側は「左括弧のあとと同じ空き」で組まれます——つまり \middle|開き括弧扱いで、前後に空きがまったく入りません。実測でも \left(a\middle| -b\right)\left(a\mathopen{|} -b\right) と同じ 27.91093 pt で、\mathord 版より 4.44434 pt 狭くなります。したがって縦棒の左右は自分で空けます。\;\middle|\; と書くか、\mathrel{}\middle|\mathrel{} と包んで関係子にするか。後者は両側に太空き 5 mu ずつ(合わせて 5.55542 pt)を足し、\bigm| と同じ間隔になります。\middle に固執しないなら、そもそも \bigm| のほうが短く書けます。

括弧記号の一覧 — \langle \lceil \lfloor \|\Vert

\left\right\big 系の直後に置けるのは、フォントが「伸びる部品」を持っている記号だけです。丸括弧・角括弧・スラッシュはキーボードから直接打てますが、{ } は LaTeX の予約文字なので、括弧として出すには \{ \} と書きます。山括弧はキーボードの < > ではなく \langle \rangle を使ってください。< > は不等号すなわち関係子で、前後に太空きが入るため括弧に見えません。実測でも \langle a,b\rangle が 21.79976 pt に対し <a,b> は 35.13298 pt——13 pt 以上も膨らみます。

命令字形用途・注意
( )( )そのまま打てる。もっとも一般的
[ ] \lbrack \rbrack[ ]そのまま打てる。\lbrack \rbrack も同じ
\{ \}{ }{ } は予約文字。必ず逆斜線を付ける
\langle \rangle⟨ ⟩内積・ブラケット記法。< > は不可
| \vert|絶対値など。どちらも Ord。対には \lvert\rvert
\| \Vertノルムなど。出力は同一で、どちらも Ord
\lvert \rvert| |amsmath。開き Open/閉じ Close の正しい対
\lVert \rVert‖ ‖amsmath。ノルムはこちらを使う
\lceil \rceil⌈ ⌉天井関数(切り上げ)
\lfloor \rfloor⌊ ⌋床関数(切り捨て)
\backslash /\ /商集合など。\left\backslash … \right/ の形で対にできる
\uparrow \downarrow↑ ↓二重線は \Uparrow \Downarrow、両向きは \updownarrow
\lgroup \rgroup⟮ ⟯丸みのある大型括弧。大きな別行立て向き
\lmoustache \rmoustache⎰ ⎱大きな波括弧の上半分・下半分
\arrowvert \bracevert│ ⎪矢印・波括弧を伸ばすための縦棒の部品

絶対値とノルム — |x| が事故る理由と \DeclarePairedDelimiter

|\|どちらも Ord(ふつうの記号) で、開きか閉じかを名乗りません。その代償がもっともはっきり出るのが |-x| です。実測で 23.49298 pt、対して \lvert -x \rvert は 19.04865 pt。差の 4.44433 pt は、Ord の直後に来た -二項演算子として解釈され、両側に中空き 4 mu ずつを持ち込んだ ぶんです。\lvert は Open なので、その直後の - は単項のマイナスになり空きが付きません。関数名のあとでも同じことが起き、\sin|x|\sin\lvert x\rvert より細空き 3 mu ぶん広くなります。amsmath の \lvert\rvert、ノルムなら \lVert\rVert を使ってください。\|\Vert は出力が完全に一致するので、どちらを選んでも同じ問題を抱えます。

とはいえ、毎回 \left\lvert … \right\rvert と打つのは現実的ではありません。同じ記法を繰り返し使うなら mathtools の \DeclarePairedDelimiter が正解です。前文で一度定義すれば、本文では \abs{x}、中身に合わせて伸ばすなら \abs*{\frac{a}{b}}、段を指定するなら \abs[\big]{x} と書けます。しかもこの命令が生成する星付きの形は \mathopen{}\mathclose\bgroup … \aftergroup\egroup という包み方をしていて、\left\right を使いながら Inner atom にならない——実測でも \sin\abs*{x}\sin\lvert x\rvert と同じ 23.54865 pt です。このページ冒頭の 1.66663 pt を、パッケージ側できちんと打ち消してくれるわけです。

document.tex
\usepackage{mathtools}
\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}

% in the body:
\[
  \abs{x} \le \abs*{\frac{a}{b}}, \qquad
  \norm*{\frac{v}{2}}, \qquad \abs[\big]{y}
\]
  • 中身の高さが読めない一回きりの式\left\right。速くて安全
  • 複数行で括弧をそろえたい/間隔を正しくしたい\bigl \Bigl \biggl \Biggl と対応する r
  • 括弧のあいだに縦棒を置く\bigm|、または \;\middle|\;
  • 片側だけ出す(評価の縦棒)\left. … \right|
  • 同じ記法を何度も使う → mathtools の \DeclarePairedDelimiter
  • 12 pt 文書で \big が効かない → 通常の括弧がすでに 12 pt。\Big から始める