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}
しかし 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}
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}
表の作成においては,まず 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}