TeX Alchemist Online

TeX を使って化学のお仕事をしています。

行分割可能な \fbox をつくる

この記事は TeX & LaTeX Advent Calendar 201719日目の記事の第1弾です。第2弾はこちら。 18日目はmunepiさんでした。 20日目はdomperorさんです。

TeX が苦手とする処理の一つとして,「行分割可能な下線」が挙げられます。そのため,行分割可能な下線が必要な場合は,何らかのパッケージを用いる必要があります。和文対応の下線パッケージは,TeX Wiki の記事にまとめられています

その中でも特に高機能でお勧めなのは,吉永徹美氏による uline-- パッケージです。下線だけでなく,上線・二重線や打消線,破線や波線も引くことができます。欧文と和文を両方含む場合への対応や和文の禁則処理もバッチリです。莫大な数の既存の有名コマンドへの対処があらかじめ設定されていますし,ユーザが自前で作成した独自マクロへの対応もカスタマイズにより可能となっています。ただし,その配布サイトは,残念ながら今年閉鎖されてしまいました。

ですが,今でも Internet Archive にはサイトのアーカイブが残っていました。

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--}

としておくことでつながりが綺麗になります。

f:id:doraTeX:20171218154717p:plain

行分割可能な背景塗りへの応用

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]{塗ってみよう}

f:id:doraTeX:20171218160433p:plain

行分割可能な \fbox をつくる

lineslinegap というオプションは,多重の線を引くためのオプションですが,これを応用すれば,「行分割可能な \fbox」というものをつくることができます。

アイデアは以下の通り。

  1. 中身の高さ・深さを測定する。
  2. \fboxrule\fboxsep の設定を考慮し,適切な高さ・幅・太さで2重線を描く。上線・下線がそれぞれ \fbox の上線・下線の位置と一致するようにする。
  3. 左右に \fboxrule の太さの縦線を \rule で描くことで左右に“蓋”をする。

これを実装した breakfbox パッケージを作りました。*1

github.com

\usepackage{breakfbox} としておけば, \fbox の代わりに \breakfbox を使うことで,行分割可能な枠囲み文字列が出力されます。\fbox と同様に \fboxrule\fboxsep の指定に従います。

出力サンプル

\breakfbox を使うことで,行分割可能な枠囲み文字列が出力できます。

f:id:doraTeX:20171218160835p:plain

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