
테이블의 일부를 통해 수직선을 그리려는 다음 예를 고려하십시오.
\documentclass{memoir}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{graphicx}
\begin{document}
\begin{tabular}{lrrrr}
\toprule
& & \multicolumn{3}{c}{Actual} \\
\cmidrule(lr){3-5}
& & Melanoma & Carcinoma & Normal \\
\multirow{3}{*}{\multicolumn{1}{l|}{\rotatebox[origin=c]{90}{\footnotesize Predicted}}}
& Melanoma & 30 & 2 & 0 \\
& Carcinoma & 5 & 28 & 0 \\
& Normal & 0 & 5 & 35 \\
\bottomrule
\end{tabular}
\end{document}
실행하면 다음과 같은 결과를 얻습니다.
! Misplaced \omit.
\multispan ->\omit
\@multispan
l.12 ...x[origin=c]{90}{\footnotesize Predicted}}}
?
그냥 치고 Enter
계속 이동하면 다음과 같은 멋진 테이블이 생성됩니다.
내가 원하는 것과 거의 비슷해 보이지만 아주 같지는 않습니다. (세로선 굵기가 너무 두꺼운 것 같네요.) 그런데 다 생략한 게 뭔가요? 그게 왜 거기 있나요? 어떻게 해결할 수 있나요?
답변1
\multicolumn
내부를 가질 수 없습니다 \multirow
. 반대 방향으로만.
나는 독자가 고개를 기울일 필요가 없는 테이블의 다른 구현을 추가합니다.
tabular
(문자를 통해 삽입된 |
) 규칙의 너비 는 입니다 \arrayrulewidth
. 의 경우 \cmidrule
를 booktabs
사용합니다 \cmidrulewidth
.
\documentclass{memoir}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{graphicx}
\usepackage{siunitx} % for the second realization
\setlength{\arrayrulewidth}{\cmidrulewidth}% for the first realization
\begin{document}
\begin{tabular}{lrrrr}
\toprule
& & \multicolumn{3}{c}{Actual} \\
\cmidrule(lr){3-5}
& & Melanoma & Carcinoma & Normal \\
\multicolumn{1}{l|}{\multirow{3}{*}{\rotatebox[origin=c]{90}{\footnotesize Predicted}}}
& Melanoma & 30 & 2 & 0 \\
\multicolumn{1}{l|}{}
& Carcinoma & 5 & 28 & 0 \\
\multicolumn{1}{l|}{}
& Normal & 0 & 5 & 35 \\
\bottomrule
\end{tabular}
\bigskip
\begin{tabular}{
@{}
l
*{3}{S[table-format=2.0]}
@{}
}
\toprule
Predicted & \multicolumn{3}{c}{Actual} \\
\cmidrule(l){2-4}
& {Melanoma} & {Carcinoma} & {Normal} \\
\midrule
Melanoma & 30 & 2 & 0 \\
Carcinoma & 5 & 28 & 0 \\
Normal & 0 & 5 & 35 \\
\bottomrule
\end{tabular}
\end{document}
답변2
테이블은 (일반적으로) \halign
기본 요소에 의해 TeX로 생성됩니다. 이 프리미티브는 (대략적으로) 다음과 같은 구문을 갖습니다.
\halign { premable1 # postamble1 & preamble2 # postamble2 \cr
data11 & data12 \cr
data21 & data22 \cr
}
위의 의사 예제는 테이블을 생성합니다.
preamble1 data11 postamble1 preamble2 data12 postamble2
preamble1 data21 postamble1 preamble2 data22 postamble2
때때로 사용자는 테이블의 개별 항목(또는 테이블에 나란히 있는 더 많은 항목)에 대해 서문-후문을 생략하기를 원합니다. TeX는 테이블 항목의 데이터 부분이 기본 요소로 시작하는 경우 요청을 따를 준비가 되어 있습니다 \omit
. TeX는 입력 스트림을 확장하고 공백을 무시하는 특수 모드에서 데이터 부분을 읽기 시작합니다. 확장 후 첫 번째 비공백이 이면 \omit
프리앰블-포스트앰블이 생략됩니다. Else TeX는 프리앰블로 돌아가 확장한 다음 항목의 데이터를 읽습니다. \omit 프리미티브가 항목의 첫 번째 객체가 아니면 TeX는 잘못 배치된 \omit
오류를 인쇄하고 무시합니다.
LaTeX 매크로는 사용자가 여기에서 pramble-postamble을 생략하기를 원하기 때문에 \multicoumn
첫 번째 항목으로 확장됩니다 . \omit
예를 들어 r
테이블의 LaTeX 프리앰블은 낮은 수준의 프리앰블로 변환되지만 사용자는 , 즉 no 를 \halign
씁니다 . 더 나아가, 사용자가 두 개의 열에 걸쳐 있기를 원하고 매크로가 프리미티브를 내보내는 경우 (그러나 지금은 중요하지 않습니다). LaTeX 매크로는 을 생성합니다 . 이는 테이블 항목의 첫 번째 개체인 경우 확장되지 않으며 프리머블이 일반적으로 사용됨을 의미합니다. 그러나 당신은 뒤에 , 즉 . 매크로 가 다음으로 확장되지만 이는 사용이 허용되지 않는 장소입니다 . 오류가 발생합니다.\multicolumn{2}{c}
c
r
2
\span
\mutlirow
\vbox
\multirow
\omit
\multispan
\multirow
\vbox
\multispan
\omit
\omit