.tex 파일을 PDF로 만들려면 터미널에서 컴파일 명령을 실행합니다. pdflatex, lualatex, xelatex, latex, 일본어용 platex / uplatex는 모두 “LaTeX”이지만, 선택한 명령에 따라 뒤에서 동작하는 엔진 이 달라지고, 출력 형식(PDF 또는 DVI)과 사용할 수 있는 글꼴 및 문자 범위도 결정됩니다. 이 페이지는 각 명령의 정체와 실제로 입력하는 옵션을 정리한 실무용 지도입니다.
명령 이름이 엔진을 고른다
LaTeX는 포맷(명령 체계)이고, 이를 실제로 처리하는 엔진(프로그램)은 별개의 것입니다. 명령 이름은 둘의 조합을 나타냅니다. 예를 들어 pdflatex는 “pdfTeX 엔진 + LaTeX 포맷”, lualatex는 “LuaTeX + LaTeX”입니다. 사용법은 모두 같아서 소스 파일을 인수로 넘기면 됩니다. 확장자 .tex는 생략할 수 있습니다.
pdflatex document.tex # → document.pdf, document.aux, document.log
lualatex document # 拡張子は省略可 / extension optional
xelatex document.tex명령을 실행하면 본문 출력(.pdf 또는 .dvi) 외에도 상호 참조와 목차 정보를 모으는 .aux, 처리 기록인 .log 같은 보조 파일이 만들어집니다. 번호, 참조, 목차를 확정하려면 보통 같은 명령을 두 번 실행해야 합니다(첫 번째 실행에서 .aux에 번호를 쓰고, 두 번째 실행에서 본문에 반영). latexmk 같은 빌드 도구는 이런 다단계 처리를 자동화합니다. 전체 흐름은 “소스에서 PDF로”에서 자세히 다룹니다.
PDF를 직접 출력하는 세 가지
pdflatex, lualatex, xelatex는 모두 PDF를 직접 생성합니다. 차이는 Unicode와 글꼴 처리 방식, 그리고 속도입니다.
pdflatex 는 pdfTeX 엔진을 사용합니다. pdfTeX는 Hàn Thế Thành이 마이크로타이포그래피(행 끝 문자 돌출, 미세한 글자 폭 확장 등)를 다룬 박사 연구 중 TeX를 확장한 것으로, DVI 단계를 거치지 않고 PDF를 직접 내보내는 것이 핵심 기능이었습니다. 셋 중 가장 역사가 길고 기존 패키지와의 호환성이 가장 높으며 컴파일도 빠릅니다. 대신 입력은 기본적으로 바이트 단위라 Unicode나 OS 글꼴을 원래부터 다루지는 못합니다(현대 LaTeX는 기본적으로 UTF-8 입력을 받지만, 글꼴은 TeX 자체 글꼴로 제한됩니다).
lualatex 는 LuaTeX 엔진을 사용합니다. 처음부터 UTF-8을 전제 로 하며, fontspec 패키지를 통해 OS에 설치된 OpenType/TrueType 글꼴을 그대로 사용할 수 있습니다. 가장 큰 특징은 스크립트 언어 Lua 가 내장되어 조판 처리 자체에 손댈 수 있다는 점입니다. LaTeX의 표준적인 미래 방향으로 권장되고 있으며, 일본어 조판은 luatexja 패키지가 담당합니다.
xelatex 는 XeTeX 엔진을 사용합니다(Jonathan Kew가 2004년경 개발). 이 역시 Unicode와 OS 글꼴을 지원하지만, 구현은 외부 라이브러리에 더 의존하며 LuaTeX와는 다릅니다. 내부적으로 PDF를 직접 쓰지 않고 DVI의 확장판인 .xdv 파일을 만들며, 이를 포함된 xdvipdfmx가 자동으로 PDF로 변환합니다. -no-pdf를 붙이면 변환 전 .xdv 단계에서 멈출 수 있습니다.
| 명령 | 엔진 | 출력 | Unicode / 글꼴 |
|---|---|---|---|
pdflatex | pdfTeX | PDF 직접 출력 | TeX 글꼴 중심; 빠르고 호환성 좋음 |
lualatex | LuaTeX | PDF 직접 출력 | OS 글꼴 + Unicode + Lua |
xelatex | XeTeX | PDF(내부적으로 .xdv 경유) | OS 글꼴 + Unicode |
DVI를 내는 latex 명령
현재 TeX Live에서 기본 latex 명령은 pdfTeX 엔진을 DVI 모드로 실행하여 PDF가 아니라 .dvi 파일을 출력합니다. DVI(device-independent)는 특정 출력 장치에 묶이지 않는 중간 형식이며, 그대로 보기나 인쇄가 불편하므로 dvipdfmx로 PDF로 또는 dvips로 PostScript로 변환합니다. pdflatex가 PDF를 직접 내는 것과 달리, 이는 “조판”과 “PDF 만들기”를 나누는 두 단계 방식입니다.
왜 지금도 DVI를 사용할까요? PSTricks의 일부처럼 DVI를 통해서만 동작하는 오래된 방식이 있고, 다음 절에서 설명하듯 일본어 조판이 전통적으로 DVI를 거쳤기 때문입니다. LuaTeX에서 DVI를 내고 싶다면 dvilualatex를 사용합니다. DVI에서 변환하는 방법은 “DVI 변환 도구” 페이지에서 자세히 다룹니다.
일본어 명령 — platex / uplatex
platex 는 일본어 조판에 특화된 pTeX 엔진(아스키사가 개발, 현재는 e-pTeX) 위에서 동작하는 pLaTeX입니다. 세로쓰기, 일본어 행간과 금칙 처리(*kinsoku*), 일본어와 라틴 문자 사이의 간격 조정을 올바르게 다룹니다. 출력은 DVI입니다. 입력 문자 코드는 환경마다 기본값이 다르며(Shift_JIS / EUC-JP / UTF-8), -kanji=utf8을 붙이면 UTF-8 입력으로 읽습니다. 다만 pTeX가 직접 다룰 수 있는 범위는 ASCII + JIS X 0208에 한정됩니다.
uplatex 는 내부 처리를 Unicode화 한 upTeX 엔진(다나카 다쿠지 개발) 위의 upLaTeX입니다. 기본 입력은 UTF-8이며, JIS X 0208 밖의 문자(인명 외자, CJK 통합 한자 전체 등)도 추가 패키지 없이 그대로 다룰 수 있어 현대 일본어 논문의 표준 이 되었습니다. 출력은 역시 DVI이며, -kanji 옵션으로 입력 인코딩을 바꿀 수 있습니다.
# 日本語: 組版 → DVI → PDF / Japanese: typeset → DVI → PDF
uplatex -kanji=utf8 document.tex # → document.dvi
dvipdfmx document.dvi # → document.pdf(u)platex가 낸 DVI는 dvipdfmx 로 PDF로 만듭니다(TeX Live의 dvipdfmx는 upTeX를 지원합니다). 최근 TeX Live는 입력 기본값이 UTF-8이므로 -kanji=utf8을 생략할 수 있는 경우도 많지만, 명시해 두면 환경 차이로 인한 사고를 피할 수 있습니다. BOM 없는 UTF-8을 확실히 통과시키려면 uplatex에 -no-guess-input-enc를 함께 씁니다. 한편 lualatex + luatexja를 쓰면 DVI를 거치지 않고 일본어 소스에서 PDF를 직접 낼 수 있습니다.
자주 쓰는 옵션
옵션은 소스 파일 이름 앞에 나열해 전달합니다. 다음은 pdfTeX / XeTeX / LuaTeX 명령에서 공통으로 사용할 수 있는 것들입니다.
| 옵션 | 역할 |
|---|---|
-synctex=1 | SyncTeX 정보를 출력해 에디터와 PDF 사이의 상호 이동을 가능하게 함 |
-interaction=nonstopmode | 오류가 나도 멈추지 않고 끝까지 처리(batchmode는 더 조용함) |
-halt-on-error | 첫 번째 오류에서 처리를 중지 |
-file-line-error | 오류를 file:line: 형식으로 출력(IDE 연동에 적합) |
-output-directory=DIR | 출력을 미리 존재하는 디렉터리에 씀 |
-jobname=NAME | 출력 파일의 기본 이름을 지정 |
-shell-escape | \write18을 통한 외부 명령 실행 허용(주의 사항 참조) |
-draftmode | PDF를 쓰지 않고 빠르게 검사(pdfTeX / LuaTeX) |
pdflatex -synctex=1 -interaction=nonstopmode -halt-on-error -file-line-error document.tex출력 형식은 pdfTeX와 LuaTeX에서는 -output-format=dvi|pdf로 바꿀 수 있습니다(XeTeX는 대신 .xdv를 위해 -no-pdf를 사용). -shell-escape는 주의해야 합니다. minted(코드 강조)나 일부 그리기 패키지가 외부 프로그램을 호출하려면 필요하지만, 문서가 임의의 셸 명령을 실행할 수 있게 하므로 신뢰할 수 없는 소스에는 절대 켜지 마세요.
결국 무엇을 쓸까
- 새 일본어 문서 —
uplatex(→dvipdfmx) 또는lualatex+luatexja. - 영어 / 서양어 중심 문서 —
pdflatex; 빠르고 호환성이 높음. - OS 글꼴을 그대로 쓰고 싶을 때 —
lualatex또는xelatex. - DVI 전용 방식이 필요할 때 —
latex(→dvipdfmx/dvips).
실제로는 이런 명령을 손으로 두 번 치기보다, 필요한 횟수와 DVI 변환까지 처리해 주는 latexmk 같은 빌드 도구에 맡기는 것이 보통입니다. 엔진 자체의 차이를 더 알고 싶다면 “엔진과 포맷 선택”을 보세요.
제출 전 컴파일 명령 점검
- 먼저 명령만 단독 확인: 선택한 명령(
pdflatex,lualatex,uplatex등)을 터미널에서 한 번 실행해 실패가 에디터 의존 문제가 아님을 확인합니다. - 제출 전 기본값:
-halt-on-error -file-line-error -interaction=nonstopmode를 붙여 CI와 로그가 첫 번째 실제 오류를 가리키게 합니다. - 일본어 PDF 경로 판단: upLaTeX라면
uplatex뒤에dvipdfmx, LuaLaTeX라면 PDF를 직접 출력합니다. 두 경로를 실수로 섞지 않습니다. - 로그 읽는 법:
.log의 끝만 보지 말고 첫 번째!부터 읽어, 연쇄 오류를 일으킨 명령으로 돌아갑니다.