TeX / LaTeX란

TeX이 태어난 계기는 한 뭉치의 교정쇄에 대한 실망이었습니다. 1977년 봄, 도널드 커누스는 자신의 책 『The Art of Computer Programming』 제2권 제2판의 교정쇄를 펼쳐 보고 절망했습니다. 출판사가 활자 조판에서 사진 식자로 바꾸면서, 그가 가장 중요하게 여기던 수식이 흉하게 나왔기 때문입니다. 그는 몇 달이면 끝날 줄 알고 직접 조판 시스템을 만들기 시작했지만, 결국 10년이 걸렸습니다. 그 시스템이 TeX입니다. LaTeX은 TeX의 후계자도 경쟁자도 아니며, TeX 엔진 위에서 돌아가는 매크로 패키지입니다. 즉 TeX 자신의 언어로 쓰인 아주 큰 명령 모음입니다. 이 페이지에서는 그 둘이 실제로 무엇인지, 왜 겉모습이 아니라 구조를 쓰는지, 그리고 과장 없이 LaTeX이 맞는 사람과 맞지 않는 사람을 설명합니다.

TeX이란 무엇인가: 교정쇄에서 태어난 조판 엔진

TeX은 명령이 적힌 텍스트 파일을 읽어, 모든 글자와 선이 페이지의 어디에 놓이는지를 1포인트의 몇 분의 일 단위로 계산해 내보내는 프로그램입니다. 조판은 원래 활자를 한 자씩 골라 인쇄판을 짜는 인쇄 용어이고, TeX은 그 일을 컴퓨터에서 대신합니다. 만든 사람은 스탠퍼드 대학의 전산학자 도널드 커누스입니다. 1977년 5월에 쓴 최초의 설계 메모는 TEXDR.AFT라는 이름으로 남아 있으며, 훗날 그의 책 『Digital Typography』의 한 장으로 다시 실렸습니다. 처음으로 동작하는 판이 나온 것은 1978년입니다.

커누스의 목표가 “수식을 아름답게 조판하는 것”이었기 때문에, TeX의 세부는 하나같이 집요합니다. 단어 중간에서 줄을 나누는 하이픈 처리, AVTo 같은 짝의 커닝, fifl을 한 글자로 주조하는 합자(리거처), 단락의 첫 줄이나 마지막 줄만 다른 페이지에 남는 것을 막는 위도/고아 줄 처리를 시키지 않아도 알아서 합니다. 특히 줄 나누기는 한 줄씩 채워 가는 방식이 아니라 단락 전체를 놓고 총비용이 가장 작은 끊기 조합을 고르기 때문에, 단락 끝에 글자 하나를 더한 것만으로 첫 줄의 끊기 위치가 바뀌기도 합니다. 이 철저함이 학술 출판이 여전히 TeX 위에서 돌아가는 이유입니다.

TeX의 성격을 보여 주는 사실이 하나 더 있습니다. TeX의 버전 번호는 원주율 π로 수렴하도록 붙습니다. 갱신할 때마다 소수점 아래 자릿수가 하나씩 늘어날 뿐이어서, TeX Live 2024에 들어 있는 TeX은 3.141592653을 자처합니다. 커누스는 자신이 세상을 떠나면 버전을 π로 고정하고, 그 뒤의 모든 변경은 버그로 간주하겠다고 선언했습니다. 자매 프로그램인 폰트 시스템 Metafont는 같은 방식으로 자연로그의 밑 e로 수렴합니다. 버전 번호를 두고 던진 농담을 40년 넘게 진지하게 지켜 온 셈입니다.

terminal
$ tex --version
TeX 3.141592653 (TeX Live 2024)
kpathsea version 6.4.0

TeX・LaTeX 읽는 법

끝의 X는 로마자가 아니라 그리스 문자 χ(카이) 입니다. TeX은 그리스어 τέχνη(테크네, 기술・예술)의 앞 세 글자이며, 커누스 자신이 독일어 ach나 스코틀랜드어 loch의 ch처럼 발음하라고 적었습니다. 그래서 영어권에서는 “테크”에 가깝고, 일본에서는 오래전부터 “테후” 로도 읽어 왔습니다. LaTeX은 “레이테크”, “라테크”, “레이텍스”가 두루 쓰이며 어느 쪽이 옳은지는 끝내 정해지지 않았습니다. 소재인 라텍스와는 아무 관계가 없습니다. 글자가 위아래로 오르내리는 로고도 같은 유래이며, 본문에 \LaTeX이라고 쓰면 그 모양이 나옵니다.

LaTeX이란 무엇인가: 별개의 프로그램이 아니라 매크로 패키지

