article 을 고르면 LaTeX은 US 레터 용지를 내밀고, scrartcl 을 고르면 A4가 나옵니다. 이 어긋난 기본값 하나가 대체 클래스——표준 클래스가 갑갑해질 때 옮겨 가는 KOMA-Script 와 memoir——가 존재하는 이유의 눈에 보이는 끄트머리입니다. KOMA-Script의 출발점은 1990년대 초입니다. Frank Neukam이 Jan Tschichold의 책 설계론을 읽고 표준 문서 스타일로는 부족하다고 판단해 유럽·독일 조판에 맞춘 스타일군을 쓰기 시작했고, Markus Kohm이 이를 LaTeX2ε용으로 다시 만들어 1994년 7월 7일 KOMA-Script로 공개했습니다. memoir는 전혀 다른 발상에서 나왔습니다. 설계 관련 패키지를 통째로 하나의 설정 가능한 클래스 안에 담는 것입니다. 이 페이지에서는 각각이 무엇을 위한 것인지, 어떤 손잡이가 실제로 효과가 있는지, 그리고 언제 갈아탈 만한지를 살펴봅니다.
왜 article・report・book을 대체하는가
이유는 하나입니다. 표준 클래스에는 설계를 바꾸기 위한 공식 입구가 거의 없습니다. article / report / book 은 검증되어 확실하지만, 여백이나 제목, 머리말·꼬리말을 바꾸려 하면 \makeatletter 로 내부를 손보거나 geometry, fancyhdr, titlesec, tocloft 를 여러 겹 쌓게 됩니다. 용지가 눈에 보이는 증상 하나입니다. KOMA-Script 매뉴얼은 KOMA-Script의 기본이 세로 방향 A4이며, 이는 미국 레터를 기본으로 삼는 표준 클래스와 대조된다고 굳이 밝혀 둡니다. 표준 클래스 자체는 전용 페이지가 다룹니다.
KOMA-Script와 memoir는 모두 그 불만에 정면으로 답하지만, 답하는 방식이 다릅니다. KOMA-Script는 표준 클래스의 대체 클래스군 + 설정 장치 입니다. 본문 작성법은 그대로 두고 옵션과 전용 명령으로 설계를 손봅니다. memoir는 단일 책 클래스 입니다. 페이지 레이아웃, 머리말, 장 제목, 목차를 외부 패키지에 기대지 않고 클래스 안에서 끝냅니다. 이 차이는 뒤에서 볼 “보조 패키지와의 궁합”에 그대로 나타납니다.
KOMA-Script의 대체 클래스 — scrartcl / scrreprt / scrbook
KOMA-Script는 Markus Kohm이 유지 관리하는 LaTeX2ε 클래스·패키지 모음으로(TeX Live 2024에 들어 있는 판본은 3.41, 2023-07-07), 주로 표준 클래스의 드롭인 대체를 중심으로 구성됩니다. scrartcl 이 article, scrreprt 가 report, scrbook 이 book 에 대응하고, 편지에는 전용 scrlttr2 가 있습니다. 본문 작성법(\section, \chapter)은 표준 클래스와 거의 같지만 기본 타이포그래피가 정돈되어 있고 설정 창구가 넓게 열려 있는 것이 장점입니다. 그래서 이전의 첫걸음은 \documentclass{article} 을 \documentclass{scrartcl} 로 바꾸고, 다른 것을 손대지 않은 채로 문서가 그대로 빌드되는지 확인하는 일입니다.
| KOMA 클래스 | 대체하는 표준 클래스 | 용도 |
|---|---|---|
scrartcl | article | 논문과 일반적인 짧은·중간 길이 문서 |
scrreprt | report | 장이 있는 보고서와 학위논문 |
scrbook | book | 양면 인쇄를 전제로 한 책 |
scrlttr2 | letter | 편지(여러 편지지와 레이아웃을 정의할 수 있음) |
설정을 넘기는 방법은 두 가지입니다. 클래스 옵션으로 \documentclass[...]{scrartcl} 에 쓰거나, 읽어 들인 뒤 \KOMAoptions{...} 로 바꾸는 것입니다. KOMA-Script는 대부분의 옵션을 클래스를 읽은 뒤에도 바꿀 수 있게 만들어져 있고, \KOMAoptions 에는 option=value 를 쉼표로 나열해 한 번에 여러 개를 넘길 수 있습니다. 한 옵션에 여러 값을 동시에 주어야 할 때만 단수형인 \KOMAoption{option}{val1,val2} 를 씁니다. 이 “나중에도 바꿀 수 있다”는 성질이 아래에서 볼 판면 재계산을 가능하게 합니다.
판면을 계산한다 — DIV와 BCOR
KOMA-Script에서는 여백을 mm로 직접 지정하지 않습니다. 페이지 설계의 핵심에 있는 typearea 패키지가 페이지를 가로와 세로로 여러 strip으로 나누고, 그 비율에서 본문 블록과 여백을 이끌어 냅니다. 이는 Jan Tschichold가 널리 알린 고전적 판면 구성——여백의 비율이 종이의 비율과 호응하는——을 기계화한 것으로, “여백을 몇 mm로 할까”가 아니라 “종이를 어떻게 나눌까”를 정하는 발상입니다. KOMA 클래스를 쓰면 typearea 는 자동으로 읽히므로 \usepackage{typearea} 를 직접 쓰면 안 됩니다.
분할 수를 정하는 것이 DIV= 입니다. 매뉴얼의 설명대로 DIV=factor 는 판면을 구성할 때 페이지를 가로와 세로로 몇 개의 strip으로 나눌지를 지정합니다. 핵심은 factor가 클수록 본문 블록은 커지고 여백은 작아진다는 점입니다. 즉 한 페이지에 더 많은 글자가 들어갑니다. 4보다 큰 정수면 됩니다. A4에서 기본값은 본문 크기에 연동되어 10pt는 8, 11pt는 10, 12pt는 12입니다. 글꼴에 맞춰 자동 산출하려면 DIV=calc, Tschichold 등이 논한 중세 사본의 판면 구성에 가깝게 하려면 DIV=classic 을 씁니다.
또 하나의 손잡이가 BCOR=(binding correction, 제본 여백)입니다. 제본할 때 책등 쪽으로 말려 들어가 보이지 않게 되는 폭을 여기에 주면, 그만큼이 먼저 판면 계산에서 빠지고 출력할 때 안쪽(왼쪽) 여백에 다시 더해집니다. 값에는 TeX가 이해하는 임의의 단위를 쓸 수 있습니다(BCOR=10mm 등). 이 둘은 독립적이지 않습니다. \KOMAoptions 로 DIV 나 BCOR 를 바꾸면 판면과 여백이 한꺼번에 다시 계산됩니다. geometry 로 수치를 덮어쓰는 것과 결정적으로 다른 점입니다.
\documentclass[DIV=12,BCOR=10mm]{scrartcl}
% DIV=12 wider text block (same divisor as the A4/12pt default)
% BCOR=10mm reserve 10mm of gutter for the binding
\usepackage[T1]{fontenc}
\usepackage{microtype}
\title{A Short Report}
\author{Ada Lovelace}
\begin{document}
\maketitle
\section{Introduction}
KOMA-Script keeps the body markup of article
while giving you DIV and BCOR for the page layout.
\end{document}글꼴 패키지를 나중에 불러오는 경우에는 함정이 하나 있습니다. DIV=calc 를 클래스 옵션에 쓰면 판면이 글꼴을 불러오기 전의 표준 글꼴 로 결정되어 버립니다. KOMA 클래스가 typearea 를 스스로 읽어 들이므로, \usepackage{...} 로 글꼴을 바꿀 때쯤이면 계산이 이미 끝나 있기 때문입니다. 글꼴을 바꾼 뒤 프리앰블에서 \KOMAoptions{DIV=last}(또는 DIV=current)를 호출하면 새 글꼴에 맞춰 다시 계산됩니다.
요소 글꼴과 제목을 다시 짜기
KOMA-Script에서는 제목이나 캡션 같은 문서의 각 “요소(element)”별로 글꼴을 한곳에서 설정할 수 있습니다. \setkomafont{element}{commands} 는 그 요소의 글꼴 정의를 통째로 바꾸고, \addtokomafont{element}{commands} 는 기존 정의에 덧붙입니다(\usekomafont{element} 는 현재 글꼴을 그 요소의 것으로 바꿉니다). 넘기는 commands 는 \sffamily, \bfseries, \Large 처럼 글꼴 속성만 바꾸는 것 으로 제한하고, 둘 다 프리앰블에서 선언하십시오. 여기에 \centering 같은 조판 명령을 섞으면 그 요소가 쓰일 때마다 엉뚱한 곳에서 발동합니다.
절 구분 명령 자체의 체재——앞뒤 간격, 글꼴, 번호가 나오는 방식——를 다시 짜려면 \RedeclareSectionCommand[attributes]{name} 를 씁니다. 기존 \section 이나 \chapter 의 속성을 쉼표로 구분한 key=value 로 재정의하는 공식 입구입니다. 머리말·꼬리말에는 KOMA 클래스와 함께 쓰는 scrlayer-scrpage 가 권장되며, \lehead, \cohead, \rohead 로 “왼쪽/가운데/오른쪽” × “짝수/홀수 페이지”의 각 자리를 개별 지정할 수 있습니다. 기둥 제목 자체의 사고방식은 머리글·바닥글 페이지에 있습니다.
KOMA가 fancyhdr에는 경고하고 geometry에는 침묵하는 이유
표준 클래스용 보조 패키지를 그대로 얹으면 KOMA-Script 자체의 설정 창구와 충돌합니다. fancyhdr 에 대해서는 클래스가 로그에 대놓고 적어 줍니다. Class scrartcl Warning: Usage of package 'fancyhdr' together with a KOMA-Script class is not recommended. 이어서 scrlayer 나 scrlayer-scrpage 를 권하고, 이유까지 나열합니다. fancyhdr 를 쓰면 headsepline, footsepline 같은 옵션과 \setkomafont・\addtokomafont 로 페이지 스타일 요소를 지정하는 방식이 손을 대지 않고서는 작동하지 않는다는 것입니다.
그런데 geometry 를 더하면 KOMA-Script는 아무 말도 하지 않습니다. \documentclass{scrartcl} 뒤에 \usepackage[margin=2cm]{geometry} 를 써도 컴파일은 통과하고, typearea 가 계산한 판면은 조용히 덮어써집니다. 경고가 나오지 않는 쪽이 더 위험합니다. 그러니 KOMA 클래스에서 여백을 바꾸고 싶어지면 먼저 DIV 와 BCOR 로 해결되는지 시험해 보십시오. 그것으로 안 될 때만 geometry 를 쓰되, typearea 의 계산을 포기했다는 사실을 자각하고 쓰십시오. 같은 이치로 titlesec 는 \RedeclareSectionCommand 와, tocloft 는 KOMA 자체의 목차 옵션과 역할이 겹칩니다.
memoir — 패키지를 통째로 삼킨 책 클래스
memoir 는 Peter Wilson이 2001년에 발표했고 2013년부터 Lars Madsen이 유지 관리하는 클래스입니다(TeX Live 2024에 들어 있는 판본은 v3.8.2, 2024-01-26이며 스스로를 “설정 가능한 book / report / article 클래스”라고 밝힙니다). 표준 book 을 불러 확장하는 것이 아니라——memoir.cls 에는 \LoadClass 가 하나도 없습니다——book 과 report 를 대체하는 독립된 클래스 로 쓰였습니다. 특징은 흡수한 양입니다. 매뉴얼에 따르면 클래스 자체가 crop, fancyhdr, geometry, sidecap, subfigure, titlesec 과 비슷한 기능을 제공하고, setspace 에 해당하는 줄 간격 제어도 내장하고 있습니다(명령 이름은 다릅니다). 여기에 더해 array, dcolumn, delarray, tabularx, booktabs, nameref, shortvrb 등을 자동으로 불러옵니다.
왜 그런 구조가 되었을까요. 유지 관리를 이어받은 Lars Madsen이 매뉴얼 서두에서 직접 설명합니다. 2001년 당시에는 연 1회 배포판 밖에서 패키지를 갱신하려면 손으로 해야 했고, CTAN조차 패키지에 매뉴얼을 붙이도록 요구하지 않았습니다. 그래서 여러 패키지의 기능을 클래스에 심고 사용법을 이 한 권에 모으는 편이 합리적이었다는 것입니다. 사정이 달라진 지금 그는 그 내장을 거꾸로 풀어내고 있습니다. 실제로 2023년 여름에는 booktabs 를 “내장”에서 “불러오기”로 옮겼습니다. 3.8판부터 memoir는 2021/06/01 이후의 LaTeX 커널을 요구하고, 너무 오래되면 컴파일을 멈춰 사용자가 알아차리게 합니다.
페이지 레이아웃은 전용 명령으로 조립합니다. \setlrmarginsandblock{spine}{edge}{ratio} 가 좌우(책등 쪽 spine, 바깥쪽 edge) 여백을, \setulmarginsandblock{upper}{lower}{ratio} 가 위아래 여백을 정하며, 페이지 폭은 고정된 채 본문 블록이 여기서 도출됩니다. 세 번째 인수는 비율이고, 계산에 맡기고 싶은 값에는 * 를 둘 수 있습니다. 여기가 memoir의 가장 큰 함정입니다. 이 선언들은 그것만으로는 아무 일도 하지 않습니다. 지정을 늘어놓은 뒤 \checkandfixthelayout 를 호출해야 비로소 레이아웃이 확정됩니다(내부적으로 \checkthelayout 으로 검사하고 \fixthelayout 으로 반영합니다). “값을 다 썼는데 판면이 바뀌지 않는다”는 문의는 대개 이 한 줄이 빠진 것입니다.
장 제목의 체재는 \chapterstyle{style} 로 바꿉니다. \pagestyle 과 같은 감각으로 이후 장 제목의 스타일을 정합니다. TeX Live 2024에 들어 있는 memoir.cls 에는 \makechapterstyle 로 정의된 스타일이 약 서른 종 들어 있습니다. default(익숙한 book 스타일), section(번호와 표제를 한 줄에), hangnum(장 번호를 여백에 걸기), companion(The LaTeX Companion 풍) 외에 bringhurst, madsen, komalike 등 이름만 봐도 출처를 알 수 있는 것도 많습니다. 직접 만들고 싶으면 \makechapterstyle{name}{definition} 으로 추가합니다. 책 디자인에서 memoir가 선호되는 이유의 대부분이 바로 이 “우선 기성 서른 종에서 고를 수 있다”는 점에 있습니다.
\documentclass[11pt,a4paper,twoside]{memoir}
% page layout -- nothing takes effect until \checkandfixthelayout
\setlrmarginsandblock{30mm}{25mm}{*} % spine, fore-edge
\setulmarginsandblock{30mm}{35mm}{*} % upper, lower
\checkandfixthelayout
\chapterstyle{hangnum}
\begin{document}
\chapter{Beginnings}
memoir bundles page layout, headers and chapter styles
into one configurable book class.
\end{document}KOMA-Script와 memoir, 어느 쪽을 고를까
판단의 축은 “이 문서가 하나의 완결된 설계를 필요로 하는가”입니다. 논문이나 보고서처럼 표준 클래스에서 자연스럽게 한 단계 올리는 경우이고 정돈된 기본 타이포그래피와 DIV・BCOR 의 명쾌한 판면 제어를 원한다면 KOMA-Script입니다. 책 한 권을 세부까지 디자인 하려면 레이아웃, 기둥 제목, 장 스타일, 목차를 클래스 안에서 끝낼 수 있는 memoir가 알맞습니다. 두 클래스는 설계 사상이 정면으로 다르므로 섞지 말고 문서마다 하나를 고르십시오. 그리고 갈아탈 값어치가 있는 때는 설계 변경이 한 번으로 끝나지 않고 계속될 때 입니다. 여백을 한 번 1cm 줄이고 싶을 뿐이라면 표준 클래스에 geometry 를 더하는 편이 빨리 끝납니다. 또한 만들려는 것이 슬라이드라면 이야기가 다릅니다. 그쪽은 별도 계열인 beamer 클래스의 담당입니다.
일본어 문서에서는 무엇을 쓸까
일본어가 주가 되는 문서에서는 KOMA-Script도 memoir도 아닌 일본어 조판에 특화된 클래스 를 쓰십시오. 행간, 금칙 처리, 일본어와 로마자 사이의 간격은 전용 클래스의 영역이며, KOMA-Script와 memoir의 설계 사상은 거기까지 돌보지 않습니다. 선택지는 두 갈래입니다. jsarticle / jsbook(jsclasses)은 \NeedsTeXFormat{pLaTeX2e} 로 선언되어 있어 pLaTeX 계열 포맷을 전제로 하며, LuaLaTeX판은 ltjsarticle / ltjsbook 입니다. 다른 하나인 jlreq 는 W3C의 “일본어 조판 처리 요건(JLReq)”을 구현한 클래스로 표준 LaTeX2ε 위에서 동작합니다. 각각 전용 페이지가 있으니 그쪽을 보십시오.
표준 클래스에서 옮기는 절차
기존 원고를 옮길 때의 유일한 요령은 한 번에 전부를 새로 꾸미지 않는 것 입니다. 먼저 클래스 이름만 article 에서 scrartcl 로, book 에서 memoir 로 바꾸고 본문이 그대로 컴파일되는지 확인합니다. 여기서 실패한다면 원인은 설계가 아니라 남겨 둔 보조 패키지입니다. 통과하면 여백 → 기둥 제목 → 제목 → 목차 순으로 하나씩 설정하고 단계마다 PDF를 견주어 봅니다. 아래 네 가지만 지키면 이전은 대개 조용히 끝납니다.
- KOMA-Script —
geometry에 손을 뻗기 전에DIV와BCOR로 해결되는지 시험합니다. 기둥 제목에는fancyhdr가 아니라scrlayer-scrpage를 씁니다. - memoir — 레이아웃 지정의 끝에 반드시
\checkandfixthelayout를 둡니다. 이것이 없으면 지정은 무시됩니다. - 공통 —
titlesec,fancyhdr,tocloft같은 표준 클래스용 보조 패키지를 그대로 얹지 않습니다. 클래스 쪽에 같은 역할의 입구가 있습니다. - 일본어 원고 — 서양문자용 설계 사상을 일본어 본문에 적용하지 말고 jsclasses나 jlreq를 먼저 검토합니다.
% Keep every design knob in one place, with a reason next to it
\KOMAoptions{DIV=12,BCOR=8mm} % 12pt-like text block, 8mm gutter
% \RedeclareSectionCommand[beforeskip=-2ex]{section}
% For memoir, set every layout knob BEFORE the check
% \setlrmarginsandblock{30mm}{25mm}{*}
% \setulmarginsandblock{30mm}{35mm}{*}
% \checkandfixthelayout마지막으로 수수하지만 잘 듣는 습관 하나. KOMA-Script나 memoir를 쓰는 원고에서는 본문을 쓰면서 여백과 제목을 몇 번이고 시험하게 됩니다. 그 조정을 본문 근처에 흩뿌리지 말고 프리앰블의 “페이지 설계”, “제목”, “기둥 제목” 같은 작은 구역에 모으고, 왜 그 값인지 한 줄 주석으로 남기십시오. 나중에 출판사나 학회가 특정 치수를 요구할 때, 어느 한 줄이 작동하는지 찾는 시간이 통째로 사라집니다.