가로세로 줄

표의 괘선을 다루는 방식은 세 가지입니다. 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로 정해집니다.

latex
\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}{...} 바로 뒤에 옵니다.

latex
\begin{tabular}{@{}llr@{}}
  \toprule
  \multicolumn{2}{c}{品目} \\
  \cmidrule(lr){1-2}
  種類 & 状態 & 価格 \\
  \midrule
  りんご & 蜜入り & 380 \\
  みかん & 訳あり & 120 \\
  \addlinespace
  合計 & & 500 \\
  \bottomrule
\end{tabular}

이 예에는 booktabs 요소가 모두 들어 있습니다. 일부 열에만 긋는 부분 괘선은 \cmidrule{a-b}로, \clinebooktabs판에 해당합니다. 다만 \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의 괘선은 열 지정의 |와 연결되지 않도록 만들어져 있으며, 이는 세로 괘선을 쓰지 못하게 유도하는 의도적인 사양입니다.

한 가지 더, \hlinebooktabs 괘선을 섞지 말 것입니다. 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의 가로 괘선은 그 지점에서 끊깁니다. 끊기지 않고 가로 괘선을 관통시키려면 #을 쓰거나 세로선 지정을 아예 생략합니다. 다음은 공식 문서의 예로, 대부분의 기능을 사용합니다.

latex
\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과 폭 지정 등 응용은 “열 지정 자세히”를 참고하세요.