\sin\left(x\right)와 \sin(x)는 같은 식처럼 보이지만 너비가 다릅니다. TeX Live 2024의 pdfLaTeX으로 재면 앞의 것은 27.4375 pt, 뒤의 것은 25.77087 pt입니다. 1.66663 pt의 차이는 LaTeX이 \left와 \right 사이의 내용을 Inner(안쪽) 원자로 다루고, Inner 원자 앞에는 3 mu의 가는 공백을 넣기 때문에 생깁니다. 괄호를 늘리는 도구는 두 계열입니다. 자동인 \left \right, 그리고 네 단계를 손으로 고르는 \big \Big \bigg \Bigg입니다. 누구나 겪는 두 가지 불만, “괄호가 너무 크다”와 “\left\right 안에서 줄바꿈이 안 된다”는 모두 이 선택에 뿌리를 두고 있습니다. 이 페이지는 그 선택을 측정값으로 설명합니다.
\left … \right는 크기를 어떻게 정하는가
내용의 높이에 정확히 맞춰 늘어나는 것이 아니라, 폰트에 준비된 몇 단계의 괄호 중 기준을 넘어서는 가장 작은 것을 고릅니다. 기준은 두 매개변수가 정하며, TeX Live 2024의 LaTeX에서는 \delimiterfactor가 901, \delimitershortfall이 5 pt입니다. 필요한 높이의 90.1 % 이상을 덮거나, 필요한 높이보다 5 pt 넘게 모자라지 않거나——둘 중 느슨한 쪽을 만족하는 가장 작은 괄호가 선택됩니다. \left나 \right 바로 뒤에 쓴 문자가 실제 구분 기호입니다. 소괄호는 ( ), 대괄호는 [ ], 중괄호는 \{ \}, 꺾쇠괄호는 \langle \rangle을 씁니다.
\[
\left( \frac{a^2 + b^2}{c^2} \right)
\qquad
\left[ \sum_{k=1}^{n} \frac{1}{k} \right]
\qquad
\left( a, b \right]
\]이 기준이 바로 “괄호가 너무 크다”의 정체입니다. 10 pt article에서 감싸인 재료의 높이를 조금씩 올려 보면, 9 pt까지는 12 pt 괄호(\big과 같은 단계)로 충분하고, 10 pt가 되는 순간 18 pt 괄호, 곧 \Big 단계로 단숨에 건너뜁니다. 12 pt로 올려도 여전히 같은 18 pt입니다. 단계가 띄엄띄엄이라 내용이 조금만 높아져도 괄호가 한 단계 요란해 보이는 것입니다. 자유로운 점이 하나 더 있습니다. 짝이 되는 구분 기호는 같은 종류가 아니어도 됩니다. \left( a, b \right] 같은 반열린 구간이 바로 그런 예입니다.
\left…\right와 \bigl…\bigr의 차이 — 간격이 달라집니다
스타일 가이드가 “고정 크기라면 \left…\right보다 \bigl…\bigr”이라고 말하는 것은 취향 문제가 아니라 측정 가능한 차이가 있기 때문입니다. TeX은 수식의 각 요소에 원자(atom) 종류를 부여하고, 종류의 조합으로 앞뒤 간격을 정합니다. \left … \right의 결과는 Inner, \bigl은 Open(여는 기호), \bigr은 Close(닫는 기호), 그리고 맨 \big은 Ord(보통 기호)가 됩니다. 함수 이름 \sin은 Op(연산자)이며, Op 뒤에 Open이 오면 간격이 0, Ord나 Inner가 오면 3 mu의 가는 공백이 들어갑니다——첫머리의 1.66663 pt가 바로 이것입니다.
| 표기 | 원자 종류 | \sin…(x)의 실측 너비 |
|---|---|---|
( x ) | Open / Close | 25.77087 pt — 기준 |
\bigl( x \bigr) | Open / Close | 27.15979 pt — 커진 것은 글자 모양뿐 |
\left( x \right) | Inner | 27.4375 pt — 3 mu의 가는 공백이 더해짐 |
\big( x \big) | Ord | 28.82642 pt — Op→Ord에서도 3 mu가 추가됨 |
표의 마지막 행이 \bigl・\bigr을 귀찮아하면 안 되는 이유입니다. 맨 \big(는 Ord이므로 \bigl(보다 1.66663 pt——정확히 가는 공백 하나만큼——넓어집니다. latex.ltx를 열면 이 구별은 각각 한 줄로 소박하게 적혀 있습니다. \bigl은 \mathopen\big, \bigr은 \mathclose\big, 그리고 \bigm은 \mathrel\big입니다. 글자는 각각 left, right, middle에서 왔으므로 \bigm은 괄호가 아니라 “괄호와 같은 크기의 관계 기호”를 만듭니다. 조건제시 표기의 세로줄 \bigm|이 대표적이며, 실측하면 양쪽에 굵은 공백 5 mu씩, 합쳐서 5.55542 pt가 들어갑니다.
\[
\sin\bigl( x \bigr) % Open/Close: no stray space
\qquad
\biggl\{\, x \bigm| x > 0 \,\biggr\}
\qquad
\bigl( \Bigl[ \,\cdots\, \Bigr] \bigr)
\]\big \Big \bigg \Bigg의 실제 크기 — 12 pt 문서에서 \big이 듣지 않는 이유
네 가지 크기는 절대 길이로 못 박혀 있습니다. fontmath.ltx의 정의는 모두 한 줄이며, 보이지 않는 상자를 \left … \right로 감쌀 뿐입니다. \big은 8.5 pt, \Big은 11.5 pt, \bigg는 14.5 pt, \Bigg는 17.5 pt입니다. 단위가 em이 아니라 pt이므로 본문 글자 크기를 바꿔도 요구되는 높이는 그대로입니다. 그래서 10 pt article에서는 (가 10 pt, \big(가 12 pt로 차이가 보이지만, 12pt 클래스 옵션을 붙이는 순간 보통 (가 이미 12 pt가 되고, 이때 \big(는 높이 9.0 pt·깊이 3.0 pt로 맨 (와 완전히 같아집니다. “\big을 썼는데 아무것도 안 바뀐다”의 답이 이것입니다. 12 pt 문서에서는 \Big부터 쓰십시오.
| 명령 | fontmath.ltx가 요구하는 높이 | 10pt article 실측(높이 + 깊이) |
|---|---|---|
( | —(폰트의 보통 글자 모양) | 7.5 + 2.5 = 10 pt |
\big | 8.5 pt | 8.5 + 3.5 = 12 pt |
\Big | 11.5 pt | 11.5 + 6.5 = 18 pt |
\bigg | 14.5 pt | 14.5 + 9.5 = 24 pt |
\Bigg | 17.5 pt | 17.5 + 12.5 = 30 pt |
어느 단계든 깊이가 높이보다 5 pt 작은 것은 구분 기호가 수식의 축(axis) 을 기준으로 위아래 대칭으로 놓이기 때문입니다. 표준 10 pt 수식 폰트에서 축은 기준선 위 2.5 pt에 있으므로, 12 pt 괄호는 위 8.5 pt·아래 3.5 pt로 나뉩니다. 수동 크기를 고르는 실무상의 이유는 셋입니다. 여러 줄에서 높이를 맞추고 싶을 때(\left … \right는 줄마다 내용을 재므로 나란한 식들의 괄호 키가 들쭉날쭉해집니다), 한 단계 큰 괄호로 건너뛰는 것을 막고 싶을 때, 그리고 앞뒤 간격을 직접 정하고 싶을 때입니다. 반대로 높이를 예측할 수 없는 일회성 수식이라면 \left … \right가 더 빠르고 안전합니다.
\left\right 안에서는 줄바꿈이 안 됩니다 — 무슨 일이 일어나고, 어떻게 피하나
\left … \right는 하나의 그룹을 만들므로 그 안에 \\를 쓰면 컴파일이 멈춥니다. align 환경에서 시험해 보면 TeX Live 2024의 pdfLaTeX은 이렇게 말합니다. ! Extra }, or forgotten \right., 이어서 ! Missing \right. inserted. 앞의 것은 “\right가 오지 않은 채 줄이 끝났다”, 뒤의 것은 “그래서 하나를 대신 넣었다”는 뜻입니다. 회피책은 두 가지이며 둘 다 실제로 컴파일이 통과함을 확인했습니다.
\begin{align}
% 1. fixed manual sizes: close and reopen, same size on both lines
a &= \biggl( b + c \notag\\
&\qquad + d \biggr)\\
% 2. null delimiters: end each fragment with \right. and reopen with \left.
e &= \left( f + g \right. \notag\\
&\qquad \left. + h \right)
\end{align}첫째는 수동 크기로 괄호를 고정하고, 줄 끝과 줄 머리에서 닫기·열기를 각각 완결하는 방법입니다. 두 줄의 괄호가 같은 단계가 되므로 보기에도 가지런합니다. 둘째는 다음 절의 보이지 않는 구분 기호를 써서 각 조각을 \right.로 닫고 \left.로 다시 여는 방법입니다. 자동 크기는 그대로지만 줄마다 다시 재기 때문에 좌우 괄호의 높이가 어긋날 수 있습니다. 분수나 합 기호를 가로질러 접는다면 첫째 방법, 곧 고정된 수동 크기가 실용적입니다. 분수나 행렬 자체를 어떻게 접는지는 각각의 전용 페이지에 맡깁니다.
! Missing \right. inserted.와 ! Extra \right.
이 둘은 짝이 깨졌을 때의 오류이며, 어느 쪽이 모자라는지를 구분해 알려 줍니다. \left를 쓰고 \right 없이 수식을 닫으면 ! Missing \right. inserted.가 나옵니다. LaTeX이 \right.를 보충해 계속 진행하려 했다는 신호입니다. 반대로 \left 없이 \right)만 나타나면 ! Extra \right.입니다. 앞의 경우는 ! LaTeX Error: Bad math environment delimiter.나 ! Missing $ inserted.를 함께 끌고 오므로, 오류 목록의 맨 위까지 거슬러 올라가 \left의 개수를 세는 것이 가장 빠른 길입니다.
한쪽에만 괄호를 내놓기 — \left.와 \right.
\left나 \right 바로 뒤에 마침표 .를 두면 그쪽에는 아무것도 그려지지 않습니다. .는 “아무것도 그리지 않는 구분 기호”(null delimiter)로 취급되어 쌍 규칙만 만족한 채 모습을 감춥니다. 가장 흔한 용도는 평가 세로줄입니다. \left. \frac{dy}{dx} \right|_{x=0}이라고 쓰면 왼쪽은 비고 오른쪽 세로줄만 내용 높이에 맞춰 늘어나며, 그 오른쪽 아래에 조건이 붙습니다. 정적분의 \left. \frac{x^3}{3} \right|_{0}^{1}도 같은 모양입니다. 수동 크기라면 짝이 되는 \left조차 필요 없어서 f(x) \bigr|_{0}^{1}만으로 성립합니다. 반대로 구분 기호를 전혀 보이지 않게 하면서 묶음만 남기고 싶다면 양쪽을 모두 .로 하여 \left. … \right.라고 씁니다.
\[
\left. \frac{dy}{dx} \right|_{x=0}
\qquad
\left. \frac{x^3}{3} \right|_{0}^{1}
\qquad
f(x) \bigr|_{0}^{1} % fixed size, no \left needed
\]\middle — 괄호와 같은 높이의 구분선 넣기
\left와 \right 사이에 \middle과 구분 기호를 쓰면 바깥쪽과 같은 높이로 늘어나는 구분선을 몇 개든 넣을 수 있습니다. 집합의 조건제시 표기 \left\{ x \;\middle|\; \dots \right\}가 대표적입니다. 이 명령은 커누스의 원래 TeX에는 없고 e-TeX이 더한 확장입니다(TeX Live 2024의 pdfLaTeX은 \eTeXversion을 2로 보고합니다). 그리고 e-TeX 매뉴얼에는 \right가 “현재 리스트에 Inner atom을 덧붙인다”고 명시되어 있습니다. 이 페이지 첫머리의 3 mu는 바로 그 한 문장의 귀결입니다.
\[
\left\{\, x \in \mathbb{R} \;\middle|\; x^2 < \frac{1}{2} \,\right\}
\qquad
\biggl\{\, x \bigm| x^2 < 1 \,\biggr\}
\]함정이 하나 따라옵니다. e-TeX 매뉴얼에 따르면 \middle 오른쪽의 재료는 “왼쪽 구분 기호 다음과 같은 간격”으로 조판됩니다. 즉 \middle|은 여는 괄호처럼 취급되어 앞뒤에 간격이 전혀 들어가지 않습니다. 실측도 일치합니다. \left(a\middle| -b\right)는 27.91093 pt로 \left(a\mathopen{|} -b\right)와 정확히 같고, \mathord 판보다 4.44434 pt 좁습니다. 그러므로 세로줄 좌우는 직접 띄워야 합니다. \;\middle|\;처럼 쓰거나, \mathrel{}\middle|\mathrel{}로 감싸 관계 기호로 만듭니다. 후자는 양쪽에 굵은 공백 5 mu씩(합쳐 5.55542 pt)을 더해 \bigm|과 같은 간격이 됩니다. \middle을 꼭 고집하지 않는다면 \bigm| 쪽이 애초에 더 짧습니다.
구분 기호 목록 — \langle \lceil \lfloor \|와 \Vert
\left/\right나 \big 계열 뒤에 놓을 수 있는 것은 폰트가 “늘어나는 부품”을 갖춘 기호뿐입니다. 소괄호・대괄호・슬래시는 자판에서 바로 칠 수 있지만, { }는 LaTeX의 예약 문자이므로 중괄호로 내려면 \{ \}라고 써야 합니다. 꺾쇠괄호는 자판의 < >가 아니라 \langle \rangle을 쓰십시오. < >는 부등호, 곧 관계 기호라서 앞뒤에 굵은 공백이 들어가 괄호로 보이지 않습니다. 실측으로도 \langle a,b\rangle가 21.79976 pt인 데 비해 <a,b>는 35.13298 pt——13 pt 넘게 부풉니다.
| 명령 | 글리프 | 용도 / 주의 |
|---|---|---|
( ) | ( ) | 그대로 입력. 가장 흔한 짝 |
[ ] \lbrack \rbrack | [ ] | 그대로 입력. \lbrack \rbrack도 동일 |
\{ \} | { } | { }는 예약 문자. 역슬래시가 필수 |
\langle \rangle | ⟨ ⟩ | 내적, 브라켓 표기. < >는 안 됩니다 |
| \vert | | | 절댓값 등. 둘 다 Ord——짝으로는 \lvert/\rvert |
\| \Vert | ‖ | 노름 등. 출력이 동일하며 둘 다 Ord |
\lvert \rvert | | | | amsmath. 올바른 Open/Close 짝 |
\lVert \rVert | ‖ ‖ | amsmath. 노름에는 이쪽을 씁니다 |
\lceil \rceil | ⌈ ⌉ | 천장 함수(올림) |
\lfloor \rfloor | ⌊ ⌋ | 바닥 함수(내림) |
\backslash / | \ / | 몫집합 등. \left\backslash … \right/ 형태로 짝지을 수 있습니다 |
\uparrow \downarrow | ↑ ↓ | 겹선은 \Uparrow \Downarrow, 양방향은 \updownarrow |
\lgroup \rgroup | ⟮ ⟯ | 둥근 대형 괄호. 큰 별행 수식용 |
\lmoustache \rmoustache | ⎰ ⎱ | 큰 중괄호의 위쪽・아래쪽 절반 |
\arrowvert \bracevert | │ ⎪ | 화살표와 중괄호를 늘리기 위한 세로 부품 |
절댓값과 노름 — |x|가 사고를 내는 이유와 \DeclarePairedDelimiter
|와 \|는 둘 다 Ord(보통 기호) 라서 자신이 여는 쪽인지 닫는 쪽인지 밝히지 않습니다. 그 대가가 가장 뚜렷이 드러나는 곳이 |-x|입니다. 실측 23.49298 pt인 데 비해 \lvert -x \rvert는 19.04865 pt입니다. 차이인 4.44433 pt는 Ord 바로 뒤에 온 -가 이항 연산자로 해석되어 양쪽에 중간 공백 4 mu씩을 끌고 온 몫입니다. \lvert은 Open이므로 그 뒤의 -는 단항 마이너스가 되어 간격이 붙지 않습니다. 함수 이름 뒤에서도 같은 일이 벌어져 \sin|x|는 \sin\lvert x\rvert보다 가는 공백 3 mu만큼 넓어집니다. amsmath의 \lvert・\rvert, 노름이라면 \lVert・\rVert를 쓰십시오. \|와 \Vert는 출력이 완전히 같으므로 어느 쪽을 골라도 문제는 그대로입니다.
그렇다고 매번 \left\lvert … \right\rvert를 치는 것은 현실적이지 않습니다. 같은 표기를 반복해 쓴다면 정답은 mathtools의 \DeclarePairedDelimiter 입니다. 전처리부에서 한 번 정의해 두면 본문에서는 \abs{x}, 내용에 맞춰 늘리려면 \abs*{\frac{a}{b}}, 단계를 지정하려면 \abs[\big]{x}라고 쓰면 됩니다. 게다가 이 명령이 만드는 별표 형태는 \mathopen{}\mathclose\bgroup … \aftergroup\egroup으로 감싸여 있어 \left … \right을 쓰면서도 Inner atom이 되지 않습니다. 실측으로도 \sin\abs*{x}는 \sin\lvert x\rvert와 같은 23.54865 pt입니다. 이 페이지 첫머리의 1.66663 pt를 패키지가 대신 상쇄해 주는 셈입니다.
\usepackage{mathtools}
\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}
% in the body:
\[
\abs{x} \le \abs*{\frac{a}{b}}, \qquad
\norm*{\frac{v}{2}}, \qquad \abs[\big]{y}
\]- 높이를 예측할 수 없는 일회성 수식 →
\left…\right. 빠르고 안전합니다 - 여러 줄에서 괄호를 맞추거나 간격을 바로잡고 싶을 때 →
\bigl\Bigl\biggl\Biggl과 짝이 되는r판 - 괄호 사이에 세로줄 넣기 →
\bigm|또는\;\middle|\; - 한쪽만 내놓기(평가 세로줄) →
\left. … \right| - 같은 표기를 여러 번 쓸 때 → mathtools의
\DeclarePairedDelimiter - 12 pt 문서에서
\big이 듣지 않을 때 → 보통 괄호가 이미 12 pt입니다.\Big부터 시작하세요