\left と \right の下付き文字と上付き文字を無視するバージョン

\left と \right の下付き文字と上付き文字を無視するバージョン

プリミティブやのように自動的に動作するが、またはのような演算子の下または上のスペースを考慮しないマクロ (またはマクロ群) を定義するにはどうすれば\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可能です。
  • \scantokenseTeX (つまり pdftex、luatex、xetex など) が必要です。
  • 2 つの合計を持つ分数を囲む括弧に使用すると、結果の括弧が小さくなりすぎる可能性があります。

関連情報