LaTeX은 TeX과 다른 프로그램이 아닙니다. TeX에는 매크로 기능, 즉 기존 명령을 조합해 새 명령을 정의하는 장치가 있고, LaTeX은 오직 그 기능만으로 쓰인 거대한 명령 모음입니다. pdflatex을 실행할 때 여러분이 띄우는 것은 “LaTeX이라는 실행 파일”이 아니라 LaTeX 명령 전체를 미리 읽어 둔 TeX 엔진입니다. 이 점을 잘못 잡으면 나중에 “엔진”과 “포맷”이라는 말이 나올 때 반드시 헷갈립니다. TeX Live 설치 경로를 들여다보면 latexpdflatex이 같은 실행 파일을 가리킨다는 사실까지 확인할 수 있지만, 그 실험은 고전 TeX과 포맷으로서의 LaTeX을 다루는 페이지에 맡깁니다.

그 매크로를 쓴 사람은 훗날 분산 시스템 연구로 알려지는 전산학자 레슬리 램포트입니다. 1980년대 전반 SRI International에 있으면서 자기 문서를 위해 TeX 매크로를 모아 두었다가 공개한 것이 LaTeX의 시작이었습니다. 1985년 LaTeX 2.09로 자신이 손댄 마지막 판을 매듭짓고, 이듬해인 1986년에 해설서 『LaTeX: A Document Preparation System』을 Addison-Wesley에서 펴냈습니다. 이름의 La는 Lamport의 La입니다.

오늘날 “LaTeX”이라고 하면 거의 틀림없이 LaTeX2e를 뜻하며, 이는 1994년 6월 1일에 프랑크 미텔바흐를 비롯한 LaTeX Project 팀이 정식으로 내놓은 것입니다. 이유는 일차 자료인 LaTeX News 제1호에 분명히 적혀 있습니다. LaTeX 2.09의 파생판이 너무 늘어나 각 사이트가 NFSS를 넣은 LaTeX과 넣지 않은 LaTeX, SLiTeX, AmSLaTeX을 나란히 떠안아야 했기에, 이를 하나의 포맷으로 다시 묶은 것입니다. 문서 첫 줄이 \documentstyle에서 \documentclass로 바뀐 것도 이때입니다. 누구나 가장 먼저 치는 그 명령은 사실 1994년 통합의 산물입니다. 오래 개발되던 LaTeX3는 독립된 제품이 되지 않았고, 2018년 이후로는 LaTeX2e 커널 안의 expl3 프로그래밍 계층으로 함께 배포됩니다. 요즘 패키지 대부분은 이 계층 위에 쓰여 있습니다.

“겉모습”이 아니라 “의미”를 쓴다: 워드 프로세서와 갈리는 지점

LaTeX 문서에서 제목을 만들 때 “14포인트 굵게, 위에 3.5줄 여백”이라고 쓰지 않습니다. \section{Introduction}이라고, 이것이 절 제목이라는 사실만 씁니다. 그러면 크기와 여백은 어디에 있을까요. 클래스 파일 안에 있습니다. TeX Live 2024의 article.cls를 열면 302행에 이렇게 적혀 있습니다. \@startsection{section}{1}{\z@}{-3.5ex ...}{2.3ex ...}{\normalfont\Large\bfseries} — 위에 3.5ex, 아래에 2.3ex를 두고 \Large 굵은 글씨로 조판하라는 지시입니다. 이 숫자들은 여러분의 원고에 한 번도 등장하지 않습니다. 그래서 article을 학회가 지정한 클래스로 바꾸기만 하면, 본문을 건드리지 않고도 모든 제목이 규정대로 바뀝니다. 웹에서 HTML과 CSS를 나누는 것과 정확히 같은 발상입니다.

latex
\documentclass{article}
\begin{document}
\section{Introduction}
The body says what the text \emph{is}, never how it should look.
\[ E = mc^2 \]
\end{document}

이 분업이 위력을 발휘하는 것은 문서가 길어진 뒤입니다. 번호는 직접 칠 일이 없습니다. \label\ref만 놓아 두면 “그림 3.2 참조”의 번호도 쪽수도 알아서 채워지고, 그림 한 장을 끼워 넣어 번호가 전부 밀려도 스스로 고쳐집니다. 목차・색인・참고문헌도 같은 방식으로 생성됩니다. 뒤집어 말하면, 제목을 손으로 굵게 만들거나 번호를 직접 치기 시작한 순간, LaTeX이 가장 잘하는 부분을 놓아 버린 것입니다. 다만 대가도 있습니다. 입력하면서 결과를 볼 수는 없습니다. 쓰고, 컴파일하고, PDF를 본다——이 왕복이 LaTeX의 작업 리듬이며, 몸에 배기 전까지는 워드 프로세서보다 확실히 느리게 느껴집니다.

TeX / LaTeX / pdfLaTeX / upLaTeX / LuaLaTeX의 차이

