tcbitemizeで横並び・下線の解答欄を作る
今日もtcolorboxで強引に解答用紙を作る話である。
以下のような解答欄を作ることを考える。
上を出力するためのソースである。
\documentclass[uplatex,dvipdfmx]{jsarticle} \usepackage[raster,skins]{tcolorbox} \newcommand{\visible}{visible} %解答の表示と非表示の切り替え % \begin{document} \begin{tcbitemize}[ colframe=white,colback=white,%枠線と背景色を白 raster columns=3,%カラムの数 detach title,raster valign=top,% left=0pt, %箱とテキストの感覚を0にする。 %height=3pc,valign=center, %高さを手で調整したいとき入れる sidebyside, %横並びにする lefthand width=23pt, %番号を入れる部分の幅。 sidebyside gap=0mm, %番号と解答部分の間隔を0にする。 sidebyside align = top,% before upper =(\thetcbrasternum),% upperbox=visible,lowerbox=\visible, %\tcbsetでグローバルにinvisibleがセットされても良いようにしておく。 skin = enhanced,%tikzでoverlayの線を描くために必要 overlay = { \draw[black] ([xshift=22pt]frame.south west)--(frame.south east); } ] \tcbitem \tcblower りんご \tcbitem \tcblower みかん \tcbitem \tcblower いちご \tcbitem \tcblower なし \tcbitem \tcblower マンゴー \tcbitem \tcblower キウイ \end{tcbitemize} \end{document}
ポイントはoverlayで線を描いていることである。これにより、箱の途中から線を引くことができる。xshiftやyshiftで線の位置の微調整も可能である。
解答の文字の開始位置はlefthand width((1)などの入っている部分の箱の幅)で調整する。
オプションが大量にあるので、実際に使うときには適度にマクロを定義して使うべきである。\newtcolorboxのraster版は、私の調査能力では発見できなかった。
もっとまともな方法はありそうだが、現在はここまでの調査が限界。
なお、今回は規則的な幅で解答を並べていくケースを扱った。ばらばらの幅で解答欄を並べていく場合には、
- tcolorboxのnobeforeafterオプションを使って、1つ1つ幅を指定しながら並べていく
- tcbrasterのraster columnsをやや細かめに指定しておき、\tcbitem1つ1つについてグリッドの幅を指定していく(例えば、12分割して3つ分の幅を指定すれば4分割にできる)
などが考えられる。いずれのケースでもskinで下線を引くことによって小問番号+下線をセットにした箱を作る、というテクニックは応用できるはず。
\tcblowerを書かないとならないのも気に入らない。しかし、個人的には、横に並べるだけでemathEyのedaenumerateを呼び出しすという状態が脱却できているので、この程度で問題ない。
なお、言うまでもなく楽に作りたければemathも含めて世の中には楽で良い選択肢がある。このやり方は、あくまでtcolorboxのみで頑張ると言う趣味に近い。