드롭 캡(lettrine)

장 첫머리에서 문단의 첫 글자를 크게 키워 몇 줄 아래로 떨어뜨리는 장식 글자를 영어로는 드롭 캡, 프랑스어로는 lettrine이라고 합니다. LaTeX에서 이 일을 맡는 것이 바로 그 이름을 그대로 쓰는 Daniel Flipo의 lettrine 패키지입니다(TeX Live 2024 동봉본은 2024-01-20자 v2.60). 이 장식은 겉모습의 문제로만 보이지만 구현은 집요할 만큼 정밀합니다. lettrineEFTZ라는 네 글자짜리 기준 문자열을 실제로 조판해 높이를 재고, xfp\fpeval로 배율을 계산합니다. 실측에서 목표 28.98666pt에 대해 얻어진 글자 높이는 28.98679pt, 오차 0.00013pt였습니다. 이 페이지에서는 \lettrine의 두 필수 인수, lines=lhang=loversize=findent= 같은 옵션, 내부의 \parshape\llap, 그리고 목록・두 단 조판・일본어에서 실제로 무슨 일이 일어나는지를 다룹니다.

\lettrine 사용법: 인수는 둘, 사이에 공백을 넣지 않기

서문에 \usepackage{lettrine}을 쓰고, 문단을 \lettrine[옵션]{T}{he rest}로 시작합니다. 필수 인수는 둘입니다. 첫 번째 {T}가 떨어뜨릴 머리글자 자체이고, 두 번째 {he rest}는 그 뒤에 이어지는 글로 기본값은 작은 대문자입니다. 문단의 나머지는 자동으로 머리글자 오른쪽을 감싸고 돕니다. {T}{he rest} 사이에 공백을 넣어서는 안 됩니다. 첫 낱말의 나머지를 그대로 두 번째 인수에 넘기는 것이 올바른 쓰기입니다. 두 번째 인수는 비어 있어도 됩니다(\lettrine{T}{}는 머리글자만 떨어뜨리고 다음 낱말을 보통 서체로 시작합니다).

latex
\documentclass{article}
\usepackage{lettrine}
\usepackage{lmodern}      % a fully scalable font — see below
\begin{document}
\lettrine{L}{orem} ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua.
\end{document}

여기에 함정이 하나 있습니다. lettrine은 머리글자를 임의의 크기로 키우므로 어떤 크기에서도 쓸 수 있는 글꼴이 필요합니다. Computer Modern(CM)과 EC 글꼴은 기본적으로 정해진 단계의 크기만 갖고 있어서, 요청한 크기가 없으면 가까운 단계로 대체되고 머리글자가 지정한 줄 수를 채우지 못하게 됩니다. 안전한 방법은 \usepackage{lmodern}(Latin Modern)을 더하거나 Palatino, Times 같은 PostScript/OpenType 글꼴을 쓰는 것입니다. 굳이 CM을 유지하고 싶다면 \usepackage{type1cm}, EC라면 \usepackage{type1ec}을 읽어 들입니다. 대체가 일어났는지는 로그로 알 수 있습니다. LaTeX Font Warning: Font shape ... in size <31.53638> not available (Font) size <24.88> substituted 같은 줄이 나왔다면 머리글자가 줄어든 것입니다.

내부에서 무슨 일이 일어나는가: \hangindent이 아니라 \parshape\llap

lettrine\hangindent을 쓰지 않습니다. 손수 만드는 드롭 캡을 설명할 때 흔히 “\hangindent\hangafter로 몇 줄을 들여쓰고 그 자리에 큰 글자를 놓는다”고들 하지만, lettrine.sty의 구현은 다릅니다. 머리글자를 \sbox로 상자에 담은 다음, 줄마다 (들여쓰기, 줄 길이) 쌍을 늘어놓은 \parshape을 만들고, \noindent으로 문단 들여쓰기를 지우고, 머리글자 상자를 \llap으로 왼쪽 여백 쪽으로 내밉니다. \hangindent이 “처음 n줄에 일정한 들여쓰기”밖에 표현하지 못하는 데 비해 \parshape은 줄마다 다른 들여쓰기를 지정할 수 있습니다. slope= 옵션으로 A나 V의 비스듬한 윤곽을 따라 본문 왼쪽 끝을 기울일 수 있는 것도 이 구조 덕분입니다.

