下線・取り消し線(ulem / soul)

文章に下線を引いたり、取り消し線で消したりしたい――そんなときの道具を整理します。LaTeX 標準の \underline{...} はどんな文書でも使えますが、もともと数式用の命令で、行をまたいで折り返せず 見た目も無骨です。長い本文には ulem パッケージの折り返せる下線・取り消し線を、文字間隔の調整やマーカー風の蛍光ペンには soul パッケージを使います。なお下線は、欧文の組版では強調手段として避けられがちです(強調は \emph を使う――別ページへ)。

標準の `\underline` とその限界

\underline{下線を引く語句} と書けば、引数の中身に下線が付きます。パッケージを読み込まなくても使え、本文中でも数式中でも動きます。実際この命令の本来の住みかは 数式モード で、$\underline{x}$ のように変数の下に線を引く用途のものです。本文で使うときは、LaTeX が中身をいったん 数式として扱った箱(ボックス) に下線を引いている、と考えると挙動が腑に落ちます。

latex
This word is \underline{underlined} in running text.

ここから二つの弱点が出てきます。第一に、\underline が作るのは一個の 分割できない箱 なので、行末で折り返せません。下線の付いた語句が行幅に収まらないと、改行されずに右の余白へはみ出してしまいます。短い一語なら問題になりませんが、長い句や一文に下線を引くと破綻します。第二に、線の太さや位置を字面(特に下に伸びる gp の足)に合わせて調整しないので、文字に線が食い込んで見える ことがあり、組版として粗く見えます。

まとめると、\underline は「数式中で記号の下に線を引く」「ごく短い語に手早く下線を付ける」用途には十分ですが、本文の下線には向きません。折り返しが必要な、あるいは見た目を整えたい本文の下線・取り消し線には、次の ulemsoul を使います。

`ulem` ――折り返せる下線・取り消し線

Donald Arseneau による **ulem パッケージは、行末で きちんと折り返す** 下線を提供します。さらに二重下線・波下線・取り消し線(横棒)・抹消線(斜線)・破線・点線まで、消し込みや校正に使う線を一通り揃えています。\usepackage{ulem} で読み込み、それぞれ引数を取る命令として使います。

命令効果
\uline下線(折り返し可)
\uuline二重下線
\uwave波線の下線
\sout取り消し線(語の中央に横棒)
\xout抹消線(斜めのハッチングで消す)
\dashuline破線の下線
\dotuline点線の下線
latex
\uline{important} \uuline{urgent} \uwave{boat}
\sout{wrong} \xout{removed}
\dashuline{dashing} \dotuline{dotty}

線の見た目は二つのパラメータで調整できます。深さ(文字のベースラインから線までの距離)は長さ \ULdepth で、太さは \ULthickness で変えます。注意したいのは、\ULthickness長さではなくマクロ なので、\setlength ではなく \renewcommand で設定する点です(\renewcommand{\ULthickness}{1pt})。\ULdepth は通常の長さなので \setlength を使います。既定では \ULdepth はフォントに応じて自動調整されます。

ulem には独自の拡張余地もあります。\markoverwith を使えば、好きな図形を繰り返し重ねて新しい線種を自作でき、\useunder{下線命令}{書体宣言}{書体命令} を宣言すると、特定の書体命令を下線で置き換えられます。

重要な落とし穴――`ulem` は `\emph` を下線に変える

これは知らないと必ずはまる点です。ulem を読み込むと、**\emph(と、ある程度 \em)が既定でイタリックではなく下線になります**。パッケージ自身の言葉では「ulem normally replaces italics with underlining in text emphasized by \emph」。強調を表すたびに本文へ下線が引かれてしまい、原稿が下線だらけになって驚く――という事故が起こります。さらに \emph を入れ子にしても、\emph 本来の「イタリックと立体が交互に切り替わる」挙動にはならず、下線が重なって増える だけです。

回避策は決まっていて、**[normalem] オプション付きで読み込む** ことです。こうすると \emph は本来どおりイタリックのまま保たれ、下線は \uline などを明示的に書いたときだけ引かれます。文書の途中で切り替えたいときは、宣言 \normalem(既定動作に戻すには \ULforem)も使えます。特別な理由がない限り、ulem は常に [normalem] 付きで読み込むのが安全です。

