표의 괘선을 다루는 방식은 세 가지입니다. LaTeX 표준의 \hline / \cline 과 열 지정의 |, 전문적인 표를 위한 booktabs 패키지(\toprule, \midrule, \bottomrule), 그리고 이중 괘선과 세로 괘선이 만나는 방식을 세밀하게 제어하는 hhline 입니다. 표준 괘선은 쉽게 쓸 수 있지만, 너무 많이 그으면 표가 읽기 어려워집니다. 이 페이지에서는 세 층을 차례로 살펴보고, 왜 booktabs가 기본 선택지로 권장되는지 설명합니다.
표준 괘선 — \hline, \cline, |
기본 LaTeX가 제공하는 가로 괘선은 \hline 입니다. 행 끝의 \\ 뒤(또는 표의 맨 위나 맨 아래)에 두면 그 위치에 표 전체 폭만큼 가로선을 하나 긋습니다. \hline을 두 번 이어서 \hline\hline 이라고 쓰면 \doublerulesep만큼 떨어진 이중 가로 괘선 이 됩니다. 마지막 행 뒤의 \\는 보통 생략할 수 있지만, 마지막 행 아래에 \hline을 그으려면 먼저 \\로 행을 닫아야 합니다.
표 중간에서 일부 열에만 가로 괘선을 긋고 싶다면 \cline{i-j} 를 사용합니다. 선은 i번째 열부터 j번째 열까지만 이어지므로, \cline{2-3}은 2, 3열 아래에만 그어집니다. 떨어진 범위를 동시에 긋고 싶다면 \cline{1-1}\cline{3-4}처럼 나열합니다. 세로 괘선 은 본문이 아니라 열 지정 쪽에서 만듭니다. {|l|c|r|}처럼 열 지정에 |(세로 막대)를 끼워 넣으면 그 위치에 표 높이 전체의 세로선이 들어가고, ||로 쓰면 이중 세로 괘선입니다. 이러한 |, \hline, \vline 선의 두께는 길이 \arrayrulewidth(기본 0.4pt)로, 이중선 사이의 간격은 \doublerulesep로 정해집니다.
\begin{tabular}{|l|c|r|}
\hline
項目 & 個数 & 価格 \\
\hline\hline
りんご & 3 & 380 \\
\cline{2-3}
みかん & 12 & 120 \\
\hline
\end{tabular}이 예는 세로 괘선 |로 모든 열을 둘러싸고, 머리글 아래를 \hline\hline 이중 괘선으로, 중간을 \cline{2-3}(2, 3열만)로 구분합니다. 표준 괘선 기능을 한 번씩 써 본 예이지만, 바로 이것이 피해야 할 과도한 괘선 의 표본이기도 합니다.
이유는 괘선을 너무 많이 그으면 읽기 어려워지기 때문입니다. 조판 전통에서 선(괘선)은 데이터를 가두는 울타리가 아니라 정보의 논리적 구분 을 보여 주는 절제된 도구입니다. 특히 세로 괘선은 열 사이에 시각적 벽을 만들어 시선의 흐름을 방해하고, 이중 괘선은 별다른 이득 없이 무겁게 보입니다. 다음 절에서 다루는 booktabs의 저자 Simon Fear는 이런 표 조판 방식이 “수 세기의 경험을 통해 확립된 것이며, 특별한 사정이 없는 한 바꾸지 말아야 한다”고 쓰고, 세로 괘선과 이중 괘선을 쓰지 않는 간결한 가로선 중심의 표를 권합니다.
booktabs — 출판 품질의 표
booktabs는 Simon Fear가 만든 패키지로, “출판된 과학 서적과 학술지에 실릴 법한 표”를 쉽게 조판하기 위한 것입니다. 프리앰블에 \usepackage{booktabs}를 써서 사용합니다. 표준 \hline과 다른 점은 괘선의 굵기에 차이를 두고, 각 괘선의 위아래에 적절한 여백을 자동으로 넣는다는 것입니다. 그 결과 선으로 둘러싸지 않아도 구조가 잘 읽히는 세련된 표가 됩니다.
중심이 되는 명령은 세 가지입니다. 표 맨 위의 \toprule, 머리글과 본문을 나누는 \midrule, 표 맨 아래의 \bottomrule입니다. \toprule과 \bottomrule은 더 굵게(기본 \heavyrulewidth = 0.08em), \midrule은 더 가늘게(\lightrulewidth = 0.05em) 조판되며, 이 굵기 차이 덕분에 표의 바깥 경계와 내부 구분을 한눈에 구별할 수 있습니다. 모두 대괄호로 굵기를 개별 지정할 수 있고(예: \toprule[1pt]), \hline처럼 행 끝 \\ 뒤에 둡니다. 단 \toprule만은 \begin{tabular}{...} 바로 뒤에 옵니다.
\begin{tabular}{@{}llr@{}}
\toprule
\multicolumn{2}{c}{品目} \\
\cmidrule(lr){1-2}
種類 & 状態 & 価格 \\
\midrule
りんご & 蜜入り & 380 \\
みかん & 訳あり & 120 \\
\addlinespace
合計 & & 500 \\
\bottomrule
\end{tabular}이 예에는 booktabs 요소가 모두 들어 있습니다. 일부 열에만 긋는 부분 괘선은 \cmidrule{a-b}로, \cline의 booktabs판에 해당합니다. 다만 \cmidrule은 선이 열 너비 전체에 닿아 이웃 괘선과 부딪히기 쉬우므로 보통 트림(끝 잘라내기)을 붙입니다. 괄호 안에 (l), (r), (lr)를 지정하면 왼쪽, 오른쪽, 양쪽 끝을 \cmidrulekern(기본 0.5em)만큼 줄이고, (lr){1-2}라면 1–2열에 양끝을 줄인 괘선을 긋습니다. 트림 양은 (r{.75em})처럼 따로 지정할 수도 있습니다. 전체 구문은 \cmidrule[width](trim){a-b}입니다.
행과 행 사이에 약간의 여백을 넣고 싶을 때, 예를 들어 합계 행 앞에서는 \\ 뒤에 \addlinespace를 둡니다. 기본적으로 \defaultaddspace(0.5em)만큼의 여백이 들어가며, \addlinespace[1ex]처럼 양을 지정할 수 있습니다. \\[...]로 한 행만 늘리는 것보다 의도가 분명하고, 괘선 앞뒤에 두면 여백을 정확히 제어할 수 있습니다. 선의 두께와 위아래 여백을 모두 직접 정해야 하는 경우에는 \specialrule{width}{above}{below}를 사용합니다(세 인수 모두 필수). 이는 특수한 상황을 위한 명령이며, 보통은 \toprule / \midrule / \bottomrule 세 가지면 충분합니다.
booktabs의 철학은 처음부터 두 가지 단순한 지침으로 제시됩니다. “세로 괘선은 절대 쓰지 말 것”, “이중 괘선은 쓰지 말 것”입니다. Fear는 이것들이 “극단적으로 보일 수 있지만, 깨뜨려도 좋을 이유를 한 번도 찾지 못했다”고 씁니다. 표의 좌우 정보 성격이 너무 달라 나누는 선이 필요하다면 세로선이 아니라 표를 둘로 나누는 것이 답이고, 합계 행 위에도 \midrule 하나면 충분하다는 생각입니다. 구현상으로도 booktabs의 괘선은 열 지정의 |와 연결되지 않도록 만들어져 있으며, 이는 세로 괘선을 쓰지 못하게 유도하는 의도적인 사양입니다.
한 가지 더, \hline과 booktabs 괘선을 섞지 말 것입니다. Fear는 “\hline이나 \cline과 함께 동작한다고 보장되지 않으며, 섞고 싶을 이유를 예상할 수 없다”고 분명히 말합니다. 예외적으로 같은 높이에 두 개의 \cmidrule을 겹쳐 이중 부분 괘선을 만들고 싶을 때만 둘 사이에 \morecmidrules를 넣습니다(\cmidrule{1-2}\morecmidrules\cmidrule{1-2}). 하지만 이중 괘선 자체가 권장되지 않으므로 이것도 일상적으로 쓸 것은 아닙니다.
| 명령 | 역할 | 기본 굵기 / 여백 |
|---|---|---|
\toprule | 표 맨 위의 괘선 | 굵기 \heavyrulewidth = 0.08em |
\midrule | 머리글과 본문 구분 | 굵기 \lightrulewidth = 0.05em |
\bottomrule | 표 맨 아래의 괘선 | 굵기 \heavyrulewidth = 0.08em |
\cmidrule(lr){a-b} | a-b 열에만 긋는 부분 괘선 | 굵기 \cmidrulewidth = 0.03em, 트림 \cmidrulekern = 0.5em |
\addlinespace | 행 사이 추가 여백 | \defaultaddspace = 0.5em |
\specialrule | 굵기와 위아래 여백을 모두 지정 | 세 인수 모두 필수 |
hhline — 세로선과 가로선의 교차 제어
hhline(David Carlisle 작성, LaTeX tools 번들 포함)은 표준 \hline과 같은 단일/이중 가로 괘선을 그리면서도 세로 괘선과 어떻게 교차할지 제어할 수 있는 패키지입니다. \usepackage{hhline}으로 불러옵니다. 단순한 \hline\hline 이중 괘선에서는 세로선이 교차점에서 끊길지 관통할지 선택할 수 없지만, \hhline은 이를 문자 단위로 지정할 수 있습니다. 이중 괘선이나 부분 괘선을 세로선과 꼭 결합해야 하는, 내장 명령만으로는 다루기 어려운 경우에 쓸 만합니다.
\hhline{…}의 인수는 tabular 열 지정과 비슷한 토큰의 나열입니다. 각 문자의 뜻은 다음과 같습니다. = 는 열 너비만큼의 이중 가로 괘선, - 는 단일 가로 괘선, ~(틸드)는 괘선이 없는 열입니다. 세로선에 대해서는 | 가 이중(또는 단일) 가로 괘선을 관통하는 세로선, : 가 이중 가로 괘선에서 끊기는 세로선, # 이 두 세로선 사이의 이중 가로 괘선 한 구간을 뜻합니다. 또 이중 괘선의 모서리를 만들기 위한 t(이중 괘선 구간의 위쪽 절반)와 b(아래쪽 절반)가 있으며, 이들은 반드시 두 세로선 사이에서 사용합니다(|t: 는 왼쪽 위 모서리, :b| 는 오른쪽 아래 모서리). 열 지정과 같은 *{n}{…} 반복 형식도 사용할 수 있습니다.
주의할 점으로, 이중 세로 괘선(|| 또는 ::)을 지정하면 \hhline의 가로 괘선은 그 지점에서 끊깁니다. 끊기지 않고 가로 괘선을 관통시키려면 #을 쓰거나 세로선 지정을 아예 생략합니다. 다음은 공식 문서의 예로, 대부분의 기능을 사용합니다.
\begin{tabular}{||cc||c|c||}
\hhline{|t:==:t:==:t|}
a & b & c & d \\
\hhline{|:==:|~|~||}
1 & 2 & 3 & 4 \\
\hhline{#==#~|=#}
i & j & k & l \\
\hhline{||--||--||}
w & x & y & z \\
\hhline{|b:==:b:==:b|}
\end{tabular}이 표에서는 맨 위의 |t:==:t:==:t| 가 각 이중 가로 괘선의 위쪽 절반과 세로선 모서리를 만들고, 맨 아래의 |b:==:b:==:b| 가 아래쪽 절반을 만들어 이중 괘선 테두리가 세로 괘선과 깔끔하게 이어지게 합니다. 가운데 행들은 ~(괘선 없음)와 #(세로선 사이의 이중 괘선 구간)을 섞어, 가로 괘선이 어디서 끊기고 어디서 세로선을 관통하는지를 행마다 바꿉니다. 이렇게 복잡한 교차를 단순한 \hline / \cline만으로 재현하는 것은 거의 불가능하며, hhline은 바로 이런 이중 괘선과 세로 괘선이 만나는 부분의 세부 조정 을 위한 도구입니다.
기술적인 보충입니다. \hline의 선은 TeX의 단일 \hrule이지만, \hhline 선은 작은 선분 여러 개로 만들어집니다. DVI 상에서는 정확히 배치되지만, 뷰어와 드라이버에 따라 선분의 이음새가 약간 어긋나 보일 수 있습니다. 신경 쓰인다면 다른 드라이버를 시도하거나 \arrayrulewidth를 조금 굵게 해 효과를 줄이라고 문서는 조언합니다.
무엇을 써야 할까
결론은 거의 하나입니다. 일반적인 표는 booktabs를 기본으로 삼으세요. \toprule / \midrule / \bottomrule 세 줄에 필요하면 \cmidrule만 더해도, 학술지에서 볼 수 있는 간결하고 읽기 쉬운 표가 됩니다. “세로 괘선 없음, 이중 괘선 없음” 지침을 따르면 괘선 때문에 고민할 일이 거의 사라집니다.
booktabs— 거의 모든 표의 첫 번째 선택지입니다. 가로 괘선만 사용하고, 굵기와 여백이 조정되어 있으며, 출판 품질을 냅니다.- 표준
\hline/\cline/|— 패키지 없이 쓸 수 있어 편리합니다. 격자형 표나 빠른 초안에 적합하지만, 괘선을 지나치게 많이 긋지 않도록 주의하세요. hhline— 이중 괘선과 세로 괘선의 교차를 세밀하게 제어해야 하는 특수한 경우에만 사용합니다. 상용하지 않습니다.
괘선 자체보다 먼저, 열을 어떻게 맞추고 나눌지가 표의 골격을 정합니다. 열 지정의 기초는 “tabular 환경”을, \multicolumn과 폭 지정 등 응용은 “열 지정 자세히”를 참고하세요.