이름이 많은 것은 엔진(실제로 처리하는 프로그램)포맷(명령 체계) 을 곱해 놓았기 때문입니다. 엔진은 TeX・pdfTeX・XeTeX・LuaTeX・pTeX/upTeX, 포맷은 plain TeX・LaTeX・ConTeXt입니다. pdflatex은 “pdfTeX 엔진 + LaTeX 포맷”, uplatex은 “upTeX 엔진 + LaTeX 포맷” 하는 식으로, 이름이 그대로 곱셈입니다. 일본어용 엔진 pTeX・upTeX에 LaTeX을 얹은 것이 각각 pLaTeXupLaTeX입니다. 어느 엔진을 고를지는 “엔진 고르는 법” 페이지가 제대로 답하는 실무 문제이지만, 대략의 지침만 적어 두면 영문 위주라면 pdflatex, 시스템에 있는 글꼴을 그대로 쓰고 싶다면 lualatex이나 xelatex, 일본어라면 uplatex이나 lualatex입니다.

이름실체주로 쓰이는 곳
tex커누스의 엔진 자체. plain TeX 포맷 탑재원리를 확인할 때. 일상적인 집필에는 쓰지 않습니다
latexLaTeX 포맷. 출력은 DVIDVI를 거치는 고전적 경로. 일본어 작업 흐름의 토대이기도 합니다
pdflatexpdfTeX 엔진 + LaTeX. PDF를 바로 출력라틴 문자 문서의 기본값. 가장 검증된 선택
uplatexupTeX 엔진 + LaTeX. DVI를 출력일본어 논문의 정석. 세로쓰기와 일본어 금칙 처리에 강합니다
xelatexXeTeX 엔진 + LaTeX. 유니코드와 시스템 글꼴OpenType 글꼴을 이름으로 지정하고 싶을 때
lualatexLuaTeX 엔진 + LaTeX. Lua로 내부를 확장할 수 있습니다새로 시작한다면 이것. 일본어는 luatexja로

LaTeX이 맞는 사람과 맞지 않는 사람

한마디로, 문서가 길고 구조가 있으며 여러 번 고쳐 쓰는 것일수록 LaTeX이 유리합니다. 수식이 많고, 장절이 깊고, 그림과 참고문헌이 수십 건이고, 투고처마다 체재를 바꾸고, 공저자와 Git으로 차이를 본다면——이런 조건이 늘어날수록 자동화의 몫이 커집니다. 물리・수학・전산학에서는 사실상 표준이며, 프리프린트 서버 arXiv는 LaTeX 소스로 투고할 것을 권하고, 위키백과의 수식도 LaTeX 표기법으로 쓰입니다.

뒤집어 보면 LaTeX이 분명히 수지가 맞지 않는 장면도 있습니다. 한 장짜리 전단이나 포스터처럼 요소를 임의의 위치에 놓고 싶은 일은 레이아웃 소프트웨어가 더 빠르고 확실합니다. 공저자가 전부 Word만 쓴다면 변환 수고가 자동화의 이득을 다 깎아먹습니다. 마감이 내일인데 LaTeX을 만져 본 적이 없다면, 오늘은 Word로 쓰십시오. 이 기술은 익히는 데 며칠이 걸리고, 그 며칠은 빌려 온 시간으로는 치를 수 없습니다. “LaTeX을 쓰면 문서가 아름다워진다”는 말은 정확하지 않습니다. 정확히는, 구조만 제대로 써 두면 체재를 다듬는 일에서 해방된다는 뜻입니다.

  • 수식이 많은 문서라면 거의 망설임 없이 LaTeX입니다. 수식 조판 품질은 다른 도구가 아직 따라오지 못했습니다.
  • 투고처가 LaTeX 클래스 파일을 배포한다면 그것을 쓰십시오. 체재를 둘러싼 논의가 통째로 사라집니다.
  • 공저자와 몇 해에 걸쳐 키울 문서라면 일반 텍스트의 강점이 살아납니다. Git으로 차이를 읽을 수 있고, 10년 뒤에도 열립니다.
  • 한 장짜리 레이아웃이 목적이라면 다른 도구를 쓰십시오. 원하는 좌표에 물건을 놓는 일은 LaTeX이 가장 서툰 분야입니다.
  • 우선 맛만 보려면 설치하지 말고 브라우저에서 돌려 보십시오. 환경 구축에서 포기하는 것이 가장 아깝습니다.

끝으로 TeX이 40년 넘게 살아남은 실무적 이유를 적어 둡니다. 무료 오픈소스라 읽어도, 고쳐도, 상업적으로 써도 자유입니다. 입력이 확장자 .tex일반 텍스트여서 어떤 편집기로도 쓸 수 있고, grep으로 찾을 수 있고, 스크립트로 생성할 수 있고, Git으로 차이를 읽을 수 있습니다. 패키지의 총본산 CTAN(Comprehensive TeX Archive Network)에는 수천 개의 확장이 모여 있어, “이런 걸 할 수 있나”라는 물음에는 대개 이미 누군가 답을 놓아두었습니다. 그리고 같은 입력에서는 같은 출력이 나옵니다. Windows에서도 macOS에서도 Linux에서도, 10년 전에 쓴 소스에서도 마찬가지입니다. 연구나 공문서처럼 “나중에 재현할 수 있을 것”이 요건이 되는 자리에서 이 성질은 바꾸기 어려운 가치를 지닙니다. 다음은 실제로 한 쪽을 만들어 볼 차례입니다.