TikZ는 이제 작도의 사실상 표준이지만 유일한 선택지는 아닙니다. TikZ보다 오래전부터 쓰였고 지금도 역할이 있는 그리기 시스템들이 있습니다. PostScript의 힘을 빌리는 PSTricks, 도식에 강한 오래된 Xy-pic, 2D와 3D를 모두 다루는 독립 언어 Asymptote, METAFONT의 계보를 잇는 MetaPost입니다. 이 페이지는 이러한 비 TikZ 그리기 시스템이 각각 무엇이며 언제 쓰는지, 특히 각 시스템의 “출력 경로의 특성”을 정리합니다. 새 작업이라면 기본적으로 TikZ로 충분하며, 이들은 기존 문서, 3D, 특정 생태계를 위해 알아 두는 도구라는 위치입니다.
먼저 TikZ가 기본
본론에 들어가기 전에 입장을 분명히 하겠습니다. 지금 LaTeX에서 그림을 그리기 시작한다면 먼저 TikZ를 선택하는 것이 맞습니다. TikZ는 활발히 유지보수되고, 추가 외부 도구 없이 pdflatex, lualatex, xelatex 모두에서 동작하며, 문서의 글꼴과 색에 자연스럽게 어울리고, 주변에 tikz-cd, PGFPlots, circuitikz 같은 방대한 라이브러리 생태계가 있습니다. TikZ 자체는 “TikZ 기본” 페이지에서 다룹니다.
그렇다면 왜 다른 시스템을 알아야 할까요? 이유는 주로 세 가지입니다. 첫째는 기존 문서입니다. 오래된 논문, 책, 템플릿은 PSTricks나 Xy-pic으로 쓰였을 수 있고, 유지보수나 개정을 위해 읽을 수 있어야 합니다. 둘째는 3D입니다. 본격적인 3차원 그림은 Asymptote가 가장 강합니다. 셋째는 특정 생태계입니다. ConTeXt 세계에서는 MetaPost(MetaFun)가 중심적인 작도 수단입니다. 아래에서 차례로 봅니다.
PSTricks: PostScript의 힘
PSTricks는 PostScript의 그리기 기능을 TeX/LaTeX 소스 안에서 직접 호출하는 매크로 모음입니다. 이름처럼 내부에서 PostScript를 사용하므로 채우기, 그라데이션, 좌표 변환 등을 높은 품질로 처리할 수 있습니다. 프리앰블에서 \usepackage{pstricks}로 읽고, 그림은 pspicture 환경 안에 씁니다. 좌표는 환경을 열 때 \begin{pspicture}(0,0)(4,3)처럼 왼쪽 아래와 오른쪽 위로 줍니다.
기본 그리기 명령은 대체로 이름만 봐도 기능을 알 수 있습니다. \psline은 선(또는 꺾은선), \pscircle은 원, \psframe은 직사각형을 그립니다. 좌표는 \psline(0,0)(3,2)처럼 괄호에 주고, 원은 \pscircle(2,2){1}처럼 중심과 반지름을 지정합니다. 임의의 객체(문자나 다른 그림)를 특정 좌표에 놓으려면 \rput을 써서 \rput(2,1){text}처럼 씁니다. 위치에 각도나 오프셋을 더하고 싶으면 \uput도 사용할 수 있습니다. 다음은 최소 예입니다.
\begin{pspicture}(0,0)(4,3)
\psframe(0,0)(4,3)
\psline{->}(0,0)(3,2)
\pscircle(2,1.5){1}
\rput(2,1.5){$O$}
\end{pspicture}이 그림은 너비 4, 높이 3의 직사각형 테두리를 그리고, 그 안에 원점에서 (3,2)로 향하는 화살표 선분을 그리며, 중심 (2,1.5), 반지름 1의 원을 겹치고, 원 중심에 수식 기호 O를 놓습니다. \psline{->}의 {->}는 화살촉 지정이며, PSTricks에서는 선 종류, 화살촉, 색 등을 대괄호 [...] 옵션으로 함께 줍니다(예: \psline[linewidth=2pt,linecolor=red]{->}(...)).
여기서 가장 큰 주의점이 있습니다. PSTricks는 PostScript의 \special(DVI에 삽입되는 특수 명령)에 의존하므로, PDF를 직접 생성하는 pdflatex에서는 그대로 동작하지 않습니다. 고전적이고 확실한 경로는 DVI를 거치는 latex → dvips → ps2pdf입니다. 즉 latex로 DVI를 만들고, dvips로 PostScript로 변환한 뒤, ps2pdf(Ghostscript)로 PDF를 만듭니다.
latex figure.tex
dvips figure.dvi -o figure.ps
ps2pdf figure.ps어떻게든 pdflatex 작업 흐름에 넣고 싶거나 PNG/JPEG 이미지도 섞고 싶다면 우회책이 있습니다. pst-pdf와 auto-pst-pdf 패키지는 PSTricks 부분만 뒤에서 PostScript 경유로 렌더링해 PDF 조각으로 바꾸고, 이를 pdflatex 출력에 포함합니다(auto-pst-pdf는 외부 처리를 호출하므로 --shell-escape로 실행해야 합니다. 같은 계열의 pdftricks도 -shell-escape가 필요합니다). 또 다른 방법은 XeLaTeX로 조판하는 것으로, xetex-pstricks 패키지가 있으면 소스를 바꾸지 않고 xelatex로 PSTricks를 다룰 수 있습니다.
PSTricks에는 pst-plot(함수 플롯), pst-node(노드와 연결), pst-3dplot(3D 플롯) 등 파생 패키지가 풍부해 표현력은 여전히 높습니다. 다만 출력 경로 제약이 있는 만큼, 새 문서에서는 TikZ가 더 다루기 쉬운 경우가 많습니다.
Xy-pic: 도식의 원로
Xy-pic(패키지 이름 xy)은 그래프와 도식을 조판하기 위한 오래된 범용 패키지입니다. plain TeX, LaTeX, AMS-LaTeX에서 모두 동작하며, 범주론, 대수, 위상수학뿐 아니라 오토마타, 데이터베이스, 화학, 계보도 등 여러 분야의 도식에 사용되어 왔습니다. LaTeX에서는 보통 \usepackage[all]{xy}로 불러오며, [all]은 표준 기능 묶음을 켭니다.
가장 많이 쓰이는 부분, 특히 가환 도식에서 쓰이는 것은 \xymatrix입니다. 이는 도식을 행렬처럼 배치하는 모드로, tabular처럼 항목은 &로 가로로 나누고 행은 \\로 바꿉니다. 대상 사이의 화살표는 \ar 명령으로 그리며, 목적지는 방향 키로 지정합니다. [r]은 오른쪽, [l]은 왼쪽, [u]는 위, [d]는 아래이고, [rd]처럼 이어 쓰면 대각선(오른쪽 아래 이웃 칸)을 가리킵니다. 화살표에 라벨을 올릴 때는 수식의 첨자와 같은 표기를 재사용합니다. ^는 라벨을 화살표 위쪽(왼쪽)에, _는 아래쪽(오른쪽)에 놓습니다.
\[
\xymatrix{
A \ar[r]^{f} \ar[d]_{\alpha} & B \ar[d]^{\beta} \\
C \ar[r]_{g} & D
}
\]이는 네 꼭짓점에 A, B, C, D를 둔 가환 정사각형을 만듭니다. 위쪽 변에는 오른쪽을 향하는 f, 왼쪽 변에는 아래쪽을 향하는 α, 오른쪽 변에는 아래쪽을 향하는 β, 아래쪽 변에는 오른쪽을 향하는 g가 그려집니다. 라벨 f는 위쪽 화살표 위에, g는 아래쪽 화살표 아래에 놓입니다. 도식 자체도 수학식의 한 종류이므로 별행 수식 환경(\[ … \]) 안에 넣습니다.
Xy-pic은 역사적으로 중요하고 지금도 많은 문서에서 보이지만, 가환 도식에 관해서는 TikZ 기반의 tikz-cd가 현대적인 대안입니다. tikz-cd는 곡선, 정교한 화살촉, 복잡한 여러 줄 도식을 더 쉽게 다루며 오류 메시지도 더 친절합니다. 새로 쓸 때는 tikz-cd, 기존 Xy-pic 문서를 유지보수할 때는 이 절의 지식이라는 식으로 나누는 것이 좋습니다. 두 방식의 비교는 “가환 도식” 페이지에서 자세히 다룹니다.
Asymptote: 2D와 3D를 위한 언어
Asymptote는 TeX 매크로 모음이 아니라 독립적인 벡터 그래픽 언어입니다. C++와 비슷한 문법을 가지며, 변수, 함수, 반복문, 타입을 갖춘 본격적인 프로그래밍 언어로 그림을 기술합니다. LaTeX가 과학기술 문서에 제공하는 고품질 조판을 그림에도 같은 수준으로 제공하는 것을 목표로 하며, 2D뿐 아니라 3D 그림을 높은 품질로 그릴 수 있다는 점이 두드러집니다. 라벨 조판에는 TeX를 사용하므로 그림 속 수식도 본문과 같은 글꼴로 맞춰집니다.
LaTeX에 삽입하려면 프리앰블에서 \usepackage{asymptote}를 불러오고, 그림 코드를 asy environment(\begin{asy} … \end{asy}) 안에 씁니다. 구조상 컴파일은 세 단계가 됩니다. 먼저 latex(또는 pdflatex)를 실행하면 각 asy 환경의 내용이 임시 .asy 파일로 쓰입니다. 다음으로 외부 프로그램 asy를 이 파일들에 실행하여 그림을 생성합니다(pdflatex용은 PDF, latex/dvips용은 EPS). 마지막으로 latex/pdflatex를 한 번 더 실행하면 완성된 그림이 포함됩니다.
pdflatex document
asy document-*.asy
pdflatex document이 세 단계를 손으로 돌리는 것은 번거로우므로, 실무에서는 보통 latexmk에 맡겨 자동화합니다. 또한 Asymptote 그림은 문서에 삽입하지 않고 독립된 .asy 파일로 작성한 뒤, asy figure.asy처럼 단독 실행하여 PDF나 EPS, 또는 인터랙티브 3D를 포함하는 형식으로 출력할 수도 있습니다. 다음은 최소 .asy 예제입니다.
import three;
size(6cm);
draw(unitcube);
draw(O--X, red, Arrow3);
draw(O--Y, green, Arrow3);
draw(O--Z, blue, Arrow3);이 Asymptote 코드는 three 모듈(3D 기능)을 불러오고 단위 정육면체를 그린 뒤, 원점에서 x, y, z 각 축 방향으로 빨강, 초록, 파랑의 3차원 화살표를 그립니다. size(6cm)는 완성 크기를 지정합니다. 이처럼 Asymptote의 강점은 좌표축이 있는 입체나 곡면처럼 TikZ로는 손이 많이 가는 본격적인 3D를 비교적 자연스럽게 쓸 수 있다는 점입니다. xasy라는 GUI 프런트엔드도 있어, 대화식으로 그린 그림을 .asy 소스로 내보내 손으로 편집할 수 있습니다.
MetaPost: METAFONT의 계보
MetaPost는 John Hobby가 Knuth의 METAFONT(글꼴을 기술하기 위한 언어)를 개작하여 출력을 PostScript로 바꾼 것입니다. METAFONT에서 이어받은, 점과 방향으로부터 매끄러운 곡선을 풀어 그리는 독특한 표기(Hobby 알고리즘)를 가지며, 좌표를 방정식으로 선언적으로 쓸 수 있는 것이 특징입니다. 고전적으로는 독립된 언어로, 전용 프로그램 mpost로 .mp 파일을 처리해 EPS를 얻습니다.
현대적으로는 LuaLaTeX 안에 인라인으로 쓰는 것이 간편합니다. luamplib 패키지(\usepackage{luamplib})를 불러오면 mplibcode environment 안에 MetaPost 코드를 그대로 쓸 수 있습니다. 이는 LuaTeX에 내장된 mplib library로 그림을 조판하므로 mpost를 따로 호출할 필요도, --shell-escape도 필요 없습니다. PDF 모드와 DVI 모드 모두에서 동작합니다(DVI 출력에서는 dvipdfmx 사용이 전제입니다). 다음은 최소 예제입니다.
% lualatex で処理する / compile with lualatex
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
draw fullcircle scaled 2cm withpen pencircle scaled 1pt;
draw (-1cm,0)--(1cm,0);
draw (0,-1cm)--(0,1cm);
endfig;
\end{mplibcode}
\end{document}이 mplibcode의 내용은 MetaPost 코드입니다. beginfig(1) … endfig가 하나의 그림을 구분하고, 반지름 1cm(단위원을 지름 2cm로 확대한 것)의 원을 굵기 1pt 펜으로 그린 뒤, 그 원에 수평 지름과 수직 지름을 하나씩 긋습니다. LuaLaTeX로 처리하면 외부 도구를 호출하지 않고 이 그림이 그대로 PDF에 포함됩니다. fullcircle, pencircle, scaled는 MetaPost 내장 어휘입니다.
MetaPost 생태계에서 중요한 것이 MetaFun입니다. 이는 MetaPost용 고기능 포맷이며, 조판 시스템 ConTeXt는 MetaFun을 통해 MetaPost를 깊이 통합합니다. ConTeXt 사용자에게는 MetaPost(MetaFun)가 중심적인 작도 수단입니다. 반대로 LaTeX가 주가 되는 경우에는 보통 TikZ를 쓰고, MetaPost는 METAFONT 유래의 곡선 기술이 필요할 때나 ConTeXt 연계를 위해 알아 두는 위치가 됩니다.
계통 비교와 선택
네 가지 계통을 출력 경로, 엔진, 강점으로 나란히 두면 다음 표와 같습니다. 공통적으로 말할 수 있는 기준은 새로 작성한다면 우선 TikZ이며, 여기 든 계통은 기존 문서, 3D, 특정 생태계처럼 각각의 고유한 이유가 있을 때 선택한다는 것입니다.
| 계통 | 출력 경로 / 엔진 | 강점 / 주요 용도 |
|---|---|---|
PSTricks | latex → dvips → ps2pdf; 또는 pst-pdf/auto-pst-pdf( --shell-escape 필요), 또는 XeLaTeX | PostScript의 고품질 채움과 효과; 기존 문서가 많음 |
Xy-pic | 일반 LaTeX에서 동작(특별한 경로 불필요) | 가환 도식(원로); 현대적 대안은 tikz-cd |
Asymptote | latex/pdflatex → 외부 asy → 다시 latex(latexmk로 자동화); 또는 독립 .asy | 본격적인 2D와 3D; 좌표축이 있는 입체와 곡면 |
MetaPost | mpost로 .mp 처리; 또는 LuaLaTeX + luamplib의 mplibcode(외부 도구 불필요) | METAFONT식 곡선; ConTeXt(MetaFun)의 중심 |
실무적인 기준은 다음과 같습니다. 기존 문서 유지보수라면 그 문서가 쓰는 체계(PSTricks나 Xy-pic)를 그대로 읽고 쓸 수 있게 합니다. 3D 그림이 필요하면 Asymptote가 첫 후보입니다. ConTeXt를 쓴다면 MetaPost(MetaFun)가 자연스럽습니다. 가환 도식을 새로 그린다면 Xy-pic이 아니라 tikz-cd를 선택합니다. 그리고 여기에 해당하지 않는 대다수의 작도는 추가 외부 도구나 특수 출력 경로가 필요 없는 TikZ로 처리하는 것이 가장 견실한 선택입니다.