誤った省略とはどういう意味ですか?

誤った省略とはどういう意味ですか?

表の一部に垂直線を引こうとしている次の例を考えてみましょう。

\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\cmidrulebooktabs\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。これは、ユーザーがここでの の前後関係を省略したいためです。たとえば、rLaTeX の table のプリアンブルは の低レベル プリアンブルに変換されますが、ユーザーは、つまり を\halign記述しません。さらに、 がある場合、ユーザーは 2 つの列にまたがることになり、マクロはプリミティブを出力します (ただし、 は今のところ重要ではありません)。LaTeX マクロはを作成します。つまり、がテーブル項目の最初のオブジェクトである場合は に展開されず、通常は のプリアンブルが使用されます。しかし、の後、つまり の中に を記述しています。マクロは に展開されますが、 の使用は許可されていない場所です。エラーが発生します。\multicolumn{2}{c}cr2\span\mutlirow\vbox\multirow\omit\multispan\multirow\vbox\multispan\omit\omit

関連情報