본문 바로가기
Topos Uranos

요약

이 강의는 앞 강의의 읽기 쉬운 표를 단순한 격자로는 해결되지 않는 경우로 넓힌다. \multicolumn으로 셀을 가로로 합쳐 부분 괘선 아래에 머리글을 묶거나 셀 하나의 정렬만 바꾸는 법을 배우고, 묶은 머리글의 남는 너비가 어디로 가는지 이끌어 낸다. \multirow로 셀을 세로로 합치는 법과 그것을 피하는 편이 나은 때를 배운다. 표를 줄 너비에 맞추는 세 가지 방법(tabularx와 그 X 열, \extracolsep를 쓰는 tabular*, 그리고 권하지 않는 \resizebox 확대·축소)을 비교한다. longtable로 여러 쪽에 걸치는 표를 조판하면서 되풀이되는 머리글과 필요한 컴파일 횟수를 살핀다. 아주 넓은 표를 위해 쪽을 회전하는 방법을 소개한다. csvsimple과 pgfplotstable로 데이터 파일에서 표를 생성하고, 그 파일을 filecontents로 만든다. 현대적인 대안으로 tabularray를 보인다. 끝으로 흔한 오류를 실제 로그에서 읽는다.

학습 목표

  1. \multicolumn과 \cmidrule로 묶은 머리글을 만들고, 각 행의 셀을 세며, 수가 맞지 않을 때의 결과를 예견한다.
  2. \multirow와 booktabs 전통의 빈 셀 가운데 하나를 고르고, 그 선택을 읽기의 관점에서 정당화한다.
  3. tabularx나 tabular*로 표를 줄 너비에 맞추고, 표를 \resizebox로 확대·축소하지 않는 이유를 설명한다.
  4. longtable로 자체 머리글과 바닥글을 갖춘 여러 쪽짜리 표를 조판하고, 그 경고를 해석하며, 그것을 플로트 안에 넣을 수 없는 이유를 안다.
  5. 데이터 파일에서 표를 생성하고, 데이터의 출처를 하나로 두어 얻는 것을 설명한다.

여러 열에 걸치는 셀

명령 \multicolumn{n}{정렬}{텍스트}는 한 행에서 이웃한 n개 셀의 자리를 차지하고 그것들을 셀 하나로 바꾼다. 정렬은 둘째 인수로 지정하며, 표의 프리앰블에서와 같이 쓴다(l, c, r, p{…}, 그리고 @{}도). 여기서 저자가 행마다 확인해야 할 세기 규칙이 나온다. 단순한 셀의 수와 각 \multicolumn에 선언한 너비의 합은 프리앰블의 열 수를 넘어서는 안 된다.

셀 하나의 정렬 바꾸기

\multicolumn의 가장 소박한 쓰임은 열 하나에만 걸치는 것이다. \multicolumn{1}{c}{…}는 아무것도 합치지 않지만, 그 셀에 열과 다른 정렬을 부여한다. 오른쪽 정렬한 수의 열에서 머리글을 가운데에 두거나, 합계 행의 이름표를 오른쪽 정렬하여 그 수 옆에 두는 방법이다.

예시어느 연구 과제의 예산
LaTeX 코드
\documentclass{article}\usepackage[hangul]{kotex}\setmainhangulfont{Noto Serif CJK KR}\usepackage{booktabs}\begin{document}\begin{tabular}{llr}\toprule항목 & 세부 내용 & \multicolumn{1}{c}{금액} \\\midrule여비   & 기록관 방문 두 차례     & 1\,200 \\재료비 & 종이와 외장 디스크      &    300 \\용역비 & 기록물 디지털화         &    850 \\\midrule\multicolumn{2}{r}{합계} & 2\,350 \\\bottomrule\end{tabular}\end{document}
결과
결과

머리글 “금액”은 여전히 오른쪽 정렬인 열 위에서 가운데에 놓이고, 앞의 두 열에 걸치는 이름표 “합계”는 오른쪽 정렬되어 그 수 옆에 놓인다.

묶은 머리글

여러 열이 한 범주에 속하면 두 단의 머리글이 표를 더 낫게 한다. 위에는 그 열들에 걸치는 묶음의 이름을, 아래에는 각 열의 이름을 둔다. 두 단 사이에 booktabs는 부분 괘선 \cmidrule{2-3}을 제공하는데, 이것은 2열부터 3열까지에만 밑줄을 긋는다. 옵션 (lr)을 붙여 \cmidrule(lr){2-3}으로 쓰면 괘선의 왼쪽과 오른쪽 끝이 조금 잘려, 이웃한 두 괘선이 닿지 않고 눈에는 두 묶음이 보인다.

예시어느 연구의 집단별 결과
LaTeX 코드
\documentclass{article}\usepackage[hangul]{kotex}\setmainhangulfont{Noto Serif CJK KR}\usepackage{booktabs}\begin{document}\begin{tabular}{lrrrr}\toprule& \multicolumn{2}{c}{통제 집단}& \multicolumn{2}{c}{실험 집단(거꾸로 수업)} \\\cmidrule(lr){2-3} \cmidrule(lr){4-5}측정 & 평균 & 표준편차 & 평균 & 표준편차 \\\midrule사전 & 52.1 & 8.3 & 51.7 & 7.9 \\사후 & 54.0 & 8.1 & 61.2 & 7.4 \\\bottomrule\end{tabular}\end{document}
결과
결과

첫 행에는 빈 셀 하나(맨 앞의 &)와 두 열씩에 걸치는 셀 둘이 있다. 하나 더하기 둘 더하기 둘, 다섯으로 프리앰블과 같다. 실험 집단의 표준편차 열이 통제 집단의 것보다 넓다는 점에 주목하라.

남는 너비는 어디로 가는가

앞 예의 너비 차이는 우연이 아니다. \multicolumn의 텍스트가 그것이 걸치는 열들의 너비 합보다 넓으면 표가 넓어져야 하고, 엔진은 초과분을 모두 그 열들 가운데 마지막 열에 준다. 나머지 열은 자연 너비를 유지한다. “실험 집단(거꾸로 수업)”은 “평균”과 “표준편차”를 합친 것보다 넓고, 그 차이는 뒤의 열이 받는다. “통제 집단”은 짧으므로 그 아래 두 열은 영향을 받지 않는다. 머리글이 데이터보다 훨씬 길면 이 효과는 더 이상 눈에 띄지 않을 수 없다.

예시너무 긴 머리글
LaTeX 코드
\documentclass{article}\usepackage[hangul]{kotex}\setmainhangulfont{Noto Serif CJK KR}\usepackage{booktabs}\begin{document}\begin{tabular}{lrr}\toprule& \multicolumn{2}{c}{거꾸로 수업 처치를 마친 뒤의 실험 집단} \\\cmidrule(lr){2-3}측정 & 평균 & 표준편차 \\\midrule사전 & 51.7 & 7.9 \\사후 & 61.2 & 7.4 \\\bottomrule\end{tabular}\end{document}
결과
결과

평균의 수가 그 표준편차의 수와 멀리 떨어지고, 아무 뜻도 없는 공백이 둘을 가른다. 고칠 것은 조판이 아니라 글이다. 짧은 머리글(“실험 집단”)을 쓰고, 설명은 표의 캡션이나 본문에 둔다.