행렬, 벡터, 표처럼 격자 모양으로 배치된 수식은 amsmath 패키지의 행렬 환경(pmatrix 등)이나 더 범용적인 array 환경으로 조판합니다. 둘 다 원소를 가로로는 &, 세로로는 \\ 로 나누는 같은 감각으로 쓰지만, 자동으로 붙는 괄호와 정렬을 제어할 수 있는 자유도가 다릅니다. 이 페이지에서는 용도에 따라 고르는 행렬 환경들, 열 정렬과 세로줄을 직접 지정하는 array, 증강 행렬을 만드는 법, 그리고 행렬 안에서 “이하 계속”을 나타내는 점들 \cdots, \vdots, \ddots를 차례로 살펴봅니다.
amsmath의 행렬 환경
행렬을 조판하는 가장 쉬운 방법은 amsmath 패키지가 제공하는 행렬 환경들을 쓰는 것입니다. 프리앰블에 \usepackage{amsmath}를 적어 두면 사용할 수 있습니다. 모두 수식 모드 안에서 쓰며, 원소는 행 안에서 &(앰퍼샌드)로 나누고 행은 \\(백슬래시 두 개)로 끝냅니다. 환경마다 다른 것은 행렬을 감싸는 괄호(구분 기호)뿐이고, 내부를 쓰는 방식은 같습니다.
이름에는 규칙이 있습니다. 앞 글자가 괄호의 종류를 나타내며, p는 parentheses(소괄호), b는 brackets(대괄호), v는 vertical bar(세로줄)의 머리글자입니다. 대문자로 시작하는 Bmatrix와 Vmatrix는 각각 더 강한 느낌의 중괄호와 이중 세로줄에 대응합니다. 기본 matrix는 괄호를 붙이지 않습니다.
| 환경 | 붙는 괄호 | 주요 용도 |
|---|---|---|
matrix | 없음 | 괄호를 직접 붙일 때의 바탕 |
pmatrix | 소괄호 ( ) | 가장 일반적인 행렬과 열벡터 |
bmatrix | 대괄호 [ ] | 행렬(대괄호를 선호하는 관례) |
Bmatrix | 중괄호 { } | 집합적인 묶음을 보이고 싶을 때 |
vmatrix | 세로줄 | | | 행렬식 |
Vmatrix | 이중 세로줄 ‖ ‖ | 노름 |
smallmatrix | 없음(소형) | 본문 안에 넣는 작은 행렬 |
다음 예는 같은 2×2 내용을 pmatrix, bmatrix, vmatrix로 조판한 것입니다. \\ 앞뒤의 공백과 줄바꿈은 출력에 영향을 주지 않으므로, 소스는 읽기 좋게 정리해도 됩니다.
\[
\begin{pmatrix}
a & b \\
c & d
\end{pmatrix}
\quad
\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
\quad
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix}
\]출력은 독립된 줄 가운데에 세 개의 2×2 행렬이 \quad 간격으로 나란히 놓인 모습입니다. 첫 번째는 소괄호, 두 번째는 대괄호, 세 번째는 좌우 세로줄이 있는 행렬식 형태입니다. 원소는 가운데 정렬되며 a, b, c, d는 변수로 기울임꼴 조판됩니다.
행렬 환경의 원소는 항상 가운데 정렬입니다. 열을 오른쪽이나 왼쪽으로 맞추라고 지정할 수 없습니다. 정렬 방식을 직접 정해야 한다면 아래에서 설명하는 array 환경을 쓰거나, mathtools 패키지가 제공하는 별표 버전(pmatrix*, bmatrix* 등)을 사용합니다. 별표 버전은 [r], [c], [l] 선택 인수를 받아 모든 열을 그 방향으로 맞춥니다. 예: \begin{pmatrix*}[r] … \end{pmatrix*}.
열 수 제한(MaxMatrixCols)
amsmath의 행렬 환경은 기본적으로 최대 10열까지만 조판할 수 있습니다. MaxMatrixCols라는 카운터의 초기값이 10으로 설정되어 있기 때문입니다. 11열 이상의 행렬을 만들려고 하면 열이 너무 많다는 오류가 납니다.
더 많은 열이 필요하면 \setcounter{MaxMatrixCols}{n}으로 이 한계를 올립니다. 예를 들어 20열까지 허용하려면 다음처럼 씁니다. 값을 크게 하면 LaTeX 처리는 무거워지지만, 현재 TeX 환경에서는 20 정도라면 실질적인 영향이 거의 없습니다. 원래대로 되돌리려면 값을 10으로 다시 설정합니다.
\setcounter{MaxMatrixCols}{20}
\[
\begin{pmatrix}
a_{1} & a_{2} & \cdots & a_{12}
\end{pmatrix}
\]이 한계는 amsmath의 행렬 환경에만 적용되며, 다음에 설명하는 array 환경에는 적용되지 않습니다. array에서는 열 지정에 필요한 만큼 열을 쓰면 됩니다.
array 환경
array 환경은 자릿수 정렬과 선을 직접 지정할 수 있는 범용 격자 조판입니다. 본문 표를 만드는 tabular 환경의 수식 버전이며, 수식 모드 안에서만 사용할 수 있습니다(\[ \]나 equation 환경 안에 둡니다). 원소는 tabular처럼 &와 \\로 나누지만, 각 원소는 수식으로, 텍스트 스타일로 조판됩니다.
array에는 열 지정(column specification) 이라는 필수 인수가 있습니다. {ccc}처럼 열 개수만큼 정렬을 나타내는 문자를 나열합니다. l은 왼쪽 정렬, c는 가운데 정렬, r은 오른쪽 정렬입니다. 문자 사이에 |를 넣으면 그 위치에 세로줄이 그어집니다. 예를 들어 {l|c|r}은 “왼쪽 정렬, 세로줄, 가운데, 세로줄, 오른쪽 정렬”의 3열입니다.
array 자체는 괄호를 붙이지 않습니다. 행렬처럼 괄호로 감싸고 싶다면 \left( … \right)(또는 \left[ … \right] 등)로 직접 둘러쌉니다. \left와 \right는 내용의 높이에 맞춰 괄호를 자동으로 늘리므로, 행이 많은 행렬도 괄호가 전체 높이를 깔끔하게 감쌉니다. 이는 amsmath 행렬 환경이 내부에서 해 주는 일을 직접 쓰는 방식입니다.
\[
\left(\begin{array}{rrr}
1 & -2 & 3 \\
0 & 5 & -1 \\
4 & 0 & 2
\end{array}\right)
\]이 예는 소괄호로 둘러싼 3×3 행렬을 출력합니다. 열 지정이 {rrr}이므로 각 열은 오른쪽 정렬이 되고, -2나 -1처럼 음수가 붙은 항목도 오른쪽 자리에서 맞아 읽기 좋게 나열됩니다. 핵심은 항상 가운데 정렬인 pmatrix와 달리, array에서는 정렬 방식을 고를 수 있다는 점입니다.
증강 행렬(세로줄 포함)
연립일차방정식을 나타내는 증강 행렬처럼, 행렬 중간에 세로줄을 넣고 싶을 때가 있습니다. amsmath의 bmatrix 같은 환경은 열 지정을 받지 않으므로 세로줄을 넣을 수 없지만, array의 열 지정 |를 사용하면 가능합니다. 계수 부분과 상수항 사이에 |가 있는 열 지정(예: {cc|c})을 주고, 전체를 \left[ … \right]로 감쌉니다.
\[
\left[\begin{array}{cc|c}
1 & 2 & 5 \\
3 & 4 & 6
\end{array}\right]
\]이 코드는 대괄호로 감싼 2행 행렬을 출력하며, 2열과 3열 사이에 세로줄 하나가 그어진 증강 행렬이 됩니다. 왼쪽의 1 2 / 3 4는 계수 행렬이고, 세로줄 오른쪽의 5 / 6은 상수항 열입니다. \left[와 \right]가 내용 높이에 맞춰 대괄호를 늘리므로 행이 늘어나도 깨지지 않습니다.
같은 일을 소괄호로 하려면 \left( … \right)로, 중괄호라면 \left\{ … \right\}로 바꾸면 됩니다. mathtools 패키지를 쓰면 이런 증강 행렬을 더 간결하게 쓰는 방법도 제공됩니다.
행렬 안의 점들(…, ⋮, ⋱)
일반적인 n×n 행렬을 나타낼 때는 “이하 계속”을 뜻하는 점(생략 기호) 이 빠질 수 없습니다. LaTeX에는 방향이 다른 네 종류가 준비되어 있으며, 행렬의 어디에 쓰는지에 따라 골라 씁니다. 모두 수식 모드 명령입니다.
\cdots— 가운데 높이에 놓이는 가로 세 점(⋯)입니다. 행 안에서 원소를 생략할 때 씁니다.+나=와 같은 높이에 오므로 가로로 이어지는 생략에 알맞습니다.\vdots— 세로로 놓이는 세 점(⋮)입니다. 열 방향 생략에 씁니다.\ddots— 대각선(오른쪽 아래 방향) 으로 놓이는 세 점(⋱)입니다. 주대각선 방향 생략에 씁니다.\ldots(및 문맥 의존적인\dots) — 베이스라인에 놓이는 가로 세 점(…)입니다. 숫자나 첨자 나열의 생략에 씁니다. 행렬 안에서는 보통\cdots가 더 보기 좋습니다.
전형적인 사용법은 가로 생략에는 \cdots, 세로 생략에는 \vdots, 대각 생략에는 \ddots를 각각 행렬의 원소로 놓는 것입니다. 다음은 일반적인 n×n 행렬을 pmatrix로 쓰는 표준 예입니다.
\[
A =
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \cdots & a_{mn}
\end{pmatrix}
\]이는 소괄호로 감싼 m×n 행렬을 출력합니다. 첫째, 둘째, 마지막 행에서는 3열의 \cdots가 a_{12}와 a_{1n} 사이를 가운데 높이의 가로 점으로 채우고, 셋째 행에서는 각 열의 \vdots가 세로 점, 대각 위치의 \ddots가 오른쪽 아래로 내려가는 대각 점이 되어 “행도 열도 같은 식으로 계속된다”는 뜻을 보입니다. a_{11} 같은 첨자는 _로 아래첨자로 조판됩니다.
한 행 전체를 점선으로 채우고 싶다면 amsmath의 \hdotsfor{n}를 사용하면 지정한 n열을 가로 점선으로 가로질러 채울 수 있습니다.
본문 안의 작은 행렬(smallmatrix)
pmatrix 등을 인라인 수식(본문 속 $ … $)에 넣으면 행 높이가 크게 늘어나 앞뒤 줄 간격이 흐트러집니다. 본문 흐름 안에 작은 행렬을 넣고 싶다면 amsmath의 smallmatrix 환경을 사용합니다. 원소를 작고 조밀하게 조판하여 행 높이를 거의 망치지 않습니다.
smallmatrix 자체는 괄호를 붙이지 않으므로, 필요하다면 \bigl( … \bigr) 같은 괄호로 직접 감쌉니다. \left( \right)로도 둘러쌀 수 있지만, 인라인에서는 고정 크기인 \bigl과 \bigr가 줄 간격을 덜 흐트러뜨리는 경우가 많습니다.
回転行列 $\bigl(\begin{smallmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{smallmatrix}\bigr)$ を考える。이는 본문 한 줄 안에 소괄호로 감싼 작은 2×2 회전 행렬을 넣되, 행 높이는 거의 흐트러뜨리지 않는 출력이 됩니다. \cos와 \sin은 세운 함수 이름으로 조판됩니다.