모든 LaTeX 문서는 반드시 \documentclass 한 줄로 시작합니다. 여기서 고르는 문서 클래스가 문서 전체의 뼈대와 모양, 즉 논문인지 책인지 슬라이드인지 결정합니다. 그리고 \documentclass부터 \begin{document}까지의 프리앰블에서 사용할 패키지와 문서 전체에 적용되는 설정을 선언합니다. 이 장의 목표는 본문을 쓰기 전에 “어떤 클래스를 쓰고, 어디까지 프리앰블에 둘 것인가”를 판단할 수 있게 하는 것입니다.
\documentclass — 첫 줄
모든 문서는 \documentclass[options]{class} 선언으로 시작합니다. 이 명령은 필수이며 반드시 맨 처음에 와야 하므로, 그 앞에는 주석을 제외하고 아무것도 쓸 수 없습니다. 중괄호 {} 안의 클래스 이름이 문서 종류를 고르고, 대괄호 [] 안의 옵션이 글자 크기나 용지 같은 세부 사항을 조정합니다(옵션은 생략할 수 있습니다).
클래스는 전반적인 “겉모양”을 정합니다. 제목을 어떤 글꼴과 크기로 조판할지, 장과 절 번호를 어떻게 붙일지, 여백과 머리말·꼬리말을 어떻게 만들지 같은 규칙은 클래스 파일(확장자 .cls) 에 들어 있습니다. 본문에는 \section{Introduction}처럼 의미만 쓰고, 그것을 실제 모양으로 바꾸는 일이 클래스의 역할입니다. 그래서 클래스만 바꾸면 같은 원고를 다른 체재로 다시 조판할 수 있습니다. 처음에 클래스를 고르는 것은 단순히 글꼴을 고르는 일이 아니라 문서의 구조를 정하는 일입니다.
표준 클래스
LaTeX에는 처음부터 다음 class들이 들어 있습니다. article은 가장 많이 쓰이는 범용 class로, 학술 논문이나 짧은 문서에 적합합니다. 장(\chapter)은 없고 절(\section)이 최상위입니다. report는 article과 책의 중간에 있으며, 기술 보고서나 학위논문처럼 장을 가진 비교적 긴 문서에 알맞습니다. book은 본격적인 책을 위한 것으로, 장을 가지며 양면 인쇄를 전제로 하고 앞부분·본문·뒷부분을 전환할 수 있습니다. letter는 편지용이고 slides는 슬라이드용이지만, 지금은 거의 쓰이지 않습니다.
| 클래스 | 용도 | 장 / 기본 체재 |
|---|---|---|
article | 논문과 일반적인 짧은/중간 길이 문서 | 장 없음. 기본은 단면, 1단 |
report | 기술 보고서와 학위논문 | 장 있음. 기본은 단면, 별도 제목 페이지 |
book | 책 | 장 있음. 기본은 양면, 장은 오른쪽 페이지에서 시작 |
letter | 편지 | \address, \signature 같은 전용 명령 |
특히 book에서는 문서의 앞뒤를 \frontmatter / \mainmatter / \backmatter 로 나눕니다. \frontmatter 영역(서문, 목차 등)은 페이지 번호가 소문자 로마 숫자(i, ii, iii...)가 되고 장 번호는 붙지 않습니다. \mainmatter에서 페이지 번호가 아라비아 숫자(1, 2, 3...)로 다시 매겨지고 장 번호도 시작됩니다. \backmatter(부록, 색인 등)는 아라비아 숫자 페이지 번호를 유지하되 장 번호만 제거합니다.
표준 클래스 밖의 선택지(beamer, KOMA-Script, 일본어)
표준 클래스 외에도 CTAN에는 목적별 클래스가 많이 있습니다. 발표 슬라이드에는 beamer 가 표준 선택지입니다. frame 환경 하나를 슬라이드 한 장으로 만들고, 단계적 표시(오버레이)와 테마를 제공합니다. 표준 클래스를 더 정돈된 기본 타이포그래피로 바꾸고 싶다면 KOMA-Script의 scrartcl / scrreprt / scrbook(각각 article / report / book 대응)이 널리 쓰이며, 세부 설정도 훨씬 쉽습니다.
일본어 조판에서는 엔진에 맞는 전용 클래스를 고릅니다. pLaTeX / upLaTeX라면 오쿠무라 하루히코의 jsarticle / jsbook(jsclasses)이 표준입니다. LuaLaTeX에서는 그 LuaLaTeX판인 ltjsarticle / ltjsbook(ltjsclasses)을 씁니다. 더 새로운 jlreq 는 “일본어 조판 처리 요구사항(JLReq)”을 바탕으로 한 클래스이며, pLaTeX, upLaTeX, LuaLaTeX 어느 쪽에서도 동작하고 엔진을 자동 판별합니다(report / book 옵션으로 report 또는 book에 해당하는 동작으로 바꿀 수 있습니다). 대학이나 학술지가 템플릿을 제공한다면 먼저 그 클래스를 우선하고, 자체적인 외형 조정은 마지막에 필요한 만큼만 더합니다.
자주 쓰는 옵션
옵션은 대괄호 안에 쉼표로 구분해 씁니다. 예를 들면 \documentclass[11pt,a4paper,twoside]{article}처럼 씁니다. 대표적인 옵션은 다음과 같으며, 대부분은 문서 전체에 적용되는 스위치입니다.
| 옵션 | 효과 | 기본값 |
|---|---|---|
10pt / 11pt / 12pt | 본문 기준 글자 크기 | 10pt |
a4paper / letterpaper | 용지 크기(a5paper, b5paper, legalpaper 등도 있음) | letterpaper |
twocolumn | 본문을 2단으로 조판 | 1단(onecolumn) |
twoside / oneside | 양면 / 단면 레이아웃 | oneside(book만 twoside) |
landscape | 용지를 가로 방향으로 사용 | 세로 방향 |
titlepage / notitlepage | 제목을 별도 페이지로 둘지 여부 | report/book은 titlepage, 그 외는 notitlepage |
fleqn | 별행 수식을 왼쪽 정렬 | 가운데 정렬 |
leqno | 수식 번호를 왼쪽에 배치 | 오른쪽 |
draft | 넘친 줄(overfull box)을 검은 표시로 보여 줌 | final |
book의 장이 오른쪽 페이지(홀수 페이지)에서 시작하는지는 openright(book의 기본값)와 openany(report의 기본값)로 결정됩니다. 여기서 지정한 옵션은 클래스뿐 아니라 나중에 불러오는 패키지에도 전달됩니다(전역 옵션으로 작동).
프리앰블 — \usepackage와 전역 설정
\documentclass 다음 줄부터 \begin{document} 바로 전까지를 프리앰블이라고 합니다. 이곳은 아직 본문이 아니라 문서 전체를 준비하는 장소입니다. 본문(출력되는 내용)은 \begin{document}에서 시작해 \end{document}에서 끝납니다.
프리앰블의 주역은 \usepackage[options]{package} 입니다. 클래스가 기본 체재를 정한다면, 패키지(확장자 .sty) 는 문서 종류와 무관하게 쓸 수 있는 기능을 더합니다. 예를 들어 수식을 강화하는 amsmath, 그림을 넣는 graphicx, 하이퍼링크를 붙이는 hyperref가 있습니다. 하나의 명령으로 여러 패키지를 함께 불러올 수도 있습니다(\usepackage{amsmath,amssymb}). “특정 문서 종류의 모양을 정하면 클래스, 종류와 무관한 기능을 더하면 패키지”라고 기억하면 구분하기 쉽습니다.
패키지를 불러오는 것 외에도 프리앰블에는 문서 전체에 적용되는 설정과 정의를 둡니다. 제목 정보인 \title{...}, \author{...}, \date{...}, 자체 명령을 정의하는 \newcommand, 길이를 바꾸는 \setlength, 페이지 서식의 \pagestyle 등이 여기에 해당합니다. 이런 것들은 본문보다 앞에서 선언해야 하며, 본문 안에 쓰면 적용되지 않거나 오류가 날 수 있습니다.
다음은 전형적인 프리앰블을 갖춘 완성 예입니다. 클래스를 고르고, 인코딩과 언어 관련 패키지를 불러온 뒤, 자체 명령과 여백·제목 정보를 설정하고 본문으로 들어갑니다.
\documentclass[11pt,a4paper]{article}
% --- preamble: packages ---
\usepackage[T1]{fontenc}
\usepackage{amsmath} % better mathematics
\usepackage{graphicx} % \includegraphics
\usepackage[margin=25mm]{geometry}
\usepackage{hyperref} % load last
% --- preamble: settings & definitions ---
\newcommand{\R}{\mathbb{R}}
\setlength{\parindent}{0pt}
\title{A Short Note}
\author{Ada Lovelace}
\date{\today}
\begin{document}
\maketitle
Hello, \LaTeX! For all $x \in \R$ we have $x^2 \ge 0$.
\end{document}불러오는 순서에도 의미가 있습니다. 서로 간섭하기 쉬운 패키지는 순서에 따라 동작이 달라질 수 있고, hyperref처럼 보통 뒤쪽에 불러오는 것이 좋은 패키지도 있습니다(예외적으로 그 뒤에 읽어야 하는 패키지도 있으므로 각 패키지 설명서를 확인합니다). 일본어 문서에서는 클래스 자체를 jsarticle이나 ltjsarticle 같은 것으로 바꾸는 것이 첫걸음이며, 엔진에 맞는 클래스를 고르는 일이 무엇보다 중요합니다. 프리앰블 조정 때문에 본문을 못 쓸 정도가 되었다면, 일단 최소 구성으로 돌아가 본문을 진행하는 것도 좋은 공학적 판단입니다.
프리앰블을 문서보다 키우지 않기
프리앰블은 문서의 기반이지 아무거나 넣는 장소가 아닙니다. 본문에서 한 번만 쓰는 외형 조정, 시험 삼아 넣은 패키지, 의미 없는 축약 명령이 늘어나면 나중에 오류 원인을 찾기 어려워집니다. 먼저 클래스, 언어·글꼴, 수학, 그림과 표, 링크처럼 전체에 적용되는 설정만 둡니다. 본문을 쓰면서 정말 반복되는 구조만 \newcommand로 만듭니다. 제출 템플릿을 쓸 때는 템플릿이 정한 프리앰블을 존중하고, 클래스와 연결되어 있을 수 있는 패키지를 마음대로 바꾸지 않는 것이 중요합니다.
- 새 보고서:
article이나jsarticle로 시작하고, 필요해질 때까지 복잡한 페이지 설계는 넣지 않습니다. - 학위논문: 대학 템플릿의 클래스를 우선하고, 자체 여백이나 제목 조정은 마지막에 확인합니다.
- 일본어 + OpenType 글꼴: LuaLaTeX라면
ltjsarticle/jlreq, upLaTeX라면jsarticle처럼 엔진에 맞는 클래스를 고릅니다. - 오류가 나면: 직전에 추가한
\usepackage나\newcommand를 의심하고, 최소 예제로 줄여 분리합니다.