O que significa omitir mal colocado?

O que significa omitir mal colocado?

Considere este exemplo em que estou tentando desenhar uma linha vertical em parte da tabela:

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

Ao executá-lo, recebo:

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

?

Se eu apenas clicar Entere seguir em frente, isso produzirá esta bela tabela:

insira a descrição da imagem aqui

que se parece quase, mas não exatamente com o que eu quero. (Parece que a largura da linha vertical é muito grossa), mas por que toda essa omissão? Por que isso está aí? E como posso consertar isso?

Responder1

Você não pode ter \multicolumndentro \multirow. Só que o contrário.

Acrescento uma realização diferente da tabela que não exige que os leitores inclinem a cabeça.

A largura das regras tabular(aquelas inseridas por meio de |caracteres) é \arrayrulewidth. Para \cmidrule, booktabsusa \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}

insira a descrição da imagem aqui

Responder2

As tabelas são criadas em TeX (normalmente) por \halignprimitivo. Esta primitiva tem (grosso modo) a seguinte sintaxe

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

Este pseudoexemplo acima cria uma tabela:

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

Às vezes, os usuários desejam omitir o preâmbulo-postâmbulo para itens individuais na tabela (ou mais itens lado a lado na tabela). O TeX está pronto para atender à solicitação se a parte de dados do item da tabela começar com o \omitprimitivo. O TeX começa a ler a parte dos dados em um modo especial onde expande o fluxo de entrada e ignora espaços. Se o primeiro não-espaço após a expansão for \omit, então o preâmbulo e o pós-âmbulo serão omitidos. Caso contrário, o TeX retorna ao preâmbulo, expande-o e segue com a leitura dos dados do item. Se a primitiva \omit não for o primeiro objeto do item, então o TeX imprime \omitum erro mal colocado e o ignora.

A \multicoumnmacro LaTeX se expande para o primeiro item \omit, porque o usuário deseja omitir o pramble-postamble aqui. Por exemplo, rno LaTeX, o preâmbulo da tabela é transformado em preâmbulo de baixo nível para \halignmas o usuário escreve \multicolumn{2}{c}, ou seja c, não r. Além disso, se houver, 2o usuário deseja abranger duas colunas e a macro emite \spanprimitivo (mas isso não é importante por enquanto). A macro LaTeX \mutlirowcria um \vbox, significa que se \multirowfor o primeiro objeto no item da tabela, ele não se expande para \omite o preâmbulo é normalmente usado. Mas você escreveu \multispandepois \multirow, ou seja, dentro de um \vbox. A \multispanmacro se expande para, \omitmas este não é um local permitido para uso \omit. Você recebe o erro.

informação relacionada