높이를 어떻게 정하는지 알고 나면 lines=의 의미가 달라집니다. lines=n은 “\baselineskip의 n배”가 아닙니다. 목표 높이는 (n − 1)줄분의 \baselineskip 더하기 이어지는 글의 글꼴(\LettrineTextFont, 기본은 \scshape)의 x 높이입니다. 10pt article에서 실측하면 \baselineskip은 12.0pt, \scshapex 높이는 4.98666pt입니다. lines=3일 때 로그에 찍히는 목표값은 28.98666pt로, 정확히 12 × 2 + 4.98666입니다. 실제로 얻어진 글자 높이는 28.98679pt였습니다. 이 두 줄은 컴파일할 때마다 .log에 쓰이므로 머리글자가 생각한 크기로 나오지 않을 때는 먼저 여기를 읽으세요. 글꼴 대체가 일어났다면 목표값과 실측값이 크게 벌어집니다.

latex
% lettrine reports both numbers in the .log on every run:
%   Package lettrine.sty Info: Targeted height = 28.98666pt
%   (lettrine.sty)             (for loversize=0, accent excluded),
%   (lettrine.sty)             Lettrine height = 28.98679pt (L);
%
% Read them when an initial comes out the wrong size:
%   pdflatex doc.tex && grep -A3 "Targeted height" doc.log

주요 옵션: lines=, lhang=, loversize=, findent=

겉모습은 대괄호 안에 쉼표로 구분해 늘어놓는 옵션으로 조정합니다. 자주 쓰는 것은 넷입니다. lines=는 머리글자의 높이(줄 수), lhang=는 왼쪽 여백으로 파고드는 정도, loversize=는 그 줄 수를 넘어선 확대, findent=는 머리글자와 첫 줄 사이의 틈입니다. 실무에서 값어치를 하는 것은 lhang=입니다. O나 C처럼 윤곽이 둥근 글자는 조금(보통 0.1~0.2) 여백으로 내밀어야 시각적인 왼쪽 정렬이 정돈됩니다. 왼쪽 위로 가로획이 뻗은 T도 마찬가지입니다. 반대로 H나 N처럼 왼쪽 끝이 수직인 글자는 0이 정답입니다. 값은 모두 글자 자신의 너비나 높이에 대한 비율이므로 글꼴을 바꿔도 시각적 관계가 유지됩니다.

옵션기본값
lines머리글자의 높이. (n−1)줄분 \baselineskip 더하기 이어지는 글의 x 높이2
lhang글자 너비에 대한 비율로 왼쪽 여백에 파고듭니다(0~1). O・C・T에 효과적0
loversize목표 높이에 대한 확대 비율(−1~1). 0.1이면 10 % 커집니다0
lraise머리글자를 자신의 높이에 대한 비율만큼 들어 올립니다0
findent머리글자와 첫 줄 사이의 틈0pt
nindent둘째 줄 이하의 들여쓰기 양0.5em
slope감싸는 본문 왼쪽 끝의 기울기. A나 V 같은 비스듬한 글자에0pt
depth머리글자를 보통보다 몇 줄 더 깊이 가라앉힐지0
ante머리글자 바로 앞에 놓는 것(프랑스어 여는 guillemet 등)없음
image머리글자를 이미지로. graphicx가 필요하며 viewport=로 잘라낼 수 있습니다false
refstring높이 기준으로 삼는 문자열을 바꿉니다. 기본 EFTZ가 맞지 않는 장식 서체에EFTZ

같은 키는 패키지를 읽어 들일 때도 지정할 수 있고, 그쪽은 문서 전체의 기본값이 됩니다. \usepackage[lines=3]{lettrine}이라고 쓰면 3줄이 기본이 되고, 개별 \lettrine[...]에 적은 옵션이 그 자리에서만 덮어씁니다. 특정 글자에 매번 같은 설정을 주고 싶다면 \LettrineOptionsFor{O}{lhang=0.2}처럼 글자별 기본값도 등록할 수 있습니다. “둥근 글자만 내밀기”라는 조정이 이것으로 한 번만 하면 되는 일이 됩니다.

머리글자의 글꼴과 색: \LettrineFontHook 사용법

