章の冒頭で 段落の 1 文字目を大きく 落とし込む飾り文字を、日本語では「ドロップキャップ」、フランス語では lettrine と呼びます。LaTeX でこれを引き受けるのが、まさにその名を持つ Daniel Flipo の lettrine パッケージ(TeX Live 2024 同梱は v2.60、2024-01-20)です。この飾りは見た目の問題にすぎないように思えますが、実装は執拗なほど精密で、lettrine は EFTZ という 4 文字の基準文字列を実際に組んで高さを測り、xfp の \fpeval で倍率を割り出します。実測では、目標 28.98666pt に対して得られた文字の高さは 28.98679pt——誤差 0.00013pt。このページでは \lettrine の 2 つの必須引数、lines=・lhang=・loversize=・findent= などのオプション、内部の \parshape と \llap、そして箇条書き・二段組・和文で実際に何が起きるかを扱います。
\lettrine の使い方——引数は 2 つ、あいだに空白を入れない
プリアンブルに \usepackage{lettrine} を書き、段落を \lettrine[オプション]{T}{he rest} で始めます。 必須引数は 2 つ。第 1 引数 {T} が落とし込む頭文字そのもの、第 2 引数 {he rest} がそれに続く語で、既定ではスモールキャップスで組まれます。段落の残りは自動的に頭文字の右側へ回り込みます。{T} と {he rest} のあいだに空白を入れてはいけません——最初の単語の残りをそのまま第 2 引数に渡すのが正しい書き方です。第 2 引数が空でも構いません(\lettrine{T}{} は頭文字だけを落とし、続く語を通常の書体で始めます)。
\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 は 1 行ずつ違う字下げを指定できます。slope= オプションで A や V の斜めの輪郭に沿って本文の左端を傾けられるのは、この構造があるからです。
高さの決め方も、知っておくと lines= の意味が変わります。lines=n は「\baselineskip の n 倍」ではありません。 目標の高さは (n − 1) 行ぶんの \baselineskip + 続き文字(\LettrineTextFont、既定は \scshape)の x 高さ です。10pt の article で実測すると \baselineskip は 12.0pt、\scshape の x の高さは 4.98666pt。lines=3 のときログに出る目標値は 28.98666pt で、これはちょうど 12 × 2 + 4.98666 です。実際に得られた文字の高さは 28.98679pt。この 2 行はコンパイルのたびに .log に書き出されるので、頭文字が思った大きさにならないときは、まずここを読んでください。フォントの置き換えが起きていれば、目標値と実測値が大きくずれます。
% 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=
外観は角括弧のなかにカンマ区切りで並べるオプションで調整します。 よく使うのは 4 つ。lines= が頭文字の高さ(行数)、lhang= が左マージンへの食い込み量、loversize= が行数を超えた拡大、findent= が頭文字と 1 行目の隙間です。実務で効くのは 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 | 頭文字と 1 行目のあいだの隙間 | 0pt |
nindent | 2 行目以降の字下げ量 | 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 の装飾イニシャルに切り替えられます。続きの語(第 2 引数)の書体は別のフック \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}。どちらか一方だけを書いてください。
% 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= の値がまるで違う印象になります。 標準の article を twocolumn にすると、実測で \textwidth は 469.0pt のまま、\columnwidth は 229.5pt(\columnsep は 10.0pt)。つまり組み幅が半分以下になるのに、頭文字の高さは \baselineskip から決まるので変わりません。結果として頭文字が占める 段幅に対する比率 はほぼ倍になり、lines=4 などにすると最初の 4 行が極端に短くなって、語間が開いたみっともない行が並びます。二段組で使うなら lines=2 にとどめ、loversize は 0 のまま、lhang も控えめにするのが無難です。さらに、右側の段では lhang の食い込み先がページの余白ではなく 段間(\columnsep) になるので、隣の段の本文に近づきすぎないか必ず目で確かめてください。
和文で 1 文字目を大きくしたいとき——何が起きるか
\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} を足せばこの警告は消えますが、回り込みの字下げが和文の正方形の字面と噛み合わない点は残ります。加えて第 2 引数の既定書体 \scshape は、かなにも漢字にも 何の効果もありません——欧文で当たり前の「頭文字+スモールキャップスの続き」という視覚的な受け渡しが、そもそも成立しないわけです。
実務上の判断はこうなります。和文の章扉で 1 文字目を目立たせたいだけなら、\lettrine を無理に通すより、見出しの級数と行取り、あるいは字下げと余白で処理するほうが確実 です。どうしても落とし込みたいなら、\LettrineFontHook に和文フォントを選ぶ命令を入れ、refstring= で高さの基準を実際に使う文字に差し替え、nindent と findent を手で詰めていくことになります。いずれにせよ、和文の正方形の字面は欧文の頭文字ほど「落とし込み」が似合いません。組見本を出力して目で確かめてから採用するかどうかを決めてください。
いつ入れるか——本文が固まる前に飾らない
ドロップキャップは読解を助ける装置ではなく、章の入口の気分をつくる装飾です。だから入れるのは最後です。 lines と lhang の適値は段落の長さと行の折れ方に依存するので、本文を一段落書き足すたびに調整が要ります。論文・報告書・仕様書のように様式が決まっている文書では使わないでください。使いどころは、エッセイ、小冊子、装飾を歓迎する紙面設計を持った本の章扉です。そして入れると決めたら、同じ文書の中で規則を一つに保つ こと——ある章は 2 行、別の章は 3 行、というばらつきは、飾りが飾りとして働かなくなる典型です。
- 置く場所は章扉の第 1 段落だけ。 箇条書きの中、
centerの中([lines=1]を除く)、頭文字の高さより短い段落は避ける。 - 本文が固まるまで入れない。
linesとlhangは段落の長さと行の折れ方に依存する。 - フォントは必ずスケーラブルなものに。
lmodernなどを入れ、.logのTargeted heightとLettrine heightが近いことを確認する。 - 画像イニシャルより文字イニシャルを優先する。 本文検索とコピーができるほうが読者に親切。
- 和文の章扉では、まず洋風のドロップキャップが版面に合うかを決める。 合わなければ、見出しの級数や余白で処理する。