欧文の書き方

欧文(ラテン文字の文章)を、ただ打ち込むだけで TeX は驚くほど美しく組みます。fiff を合字に変え、AV のような対には自動でカーニングを掛け、段落全体を見渡して改行とハイフネーションを決め、両端をそろえます。このページでは、その四つの仕掛け——リガチャ・カーニング・行分割(ハイフネーション)・microtype——を順に見て、書き手が知っておくべき勘どころと、まれに手を入れたいときの直し方をまとめます。これらはあくまで欧文の話で、和文には別の組版モデルがあります。

リガチャ(合字)

リガチャ(合字, ligature) とは、隣り合う複数の字を一つの字形に溶け合わせたものです。f の右上の張り出しが次の i の点や l の縦線とぶつかると見栄えが悪いため、活版印刷の昔から f 系の合字が使われてきました。TeX はこれを 自動で 行います。標準で形成されるのは fffiflffiffl の五つで、本文に officefluffier と打つだけで、該当箇所が一つの字形に置き換わります。

同じ仕組みで 約物(やくもの)も合字として 作られます。連続したハイフン --en ダッシュ(–, 数値範囲などに使う)に、三つ並べた ---em ダッシュ(—, 文の挿入に使う)になります。` (バッククォート二つ)と ''`(アポストロフィ二つ)は、活字的な開き・閉じの二重引用符に変わります。これらは欧文フォントのメトリックに組み込まれた変換で、特別な命令は要りません。

ところが、合字が 語の成り立ち(形態素)の境目をまたぐ と、かえって読みにくくなります。古典的な例が shelfful(shelf+ful)で、ここで ff を合字にすると shelfful の切れ目が見えなくなります。クヌースは『The TeXbook』でこの語を引き、shelf\/ful のように組むべきだと述べています。halflifeoffhandwolffish なども同類です。和文にこの問題はありませんが、欧文を真面目に組むなら覚えておきたい落とし穴です。

不要な合字を断ち切る伝統的な手段は三つあります。f\/fイタリック補正 \/ を挟む書き方で、二つの f の間にその字のはみ出し分だけの微小な空きを入れて合字を防ぎます(クヌースが使ったのもこれ)。f{}f空のグループ {} を挟むやり方。f\kern0pt f幅ゼロのカーン を挟むやり方です。いずれも合字は消えますが、古典的な落とし穴として、語の途中にこうした区切りを入れると、その語のハイフネーションが効かなくなる ことがあります。短い語なら実害はほぼありません。

latex
shelf\/ful      % italic correction — Knuth's example
shelf{}ful      % empty group
shelf\kern0pt ful  % zero-width kern

LuaLaTeX を使うなら、selnolig パッケージがより上等な解です。英語の形態素の知識をパターンとして持ち、shelffulwolffish のような語の不要な合字を 本文に印を付けずに自動で抑制 し、しかもハイフネーションは保ったままにします。逆に「すべての合字を無効化したい」ときは、後述の microtype でフォント単位にまとめて切ることもできます。

カーニング(字詰め)

カーニング(kerning) は、隣り合う特定の文字対の間隔を、見た目が均等になるように詰めたり空けたりする調整です。代表例は AVToWaLT のような対で、字形の傾きや空きのせいで、何もしないと間延びして見えます。TeX はこれも 自動 で行います。各欧文フォントには「この対はこれだけ詰める/空ける」というカーニングペアの表が フォントメトリック(pdfLaTeX 系では .tfm ファイル、OpenType フォントではフォント内のテーブル)として付属しており、TeX はそれを読んで字間を決めます。

ここで大事なのは、リガチャもカーニングも、本文には現れず、フォントのメトリックに従って自動で適用される ということです。書き手がふだん意識する必要はありません。あえて間隔へ手を入れたいときだけ、\kern で長さを指定して微小な空き(や負の空きで詰め)を加えます。逆に 語全体を均等に字間調整(トラッキング/レタースペーシング) したいときは、自前で \kern を撒くのではなく、後述の microtype\textls を使うのが安全です(ハイフネーションを壊しません)。

語間・両端揃え・ハイフネーション

