Что означает неуместный пропуск?

Что означает неуместный пропуск?

Рассмотрим пример, где я пытаюсь провести вертикальную линию через часть таблицы:

\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

Таблицы создаются в TeX (обычно) примитивом \halign. Этот примитив имеет (грубо говоря) следующий синтаксис

\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, то преамбула-постамбула опускаются. В противном случае TeX возвращается к преамбуле, расширяет ее и затем следует чтение данных элемента. Если примитив \omit не является первым объектом элемента, то TeX выводит неуместную \omitошибку и игнорирует ее.

Макрос \multicoumnLaTeX расширяется до первого элемента \omit, потому что пользователь хочет опустить здесь преамбулу-постамбулу. Например, rв преамбуле LaTeX таблица преобразуется в преамбулу низкого уровня для, \halignно пользователь пишет \multicolumn{2}{c}, т. е c. нет r. Более того, если есть, 2то пользователь хочет охватить два столбца, и макрос выдает \spanпримитив (но это сейчас не важно). Макрос LaTeX \mutlirowсоздает \vbox, это означает, что если \multirowэто первый объект в элементе таблицы, то он не расширяется до, \omitи преамбула обычно используется. Но вы написали \multispanпосле \multirow, т. е. внутри \vbox. \multispanМакрос расширяется до, \omitно это недопустимое место для использования \omit. Вы получаете ошибку.

Связанный контент