잘못 배치된 생략은 무엇을 의미하나요?

잘못 배치된 생략은 무엇을 의미하나요?

테이블의 일부를 통해 수직선을 그리려는 다음 예를 고려하십시오.

\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. 의 경우 \cmidrulebooktabs사용합니다 \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}cr2\span\mutlirow\vbox\multirow\omit\multispan\multirow\vbox\multispan\omit\omit

관련 정보