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 표기도 그대로 통합니다. 옅은 배경색에는 name!20 같은 연한 지정이 자주 쓰입니다.
행, 열, 셀을 칠하는 세 명령
중심은 세 명령입니다. \rowcolor{color} 는 행 전체를, \columncolor{color} 는 열 전체를, \cellcolor{color} 는 한 셀을 칠합니다. 세 명령 모두 \columncolor[model]{color}[left overhang][right overhang] 같은 형태를 가지며, 색 이름 앞에는 색 모델 선택 인수, 색 이름 뒤에는 좌우 돌출(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}으로 옅은 파란색이 되며, “mikan”의 수량 셀만 \cellcolor{yellow!40}로 노란색 강조가 됩니다. \rowcolor가 머리글 행의 시작 에 놓인 점, \columncolor가 열 지정의 >{} 안 에 있는 점에 주목하세요.
우선순위 — 셀>행>열
세 색이 같은 셀에서 겹칠 때 무엇이 이기는지는 명확히 정해져 있습니다. \cellcolor가 \rowcolor를 덮어쓰고, \rowcolor가 \columncolor를 덮어씁니다. 즉 셀>행>열 순서입니다. 그래서 열 전체를 회색으로 칠하고(\columncolor), 머리글 행만 파란색으로 만들고(\rowcolor), 특정 셀만 노란색으로 만드는(\cellcolor) 겹치기를 자연스럽게 쓸 수 있습니다. 범위가 좁을수록 우선순위가 높다고 기억하면 직관과 맞습니다.
\cellcolor가 생기기 전에는 단일 셀을 칠하기 위해 \multicolumn{1}{>{\columncolor{…}}c}{…}라는 돌아가는 방식을 썼습니다. 이는 내용이 색칠 판정을 방해할 수 있고, 열 정렬을 손으로 복사해야 하며(p{} 열에서는 특히 오류가 나기 쉽습니다), 단점이 많습니다. colortbl의 저자도 \multicolumn{1}을 “silly”라고 부릅니다. 한 셀을 칠하고 싶다면 망설이지 말고 \cellcolor를 쓰세요.
자동 줄무늬 — \rowcolors
한 줄씩 번갈아 칠하는 제브라(줄무늬) 패턴 은 xcolor의 \rowcolors{start}{odd-row color}{even-row color} 로 자동화할 수 있습니다(끝의 s 에 주의하세요. s 없는 \rowcolor는 다른 명령입니다). 표 앞 에 한 번 써 두면 이후 행들이 지정한 대로 번갈아 색칠됩니다. 첫 번째 인수는 색칠을 시작할 행 번호이며, 머리글 행을 건너뛰려면 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 같은 명령을 실행할 수 있습니다. 또한 명시적인 \rowcolor나 \multicolumn 지정이 \rowcolors의 자동 색칠보다 우선하므로, 줄무늬 중간의 특정 행만 다른 색으로 바꿀 수도 있습니다.
| 명령 | 칠하는 대상 | 놓는 위치 |
|---|---|---|
\columncolor{c} | 열 전체 | 열 지정의 >{…} 안 |
\rowcolor{c} | 행 전체 | 행의 시작(첫 셀 앞) |
\cellcolor{c} | 단일 셀 | 그 셀 안(어디든) |
\rowcolors{n}{a}{b} | 행 교대(줄무늬) | 표 앞에 한 번 |
\arrayrulecolor{c} | 이후의 선 | 표 밖 / 행 시작 / 열 지정의 >{} |
선에 색 입히기 — \arrayrulecolor
선(\hline, \cline, 세로줄 |)의 색은 \arrayrulecolor{color} 로 바꿉니다. 이는 \color와 같은 인수를 받는 전역 선언 으로, 표 밖, 행의 시작, 열 지정의 >{} 어디에나 둘 수 있습니다. 주의할 점은 표 중간에서 지정하면 그 이후에 그려지는 선에만 적용된다 는 것입니다. 열 지정에서 이미 선언된 세로줄은 원래 색을 유지합니다. 색을 기본값으로 되돌리려면 \arrayrulecolor{black}을 다시 선언합니다.
||나 \hline\hline으로 만든 이중선 사이의 틈 은 기본적으로 흰색으로 남습니다. 그 부분도 칠하고 싶다면 틈의 폭을 정하는 길이 \doublerulesep와 함께 \doublerulesepcolor{color} 를 사용합니다. 아래 예는 선을 파란색, 이중선 사이의 틈을 노란색으로 만든 것입니다.
\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)” 페이지에서, 선의 관례는 “줄” 페이지에서 자세히 다룹니다.