대부분의 수식은 LaTeX가 쓴 그대로 아름답게 조판해 줍니다. 하지만 가끔 작은 흐트러짐이 남습니다. 분수 안의 근호가 너무 높아 줄 간격을 벌리거나, 이웃한 제곱근의 천장이 맞지 않거나, 합 기호 아래의 긴 조건 때문에 앞뒤 여백이 벌어지는 식입니다. 이런 “마지막 한 끗”을 고치기 위한 작고 날카로운 도구들이 있습니다. 이 페이지에서는 그것들을 문제 → 고치는 방법 형태로 모읍니다. 깊은 설명은 각 전문 페이지에 맡기고, 여기서는 어떤 문제에 어떤 명령을 쓰는지 빠르게 찾는 것이 목적입니다. 특히 다른 페이지에서 다루지 않는 \smash 를 중심에 둡니다.
미세 조정 도구 상자
이 도구들에 공통된 생각은 하나입니다. 어떤 요소가 차지하는 치수(높이, 깊이, 폭)를 보이는 모양과 별개로 조작한다는 것입니다. 보이는 글자를 “크기가 0”인 것처럼 만들거나, 반대로 보이지 않는 글자의 “크기만 확보”할 수 있으면, 그 요소가 이웃 요소나 줄 간격에 미치는 영향을 원하는 대로 조정할 수 있습니다. 세로 방향(높이와 깊이)을 다루는 것은 \smash, \vphantom, \mathstrut이고, 가로 방향(폭)을 다루는 것은 \mathrlap, \mathllap, \mathclap 및 음수 간격 \!이며, 양쪽을 함께 다루는 것은 \phantom입니다.
이들은 모두 인쇄 결과를 미세 조정하기 위한 마지막 한 수이며, 수식의 의미는 바꾸지 않습니다. 그래서 먼저 수식을 자연스럽게 쓰고, 문제가 드러나는 곳에만 정확히 적용하는 것이 기본입니다. 아래 표는 빠른 참조표입니다.
| 증상 | 쓸 명령 | 출처 | |
|---|---|---|---|
tall-pushes-lines | 키 큰 요소가 줄 간격을 벌림 | \smash(\smash[t] / \smash[b]) | LaTeX 기본([tb]는 amsmath) |
radical-heights-differ | 이웃한 근호/행의 높이가 맞지 않음 | \vphantom / \mathstrut | LaTeX 기본 |
reserve-space | 보이지 않는 공간을 확보해 위치 맞추기 | \phantom / \hphantom / \vphantom | LaTeX 기본 |
wide-subscript | 넓은 아래첨자 조건이 열을 넓힘 | \mathclap(\mathrlap / \mathllap) | mathtools |
stack-symbol | = 등 위에 임의 기호를 얹고 싶음 | \overset / \underset | amsmath |
too-much-space | 기호끼리 너무 멀리 떨어짐 | \!(음수 얇은 공백) | LaTeX 기본 |
\smash — 높이와 깊이를 0으로 취급하게 하기
문제. 분수의 분자나 분모에 근호가 들어가면 \sqrt의 천장, 즉 근호 기호의 윗변이 보통 줄보다 높아집니다. LaTeX는 줄끼리 겹치지 않게 하려고 그 높이만큼 윗줄과의 간격을 넓힙니다. 그 결과 그 한 줄만 행간이 벌어져 페이지 전체의 줄 간격이 고르지 않아 보입니다.
고치는 방법. \smash{...}는 인수를 높이와 깊이가 모두 0인 것처럼 조판합니다. 잉크, 즉 실제 글자는 그대로 인쇄되지만 LaTeX는 그 상자를 세로 크기가 없는 것으로 보므로 행간을 넓히겠다고 판단하지 않습니다. LaTeX2e 공식 참고문헌도 \smash가 없으면 그 줄이 윗줄에서 떨어져 나가고 고르지 않은 줄 간격이 보기 나쁠 수 있다고 설명합니다. 대신, 눌러 없앤 요소가 윗줄로 파고들 수 있다는 점은 주의해야 합니다.
% 問題:分数のなかの根号が、この行だけ行間を押し広げる
$y = \frac{1}{\sqrt{1 - x^2}}$
% 直し方:根号の高さをゼロ扱いにして行送りへの影響を消す
$y = \frac{1}{\smash{\sqrt{1 - x^2}}}$두 경우 모두 보이는 수식은 같지만, 후자에서는 \sqrt{1-x^2}의 높이가 행간 계산에 들어가지 않으므로 앞뒤 줄과 같은 간격으로 조판됩니다. 본문 속 인라인 수식에 키 큰 요소가 들어갈 때 특히 효과가 큽니다.
amsmath를 읽으면 \smash는 선택 인수를 받을 수 있습니다. \smash[t]{...}는 위쪽(top, 높이)만 눌러 없애고 깊이는 자연스럽게 남기며, \smash[b]{...}는 아래쪽(bottom, 깊이)만 눌러 없애고 높이는 남깁니다. amsmath 매뉴얼이 말하듯, 높이나 깊이 중 한쪽만 없애고 다른 쪽은 자연스럽게 두고 싶을 때가 있기 때문입니다.
amsmath가 드는 대표 예는 이웃한 제곱근의 높이를 맞추는 것입니다. \sqrt{x} + \sqrt{y} + \sqrt{z}라고 쓰면 y가 아래로 내려가는 글자(descender)이므로 가운데 근호만 약간 내려가 보입니다. 내용의 깊이만 \smash[b]로 없애면 세 근호가 맞춰집니다.
% amsmath マニュアルの例:まんなかの根号だけ下がるのを直す
$\sqrt{x} + \sqrt{y} + \sqrt{z}$ % y の descender で不ぞろい
$\sqrt{x} + \sqrt{\smash[b]{y}} + \sqrt{z}$ % y の深さを消してそろえる\smash는 수식 모드뿐 아니라 본문에서도 쓸 수 있지만, 본문에서는 수평 모드로 들어가지 않으므로 문단 맨 앞에서 쓸 때는 앞에 \leavevmode가 필요합니다. 또한 \smash와 다음 절의 \vphantom은 정반대의 조작입니다. \smash는 큰 것을 0으로 취급하고, \vphantom은 0인 것에 실제 높이를 부여합니다. 실제로 amsmath는 이 둘을 함께 사용해 높이를 맞추는 예도 보여 줍니다.
\vphantom와 \mathstrut — 보이지 않는 높이로 맞추기
문제. \smash의 반대 상황으로, “내용이 낮은 쪽 요소를 높은 쪽에 맞춰 올리고 싶을” 때가 있습니다. 예를 들어 \sqrt{a}와 \sqrt{a^2}를 나란히 두면 지수 때문에 오른쪽 근호만 높아져 천장이 맞지 않습니다. 경우 나눔이나 행렬에서 행마다 내용 높이가 다를 때도 마찬가지입니다.
고치는 방법. \vphantom{...}(vertical phantom)은 인수와 같은 높이와 깊이를 가지면서 폭은 0이고 내용은 보이지 않는 상자를 만듭니다. 낮은 쪽 요소에 “높은 쪽과 같은 내용의 \vphantom”을 넣으면 보이지 않은 채 높이만 맞습니다. 인수를 받지 않는 간편판이 \mathstrut(매스 스트럿)이며, 이는 \vphantom(으로 정의된 여는 괄호 한 글자 높이의 보이지 않는 지지대입니다. 각 요소 앞에 두기만 하면 괄호 하나분의 높이로 맞춰집니다.
% 根号の天井をそろえる:各 \sqrt の中身に \mathstrut を足す
$\sqrt{\mathstrut a}\;\sqrt{\mathstrut a^2}\;\sqrt{\mathstrut b}$
% 任意の高さにそろえたいときは、揃え先の中身を \vphantom に渡す
$\sqrt{a} \;\sqrt{\vphantom{a^2}\,a}$이 명령들은 첨자와 간격 페이지에서 자세히 다루므로, 구조와 \hphantom과의 구분은 그쪽을 참고하세요. 여기서 기억할 점은 \smash(높은 것을 낮추기)와 \vphantom / \mathstrut(낮은 것을 올리기)가 높이를 맞추기 위한 서로 맞물린 도구라는 것입니다.
\phantom — 보이지 않는 자리 확보로 맞추기
문제. 여러 줄 수식에서 “아랫줄의 이 항을 윗줄의 저 항 바로 아래에 두고 싶은데”, 왼쪽 길이가 달라 자릿수가 맞지 않는 경우가 있습니다. 공백을 손으로 넣어 맞춰도 글꼴이나 식이 바뀔 때마다 다시 깨집니다.
고치는 방법. \phantom{...}은 인수를 조판했을 때와 같은 높이, 깊이, 폭을 가지지만 내용은 보이지 않는 상자입니다. 맞추려는 상대 식을 그대로 \phantom에 넘기면 그 식과 정확히 같은 폭의 빈칸이 생겨 자릿수가 자연스럽게 맞습니다. 가로폭만 필요할 때는 \hphantom{...}(높이와 깊이는 0)을 사용합니다.
% 「= 」の左を、上の行の項の幅だけ空けて桁をそろえる
\begin{align*}
f(x) &= x^2 + 2x + 1 \\
\phantom{f(x)} &= (x + 1)^2
\end{align*}이 예에서는 둘째 줄의 왼쪽에 \phantom{f(x)}를 두어 f(x)와 같은 폭의 빈칸을 확보하므로 두 =가 세로로 맞습니다. \phantom 계열(\hphantom, \vphantom)의 자세한 내용도 첨자와 간격 페이지에 정리되어 있습니다.
\mathclap, \mathrlap, \mathllap — 폭 0 상자(가로 방향의 \smash)
문제. 합이나 곱의 아래에 붙는 조건이 기호 본체보다 가로로 긴 경우가 있습니다. 예를 들어 \sum_{1 \le i \le j \le n}처럼 말입니다. 그러면 LaTeX는 그 폭에 맞춰 합 기호 앞뒤에 여백을 만들고, 식 전체가 늘어진 것처럼 보입니다. 표나 정렬 안에서는 이 추가 폭 때문에 열 전체가 어긋날 수도 있습니다.
고치는 방법. mathtools의 \mathclap{...}은 내용을 폭 0인 상자에 넣고 가운데 정렬합니다. 좌우로 같은 만큼 삐져나옵니다. 조건은 보이는 그대로 두면서 식의 폭은 기호 본체만큼으로 유지됩니다. 좌우 중 한쪽으로만 삐져나오게 하고 싶다면 왼쪽으로 붙이는 \mathllap{...}, 오른쪽으로 붙이는 \mathrlap{...}을 사용합니다. 사실 이들은 \smash의 가로 방향 버전으로 만들어진 것으로, \smash가 세로 크기를 0으로 만드는 데 비해 lap 계열은 가로 크기, 즉 폭을 0으로 만드는 도구입니다.
% 問題:長い下付き条件が総和の前後に余白を作る
\[ \sum_{1 \le i \le j \le n} a_{ij} \]
% 直し方:条件を幅ゼロの箱に入れ、式の幅を記号本体に保つ
\[ \sum_{\mathclap{1 \le i \le j \le n}} a_{ij} \]mathtools를 읽었다는 것이 전제입니다(\usepackage{mathtools}, amsmath도 자동으로 들어옵니다). 이 명령들과 \clap 같은 본문 버전, [mathstyle] 선택 인수는 mathtools 페이지에서 자세히 다룹니다.
조건을 “가로로 줄이는” 대신 여러 줄로 쌓고 싶다면 amsmath의 \substack{...}이 알맞습니다. \sum_{\substack{0<i<m \\ 0<j<n}}처럼 \\로 줄을 나누면 두 조건이 합 기호 아래에 두 줄로 조판됩니다.
기호를 겹치고 간격을 좁히기
문제(첫째). “요구에 의해 같다”를 나타내는 등호 위 느낌표 \overset{!}{=}나 “정말 같은가?”를 나타내는 \overset{?}{=}처럼, 기존 기호의 위아래에 임의의 기호를 작게 얹고 싶을 때가 있습니다. 첨자(^, _)는 기호의 오른쪽 옆에 붙어 버려 바로 위나 바로 아래에 오지 않습니다.
고치는 방법. amsmath의 \overset{above}{base}와 \underset{below}{base}를 사용합니다. \overset{!}{=}라면 등호 바로 위에 느낌표가 작게 올라갑니다. 두 번째 인수가 바탕이고 첫 번째 인수가 덧붙이는 쪽입니다.
\[
a \overset{!}{=} b, \qquad x \overset{?}{=} y,
\qquad A \overset{f}{\longrightarrow} B
\]\overset / \underset의 더 자세한 사용법, 예를 들어 화살표에 적용하거나 중첩하는 방법은 “위아래 장식” 페이지에 있습니다.
문제(둘째). 반대로 기호들이 너무 멀리 떨어져 있는 경우도 있습니다. 대표적인 예가 이중·삼중 적분으로, \int\int처럼 나란히 쓰면 적분 기호 사이가 너무 벌어져 별개의 적분처럼 보입니다.
고치는 방법. 음수 얇은 공백 \!(−3 mu, \,의 정확한 반대)으로 좁힙니다. \int\!\!\int처럼 사이에 넣으면 두 적분 기호가 알맞게 가까워집니다. 다중 적분에는 amsmath의 \iint, \iiint 전용 명령도 있습니다. \!를 포함한 수식 간격 조정은 첨자와 간격 페이지의 mu 표에 정리되어 있습니다.
\[
\int\int f \, dA % 間が空きすぎ
\qquad
\int\!\!\int f \, dA % \! で適度に詰める
\]