この記事は TeX & LaTeX Advent Calendar 2017 の19日目の記事の第1弾です。第2弾はこちら。 18日目はmunepiさんでした。 20日目はdomperorさんです。
TeX が苦手とする処理の一つとして,「行分割可能な下線」が挙げられます。そのため,行分割可能な下線が必要な場合は,何らかのパッケージを用いる必要があります。和文対応の下線パッケージは,TeX Wiki の記事にまとめられています。
その中でも特に高機能でお勧めなのは,吉永徹美氏による uline-- パッケージです。下線だけでなく,上線・二重線や打消線,破線や波線も引くことができます。欧文と和文を両方含む場合への対応や和文の禁則処理もバッチリです。莫大な数の既存の有名コマンドへの対処があらかじめ設定されていますし,ユーザが自前で作成した独自マクロへの対応もカスタマイズにより可能となっています。ただし,その配布サイトは,残念ながら今年閉鎖されてしまいました。
いつの間にか吉永さんのサイト(https://t.co/p2cVYIkHSI)にアクセスできなくなっている……まぁ個人的には PDF 版もあるし困らないけれど,ちょっと寂しい.
— ワトソン (@wtsnjp) 2017年11月26日
uline--.sty が入手不可能になったのは惜しいなぁ……。和文下線パッケージの中では最も高品質で,カスタマイズ性も高かった。 https://t.co/w7ZmlsIWp1
— Yusuke Terada (@doraTeX) 2017年11月27日
ですが,今でも Internet Archive にはサイトのアーカイブが残っていました。
吉永徹美さんのサイト,いちおうアーカイブはあるけど https://t.co/N3hRJsgrXl 更新されないのは残念 https://t.co/FUMOziETwf
— Haruhiko Okumura (@h_okumura) 2017年11月27日
uline-- パッケージもアーカイブから入手できます。
使用法
uline--.tex を pLaTeX でコンパイルすれば詳細なマニュアルが生成されます。
主たるコマンドは以下の通り。
\uline,\mline,\oline:下線・打消線・上線\udash,\mdash,\odash:下破線・打消破線・上破線\uwave,\mwave,\owave:下波線・打消波線・上波線
典型的なオプション指定については uline--.sty の冒頭部にコメントがあります。
\uline[<options>]{<text>} <text>: 下線などを付加する対象の文字列 <options>: position=<dimen>: 下線などの基準位置を寸法 <dimen> のところに設定 (ベースラインのところが 0ptで,横組み時の上向きが正) lines=<number>: 下線などの本数を正整数 <number> に設定 width=<dimen>: 下線などの太さを寸法 <dimen> に設定 linegap=<dimen>: 2 重以上の下線などでの線の間隔を寸法 <dimen> に設定 dashlength=<size>: 破線の繰り返しパターンの実線部分の長さを <size> に設定 dashgap=<gap>: 破線の繰り返しパターンの空白部分の長さを <gap> に設定 dotgap=<gap>: 点線の点の間隔を <gap> に設定 foreground: 下線などを,それらを付加する対象の文字列の前面に描画 background: 下線などを,それらを付加する対象の文字列の背後に描画 nomath: <text> 部分に含まれる数式中での行分割処理を抑止 color=<colorname>: 下線などの色を <colorname>(色名)に設定 color={[<model>]<parameters>}: 下線などの色を \color[<model>]{<parameters>} で指定される色に設定
波線のつながり
\uwave などで出力される波線は,最近のLaTeXのデフォルトでは,つながりが悪くなってしまいます。
\usepackage[usetype1]{uline--}
としておくことでつながりが綺麗になります。

行分割可能な背景塗りへの応用
uline-- パッケージは「行分割可能な下線を引く」ためのパッケージですが,アイデア次第で他のデザインも実現できます。例えば,color, background, width, position のオプションを同時使用することで,「行分割可能な背景塗り」を作ることもできます。
サンプル
\uline[background,color={[rgb]{1,1,0.4}},width=5pt,position=1pt]{蛍光ペン}で \uline[background,color={[rgb]{1,0.4,1}},width=1zw,position=.38zw]{塗ってみよう}

行分割可能な \fbox をつくる
lines や linegap というオプションは,多重の線を引くためのオプションですが,これを応用すれば,「行分割可能な \fbox」というものをつくることができます。
アイデアは以下の通り。
- 中身の高さ・深さを測定する。
\fboxruleや\fboxsepの設定を考慮し,適切な高さ・幅・太さで2重線を描く。上線・下線がそれぞれ\fboxの上線・下線の位置と一致するようにする。- 左右に
\fboxruleの太さの縦線を\ruleで描くことで左右に“蓋”をする。
これを実装した breakfbox パッケージを作りました。*1
\usepackage{breakfbox} としておけば,
\fbox の代わりに \breakfbox を使うことで,行分割可能な枠囲み文字列が出力されます。\fbox と同様に \fboxrule や \fboxsep の指定に従います。
出力サンプル
\breakfbox を使うことで,行分割可能な枠囲み文字列が出力できます。

*1:uline-- パッケージのライセンスは「改変しなければ再配布可」とのことなので,uline-- パッケージも同梱してあります。