document.tex
\usepackage[normalem]{ulem}
% \emph stays italic; underline only where you ask:
This is \emph{emphasis}, and this is \uline{underlined}.

`soul` ――字間調整と蛍光ペン

Melchior Franz による **soul パッケージは、別系統の道具です。TeX のハイフネーション機構を使って文字や音節を一つずつ拾い直し、それぞれの間に処理を施すため、字間を空ける(レタースペーシング)下線取り消し線蛍光ペン風のマーカー** を、いずれも行末で折り返しながら実現します。名前そのものが、二つの中心命令 \so(space out)と \ul(underline)の合成です。用途に応じて次の五つの命令があります。

命令効果
\soレタースペーシング(字間を空ける)
\caps大文字・小型大文字の字間調整
\ul下線
\st取り消し線(オーバーストライク)
\hl蛍光ペン風の網かけ

色については、下線は \setulcolor、取り消し線は \setstcolor、蛍光ペンは \sethlcolor で指定します。既定では蛍光ペンは黄色、下線と取り消し線は黒です。ここで大切なのは、**\hl で色を付けるには color(または xcolor)パッケージが必要** な点で、color を読み込んでいないと \hl は色を塗らず、下線へフォールバックします。\definecolor で自分の色を作って渡せます。

document.tex
\usepackage{color,soul}
\definecolor{lightblue}{rgb}{.90,.95,1}
\sethlcolor{lightblue}
% ...
\so{letterspacing} \ul{underlining} \st{overstriking}
\hl{this is highlighted in light blue color}

日本語など非ラテン文字や、アクセント付きの文字を扱うには、UTF-8 への対応が要ります。これは以前は別パッケージ soulutf8 が担っていましたが、**現在の soul(v3 以降)は soulutf8 を取り込み、UTF-8 入力に対応** しています(旧来の本体は soul-ori と改名され、内部で読み込まれます)。したがって最近の TeX Live/MiKTeX なら、soul を読み込むだけで UTF-8 の文字も扱えます。

ただし soul の命令は、引数を一字ずつ解析する都合上、中に入れられるものに制限 があります。代表的な約束ごとは次のとおりです。

  • 数式$...$ で囲めば使えますが、LaTeX 式の \(...\)使えません
  • 入れ子は不可。 soul の命令同士を入れ子にしてはいけません。どうしても必要なら、内側を一度ボックス(\mbox など)に入れてから渡します。
  • 塊として扱わせるには {...} でくくります。ただし中に ハイフネーション位置を含めてはいけません。ハイフンを含む語をまとめたいときは \mbox{...} を使うと、ハイフネーションを含んでいても一つの単位として扱えます。
  • 合字(リガチャ)を割りたいときは \ul\st\hl の中で {}\null を挟みます(例:\ul{Auf{}lage})。
  • \verb や LaTeX 環境、命令定義** などの「凝ったもの」は引数に入れられません。普通の横組みのテキストにとどめておくのが安全です。

どれを選ぶか――そして下線そのものについて

使い分けの目安はこうです。数式の中で記号の下に線を引くなら標準の \underline。本文に 折り返せる下線や取り消し線・校正の線 を引くなら ulem(必ず [normalem] 付きで)。蛍光ペン風のマーカーや字間調整 がほしいなら soululem\ulinesoul\ul はどちらも折り返せる下線で似ていますが、soul は字間処理の機構の上に乗っているぶん引数の制限が厳しく、一方で蛍光ペンやレタースペーシングまで一手に引き受けます。

日本語の本文での下線には追加の注意があります。ulemsoul はもともと欧文向けで、和文を多く含む段落では下線が行末でうまく折り返せないことが知られています(奥村晴彦氏のフォーラムでも繰り返し話題になります)。和文の複数行にわたる下線には、jumolineudline といった日本語向けパッケージが用意されています(既定では同梱されないことがあり、別途導入が要る場合があります)。

最後に組版上の助言を一つ。下線は活字以前のタイプライタや手書きの名残で、欧文の本文では強調手段として一般に好まれません。植字の伝統では、強調はイタリックや(控えめな)字間調整、ゴシック体で示すのが普通です。強調したいだけなら下線ではなく \emph を使い、下線・取り消し線はあくまで「校正で消す」「リンクや記入欄を示す」といった、線そのものに意味がある場面に取っておくのがよいでしょう。