Versión de \left y \right que ignora subíndices y superíndices

Versión de \left y \right que ignora subíndices y superíndices

¿Cómo puedo definir una macro (o macros) que funcione de forma automática como las primitivas \lefty \right, pero no considere el espacio debajo o encima de operadores como \sumo \bigcup?

\mleftEste / izquierdo y derecho modificado \mrightdebería funcionar como \[\Bigl(\sum_i^j\Bigr)\]si la entrada fuera , mientras que el / \[\mleft(\sum_i^j\mright)\]original produce .\left\right\[\Biggl(\sum_i^j\Biggr)\]

Si bien ya tengo una solución (algo), tiene algunas salvedades y podría haber un enfoque mejor.

Respuesta1

La siguiente macro \lrmfunciona usando primero a \vphantomcon el contenido real de los paréntesis para obtener la altura general correcta de la línea. Luego llama \lefty crea otro \vphantom, pero esta vez cambia los catcodes y redefine ^y _to mean \relax. Finalmente, en realidad genera el contenido justo \smashantes de la llamada a \right. Debido a \smashla línea la altura no aumenta.

\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

Esta solución tiene algunas advertencias:

  • Los subíndices y superíndices dentro de las macros no se detectan ( \expandonceen las \scantokensayudas, pero dañarían la mayoría de las aplicaciones anidadas).
  • \mleft/ \mrightno se puede anidar, pero \lrmes posible anidar.
  • \scantokensrequiere eTeX (es decir, pdftex,luatex,xetex...).
  • Si se usan para paréntesis que rodean una fracción con dos sumas, los paréntesis resultantes pueden parecer demasiado pequeños.

información relacionada