読者です 読者をやめる 読者になる 読者になる

物理とTeXに関する話題

TeXを利用した教材作成や、高校物理、受験全般についてのブログです。

tcolorboxを利用した表作成

TeXにおける表作成

TeX組版において,表を作成する場合はtabular環境を利用するのが一般的です。tabular環境を用いると,以下の通りに表を作成することができます。

\begin{tabular}{lccc}
  \hline
  状態変化 & $Q^{in}$ & $\varDelta U$ & $W^{out}$ \\
  \hline \hline
  定積変化 & $nC_V\varDelta T$ & $nC_V\varDelta T$ & 0 \\
  定圧変化 & $nC_P\varDelta T$ & $nC_V\varDelta T$ & $nR\varDelta T$ \\
  等温変化 & $nRT\log\frac{V_1}{V_0}$ & 0 & $nRT\log\frac{V_1}{V_0}$ \\
  断熱変化 & 0 & $nC_V\varDelta T$ & $-nC_V\varDelta T$ \\
  \hline
\end{tabular}

f:id:hkf-164:20160821221147p:plain

しかし tabular 環境を用いた表作成には,斜線を引くだけでも大変,セルを色塗りするのが大変,といったような不便な点があります。これらを解消すべく, tcolorbox の raster library を用いて表の作成を試みました。

raster とは

tcolorbox を縦横に並べて規則正しく配置するための library です。

\begin{tcbraster}[raster columns=3,raster equal height,title=Box \thetcbrasternum]
  \begin{tcolorbox} First \end{tcolorbox}
  \begin{tcolorbox} Second \end{tcolorbox}
  \begin{tcolorbox} Third \\
  Third 2\end{tcolorbox}
\end{tcbraster}

f:id:hkf-164:20160821223109p:plain

raster library の詳細につきましては,TeX ユーザの集い2015 発表スライドを御覧ください。

raster library での表作成方法

まず準備として,プリアンブルにおいて以下の設定を行います。

\tcbset{%
cellrule/.style={finish={\draw[line width=#1](frame.north west) -- (frame.north east) -- (frame.south east) -- (frame.south west) -- cycle;}},
cellrule/.default=1pt,
tcbtabular/.style={raster columns=#1, raster equal skip=0mm, raster equal height=rows,
raster every box/.style={enhanced, boxrule=0mm, colback=white, sharp corners, valign=center, halign=center, top=0mm, bottom=0mm, left=0mm, right=0mm, cellrule={0.5pt}}},
tcbtabular/.default={5},
outerframe/.style={empty, top=0mm, bottom=0mm, left=0mm, right=0mm, boxrule=0mm, boxsep=0mm, cellrule={#1}},
outerframe/.default={1pt}
}

上記で定めた style を利用すると,以下の通りに表を作成することができます。

\begin{tcboxeditemize}[tcbtabular=4]{outerframe}
\tcbitem [colback=black!80!white] \color{white} 気体の状態変化
\tcbitem $Q^{in}$
\tcbitem $\varDelta U$
\tcbitem $W^{out}$
\tcbitem 定積変化
\tcbitem $nC_V\varDelta T$
\tcbitem $nC_V\varDelta T$
\tcbitem 0
\tcbitem 定圧変化
\tcbitem $nC_P\varDelta T$
\tcbitem $nC_V\varDelta T$
\tcbitem $nR\varDelta T$
\tcbitem 等温変化
\tcbitem $nRT\log\frac{V_1}{V_0}$
\tcbitem 0
\tcbitem $nRT\log\frac{V_1}{V_0}$
\tcbitem 断熱変化
\tcbitem $0$
\tcbitem $nC_V\varDelta T$
\tcbitem $-nC_V\varDelta T$
\end{tcboxeditemize}

f:id:hkf-164:20160821224443p:plain

表の作成においては,まず tcboxeditemize 環境によって,raster で並べる個別の box を全て囲う大きな box の設定を行います。この tcboxeditemize によって出力される box は,outerframe/.style によって内側の余白が全て排除されており,表全体を囲う太線の役割を果たしています。

一方,表のセルとして \tcbitem によって出力されている個別の tcolorbox は,tcbtabular/.style によって制御されています。この style は1つの引数を取ることができ,その引数によって表の列数を定めます(上の表では,tcbtabular=4 としているので,4列の表が作成されています)。tcbrabular/.style 内では,全ての個別の box を描画する規則を定めており,この設定によってシンプルな黒枠で囲われた tcolorbox が出力されるようになっています。

このように表作成の仕組みは,tcbraster によってセルとしての tcolorbox を敷き詰め,それを大きな tcolorbox で囲って表の外枠を作る,というものです。現時点ではこの方法が最も効率が良いと思われますが,今後の tcolorbox の発展によってはより良い方法が見つかるかもしれません。

自由度の高さ

tcolorbox を用いて個別のセルを作成しているので,tcolorbox の option を利用して装飾を施すのが非常に容易です。option を使いこなせば,見た目のきれいな box が容易に作成できます。

\begin{tcboxeditemize}[tcbtabular=4]{outerframe}
\tcbitem[raster multicolumn=4,colback=black!80!white] \color{white} tcolorboxを利用した表の作成
\tcbitem[underlay={\draw[line width=.5pt](frame.north west) -- (frame.south east);}]
\tcbitem 斜線も
\tcbitem 楽に引ける!
\tcbitem[underlay={\draw[line width=.5pt](frame.north east) -- (frame.south west);}]
\tcbitem[colback=blue!20!white] tabular環境
\tcbitem\tcbitem\tcbitem\tcbitem
\tcbitem[colback=blue!20!white]\tcbitem\tcbitem\tcbitem\tcbitem
\tcbitem[widget, colback=blue!20!white, colframe=blue!60!white, title={一切}] 使って
\tcbitem\tcbitem\tcbitem\tcbitem
\tcbitem[colback=blue!20!white] ません!
\end{tcboxeditemize}

f:id:hkf-164:20160821230945p:plain