表(tablar)のセルにtcolorboxを使って問題と解答を切り替える

TeXで分割表の中の数値を埋めさせる問題の解答欄を作ることを考える。

外側の表自体はtabularで作るとして、その中の要素に問題と解答の切り替えの可能な箱を埋め込む。以下の画像のようなイメージ。

f:id:baruku07:20180121212410p:plain

今まで、この手の表中の数値はemathのhako.styの\maskHakoで作成していた。しかし、emathの箱型の解答の表示・非表示の切り替えはtcolorboxのオプションの切り替え(visible, invisible)とは別に、maskhakotrueとmaskhakofalseを切り替えないとならない。できればtcolorboxに一本化したいのでtcolorboxに置き換えることにした。

まず、箱はインラインボックスの形に見える。サンプルを眺めているとインラインボックスは\tcboxを使うのが適切に見える。しかし、tcboxは幅を指定できない(2/1修正・force centerなどのオプションを指定しない限り)。このようなときには、tcolorboxのnobeforeafterオプションを使う(と気づくのに15分かかった)。

\newtcolorbox{hyounum}{nobeforeafter,baseline=3mm,colback=white, colframe=black,width=4eM,height=1.8pc,boxrule=0.4pt, halign=center, valign=center}

{
 \renewcommand{\arraystretch}{1.4}
 \begin{center}
 \begin{tabular}{ccc}
 \hline
                   && ねこ  \\
 \hline
  男子       &\begin{hyounum} 1 \end{hyounum}   &\begin{hyounum} 9 \end{hyounum}   \\[0.5pc]
  女子       &\begin{hyounum} 8 \end{hyounum} &\begin{hyounum} 2 \end{hyounum}   \\[0.3pc]
 \hline
 \end{tabular}
 \end{center}
 }

ポイントはbaseline=3mmである。arraystretchでいろいろとずらしているので、box align = centerやbox align = baseではきれいにそろわない。そのため、baseline=で手動での調整が必要となる。

2/1追記

tcboxの制限はマニュアルをよく読まないとわからない。tcbox widthの部分を読んだ感じでは、tcbox width = auto以外を指定すれば幅を指定可能だと思われる。

現状は、とりあえず思った通りに動けばそれで良しとしている。なんとなくではあるが、インラインで埋め込むときには、tcboxでできることはtcboxで埋め込んだほうが良さそうな感覚もある。