¿Qué significa omitir fuera de lugar?

¿Qué significa omitir fuera de lugar?

Considere este ejemplo en el que intento dibujar una línea vertical a través de parte de la tabla:

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

Al ejecutarlo me sale:

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

?

Si simplemente golpeo Entery sigo adelante, se produce esta bonita tabla:

ingrese la descripción de la imagen aquí

que se parece casi, pero no del todo, a lo que quiero. (Parece que el ancho de la línea vertical es demasiado grueso), pero ¿a qué se debe todo esto de omitir? ¿Por qué está eso ahí? ¿Y cómo puedo solucionarlo?

Respuesta1

No puedes tenerlo \multicolumndentro \multirow. Sólo al revés.

Agrego una realización diferente de la mesa que no requiere que los lectores inclinen la cabeza.

El ancho de las reglas en tabular(aquellas insertadas mediante |caracteres) es \arrayrulewidth. Para \cmidrule, booktabsusos \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}

ingrese la descripción de la imagen aquí

Respuesta2

Las tablas se crean en TeX (normalmente) mediante \halignprimitivas. Esta primitiva tiene (en términos generales) la siguiente sintaxis

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

Este pseudoejemplo anterior crea una tabla:

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

A veces los usuarios quieren omitir el preámbulo-postámbulo de un elemento individual de la tabla (o de más elementos uno al lado del otro en la tabla). TeX está listo para cumplir con la solicitud si la parte de datos del elemento de la tabla comienza con la \omitprimitiva. TeX comienza a leer la parte de datos en un modo especial donde expande el flujo de entrada e ignora los espacios. Si el primer no espacio después de la expansión es \omit, entonces se omiten el preámbulo y el postámbulo. De lo contrario, TeX regresa al preámbulo, lo expande y luego continúa leyendo los datos del elemento. Si la primitiva \omit no es el primer objeto del elemento, entonces TeX imprime \omitun error fuera de lugar y lo ignora.

La \multicoumnmacro LaTeX se expande al primer elemento \omit, porque el usuario desea omitir el postámbulo aquí. Por ejemplo, ren LaTeX el preámbulo de la tabla se transforma en un preámbulo de bajo nivel para \halignpero el usuario escribe \multicolumn{2}{c}, es decir c, no r. Además, si hay 2un usuario que desea abarcar dos columnas y la macro emite \spanuna primitiva (pero no es importante por ahora). La macro LaTeX \mutlirowcrea un \vbox, lo que significa que si \multirowes el primer objeto en el elemento de la tabla, entonces no se expande \omity normalmente se usa el premable. Pero has escrito \multispandespués \multirow, es decir, dentro de un \vbox. La \multispanmacro se expande \omitpero no se permite su uso en este lugar \omit. Obtienes el error.

información relacionada