
考慮這個例子,我試著透過表格的一部分繪製垂直線:
\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
並且通常使用前導詞。但你已經寫了\multispan
after \multirow
, ie inside a \vbox
.該\multispan
巨集擴展為,\omit
但這不是允許使用的地方\omit
。你得到了錯誤。