가환도식은 대상을 점으로 배치하고 그 사이의 사상을 화살표로 나타내어 “어떤 경로로 합성해도 같다”는 사실을 한눈에 보이게 하는 그림입니다. LaTeX에서 이를 조판하는 주요 도구는 두 가지입니다. TikZ 위에 만들어진 강력한 tikz-cd와 AMS의 더 단순한 amscd입니다. 이 페이지에서는 가장 기본적인 도식인 가환 정사각형을 두 도구로 각각 조판하면서, 화살표 방향, 라벨, 선 모양을 지정하는 방법을 정리하고 어떤 경우에 무엇을 고를지 비교합니다.
가환도식이란
가환도식은 대수학, 범주론, 위상수학 등에서 관계를 한눈에 전달하기 위해 널리 쓰입니다. 가장 작은 예가 가환 정사각형입니다. 네 꼭짓점에 대상 A, B, C, D를 두고, 위쪽 변에는 A에서 B로 가는 사상 f, 아래쪽 변에는 C에서 D로 가는 사상 g, 왼쪽 변에는 A에서 C로 가는 사상, 오른쪽 변에는 B에서 D로 가는 사상을 화살표로 그립니다. “정사각형이 가환한다”는 말은 A에서 D로 가는 두 경로, 즉 위쪽을 지나 오른쪽으로 내려가는 합성과 왼쪽으로 내려간 뒤 아래쪽을 지나는 합성이 같은 사상이라는 주장입니다.
도식 자체도 수학의 일부이므로 보통 별행 수식 환경(\[ … \] 또는 equation 환경) 안에 둡니다. 역사적으로 이 목적을 위한 패키지(xy/xypic, diagrams 등)가 많이 만들어졌지만, 현재 사실상의 표준은 tikz-cd입니다. 곡선, 대각선 화살표, 세 줄 이상의 복잡한 도식도 자유롭게 그릴 수 있습니다. 반면 단순한 직사각형 도식으로 충분하다면 AMS의 amscd가 가볍고 편리합니다. 아래에서 둘을 차례로 살펴봅니다.
tikz-cd: 현대적인 선택
tikz-cd는 범용 그림 패키지 TikZ를 가환도식에 맞게 다듬은 것입니다. Florêncio Neves가 작성했고 현재는 Augusto Stoffel이 유지보수하며, 현재 CTAN 릴리스는 1.0(2021년 5월)입니다. 프리앰블에서 \usepackage{tikz-cd}로 읽거나, TikZ를 읽은 뒤 \usetikzlibrary{cd}를 쓰면 tikzcd 환경을 사용할 수 있습니다. 이 환경의 내용은 LaTeX의 tabular처럼 행렬 로 씁니다. 즉 셀은 &로 가로로 나누고, 행은 \\로 바꿉니다. 각 셀은 도식의 “대상”을 놓는 노드가 되며, 모든 내용은 자동으로 수학 모드로 조판됩니다.
대상 사이의 화살표는 \arrow 명령으로 그립니다. 짧은 별칭 \ar도 완전히 같은 역할을 합니다. 화살표를 시작할 셀에 \arrow[…]를 쓰고 대괄호 안에서 목적지와 장식을 지정합니다. 목적지는 방향 키로 줍니다. r은 오른쪽, l은 왼쪽, u는 위, d는 아래입니다. 이들은 문자열로 이어 쓸 수 있어, 예를 들어 [rd]는 오른쪽 아래 이웃 셀로 가는 대각선을 뜻합니다.
화살표에 라벨, 즉 사상의 이름을 붙이려면 옵션 안에 따옴표로 묶은 문자열 을 씁니다. \arrow[r, "f"]는 “오른쪽 이웃 셀로 가는, 라벨 f가 붙은 화살표”입니다. 라벨은 기본적으로 화살표의 왼쪽, 즉 진행 방향 기준 왼쪽에 놓입니다. 따옴표 라벨 바로 뒤에 아포스트로피 ' 를 붙이면 반대쪽으로 이동하며 "g"'처럼 씁니다. 하나의 화살표에 여러 라벨을 붙일 수도 있고, "f" near start처럼 위치를 세밀하게 지정할 수 있습니다. 다음은 전형적인 사용법을 보여 주는 짧은 예입니다.
\[
\begin{tikzcd}
A \arrow[r, "\phi"] \arrow[rd] & B \\
& C
\end{tikzcd}
\]이 코드는 왼쪽 위에 A, 오른쪽 위에 B, 오른쪽 아래에 C를 놓습니다. A에서 오른쪽의 B로는 라벨 φ가 붙은 수평 화살표가 가고, 동시에 A에서 오른쪽 아래 C로 대각선 화살표가 내려갑니다. \arrow[r, "\phi"]와 \arrow[rd]가 같은 셀 A 안에 연달아 쓰여 있다는 점에 주목하세요. 하나의 셀에서 원하는 만큼 화살표를 낼 수 있습니다.
이를 바탕으로 앞에서 말한 가환 정사각형 을 조판해 보겠습니다. 네 꼭짓점 A, B, C, D를 2×2 행렬로 놓고 네 화살표를 그립니다. A에서 오른쪽으로 f, A에서 아래로 왼쪽 변, B에서 아래로 오른쪽 변, C에서 오른쪽으로 g입니다.
\[
\begin{tikzcd}
A \arrow[r, "f"] \arrow[d, "\alpha"] & B \arrow[d, "\beta"] \\
C \arrow[r, "g"] & D
\end{tikzcd}
\]이 코드는 A, B, C, D를 네 꼭짓점에 둔 정사각형을 만듭니다. 위쪽에는 오른쪽 화살표 f, 아래쪽에는 오른쪽 화살표 g, 왼쪽에는 아래쪽 화살표 α, 오른쪽에는 아래쪽 화살표 β가 그려집니다. 각 라벨은 기본 쪽, 즉 화살표 진행 방향 기준 왼쪽에 놓입니다. 예를 들어 오른쪽 변의 β를 반대쪽, 바깥쪽으로 보내고 싶으면 \arrow[d, "\beta"']라고 씁니다. tikzcd 환경 내부는 수학 모드이므로 라벨에 일반 단어를 넣고 싶을 때는 tikz-cd 라벨 옵션 안에서 amsmath의 \text{…}를 사용합니다.
tikz-cd의 가장 큰 장점은 화살표의 모양을 세밀하게 바꿀 수 있다는 점입니다. 선 모양, 화살촉, 휘어짐은 \arrow 옵션에 스타일 키를 더하기만 하면 바뀝니다. 대표적인 것들을 다음 표에 정리했습니다. \arrow[r, tail, two heads, dashed]처럼 여러 개를 동시에 지정해 조합할 수 있습니다.
| 키 | 효과 |
|---|---|
hook | 꼬리 쪽에 갈고리(⊂)를 붙여 포함이나 단사를 나타냄 |
two heads | 화살촉을 이중으로 하여 전사를 나타냄 |
tail | 시작점에 꼬리를 붙임(단사의 다른 표기) |
dashed | 파선으로 만듦(종종 유일하게 정해진 사상) |
dotted | 점선으로 만듦(TikZ에서 온 키) |
equal | 화살표 대신 이중선(등호)을 그림 |
bend left | 화살표를 왼쪽 호로 휘게 함(bend left=20으로 각도 지정) |
bend right | 화살표를 오른쪽 호로 휘게 함 |
동형을 나타내는 \sim이나 \simeq를 라벨로 화살표 위에 올리는 일도 흔합니다. 예를 들어 \arrow[r, dashed, "\simeq"]는 파선 화살표 위에 동형 기호 ≃를 놓습니다. 같은 두 대상 사이에 두 개의 다른 호를 그려 구별하고 싶다면 bend left와 bend right를 나누어 씁니다. tikz-cd는 color=…, dotted, in=…/out=… 같은 TikZ 키도 그대로 받기 때문에 표현 범위는 사실상 TikZ 전체에 이릅니다.
주의할 점이 있습니다. tikzcd 도식은 DVI 뷰어에서 올바르게 표시되지 않습니다. PDF를 직접 생성하는 pdflatex, lualatex, xelatex로 컴파일하거나 DVI를 PDF/PS로 변환하는 경로를 사용하세요. 또한 \arrow에는 따옴표 문법이 나오기 전의 오래된 형식 \arrow[…]{direction}labels(예: \arrow{r}{f})도 있으며, 하위 호환을 위해 지금도 사용할 수 있습니다. 하지만 새 작업에는 따옴표 문법이 더 읽기 쉬워 권장됩니다.
amscd: AMS의 단순한 CD 환경
amscd는 AMS-TeX의 가환도식 기능을 LaTeX로 옮긴 패키지이며, 프리앰블에서 \usepackage{amscd}로 읽습니다. 제공하는 것은 CD 환경 하나뿐입니다. tikz-cd와 마찬가지로 내용을 &와 \\로 행렬처럼 쓰지만, 외부 패키지(TikZ)에 의존하지 않고 TeX 조판만으로 동작하므로 가볍습니다. 다만 설계가 의도적으로 단순하여 수평 및 수직 화살표만 그릴 수 있습니다. 자세한 내용은 아래에서 봅니다.
화살표는 모두 @ 로 시작하는 특별한 철자로 씁니다. 가로 화살표는 @>>>(오른쪽)와 @<<<(왼쪽), 세로 화살표는 @VVV(아래쪽, V는 vertical의 V)와 @AAA(위쪽, A를 위로 향한 화살표처럼 본 것)입니다. 등호, 즉 이중선은 가로가 @=, 세로가 @| 또는 @\vert입니다. 화살표를 두지 않고 비워 둘 격자점에는 @.(점)을 둡니다. 가로 화살표는 대상 사이, 즉 같은 행의 & 위치에 쓰고, 세로 화살표는 대상 바로 아래 행에 씁니다.
라벨은 화살표를 이루는 문자 사이 에 끼워 씁니다. 가로 @>>>에는 세 개의 > 구분자가 있어 두 개의 삽입 칸이 있습니다. 첫 번째 칸, 즉 @> 바로 뒤에 쓴 문자열은 화살표 위 에, 두 번째 칸의 문자열은 아래 에 옵니다. 따라서 @>f>>는 f를 위에, @>>g>는 g를 아래에, @>f>g>는 위에 f와 아래에 g를 둡니다. 세로 @VVV도 마찬가지로 @VfVV는 아래쪽 화살표의 왼쪽 에 f를, @VVfV는 오른쪽 에 f를 둡니다. @AAA도 같은 규칙입니다.
다음은 AMS amscd 매뉴얼에 있는 가환 정사각형 예입니다. \End가 \operatorname에 해당하는 연산자 이름으로 정의되어 있다고 가정합니다.
\[
\begin{CD}
S^{{\mathcal{W}}_\Lambda}\otimes T @>j>> T \\
@VVV @VV{\End P}V \\
(S\otimes T)/I @= (Z\otimes T)/J
\end{CD}
\]이 도식에서 위 행은 왼쪽 대상에서 오른쪽 T로 가는 수평 화살표를 만들고, 위에 라벨 j를 둡니다. 가운데 행(@VVV와 @VV{\End P}V)은 세로 화살표를 만듭니다. 왼쪽 열에는 라벨 없는 아래쪽 화살표가, 오른쪽 열에는 오른쪽에 End P 라벨이 붙은 아래쪽 화살표가 생깁니다. 아래 행에서는 두 대상이 @=, 즉 이중선 등호로 연결됩니다. 라벨에 {\End P}처럼 중괄호를 쓰는 것은 여러 토큰 라벨을 하나로 묶기 위해서입니다.
amscd로 이 페이지 처음의 f/g/α/β 가환 정사각형을 조판하면 다음과 같습니다. 왼쪽과 오른쪽 세로 화살표의 라벨은 위에서 설명한 대로 첫 번째 삽입 칸, 즉 왼쪽에 둡니다.
\[
\begin{CD}
A @>f>> B \\
@VV\alpha V @VV\beta V \\
C @>g>> D
\end{CD}
\]이 코드는 A, B, C, D를 네 꼭짓점에 둔 정사각형을 만듭니다. 위쪽에는 오른쪽 화살표 f, 아래쪽에는 오른쪽 화살표 g, 왼쪽에는 아래쪽 화살표 α, 오른쪽에는 아래쪽 화살표 β가 있습니다. tikz-cd 예와 완전히 같은 도식이며, 다른 점은 @ 철자 표기뿐입니다. amscd의 CD 환경은 수학 모드이므로 이것도 별행 수식 안에 둡니다. 위에서는 \[ … \]를 사용했습니다.
무엇을 사용할까
두 패키지의 범위는 분명히 다릅니다. amscd의 CD 환경은 격자형, 즉 직사각형 도식만 다룹니다. AMS 매뉴얼 자체도 “단순한 직사각형 도식만 대상으로 하며 대각선 화살표나 더 복잡한 기능은 없다”고 명시합니다. 이것이 가장 큰 제약입니다. 대각선 화살표, 곡선, 세 줄 이상의 복잡한 도식이 필요하다면 amscd로는 그릴 수 없고 tikz-cd 또는 xy 계열을 사용하게 됩니다.
- 대각선 화살표나 곡선이 필요 →
tikz-cd.amscd는 수평/수직만 가능하고 기울일 수 없습니다. - 화살촉과 선 모양을 세밀하게 바꾸고 싶음(단사
hook, 전사two heads, 파선, 이중선 등) →tikz-cd. - 단순한 직사각형 도식이면 충분/의존성을 가볍게 하고 싶음 →
amscd. TikZ를 읽지 않아 가볍고 빠릅니다. - 표기 취향:
amscd의@>>>철자는 간결하지만 독특합니다.tikz-cd의\arrow[r, "f"]는 길지만 독자에게 명확합니다. - 출력 경로:
tikz-cd는 DVI 뷰어에서 올바르게 표시되지 않으므로 PDF를 생성하는 엔진(pdfLaTeX 등)을 전제로 합니다.amscd에는 그런 제약이 없습니다.
대략적인 기준은 이렇습니다. 논문에 가끔 직사각형 도식이 나오는 정도라면 추가 의존성 없이 빠르게 조판할 수 있는 amscd로 충분합니다. 도식이 핵심이고 기울어진 사상, 곡선, 정교한 화살촉을 많이 쓴다면 tikz-cd를 고릅니다. 또한 “A → B” 정도로 아주 단순하다면 도식 환경을 꺼낼 필요 없이 amsmath의 \xrightarrow{f} 같은 인라인 명령으로 충분한 경우도 많다는 점을 기억해 두면 좋습니다.