マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

きょうの 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 で「公式に」その扱いを認定される日が来るかは不明である。

*1:この場合に「TeX プログラミングの学習を始める」のと「TeX プログラミングの学習は嫌だから自身の要求を諦める」のとどちらが賢明であるかは種々の要因に依存する。