Was bedeutet „falsch platziertes Weglassen“?

Was bedeutet „falsch platziertes Weglassen“?

Betrachten Sie dieses Beispiel, in dem ich versuche, eine vertikale Linie durch einen Teil der Tabelle zu zeichnen:

\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}

Beim Ausführen erhalte ich:

! Misplaced \omit.
\multispan ->\omit
                   \@multispan
l.12 ...x[origin=c]{90}{\footnotesize Predicted}}}

?

Wenn ich einfach klicke Enterund weitermache, wird diese nette Tabelle erstellt:

Bildbeschreibung hier eingeben

das sieht fast, aber nicht ganz so aus, wie ich es möchte. (Die vertikale Linienbreite scheint zu dick zu sein), aber was hat es mit dem Auslassen auf sich? Warum ist das da? Und wie kann ich es beheben?

Antwort1

Du kannst nicht \multicolumndrinnen sein \multirow. Nur andersherum.

Ich füge eine andere Realisierung der Tabelle hinzu, bei der die Leser ihren Kopf nicht neigen müssen.

Die Breite der Regeln in tabular(die über |Zeichen eingefügt werden) beträgt \arrayrulewidth. \cmidruleFür booktabsverwendet \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}

Bildbeschreibung hier eingeben

Antwort2

Die Tabellen werden in TeX (typischerweise) durch Primitive erstellt \halign. Dieses Primitiv hat (grob gesagt) folgende Syntax

\halign { premable1 # postamble1 & preamble2 # postamble2 \cr
            data11 & data12 \cr
            data21 & data22 \cr
}

Das obige Pseudobeispiel erstellt eine Tabelle:

 preamble1 data11 postamble1   preamble2 data12 postamble2
 preamble1 data21 postamble1   preamble2 data22 postamble2

Manchmal möchten Benutzer die Präambel-Postambel für einzelne Elemente in der Tabelle (oder mehrere Elemente nebeneinander in der Tabelle) weglassen. TeX ist bereit, dieser Anforderung nachzukommen, wenn der Datenteil des Tabellenelements mit dem \omitPrimitiv beginnt. TeX beginnt das Lesen des Datenteils in einem speziellen Modus, in dem es den Eingabestrom erweitert und Leerzeichen ignoriert. Wenn das erste Nicht-Leerzeichen nach der Erweiterung ist \omit, werden Präambel-Postambel weggelassen. Andernfalls kehrt TeX zur Präambel zurück, erweitert sie und liest dann die Daten des Elements. Wenn das \omit-Primitiv nicht das erste Objekt des Elements ist, druckt TeX den \omitFehler „falsch platziert“ und ignoriert ihn.

Das \multicoumnLaTeX-Makro wird zum ersten Element erweitert \omit, weil der Benutzer das Präambel-Postambel hier weglassen möchte. Beispielsweise rwird in LaTeX die Präambel einer Tabelle in eine Low-Level-Präambel für umgewandelt, \halignaber der Benutzer schreibt \multicolumn{2}{c}, also ckein r. Wenn darüber hinaus eins vorhanden ist, 2möchte der Benutzer über zwei Spalten gehen und das Makro gibt ein \spanPrimitiv aus (aber das ist im Moment nicht wichtig). Das LaTeX-Makro \mutlirowerstellt ein \vbox, d. h., wenn \multirowdas erste Objekt im Tabellenelement ist, wird es nicht zu erweitert \omitund die Präambel wird normalerweise verwendet. Aber Sie haben \multispannach geschrieben \multirow, also innerhalb eines \vbox. Das \multispanMakro wird zu erweitert, \omitaber dies ist kein zulässiger Platz für die Verwendung von \omit. Sie erhalten die Fehlermeldung.

verwandte Informationen