表のセルや行・列に 背景色 を敷き、罫線に色を付けるための仕組みが **colortbl** パッケージです。読み込みは \usepackage[table]{xcolor} の一行で済みます——xcolor の **table オプション** が colortbl を自動的に取り込むので、色名は xcolor で、表の塗りは colortbl で、という二つの機能がまとめて使えるようになります。中心となるのは **\rowcolor(行を塗る)、\columncolor(列を塗る)、\cellcolor(セルを塗る) の三つと、縞模様を自動で作る \rowcolors、そして罫線に色を付ける \arrayrulecolor です。このページでは、この五つの使い方と、セル>行>列** という色の優先順位を見ていきます。
読み込み方——xcolor の table オプション
colortbl は単体でも読み込めますが、推奨される入口は **xcolor** です。xcolor を **table オプション付き** で読み込むと、xcolor(色名・色の混合・モデル変換)と colortbl(表への色塗り)が同時に有効になります。colortbl 自身は内部で array と color の二つのパッケージを必要とします(xcolor 経由で読めばこれらも自動で揃います)。
\usepackage[table]{xcolor}これ一行で、以降に説明する \rowcolor・\columncolor・\cellcolor・\rowcolors・\arrayrulecolor がすべて使えます。beamer で使う場合だけは少し違い、クラスオプションとして \documentclass[xcolor=table]{beamer} と書きます。色名は gray・red のような名前のほか、**gray!20(20% の濃さ)** や red!30!yellow(赤 30%+黄 70% の混色)のような xcolor の記法がそのまま通ります。淡い背景色には 名前!20 のような薄めの指定がよく使われます。
行・列・セルを塗る三つの命令
中心となるのは三つの命令です。**\rowcolor{色} は行全体を、\columncolor{色} は列全体を、\cellcolor{色}** は一つのセルを塗ります。三つとも、\columncolor[モデル]{色}[左の張り出し][右の張り出し] のように、色名の前に 色モデルの任意引数、色名のあとに 左右の張り出し(overhang)の任意引数 を取れます。張り出しは色の帯を列の左右どこまで広げるかの指定で、省略時は片側 \tabcolsep(array では \arraycolsep)が使われます。
置く場所が三つで違う ことに注意してください。\rowcolor は 行の先頭 に置きます——その行の最初のセルの中身よりも前、つまり \\ の直後に書きます。\columncolor は本文中ではなく 列指定のなか に、>{\columncolor{gray!20}} の形で書きます(>{…} は array パッケージが提供する「列の前処理」の仕組みで、その列の各セルの直前に中身を差し込みます)。\cellcolor だけは自由で、対象のセルの中の どこに書いてもかまいません。
\begin{tabular}{>{\columncolor{gray!20}}l c r}
\rowcolor{blue!30}
項目 & 数量 & 価格 \\
りんご & 3 & 380 \\
みかん & \cellcolor{yellow!40}5 & 120 \\
\end{tabular}この例では、1 列目が >{\columncolor{gray!20}} で薄いグレーに塗られ、見出し行は \rowcolor{blue!30} で淡い青、そして「みかん」の数量セルだけが \cellcolor{yellow!40} で黄色く強調されます。\rowcolor が見出し行の 先頭 に置かれている点、\columncolor が **列指定の >{} の中** にある点に注目してください。
色の優先順位——セル>行>列
三つの色が同じセルで重なったとき、どれが勝つかは明確に決まっています。**\cellcolor が \rowcolor を上書きし、\rowcolor が \columncolor を上書きする——つまり セル>行>列** の順です。だから、列全体をグレーに塗っておき(\columncolor)、見出しの行だけ青にし(\rowcolor)、特定のセルだけ黄色にする(\cellcolor)、という重ね方が素直に書けます。狭い指定ほど優先される、と覚えておけば直感どおりです。
なお \cellcolor が用意される前は、単一セルを塗るのに \multicolumn{1}{>{\columncolor{…}}c}{…} という回りくどい書き方が使われていました。これは中身が色付けの判定を妨げたり、p{} 列で列指定の写し間違いを招いたりと難点が多く、colortbl の作者自身が「\multicolumn{1} は馬鹿げている」と述べています。一つのセルを塗りたいなら、迷わず \cellcolor を使いましょう。
縞模様を自動で——\rowcolors
行を一つおきに塗り分ける ゼブラ(縞)模様 は、xcolor 由来の **\rowcolors{開始行}{奇数行の色}{偶数行の色} で自動化できます(末尾が s** の \rowcolors。s のない \rowcolor は別物です)。表の 前 に一度書いておくと、以降の表で指定どおりに色が交互に付きます。第 1 引数は色を付け始める行番号で、見出し行を飛ばすなら 2 を指定します。色の引数はどちらも空にでき、空なら「色なし」になります。
\rowcolors{2}{gray!15}{white}
\begin{tabular}{l r r}
項目 & 数量 & 価格 \\
りんご & 3 & 380 \\
みかん & 5 & 120 \\
ぶどう & 2 & 600 \\
もも & 4 & 450 \\
\end{tabular}この例は 2 行目から縞を始め、gray!15(薄いグレー)と white(白)を交互に敷きます。見出し(1 行目)は塗られず、データ行だけが交互に色付きます。\rowcolors には先頭に 任意引数 があり、\rowcolors[\hline]{2}{…}{…} のように書くと各行の前に \hline などの命令を実行させられます。また、\rowcolors による自動塗りより **\rowcolor や \multicolumn を使った個別指定が優先される** ので、縞の途中で特定の行だけ別色にすることもできます。
| 命令 | 塗る対象 | 置く場所 |
|---|---|---|
\columncolor{c} | 列全体 | 列指定の >{…} の中 |
\rowcolor{c} | 行全体 | 行の先頭(最初のセルより前) |
\cellcolor{c} | 単一セル | そのセルの中(どこでも) |
\rowcolors{n}{a}{b} | 行を交互に(縞) | 表の前に一度 |
\arrayrulecolor{c} | 以降の罫線 | 表の外・行頭・列指定の >{} |
罫線に色を付ける——\arrayrulecolor
罫線(\hline・\cline・縦罫線 |)の色は **\arrayrulecolor{色}** で変えます。これは \color と同じ引数を取る 大域的な宣言 で、表の外・行の先頭・列指定の >{} のいずれにも置けます。注意点は、表の途中で指定すると、それ以降の罫線にしか効かない こと——列指定で宣言済みの縦罫線は元の色のままです。色を元に戻したいときは \arrayrulecolor{black} を改めて宣言します。
|| や \hline\hline の 二重罫線のあいだの隙間 は、既定では白く残ります。そこも塗りたいなら、長さ \doublerulesep(隙間の幅)とあわせて **\doublerulesepcolor{色}** を使います。下の例は罫線を青、二重罫線の隙間を黄色にしたものです。
\setlength\arrayrulewidth{1pt}\arrayrulecolor{blue}
\setlength\doublerulesep{2pt}\doublerulesepcolor{yellow}
\begin{tabular}{||l|c||}
\hline\hline
one & two \\
three & four \\
\hline\hline
\end{tabular}縦罫線だけを個別に色付けしたいときは、専用の命令を使わず !{\color{green}\vline} を列指定に挟む手もあります(| の代わりに置く)。\arrayrulewidth は罫線の太さを決める長さで、色を付けると細い線が目立たないことがあるので、必要なら少し太くします。
booktabs との併用と注意点
colortbl は booktabs と 併用できます が、相性に一癖あります。booktabs は \toprule・\midrule・\bottomrule の上下にわずかな空き(\aboverulesep・\belowrulesep)を入れるため、行の背景色と罫線のあいだに 白い隙間 ができてしまうのです。塗りつぶしを罫線まで届かせたいときは、これらの空きを 0pt にし、その分を \extrarowheight に移す、という調整がよく使われます。
もう一つの定番の問題は、**大きな文字や高い行の中身が、すぐ上の \hline や色パネルの上端に接触してしまう** こと。colortbl は対策として **\minrowclearance** という長さを用意していて、\setlength\minrowclearance{2pt} のように設定すると、背の高い行の上に少しだけ余白を足してくれます(ただし大文字の高さ+この値が通常の行の高さを超えると、行間がガタつくので入れすぎは禁物です)。
最後に節度の話を。多くの組版指針が 罫線や色の使いすぎを戒めて います。背景色は、強調したい見出し行や、目で追いやすくするための淡い縞に絞るのが上品です。色そのものの指定(色名・モデル・混色)は「色(xcolor)」のページに、罫線の流儀は「罫線(標準 / booktabs / hhline)」のページに詳しくあります。