下線形式の解答欄を作るのにtcolorboxを使う

TeXのtcolorboxパッケージは、パッケージ名に"box"と付いている。そのため、箱を作るためのパッケージというイメージがある。しかし、箱から下線以外を消去すればただの下線である。よって、下線を引くことに使うこともできる(邪道だが)。

テストの解答用紙において、以下のような解答欄を作ることを考える。

f:id:baruku07:20180201221428p:plain

これまで、この手の解答欄はemathの\maskHakoで箱型の解答欄を作ることによって済ませてきた。しかし、箱型だとそれなりに箱と余白を大きく取っておかないとならないのでスペースの調整に気を使う。下線であればそこまで気を使わなくても解答欄が作れる。

\tcboxを使う

tcolorboxの\tcboxのオプションを以下のように指定すると、上のような解答欄が作れる。

\usepackage{tcolorbox}
\newcommand{\visible}{invisible} %visibleとinvisibleで解答の表示・非表示をスイッチ
....
....
(1) \tcbox[boxrule=-1pt,bottomrule=1pt,sharp corners, colback=white,\visible,nobeforeafter,tcbox width=forced left,width=10cm,box align=base,\visible]{解答}

オプションについてのメモ。

  • boxrule=0ptとすると画面上は線が見えてしまう。よって、念のため-1ptとしている。
  • 全ての線を消去した後、あらためて下線のみbottomrule=1ptで太さを指定する。
  • sharp cornersで角の丸みを取る
  • tcbox width=forced leftを指定することで、左寄せの指定、かつtcboxの幅を指定可能な状態にする。(これ抜きではtcboxは幅指定不可)
  • width=10cmで解答の幅を指定する。
  • box align=base で(1)と下線の位置を良い感じで調整する。
  • \visibleは解答非表示のときはinvisible, 解答表示のときはvisible。

上のコードを見ると、オプションが多い。下線を引くたびに、何度もオプションを書くのは美しく無い。よって、環境を定義して使う。

環境を定義して使う

\usepackage{tcolorbox} %プリアンプル
\newcommand{\visible}{visible} %%プリアンプル・解答切り替えのためのスイッチ
....
\newtcbox{\kasen}[1][]{boxrule=-1pt,bottomrule=1pt,sharp corners, colback=white,\visible,nobeforeafter,tcbox width=forced left,box align=base,\visible,#1} %環境を定義。プリアンプルでも本文でも良い。
.....
\kasen[width=10cm]{解答}

ここでは、オプションをコマンドの直後で追加指定できるように\kasenを定義している。[1][]でオプション引数を取る形にしておいて、そのオプション引数を各種オプション指定の最後に入れ込む。こうしておかないと、\kasenコマンドがオプション引数を取ることができない状態になるので注意(これははまった)。

オプションを入れ込む#1を最後にもってきている理由は、ある解答欄だけはtcbox width=forced centerで中央に寄せたい、といったときに、tcbox widthを後から指定したオプションで上書きしたいから。

同じ幅の(そして同じ幅であるべき)下線解答欄については、いちいち1つずつオプションを指定したく無い。よって、テストの解答用紙を作るときには、実際は何種類かの幅付きの下線と幅をオプションで変化させる下線を両方定義しておいて使い分けている。