별행 수식에는 한 줄만으로 부족한 경우가 많습니다. 긴 식을 여러 줄로 나누고, 등호를 맞추고, 각 줄에 연속 번호를 붙인 뒤 나중에 다시 참조합니다. 이런 다중 행 수식 장치는 거의 모두 amsmath 패키지가 제공합니다. 이 페이지에서는 번호가 붙는 equation, 정렬 환경인 align, gather, multline, split, 경우 나누기의 cases, 그리고 번호 제어(\notag, \tag, subequations)를 차례로 봅니다. 인라인/별행 수식으로 들어가는 기본 내용은 “Math mode basics”에서 다루므로, 여기서는 여러 줄과 번호 매기기를 더 깊게 다룹니다.
먼저 amsmath 불러오기
이 페이지에서 다루는 환경은 equation을 제외하고 모두 amsmath package가 제공합니다. 프리앰블에 한 줄만 추가하면 됩니다. 수식을 조금이라도 쓰는 새 문서라면 amsmath를 불러오는 것이 사실상의 표준이며, 별행 수식 환경, 정렬, 번호 제어를 한곳에서 사용할 수 있습니다.
\usepackage{amsmath}amsmath는 기본 LaTeX보다 별행 수식 구조를 크게 확장합니다. 순수 LaTeX에도 있는 equation 환경에 더해 align과 align*, gather와 gather*, multline과 multline*, alignat과 alignat*, flalign과 flalign*, 그리고 split을 제공합니다. 이 환경들 안에는 빈 줄을 넣으면 안 됩니다. 빈 줄은 문단 구분으로 읽혀 오류가 납니다. 수식 번호를 왼쪽에 두려면 \usepackage[leqno]{amsmath}를, 오른쪽(가로쓰기 기본값)에 두려면 [reqno]를, 별행 수식을 왼쪽 정렬하려면 [fleqn] 옵션을 사용합니다.
번호가 붙는 한 줄 — equation
별행 수식의 출발점은 equation environment입니다. 내용을 독립된 줄에 배치하고 오른쪽 여백(가로쓰기 기본값)에 연속 번호를 자동으로 붙입니다. 번호는 equation 카운터가 관리하며, \label{…}을 붙이면 본문에서 \ref{…} 또는 \eqref{…}로 참조할 수 있습니다(참조는 아래에서 자세히 설명합니다). 번호가 필요 없을 뿐이라면 별표가 붙은 equation*을 사용합니다. 이는 기본 LaTeX의 displaymath(\[ … \])와 같아서 번호 없는 별행 수식을 만듭니다.
\begin{equation}
\label{eq:euler}
e^{i\pi} + 1 = 0
\end{equation}이 출력에서는 오일러 항등식이 독립된 줄의 가운데에 놓이고, 그 줄 오른쪽 끝에 (1) 같은 번호가 붙습니다(번호는 문서 전체의 연속 번호이므로 반드시 1은 아닙니다). equation은 한 줄 분량의 식에 하나의 번호를 주는 환경입니다. 한 줄에 들어가지 않는 식이나 여러 식을 정렬하려면 아래의 정렬 환경을 사용합니다. \[ … \]와 번호 없는 display의 기본은 관련 페이지 “Math mode basics”에서 다룹니다.
여러 줄 맞추기 — align과 gather
여러 식을 세로로 쌓을 때 가장 자주 쓰는 것은 align 환경입니다. 각 줄은 \\로 나누고, 맞추고 싶은 위치에 & 하나를 둡니다. 관례적으로 &는 등호나 부등호 같은 관계 기호 바로 앞에 두어 관계 기호의 세로 위치를 맞춥니다. 중요한 점은 &를 관계 기호의 앞에 둔다는 것입니다(뒤에서 다룰 오래된 eqnarray는 뒤에 두기 때문에 간격이 흐트러집니다). align은 각 줄에 번호를 붙이고, 별표가 붙은 align*은 번호를 붙이지 않습니다.
\begin{align}
(x + y)^2 &= x^2 + 2xy + y^2 \\
(x - y)^2 &= x^2 - 2xy + y^2
\end{align}이 출력에서는 두 식이 세로로 쌓이고 두 등호가 정확히 같은 가로 위치에 맞으며, 각 줄 오른쪽 끝에 번호가 붙습니다. &의 왼쪽(좌변)은 오른쪽 정렬, 오른쪽(우변)은 왼쪽 정렬로 조판되므로 등호를 기준으로 양쪽이 깔끔하게 맞습니다. 마지막 줄 뒤에는 \\를 붙이지 마세요. 불필요한 여백이 생깁니다.
align은 여러 식을 가로로 나란히 배치할 수도 있습니다. &를 정렬 표시와 열 구분자로 모두 사용하여 “관계 기호 앞의 &”와 “다음 식 앞의 &”를 번갈아 둡니다. 즉 한 식의 묶음은 “오른쪽 정렬 부분 & 관계 기호가 붙은 왼쪽 정렬 부분”으로 쓰고, 다음 식과의 사이에 또 하나의 &를 넣습니다.
\begin{align}
x &= y & X &= Y & a &= b + c \\
x' &= y' & X' &= Y' & a' &= b \\
x + x' &= y + y' & X + X' &= Y + Y' & a'b &= c'b
\end{align}이 출력에서는 세 묶음의 식이 가로 세 열로 놓이고, 각 열 안에서 등호가 맞으며, 줄마다 하나의 번호가 붙습니다. amsmath는 열 사이에 일정한 간격을 자동으로 확보합니다.
반대로 정렬은 필요 없고 여러 식을 가운데에만 놓고 싶을 때는 gather 환경을 사용합니다. gather에는 &에 의한 정렬이 없으며, 각 줄이 서로 독립적으로 가운데 정렬됩니다. 줄은 \\로 나누고 각 줄에 번호가 붙습니다(번호 없음은 gather*). 필요하다면 gather의 한 줄 안에 아래에서 설명하는 split을 넣어 하나의 식을 여러 줄로 나눌 수도 있습니다.
\begin{gather}
a^2 + b^2 = c^2 \\
e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!}
\end{gather}이 출력에서는 두 식이 각각 자기 줄의 가운데에 놓이고(서로의 기호 위치는 맞지 않음), 각 줄 오른쪽 끝에 번호가 붙습니다. align은 “관계 기호에서 맞춘다”, gather는 “그냥 가운데에 쌓는다”라고 기억하면 구분하기 쉽습니다.
긴 식 하나 나누기 — multline과 split
한 줄에 들어가지 않는 하나의 식을 여러 줄로 나누는 환경은 두 가지입니다. multline과 split이며, 둘 다 align/gather와 달리 하나의 식에 하나의 번호를 줍니다.
multline은 정렬을 하지 않습니다. 대신 첫 줄은 왼쪽 끝, 마지막 줄은 오른쪽 끝에 맞추고, 중간 줄은 가운데에 둡니다. 줄은 \\로 나눕니다. 전체 식의 번호는 마지막 줄에 붙습니다(leqno 옵션이면 첫 줄). multline은 하나의 식에 하나의 번호를 주므로 개별 줄을 \notag로 지우면 안 됩니다. 중간 줄을 어느 한쪽으로 밀고 싶다면 \shoveleft{…} 또는 \shoveright{…}를 사용하고, 그 줄 전체(바로 뒤의 \\ 제외)를 인수로 넘깁니다. 번호 없는 형식은 multline*입니다.
\begin{multline}
a + b + c + d + e + f \\
+ g + h + i + j + k + l + m + n
\end{multline}이 출력에서는 긴 합이 두 줄로 나뉘고, 첫 부분 a + … + f는 왼쪽 끝에, 이어지는 + g + … + n은 오른쪽 끝에 놓이며, 전체 식에 하나의 번호가 붙습니다. 중간 줄이 있으면 가운데에 놓입니다. multline에는 정렬용 &를 쓰지 않습니다. \\로 줄바꿈 위치만 표시합니다.
나뉜 줄들을 정렬하고 싶을 때는 split을 사용합니다. split은 align처럼 &에서 정렬하지만, 정렬할 수 있는 열은 하나뿐이고(한 줄에 & 하나), 자체 번호를 갖지 않습니다. 번호를 제공하는 equation(또는 align/gather)의 안쪽에 놓아 사용하며, 전체 구조에 하나의 번호가 붙습니다. split은 multline 안에는 넣을 수 없습니다.
\begin{equation}
\label{eq:cosh}
\begin{split}
\cosh x &= \frac{e^x + e^{-x}}{2} \\
&= 1 + \frac{x^2}{2!} + \frac{x^4}{4!} + \cdots
\end{split}
\end{equation}이 출력에서는 하나의 식이 두 줄로 나뉘고, 두 줄의 등호가 세로로 맞으며, equation이 제공하는 하나의 번호가 붙습니다(기본적으로 세로 가운데 높이). split은 나뉜 하나의 식을 등호에서 맞추는 표준 도구로, 정렬하지 않는 multline과 짝을 이룹니다. split의 내용은 바깥 구조의 본문 전체를 차지해야 하며, \label처럼 출력을 만들지 않는 명령만 함께 둘 수 있습니다.
| 환경 | 식 / 번호 | 정렬 | 주요 용도 |
|---|---|---|---|
equation | 하나 / 하나 | 없음 | 별행 수식 한 줄 |
align | 여러 개 / 줄마다 | 있음, &에서 | 관계 기호에 맞춰 쌓기 |
gather | 여러 개 / 줄마다 | 없음(각 줄 가운데) | 정렬 없이 가운데 쌓기 |
multline | 하나 / 하나 | 없음(왼쪽→오른쪽) | 긴 식 나누기, 정렬 없음 |
split | 하나 / 없음(바깥쪽이 제공) | & 열 하나 | 나눈 식의 줄을 정렬 |
경우 나누기 — cases
조건에 따라 함수를 나누어 정의할 때는 cases 환경을 사용합니다. 왼쪽에는 큰 중괄호 {가 자동으로 붙고, 각 줄에서는 &로 “값”과 “조건”을 나누며, 줄은 \\로 구분합니다. 조건 부분의 말(“if …” 등)은 수식 모드 그대로 두면 기울임꼴과 좁은 자간으로 나오므로 \text{…}로 감싸 직립체와 올바른 간격으로 조판합니다. cases 자체는 번호를 갖지 않으므로 보통 equation 안에 넣어 전체 식에 번호 하나를 붙입니다.
\begin{equation}
|x| =
\begin{cases}
x & \text{if } x \ge 0, \\
-x & \text{if } x < 0.
\end{cases}
\end{equation}이 출력에서는 왼쪽에 큰 중괄호가 있고, 그 오른쪽에 두 줄 x(조건 “if x ≥ 0”)와 −x(조건 “if x < 0”)가 놓이며, equation에서 온 번호 하나가 붙습니다. 값 열과 조건 열은 각각 왼쪽 정렬됩니다. cases의 내용은 text style(작은 크기)로 조판되므로 분수 등을 크게 보이고 싶다면 mathtools 패키지의 dcases 환경을 사용합니다. dcases는 display style로 조판합니다.
번호 제어 — \notag, \tag, subequations
align이나 gather 같은 번호 있는 환경에서는 각 줄에 자동으로 번호가 붙습니다. amsmath는 이를 줄 단위로 조정하는 방법을 제공합니다.
- 한 줄의 번호만 없애기: 그 줄의
\\앞에\notag(또는 같은 뜻의\nonumber)을 둡니다.\notag는 별행 환경 밖에서는 사용할 수 없습니다. - 번호를 직접 붙이거나 덮어쓰기:
\tag{…}는 자동 번호 대신 주어진 내용을 번호로 조판합니다(괄호는 자동으로 붙습니다).\tag*{…}는 괄호를 붙이지 않고 주어진 텍스트를 그대로 출력합니다. - 관련 식을 1a, 1b, …로 묶기:
subequations환경으로 감싸면 내부 식이 (1a), (1b), …처럼 부모 번호에 문자를 붙여 번호가 매겨집니다.
\begin{align}
y &= (x + 1)^2 \notag \\
&= x^2 + 2x + 1 \\
E &= mc^2 \tag{$\star$}
\end{align}이 출력에서는 첫 줄이 \notag 덕분에 번호 없음이 되고, 둘째 줄은 평소처럼 자동 번호를 가지며, 셋째 줄은 자동 번호 대신 (⋆)를 받습니다. \notag와 \tag를 조합하면 여러 줄 식 변형의 중간 줄은 번호 없이 두고 결론 줄에만 번호를 붙이는 제어를 자연스럽게 할 수 있습니다.
관련 식을 하나의 번호 아래에 모으고 싶다면 subequations로 감쌉니다. 앞의 번호 있는 식이 (4)였다면, 그룹 안의 식은 (4a), (4b), (4c), …처럼 번호가 붙습니다. \begin{subequations} 바로 뒤에 둔 \label은 자식 (4a)가 아니라 부모 번호 (4)를 가리킵니다.
\begin{subequations}
\label{eq:max}
\begin{align}
\nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \label{eq:gauss} \\
\nabla \cdot \mathbf{B} &= 0
\end{align}
\end{subequations}이 출력에서는 두 식이 등호에서 맞추어지고, 부모 번호에 문자를 붙인 (4a), (4b)처럼 번호가 매겨집니다(부모 번호는 문서의 연속 번호). 그러면 \eqref{eq:gauss}는 (4a)를, \eqref{eq:max}는 그룹 전체를 나타내는 (4)를 반환합니다.
다시 참조하기 — \label과 \eqref
번호가 붙은 식에 \label{…}로 이름표를 달면 본문에서 번호로 인용할 수 있습니다. \ref{…}는 번호 자체(예: 3.2)를 반환하고, amsmath의 \eqref{…}는 괄호를 보태 (3.2)를 반환합니다. \eqref의 괄호는 주변 글꼴과 관계없이 항상 직립체로 조판되므로 수식 참조에는 \eqref가 편리합니다. 여러 줄 환경에서는 번호를 원하는 그 줄에 \label을 둡니다(align에서는 각 줄마다, subequations에서는 각 자식 식 줄마다).
式~\eqref{eq:euler} より $e^{i\pi} = -1$ が従う。
By~\eqref{eq:euler}, we have $e^{i\pi} = -1$.출력은 예를 들어 “By equation (1), …”처럼 \label{eq:euler}가 붙은 식의 번호를 괄호와 함께 본문에 삽입합니다. 참조를 확정하려면 상호 참조 때문에 보통 두 번 컴파일합니다. \ref/\label의 일반적인 원리는 “Cross-references” 페이지에서 다룹니다. 장이나 절마다 번호를 재설정하고 싶다면((1.1), (2.1), …처럼), 프리앰블에 \numberwithin{equation}{section}을 씁니다. 번호의 모양 자체는 \theequation 명령이 제어하며, article 기본값은 \arabic{equation}, book/report 기본값은 \thechapter.\arabic{equation}(장 번호 더하기 연속 번호)입니다. 형식을 직접 바꾸려면 예를 들어 \renewcommand{\theequation}{\thesection.\arabic{equation}}처럼 재정의합니다.
eqnarray 피하기
오래된 문서에서는 여러 줄 수식에 eqnarray(및 eqnarray*)를 쓰는 경우가 있습니다. 이 환경은 amsmath보다 오래되었지만, 오늘날에는 사용하지 않아야 합니다. 가장 큰 문제는 관계 기호 주변의 간격입니다. eqnarray는 등호 양쪽에 부자연스럽게 넓은 간격을 넣고, 그 간격도 다른 수식 환경과 맞지 않습니다. 더 나쁘게는 줄이 길 때 수식 번호가 본문 위에 겹쳐 인쇄될 수 있으며, 정리 패키지의 \qedhere도 그 안에서 작동하지 않습니다.
amsmath 공식 매뉴얼과 LaTeX 참고 문서는 모두 eqnarray를 피하고 align(여러 식 정렬) 또는 equation + split(하나의 식 나누기)을 쓰라고 권합니다. &를 어디에 두는지도 주의해야 합니다. align 계열은 관계 기호 앞에 &를 두지만, eqnarray는 관계 기호 뒤에 두도록 설계되어 간격이 어긋나는 원인 중 하나가 됩니다. 새로 작성한다면 주저하지 말고 amsmath 환경을 선택하세요.