きょうの e-TeX (6) : \middle
\middle〈デリミタ〉
:[一般命令]\left〈デリミタ1〉...\right〈デリミタ2〉
の...
の中で用いる(複数回用いることも可能)。〈デリミタ〉を両端の〈デリミタ1〉、〈デリミタ2〉と同じ高さで出力する。
e-TeX の数式組版に関する拡張はこれ一つしかないのであるが、数式を常用する人にとっては、これ一つだけで e-TeX 拡張の存在価値がある位に強力な命令である。要するに次のようなことができる。((数式モード中で、<
や >
は不等号を表すが、前に \left
、\right
を付した場合は \langle
、\rangle
と同じく山括弧になる。そして前に \middle
がある場合もそうである。))
\[ \left< \frac{n^2}{2} \middle| mn \right> \]
勿論、TeX のマクロを駆使して上のような「大きくなるブラケット」を実装することは可能である。ただ、「どんな場合にも正しく動く」ように書こうとすると、TeX の数式組版の細かい仕様を知っている必要があり、見た目ほど容易ではない。私が作成した次のコードもどこかに抜けが残っているかも知れない。
%% \braket{<数式1>}{<数式2>}
\def\braket#1#2{%
\left<#1\mathclose{}\vphantom{#2}\right|%
\nonscript\mskip-\thinmuskip \kern-\nulldelimiterspace
\left.\vphantom{#1}\mathopen{}#2\right>}
しかし「TeX プログラマ」でない普通の LaTeX ユーザにとっては \middle
は不可欠といえる程の価値をもつであろう。実際、「典型的な」Dirac 記法(例えば 〈A|B〉とか〈A|B|C〉とか)であれば、TeX プログラマが作った既製のパッケージ、例えば braket パッケージ((Donald Arseneau 氏制作。これは e-TeX 上の動作では実際に \middle
を使っている。))等が使える。問題は、あまり典型的でない、例えば「〈A|B|C〉〈D|E|F〉を全部同じ高さのデリミタで出力したい」とかいう場合である。既製パッケージは対応してくれないだろうから、TeX プログラミングを知らなければ特殊な表記を断念する他ない。*1一方で、\middle
はこういう場合にも簡単に対応できる。
\left< \frac{n^2}{2} \middle| D_0 \middle| 0 \middle>\middle< 1 \middle| D_1 \middle| mn \right>
[2011-03-18: コードが完全に間違っていたので訂正。]
e-TeX の拡張プリミティブの大多数は LaTeX のユーザ命令として用いるには相応しくない。このことは TeX のプリミティブの大多数が LaTeX のユーザ命令でないのと同様である。しかし、\left
や \right
がユーザ命令であることを考えると、\middle
命令は例外的に LaTeX ユーザ命令の資格を有していると思われる。ただし、LaTeX2e で「公式に」その扱いを認定される日が来るかは不明である。