強調した文の中の語をもう一段だけ強調すると、その語は 傾きが増えるどころか、まっすぐ立ち上がります。LaTeX の \emph{...} を入れ子にすると、書体はイタリック → 立体(ローマン)→ イタリックと一段ごとに反転していく——同じことを \textit でやっても、何段重ねても全部イタリックのままです。この差は好みの問題ではありません。\emph は「傾けよ」ではなく「ここを強調せよ」という 意味 を書き込む命令で、どう見せるかは後から決まるからです。このページでは、その切り替えの仕組みと、\em との意外な違い、イタリック補正 \/、そして「LaTeX で下線を引く」がなぜ思ったより厄介なのかを、実際に組版して測った数値とともに追いかけます。
\emph と \textit の違い
\emph は文脈を見て切り替え、\textit は無条件に傾けます。 まわりが立体なら \emph は中身をイタリックにしますが、まわりがすでにイタリックなら、同じ \emph が中身を立体へ戻します。目的が「地の文と見分けがつくようにする」ことなので、地の文が傾いていれば、まっすぐ立てるほうが目的にかないます。\textit にはその判断がありません。すでにイタリックの範囲で \textit を使うと見た目は何も変わらず、強調したはずの語が完全に埋もれます。これが「強調には \textit ではなく \emph」と言われる最大の理由です。
% nesting the two commands, side by side
\emph{outer \emph{inner \emph{deepest}}}
\textit{outer \textit{inner \textit{deepest}}}この 2 行を組んで、各段階で選ばれた シェイプ属性(NFSS が保持している字形の値)を書き出すと差は一目瞭然です。\emph は it → n → it → n と一段ごとに反転し、\textit は it → it → it と動きません。しかも \emph が見ているのは「イタリックかどうか」ではなく「いま立っているかどうか」です。\textsl{...}(スラント体)の中で \emph を使っても中身は n(立体)に戻りますし、\textbf{...} の中では太さ bx を保ったままシェイプだけ it になり、太字イタリック(Computer Modern なら cmbxti10)が呼ばれます。軸ごとに独立しているからこそ、強調は太さを壊さずに乗ります。
| 文脈 | \emph が出す字形 | \textit が出す字形 |
|---|---|---|
upright body text | イタリック(it) | イタリック(it) |
inside \emph | 立体に戻る(n)——強調が見える | イタリックのまま——強調が消える |
inside \textit | 立体に戻る(n) | イタリックのまま(変化なし) |
inside \textsl | 立体に戻る(n)——傾き全般を見ている | イタリック(it)に上書き |
inside \textbf | 太さ bx を保ったままイタリック | 太さ bx を保ったままイタリック |
italic correction | 自動で入る | 自動で入る(宣言形 \itshape は入らない) |
when to use | 文中の強調——意味を書く場面すべて | 書名・学名・外国語など、傾き自体が目的のとき |
なぜ入れ子で立体に戻るのか
答えは \emph の定義そのものにあります。LaTeX の中核 latex.ltx の 11172 行目は、たった一行 \DeclareTextFontCommand{\emph}{\em} です。その 10 行上の 11162 行目には \DeclareTextFontCommand{\textbf}{\bfseries} があります。つまり \emph は書体命令ではなく、「切り替えの宣言 \em を、引数を取る形に包んだもの」——\textbf が \bfseries を包んだのとまったく同じ工場から出てきた製品です。反転する能力は \emph ではなく \em が持っていて、\em は現在のシェイプを見てから行き先を決めます。だから「いまイタリックなら立体へ」という判断が、入れ子の各段で独立に起きるわけです。
この設計は Web の HTML における <em>(強調)と <i>(イタリック)の分業とまったく同じ発想で、しかも LaTeX2e の側が 1994 年から実装しています。<em> は「強調」という意味を担い、実際の見せ方は CSS が決める——LaTeX でも本文には \emph で 意味 だけを書き、その見せ方はクラスファイルやプリアンブルが決めます。実務上の見返りははっきりしています。あとから「強調はイタリックではなく太字にしたい」と方針を変えても、原稿本体には一切触れず、強調の定義がある一か所を直すだけで全体に反映されます。逆に \textit{...} を本文中に散らしてしまうと、方針変更のたびに該当箇所を全部探し出して書き換える作業が発生します。しかも \textit は書名にも使うので、置換で機械的に区別することさえできません。
強調の段階を設計する(\DeclareEmphSequence)
イタリックと立体の交互は 既定にすぎず、プリアンブルで自由に置き換えられます。そのための命令が \DeclareEmphSequence で、LaTeX News 31(2020 年)で導入されました。引数はカンマ区切りの書体宣言のリストで、先頭から順に第 1 段階・第 2 段階…の強調に対応します。それまでの LaTeX は「イタリックと立体を往復する」ことしかできませんでしたが、この仕組みによって、たとえば第 1 段階をイタリック、第 2 段階をスモールキャピタル、第 3 段階をイタリックのスモールキャピタル、といった階層を自分で決められるようになりました。
% in the preamble: italic, then small caps, then italic small caps
\DeclareEmphSequence{\itshape,%
\upshape\scshape,\itshape}- リストより深く入れ子にしたら —
\emreset(既定は\ulcshape\upshape、すなわち通常の立体)が使われ、その次の段階からリストの先頭に戻ります。上の 2 項目のリストで 5 段まで組むと、実測でit→sc→n→it→scとなり、確かに 3 段目でリセットされて 4 段目から巡回が再開します。 - 「賢い」判定が入ります — 指定した宣言が本当に現在の書体を変えるかを LaTeX が確認し、変わらないならその段階を飛ばして次へ進みます。すでに手作業でその書体に切り替えてある、という想定です。
- 判定をすり抜けたいときは
\emforce— 色だけを変える宣言のように「書体属性は動かないが確かに見た目は変わる」項目では判定が誤作動します。その項目に\emforceを加えると、属性が変わらなく見えても強制的に適用されます。
\em と \emph はどちらを使うべきか
原稿では \emph{...} を使ってください。\em は同じ切り替えをしますが、イタリック補正を入れません。 \em は引数を取らない 宣言 で、{\em ここだけ} のように波括弧で範囲を区切って使います。反転の判断そのものは \emph と同一——というより、先に見たとおり \emph の中身が \em です。差が出るのは包み紙のほうで、\DeclareTextFontCommand が作る引数付きの形だけが、傾いた字と次の字の境目に補正を挟み込みます。実測すると \textit{f}h の幅が 10.74167pt なのに対し {\itshape f}h は 8.62222pt、\emph{f}h は 10.74167pt で {\em f}h は 8.62222pt。差の 2.11945pt がまるごと抜け落ちています。宣言形を使うなら、傾いた範囲の末尾に \/ を自分で書き足すことになります。
イタリック補正 \/ の正体
イタリック補正は「その文字が右にどれだけはみ出しているか」という数値で、フォントのメトリックファイルに一文字ずつ書き込まれています。 傾いた字は、外形は右上へ張り出しているのに、組版上の幅(f なら 3.06665pt)はそこまで含みません。だから次の立体の字がすぐ隣に来ると、はみ出した部分と衝突します。TeX のフォントメトリック(TFM)には、この張り出し量が CHARIC として最初から入っています。cmti10 の f は CHARIC R 0.211945——デザインサイズ 10pt で 2.11945pt です。前節で \textit{f}h と {\itshape f}h の差として測れた値と、小数点以下まで一致します。\/ は「直前の文字の CHARIC を空きとして挿入せよ」という命令にすぎません。ちなみに立体の cmr10 でも f の CHARIC は 0.077779 とゼロではなく、あの鉤の分だけ張り出しています。
\emph や \textit が補正を自動で入れると言っても、いつも入れるわけではありません。直後の文字がカンマかピリオドなら補正は省かれます。latex.ltx の 11250 行目に \def \nocorrlist {,.} とあるのがその一覧で、句読点は字面が低く、傾いた字の下にちょうど潜り込むので、空きを足すとかえって離れて見えるからです。実測でも \textit{f}. と {\itshape f}. はどちらも 5.84444pt で完全に同じでした。逆に、補正を止めたい場面では \nocorr を引数の内側に置きます。\textit{\nocorr text} なら先頭側、\textit{text\nocorr} なら末尾側の補正が抑えられます。\nocorrlist 自体も \renewcommand で入れ替えられますが、既定のカンマとピリオドで困ることはまずありません。
% argument form: the correction is added for you
He was \emph{very} clever.
% declaration form: add \/ at the end of the slanted run
He was {\em very\/} clever.
% before a comma or period nothing is added anyway
He was \emph{very}, and cheerful too.
% to suppress it explicitly
\textit{slanted\nocorr}text\underline が行をまたげない理由
\underline は本文用の命令ではなく、数式の下線を文章中で使えるようにしただけの命令です。だから中身が丸ごと 1 個の箱になり、途中で改行できません。 定義は latex.ltx の 13309 行目からで、テキストモードのときは $\@@underline{\hbox{#1}}\m@th$ と展開されます。\hbox は不可分の箱なので、TeX の行分割はその内側に手を出せません。実際に幅 150pt の段落に \underline{alpha beta gamma delta epsilon zeta eta theta iota kappa lambda mu} を置いて組むと Overfull \hbox (170.25879pt too wide) が出て、下線を引いた語句が右の余白へ 170pt もはみ出します。1 語や 2 語なら問題ありませんが、文にかけた瞬間に破綻します。ハイフネーションも同時に止まります。
そもそも下線は、活字組版の道具ではなく タイプライターの代用品 です。傾いた活字も太い活字も持たない機械で「ここを強調した」と伝える唯一の手段が、行を一段送って下線を打つことでした。組んだ活字で本を作る現場では、その必要がないので下線は使われません。だから LaTeX の標準クラスも下線を強調の手段として用意していません。原稿で下線を引きたくなったら、まず「これは本当に下線でなければならないのか、それとも強調なのか」を確かめてください。強調なら \emph、書名なら \textit、見出しの階層なら \section 系——ほとんどの場合、下線より適切な道具が既にあります。それでも下線が要るのは、査読者の指示、法務文書の様式、語学教材の書き込み欄といった、下線そのものが規定されている場面です。
行をまたぐ下線 — ulem と soul
行をまたぐ下線が要るなら ulem か soul を読み込みます。どちらも TeX Live 2024 に同梱されていて、追加インストールは要りません。 先ほどの 150pt 幅の段落で試すと、\underline が 170.26pt もあふれたのに対し、ulem の \uline{...} も soul の \ul{...} もあふれは 0.30pt——つまり普通の段落と同じように折り返しています。ulem は Donald Arseneau が 1989 年から書き継いでいるパッケージで、\uline(下線)のほか \uuline(二重下線)、\uwave(波線)、\sout(取り消し線)、\xout(斜線消し)を持ちます。soul は Melchior Franz が 1998 年に公開し、現在は Oberdiek Package Support Group が保守していて、\ul(下線)に加えて \so(字間を空ける)、\st(取り消し線)、\hl(蛍光ペン)といった、下線以外の強調も扱えるのが特徴です。
ここに ulem を読み込むだけで文書の強調が全部下線に化ける という有名な落とし穴があります。ulem.sty はヘッダーに「LaTeX では ulem が強調テキストのイタリックを下線で置き換える」と明記しており、313 行目の \def\ULforem{\useunder{\uline}{\em}{\emph}} が \em と \emph をそっくり乗っ取ります。実測すると、ulem を素で読み込んだ状態の \emph{word} は箱の深さが 2.9pt になり(下線がベースラインの下に付いた分です)、\normalem を宣言した直後の同じ \emph{word} は深さ 0.0pt に戻ります。つまり \usepackage{ulem} と書いた瞬間、原稿中の \emph が一つ残らず下線になります。普通の強調を残したまま下線機能だけ使いたいなら \usepackage[normalem]{ulem} と書いてください。 これは投稿直前に PDF を見て青ざめる事故の定番なので、ulem を足したら必ず全ページを見直します。
% keep \emph italic; take only the rule-drawing commands
\usepackage[normalem]{ulem} % \uline \uuline \uwave \sout \xout
% \usepackage{soul} % \ul \so \st \hl
\uline{this underline breaks across lines just like ordinary text}
\sout{deleted} \quad \uwave{doubtful}強調はどれくらい使ってよいか
目安として、1 段落に強調が 2 か所以上あるなら、それは書体ではなく文章を直す合図です。 強調が効くのは、まわりが強調されていないからです。1 ページに散らばるほど、どれも同じ重さに見えてきて、結局どこも目立たなくなります。強調は書いている最中よりも推敲の段階で効いてきます。草稿では重要語に \emph を付けておいて構いませんが、提出前に読み返し、定義語・対比・注意・結論を文の構造そのもので書き分けられないかを考えてください。構造で書き分けられた文章では、強調は「本当に読ませたい一点」だけに残ります。なお日本語の本文では、イタリック化は書体として不自然になりがちで、ゴシック体への切り替えや傍点のほうが読者の期待に合う場面があります。分野やクラスの慣習に合わせて決めてください。
- 初出の専門語に使う。 定義したばかりの語を
\emphで示しておくと、あとで索引や用語集へ機械的に拾い上げられます。 - 見た目が目的なら分ける。 書名・学名・外国語のイタリックは
\textit。強調と混ぜると、後から強調の見た目を変えたときに巻き添えになります。 \textbfへの一括置換はしない。 見た目だけ変えたいなら\DeclareEmphSequenceでプリアンブル側を直します。本文の意味を消す置換は取り返しがつきません。- 方針は文書単位で決める。 章ごとに強調の見え方が変わると、読者は重要度そのものを読み違えます。
- 提出前に
\textit{を検索する。 強調の代用になっているものが混ざっていないか、また\emphが見出しやキャプションに増殖していないかを確かめます。