\section 이나 \chapter 가 어떤 글꼴, 번호, 앞뒤 간격으로 조판될지는 원래 문서 클래스가 결정합니다. 이를 본문 쪽, 즉 프리앰블에서 쉽게 다시 만드는 것이 Javier Bezos 의 titlesec 패키지입니다. 핵심은 제목의 모양을 정의하는 \titleformat 과 앞뒤 간격을 정의하는 \titlespacing 두 가지입니다. 문서 구조 자체는 “구조, 제목, 목차”에서 다루므로, 여기서는 제목이 *어떻게 보이는지* 만 파고듭니다.
먼저 간단한 설정부터
세부 정의로 들어가기 전에, titlesec 에는 패키지 옵션만으로 모양을 바꿀 수 있는 간단한 설정이 있습니다. 예를 들어 \usepackage[sf,bf]{titlesec} 로 불러오면 모든 제목이 산세리프+볼드가 됩니다. 옵션은 세 그룹에서 고르며 각 그룹에는 기본값이 있으므로, 바꾸고 싶은 것만 지정하면 충분합니다.
| 그룹 | 선택 가능한 값 | 기본값 |
|---|---|---|
font / shape | rm sf tt md bf up it sl sc(글꼴 계열 / 굵기 / 모양) | bf |
size | big medium small tiny(제목 크기) | big(표준 클래스와 같음) |
align | raggedleft center raggedright(정렬) | (클래스 의존) |
이들과 별도로 제목 앞뒤의 간격을 줄이는 compact 옵션도 있습니다. *번호* 의 출력 방식 자체를 바꾸고 싶다면 \titlelabel 을 씁니다. \thetitle 이 그 제목의 번호를 나타내며, 표준 클래스의 기본값은 \titlelabel{\thetitle\quad} 입니다. 번호 뒤에 마침표만 붙이고 싶다면 다음처럼 씁니다.
\usepackage[sf,bf]{titlesec} % 見出しをサンセリフ+ボールドに
\titlelabel{\thetitle.\quad} % 「1.」のように番号のあとにピリオド또 “번호와 간격은 그대로 두고 글꼴만 바꾸고 싶다”면 별표 붙은 \titleformat* 이 가장 빠릅니다. 첫 번째 인수에 제목 명령, 두 번째 인수에 적용할 글꼴을 넘기면 제목의 *shape* 는 클래스 그대로 두고 겉모양만 바뀝니다.
\titleformat*{\section}{\large\bfseries\sffamily} % \section の書体だけ差し替え\titleformat 으로 모양 정의하기
제목 모양을 본격적으로 다시 만드는 명령이 별표 없는 \titleformat 입니다. 인수가 많아 보이지만 하나씩 보면 단순합니다. 전체 형태는 다음과 같습니다.
\titleformat{⟨command⟩}[⟨shape⟩]{⟨format⟩}{⟨label⟩}{⟨sep⟩}{⟨before-code⟩}[⟨after-code⟩]⟨command⟩— 다시 만들 제목 명령 자체입니다.\part,\chapter,\section,\subsection,\subsubsection,\paragraph,\subparagraph중 하나입니다.[⟨shape⟩](생략 가능)— 제목의 “형태”입니다. 아래의hang,block,display,runin,leftmargin,frame등이 있으며, 생략하면hang입니다.{⟨format⟩}— 번호와 제목 본문 양쪽 에 적용되는 서식입니다.\normalfont\Large\bfseries처럼 글꼴, 크기, 정렬을 함께 지정합니다.{⟨label⟩}— 번호(라벨)의 출력 방식입니다.\thesection등을 둡니다. 번호 없는 단계에서는 비울 수 있지만, 그 경우 목차에도 번호가 나오지 않습니다.{⟨sep⟩}— 라벨과 제목 본문 사이의 간격입니다. 반드시 길이여야 하며 비워 둘 수 없습니다(hang/block에서는 가로,display에서는 세로,frame에서는 본문과 테두리 사이 거리).{⟨before-code⟩}— 제목 본문 바로 앞 에 실행할 코드입니다. 마지막 명령은 인수 하나를 받을 수 있고, 그 인수가 제목 문자열이 됩니다.[⟨after-code⟩](생략 가능)— 제목 본문 바로 뒤 에 실행할 코드입니다(hang/block/display에서는 수직 모드,runin/leftmargin에서는 수평 모드).
⟨shape⟩ 는 제목의 기본 레이아웃을 정합니다. 자주 쓰는 것은 다음과 같습니다.
| shape | 효과 |
|---|---|
hang | 기본값. 번호를 내걸고 본문을 옆에 맞춤(표준 \section 과 같음) |
block | 번호와 본문을 하나의 블록(단락)으로 조판. 가운데 정렬이나 picture 같은 특수 형식에 적합 |
display | 라벨을 별도 줄(단락)로 본문 위에 둠(표준 \chapter 와 같음) |
runin | 행내 제목. 제목 뒤에 줄바꿈 없이 본문이 같은 줄에 이어짐(표준 \paragraph 와 같음) |
leftmargin | 제목을 왼쪽 여백에 둠(rightmargin 은 오른쪽 여백 버전) |
frame | display 와 비슷하지만 제목을 테두리로 감쌈 |
\titlespacing 으로 앞뒤 간격 정의하기
모양과 짝을 이루는 것이 제목 앞뒤의 간격을 정하는 \titlespacing 입니다. 보통 별표 붙은 \titlespacing* 를 사용합니다.
\titlespacing*{⟨command⟩}{⟨left⟩}{⟨before-sep⟩}{⟨after-sep⟩}[⟨right⟩]⟨left⟩— 왼쪽 여백을 늘리는 양입니다(leftmargin계열에서는 제목 폭,runin에서는 제목 바로 앞의 들여쓰기를 뜻합니다).⟨before-sep⟩— 제목 위쪽 의 세로 간격입니다.⟨after-sep⟩— 제목과 본문 사이의 간격입니다(hang/block/display에서는 세로,runin/leftmargin에서는 가로).[⟨right⟩](생략 가능)—hang/block/display에서 오른쪽 여백을 늘리는 양입니다.
여기서 별표의 의미가 중요합니다. 별표 붙은 \titlespacing* 는 제목 뒤에 오는 단락의 들여쓰기를 억제합니다. LaTeX 에는 제목 바로 뒤 단락을 들여쓰지 않는 관례가 있고, 별표는 그 동작을 선택합니다(drop, wrap, runin 형태에서는 들여쓰기 억제가 의미 없으므로 별표 유무가 효과를 내지 않습니다). 모든 인수는 길이(치수) 여야 하며, \stretch 처럼 명령을 포함한 값은 오류가 됩니다. 전체 skip 값을 쓰기 번거롭다면 *4 처럼 * 와 숫자로 줄여 쓸 수 있고, \beforetitleunit 과 \aftertitleunit 이 그 단위가 됩니다.
조합한 실제 예
\titleformat 과 \titlespacing 은 보통 한 쌍으로 씁니다. 다음 프리앰블은 \section 을 “왼쪽에 가는 선을 두고, 그 오른쪽에 조금 큰 산세리프 볼드로 번호와 제목을 나란히 놓는” 형태로 바꾸는 예입니다.
\documentclass{article}
\usepackage{titlesec}
\titleformat{\section} % 対象は \section
[hang] % 形:番号をぶら下げる
{\sffamily\Large\bfseries} % 番号・本文に効く書式
{\thesection} % ラベル(番号)
{1em} % ラベルと本文の間隔
{} % 本文直前のコード(ここでは無し)
\titlespacing*{\section}
{0pt} % 左余白の追加なし
{3.5ex plus 1ex minus .2ex} % 見出しの上の空き
{2.3ex plus .2ex} % 見出しと本文の間の空き
\begin{document}
\section{はじめに}
本文がここから続きます。
\end{document}이 \titleformat 에서는 [hang] 으로 번호를 매다는 형태를 선택하고, {\sffamily\Large\bfseries} 가 번호와 제목 모두에 적용됩니다. {\thesection} 은 “1”, “2” 같은 번호를 출력하고, {1em} 은 그 번호와 제목 사이의 간격입니다. 마지막 {} 는 제목 본문 직전의 코드이며 여기서는 아무것도 하지 않습니다. 이어지는 \titlespacing* 는 왼쪽 여백을 늘리지 않고(0pt), 제목 위에 약 3.5ex, 제목과 본문 사이에 약 2.3ex 의 간격을 줍니다. plus/minus 는 페이지 전체를 고르게 하기 위한 늘어남/줄어듦 허용량입니다. 별표가 있으므로 \section 바로 뒤 단락은 들여쓰기되지 않습니다. 선을 더하고 싶다면 {⟨before-code⟩} 에 titlesec 의 \titlerule 을 넣고 [display] 형태로 바꾸는 것이 정석입니다.
기본적으로 제목 문자열은 {⟨before-code⟩} 뒤에 암묵적으로 따라오지만, explicit 옵션을 붙이면 동작이 바뀌어 제목 문자열을 #1 로 명시적으로 배치해야 합니다(예: \titleformat{\section}{..}{\thesection}{..}{#1.}). 제목 앞뒤에 장식을 붙이고 싶을 때 사용합니다.
titletoc 으로 목차 맞추기와 주의점
제목 모양을 바꾸면 목차의 보이는 방식도 맞추고 싶어집니다. 이를 위해 titlesec 에는 자매 패키지 titletoc 이 포함됩니다(독립적으로도 사용 가능). 중심 명령은 목차 항목을 완전히 정의하는 \titlecontents 와, 점선 리더가 붙은 표준 형태를 한 번에 만드는 \dottedcontents 입니다. 첫 인수 ⟨section⟩ 은 백슬래시 없는 이름(section, chapter, figure 등)이라는 점에 주의하세요.
\usepackage{titletoc}
% 節の目次項目:点線リーダー付き(左寄せ 1.5em、ラベル幅 2.3em、リーダー幅 1pc)
\dottedcontents{section}[1.5em]{}{2.3em}{1pc}마지막으로 자주 밟는 함정 두 가지입니다. 첫째, \titlespacing 은 \chapter 와 \part 에 대해 \titleformat(또는 간단 설정)으로 모양도 함께 바꾸지 않으면 효과가 없습니다. \part 는 원래 비표준 구현이라 간단 설정으로는 바뀌지 않으며, 바꾸려면 \titleformat 쪽을 써야 합니다. 둘째, titlesec 은 KOMA-Script 계열 클래스(scrartcl 등)와 궁합이 좋지 않습니다. KOMA-Script 는 둘을 함께 쓰는 것을 권하지 않는다는 경고를 내며, headings 옵션과 절 명령의 확장 선택 인수 등 여러 기능이 깨집니다. KOMA-Script 를 쓴다면 제목은 titlesec 이 아니라 KOMA 자체의 \setkomafont 나 \RedeclareSectionCommand 같은 장치 로 바꾸세요.