머리글자의 서체는 \LettrineFontHook\renewcommand로 고쳐 지정합니다. 크기는 줄 수에서 자동 계산되므로 \LettrineFont를 직접 건드릴 필요가 없습니다. 훅의 내용은 저수준 글꼴 명령입니다. 예컨대 \fontfamily{ppl}\fontseries{bx}\fontshape{sl}이라고 쓰면 머리글자만 Palatino 굵은 기울임체가 됩니다. LuaLaTeX나 XeLaTeX이라면 fontspec을 거쳐 \renewcommand{\LettrineFontHook}{\fontspec{LinLibertine_I.otf}}처럼 써서 Linux Libertine의 장식 이니셜로 바꿀 수 있습니다. 이어지는 글(두 번째 인수)의 서체는 별도의 훅 \LettrineTextFont가 갖고 있으며 기본값은 \scshape입니다. 작은 대문자를 그만두려면 \renewcommand{\LettrineTextFont}{\rmfamily}라고 씁니다.

색을 바꿀 때는 괄호의 종류에 주의하세요. 회색으로 하려면 \renewcommand{\LettrineFontHook}{\color[gray]{0.5}}입니다. 흔히 보이는 \color{gray}{0.5}오류를 내지 않은 채 잘못된 결과를 만듭니다. 실제로 조판해 보면 \color{gray}가 색 이름 gray를 고르고 남은 {0.5}가 글자로 조판되어, 머리글자 왼쪽 아래에 작게 “0.5”가 찍힙니다. 훅의 내용은 그대로 \sbox 안에서 실행되므로, 글자를 만드는 명령을 쓰면 글자가 나옵니다. 색 이름으로 지정하려면 \color{gray}, 회색조 값으로 지정하려면 \color[gray]{0.5}. 둘 중 하나만 쓰세요.

latex
% Palatino, bold, slanted — for the dropped capital only
\renewcommand{\LettrineFontHook}{\fontfamily{ppl}\fontseries{bx}\fontshape{sl}}

% Grey. NOT \color{gray}{0.5} — that silently prints "0.5" beside the cap.
\renewcommand{\LettrineFontHook}{\color[gray]{0.5}}

% Drop the small capitals on the run-on text
\renewcommand{\LettrineTextFont}{\rmfamily}

% Three lines tall, hanging 20% of its width into the margin
\lettrine[lines=3, lhang=0.2]{T}{his is} the opening paragraph of a chapter.
% A slanted letter wants its own contour:
\lettrine[lines=4, lraise=0.1, nindent=0em, slope=-.5em]{V}{oici} le texte.

잘 되지 않는 자리: 문단 도중, 목록 안, 두 단 조판

\lettrine은 문단의 첫머리에 놓아야 하며, 앞에 인쇄되는 내용이 있으면 소리 없이 망가집니다. Some words come first. \lettrine{L}{orem} …이라고 써서 조판해 보면 오류도 경고도 전혀 없이, “Some words come first.”만 들여쓰기된 짧은 줄로 홀로 남고 그 아래에서 머리글자와 감싸기가 시작됩니다. \lettrine\parshape을 문단 전체에 대해 설정하므로, 앞서는 내용은 그 설계 바깥에 남겨지는 것입니다. 한편 앞에 \noindent를 붙여도 망가지지 않습니다. lettrine.sty가 스스로 \noindent를 내보내므로 겹쳐 써도 무해합니다. 망가뜨리는 것은 공백이 아니라 인쇄되는 내용입니다.

목록 안에서는 쓸 수 없습니다. 패키지 설명서가 분명히 밝히고 있고, 실측에서도 증상이 뚜렷했습니다. itemize\item 바로 뒤에 \lettrine{I}{nlist}라고 쓰면 컴파일은 통과하고 경고도 없으며 감싸기도 겉보기에는 그럴듯합니다. 그런데 확대해 보면 항목의 글머리 기호(•)가 머리글자의 왼쪽 위에 겹쳐 찍혀 있습니다. 원인은 명쾌합니다. \item의 표지도 \lettrine의 머리글자도 모두 \llap으로 왼쪽 여백 옆 같은 자리에 놓이기 때문입니다. quote, quotation, abstract 안에서는 올바로 동작하고, center 안에서는 [lines=1]에 한정됩니다. 한편 \lettrine으로 시작한 문단 안에 목록을 끼워야 한다면, 목록이 끝난 직후에 \parshape=0을 쓰라고 설명서가 지시합니다(목록 앞뒤에서 문단을 끊어도 됩니다).

