\left
기본 요소 및 와 같이 자동 방식으로 작동하지만 또는 \right
같은 연산자 아래 또는 위의 공간을 고려하지 않는 매크로(또는 매크로)를 정의하려면 어떻게 해야 합니까 ?\sum
\bigcup
이렇게 수정된 왼쪽 및 오른쪽 \mleft
/는 입력이 \mright
처럼 작동해야 하지만 원본 /는 을 생성합니다 .\[\Bigl(\sum_i^j\Bigr)\]
\[\mleft(\sum_i^j\mright)\]
\left
\right
\[\Biggl(\sum_i^j\Biggr)\]
이미 솔루션(sb)이 있지만 여기에는 몇 가지 주의 사항이 있으며 더 나은 접근 방식이 있을 수 있습니다.
답변1
다음 매크로는 \lrm
먼저 \vphantom
괄호의 실제 내용과 함께 a를 사용하여 올바른 전체 줄 높이를 얻는 방식으로 작동합니다. 그런 다음 다른 를 호출 \left
하고 생성 \vphantom
하지만 이번에는 catcode를 변경하고 ^
and _
를 의미하도록 재정의합니다 \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 ...).- 합이 두 개인 분수를 둘러싼 괄호에 사용하면 결과 괄호가 너무 작아 보일 수 있습니다.