プリミティブやのように自動的に動作するが、またはのような演算子の下または上のスペースを考慮しないマクロ (またはマクロ群) を定義するにはどうすれば\left
よい\right
です\sum
か\bigcup
?
この修正された left と reight \mleft
/は、入力が の場合に の\mright
ように動作します が、元の/では が生成されます。\[\Bigl(\sum_i^j\Bigr)\]
\[\mleft(\sum_i^j\mright)\]
\left
\right
\[\Biggl(\sum_i^j\Biggr)\]
すでに解決策 (sb) はありますが、いくつか注意点があり、もっと良いアプローチがあるかもしれません。
答え1
次のマクロは、最初にを括弧の実際の内容とともに\lrm
使用して、全体の行の高さを正しく取得します。次に を呼び出して別の を作成しますが、今回は catcodes を変更し、とを再定義して を意味します。最後に、を呼び出す直前の 内の内容を実際に出力します。行の高さは増加しないためです。\vphantom
\left
\vphantom
^
_
\relax
\smash
\right
\smash
\begingroup
\catcode`_=\active
\catcode`^=\active
\gdef\lrm#1#2#3{%
\vphantom{#2}%
\left#1%
\vphantom{
\begingroup
\def\sb##1{\relax}%
\def\sp##1{\relax}%
\def_##1{\sb{##1}}%
\def^##1{\sp{##1}}%
\catcode`_=\active
\catcode`^=\active
\scantokens{ #2\endinput}%
\endgroup
}
\smash{#2}
\right#3%
}
\gdef\mleft#1#2\mright#3{\lrm{#1}{#2}{#3}}
\gdef\mmleft#1#2\mmright#3{\lrm{#1}{#2}{#3}}
\gdef\mmmleft#1#2\mmmright#3{\lrm{#1}{#2}{#3}}
\endgroup
このソリューションにはいくつか注意点があります:
- マクロ内の下付き文字と上付き文字は検出されません (
\expandonce
ヘルプ内では検出\scantokens
されますが、ほとんどのネストされたアプリケーションは機能しなくなります)。 \mleft
/ は\mright
ネストできませんが、ネストは\lrm
可能です。\scantokens
eTeX (つまり pdftex、luatex、xetex など) が必要です。- 2 つの合計を持つ分数を囲む括弧に使用すると、結果の括弧が小さくなりすぎる可能性があります。