두 단 조판에서는 같은 lines= 값이 전혀 다른 인상을 줍니다. 실측 결과 표준 articletwocolumn을 주면 \textwidth는 469.0pt 그대로지만 \columnwidth는 229.5pt(\columnsep은 10.0pt)가 됩니다. 조판 폭이 절반 이하가 되는데도 머리글자의 높이는 \baselineskip에서 정해지므로 달라지지 않습니다. 그 결과 머리글자가 차지하는 단 폭에 대한 비율이 거의 두 배가 되고, lines=4 같은 값을 주면 처음 네 줄이 극단적으로 짧아져 낱말 사이가 벌어진 볼썽사나운 줄이 늘어섭니다. 두 단에서 쓸 때는 lines=2에 머무르고, loversize는 0으로 두며, lhang도 삼가는 편이 무난합니다. 또한 오른쪽 단에서는 lhang이 파고드는 곳이 쪽 여백이 아니라 단 사이(\columnsep)이므로, 옆 단 본문에 너무 가까워지지 않는지 반드시 눈으로 확인하세요.

일본어에서 첫 글자를 크게 하고 싶을 때: 실제로 무슨 일이 일어나는가

\lettrine에 한자를 넘겨도 컴파일은 통과하고 머리글자는 실제로 크게 조판됩니다. 다만 치수는 서양 글꼴 쪽에서 계산됩니다. upLaTeX와 jsarticle\lettrine{吾}{輩は猫である。}을 조판했더니 오류는 나지 않았지만 로그에 LaTeX Font Warning: Font shape OT1/cmr/m/n in size <31.53638> not available (Font) size <24.88> substituted가 나타났습니다. lettrine이 높이의 기준으로 삼는 것은 \LettrineTestString(기본 EFTZ)과 그 시점의 서양 글꼴이지 일본어 글꼴이 아니기 때문입니다. \usepackage{lmodern}을 더하면 이 경고는 사라지지만, 감싸기의 들여쓰기가 일본어의 정사각형 자면과 맞물리지 않는 점은 남습니다. 게다가 두 번째 인수의 기본 서체 \scshape은 가나에도 한자에도 아무 효과가 없습니다. 서양 글에서 당연한 “큰 머리글자에서 작은 대문자로 넘기기”라는 시각적 이어받음이 애초에 성립하지 않는 것입니다.

실무적인 판단은 이렇게 됩니다. 일본어 장 첫머리에서 첫 글자를 돋보이게 하려는 것뿐이라면, \lettrine을 억지로 통과시키기보다 제목의 크기와 행 배분, 또는 들여쓰기와 여백으로 처리하는 편이 훨씬 확실합니다. 그래도 떨어뜨리고 싶다면 \LettrineFontHook에 일본어 글꼴을 고르는 명령을 넣고, refstring=으로 높이 기준을 실제로 쓰는 글자로 바꾸고, nindentfindent를 손으로 조여 가야 합니다. 어느 쪽이든 일본어의 정사각형 자면은 서양 머리글자만큼 “떨어뜨리기”가 어울리지 않습니다. 조판 견본을 출력해 눈으로 확인한 뒤 채택 여부를 정하세요.

언제 넣을 것인가: 본문이 굳기 전에 꾸미지 않기

드롭 캡은 이해를 돕는 장치가 아니라 장의 입구에서 분위기를 만드는 장식입니다. 그래서 마지막에 넣습니다. lineslhang의 적정값은 문단의 길이와 줄이 끊기는 모양에 달려 있으므로, 본문을 한 문단 더할 때마다 다시 맞춰야 합니다. 논문・보고서・명세서처럼 양식이 정해진 문서에는 쓰지 마세요. 쓸 자리는 에세이, 소책자, 장식을 환영하는 지면 설계를 가진 책의 장 첫머리입니다. 그리고 쓰기로 정했다면 같은 문서 안에서 규칙을 하나로 유지하세요. 어떤 장은 2줄, 다른 장은 3줄 하는 들쭉날쭉함이야말로 장식이 장식으로 작동하지 못하게 만드는 전형입니다.

  • 놓을 자리는 장 첫머리의 첫 문단뿐. 목록 안, center 안([lines=1] 제외), 머리글자 높이보다 짧은 문단은 피하세요.
  • 본문이 굳을 때까지 넣지 마세요. lineslhang은 문단의 길이와 줄이 끊기는 모양에 달려 있습니다.
  • 글꼴은 반드시 자유롭게 확대되는 것으로. lmodern 등을 넣고 .logTargeted heightLettrine height가 가까운지 확인하세요.
  • 이미지 이니셜보다 글자 이니셜을 우선. 본문 검색과 복사가 되는 쪽이 독자에게 친절합니다.
  • 일본어 장 첫머리에서는 서양식 드롭 캡이 지면에 맞는지 먼저 정하세요. 맞지 않으면 제목 크기와 여백으로 처리합니다.