錯位省略是什麼意思?

錯位省略是什麼意思?

考慮這個例子,我試著透過表格的一部分繪製垂直線:

\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

這些表(通常)是透過\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,則省略前導碼-後導碼。否則 TeX 返回序言,展開它,然後讀取該專案的資料。如果 \omit 原語不是該項目的第一個對象,那麼 TeX 將列印放錯位置的\omit錯誤並忽略它。

LaTeX\multicoumn巨集擴展到第一項\omit,因為使用者想省略此處的 pramble-postamble。例如,r在 LaTeX 中,表的前導碼被​​轉換為低階前導碼,\halign但使用者寫入\multicolumn{2}{c},即c「否」r。此外,如果2使用者想要跨越兩列並且巨集發出\span原語(但現在並不重要)。 LaTeX 巨集\mutlirow建立一個\vbox,這意味著如果\multirow是表項中的第一個對象,那麼它不會擴展到 n\omit並且通常使用前導詞。但你已經寫了\multispanafter \multirow, ie inside a \vbox.該\multispan巨集擴展為,\omit但這不是允許使用的地方\omit。你得到了錯誤。

相關內容