
表の一部に垂直線を引こうとしている次の例を考えてみましょう。
\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
TeXでは、表は(典型的には)\halign
プリミティブによって作成されます。このプリミティブは(大まかに言えば)次の構文を持ちます。
\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 は要求に応じる準備ができています。TeX\omit
は、入力ストリームを展開してスペースを無視する特別なモードでデータ部分の読み取りを開始します。展開後の最初のスペース以外の文字が の場合\omit
、プリアンブルとポストアンブルは省略されます。それ以外の場合、TeX はプリアンブルに戻ってそれを展開し、項目のデータの読み取りに進みます。\omit プリミティブが項目の最初のオブジェクトでない場合、TeX は位置が間違っているという\omit
エラーを出力してそれを無視します。
LaTeX\multicoumn
マクロは最初の項目 に展開されます\omit
。これは、ユーザーがここでの の前後関係を省略したいためです。たとえば、r
LaTeX の table のプリアンブルは の低レベル プリアンブルに変換されますが、ユーザーは、つまり を\halign
記述しません。さらに、 がある場合、ユーザーは 2 つの列にまたがることになり、マクロはプリミティブを出力します (ただし、 は今のところ重要ではありません)。LaTeX マクロはを作成します。つまり、がテーブル項目の最初のオブジェクトである場合は に展開されず、通常は のプリアンブルが使用されます。しかし、の後、つまり の中に を記述しています。マクロは に展開されますが、 の使用は許可されていない場所です。エラーが発生します。\multicolumn{2}{c}
c
r
2
\span
\mutlirow
\vbox
\multirow
\omit
\multispan
\multirow
\vbox
\multispan
\omit
\omit