TeX の組版がとりわけ美しいのは、段落全体を一度に見渡して改行位置を決める からです。多くのワープロが行を一つずつ確定していくのに対し、TeX は Knuth–Plass のアルゴリズム で、考えうる改行の組み合わせ全体を評価し、各行の語間の伸び縮みが最小になるような最良の分割を選びます。両端揃え(justification)は、この過程で 語間のグルー(伸縮する空き)を伸ばし縮めして 行幅をそろえることで実現されます。

行をうまく詰めるため、TeX は 言語ごとのハイフネーション・パターン を使って、語を音節境界で自動的に分割します。重要なのは、パターンは言語に依存する ということです。英語の規則でドイツ語やフランス語を割っても正しくなりません。そこで babel(または LuaLaTeX/XeLaTeX 向けの polyglossia)で文書の言語を宣言し、その言語の正しいパターンを読み込ませます。これは「正しく組む」ための前提であって、装飾ではありません。

自動ハイフネーションは賢いものの、固有名詞や専門語では外すことがあります。手当ては三段階です。(1) 特定の語をいつも同じ位置でだけ割ってほしいなら、プリアンブルで \hyphenation{...} に許可位置を - で示した語を(空白区切りで)並べます。(2) その場かぎりの分割位置を与えるなら、語中に \-任意ハイフン, discretionary hyphen)を置きます。\- を置くと、その語はそこでしか割られなくなる 点に注意してください。(3) ある語を絶対に割らせたくないなら \mbox{...} で囲みます。

document.tex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}  % load English hyphenation patterns
\hyphenation{FORTRAN manu-script data-base}  % global exceptions
\begin{document}
We rewrote the man\-u\-script in \mbox{FORTRAN} overnight.
\end{document}

段落全体の詰め具合は二つの宣言で調整できます。**\sloppy は語間が広がるのを許してでも行があふれる(オーバーフルになる)のを避け、\fussy**(既定)は語間を厳しく保つ代わりに、はみ出し(Overfull \hbox の警告)を出しやすくなります。一段落だけ緩めたいなら sloppypar 環境で囲みます。ただし \sloppy は語間が間延びしがちなので、まずは言い回しを変えるか \- を一つ足すほうが、たいてい美しく収まります。

microtype で仕上げる

最後に、欧文の見栄えを 段違いに引き上げる のが microtype パッケージです。\usepackage{microtype} と一行書くだけで、pdfTeX が備える二つの微細組版が既定で有効になります。一つは 文字の突き出し(character protrusion, margin kerning):行末の句読点や oA のような丸い・傾いた字を、ほんのわずか右マージンの外へ押し出して、視覚的に揃った端を作ります。もう一つは フォントの伸縮(font expansion):各行の字幅をごく僅かに(コンマ数パーセント)伸び縮みさせ、語間の伸縮を肩代わりさせて、より均一で詰まった段落にします。

パッケージはこのほかに、**語間の微調整・追加カーニング・ハイフネーション可能なレタースペーシング(\textls{...})・合字の無効化 も提供します。どの機能が使えるかは エンジンによって異なります。突き出しは pdfTeX・LuaTeX・XeTeX で、伸縮は pdfTeX と LuaTeX のみ**(XeTeX は不可)、合字の無効化は pdfTeX・LuaTeX で使えます。読み込んだエンジンで安全に動く機能だけが自動で有効になるので、まずは無引数で読み込んでおけば十分です。

document.tex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{microtype}  % protrusion + expansion, on by default
\begin{document}
Long justified paragraphs look noticeably more even with microtype:
fewer rivers of white space, tidier right margins, and \textls{LETTERSPACED}
small caps when you ask for them.
\end{document}

微調整は控えめで、ぱっと見て分かるほどではありませんが、ページ全体では 白い「川」が減り、行末がそろい、ハイフネーションも減る という形で効いてきます。欧文を本格的に組むなら microtype の追加は事実上の定番——ほぼ必須の品質向上——と考えてよいでしょう。なお、これらの効果は 欧文(ラテン文字)に対するもの です。和文には突き出しや伸縮とは別の組版モデルがあり、luatexja などが受け持ちます。