如何正确使用 \multirow?

如何正确使用 \multirow?

我想制作这样的表格: 在此处输入图片描述

使用以下代码:

\documentclass{article}
\usepackage[svgnames,table]{xcolor}

\usepackage{multirow}

\usepackage{booktabs}

\newcommand\heading[1]{\multicolumn1l{\textcolor{White}{\large\textbf{#1}\strut}}}

\usepackage{etoolbox}
\newcommand\colouredRows{}% initialise empty list
\forcsvlist{\listadd\colouredRows}{ 7, 8, 9, 10}
\newcommand\SetRowColour{%
  \xifinlist{\number\rownum}\colouredRows{\cellcolor{DodgerBlue!20}}{}%
}

\usepackage{array}
\newcolumntype{C}{>{\centering\arraybackslash}c}
\newcolumntype{L}{>{\raggedright\arrybackslash}l}
\newcolumntype{R}{>{\raggedleft\arraybackslash}r}

\rowcolors{2}{White}{white}% initialise the \rownum counter from xcolor
\begin{document}
\begin{center}
    \begin{tabular}{ LL CCCC R }
      \rowcolor{MidnightBlue}
      \heading{Student} 
      & \heading{Marker} 
      & \multicolumn{4}\heading{\textcolor{White}{\large\textbf{Essay}}}
      & \heading{Total} \\
                & & Originality & Synthesis & Effort & Overall & \\
                \cmidrule(lr){3-6}
                            \multirow{2}*{James} & Alice  & 9 & 8 & 7 & 8.0 & \multirow{4}*{\textbf{7.9}}\\
                              & Amelia & 8 & 9 & 7 & 8.0 & \\
                              & Anton  & 9 & 7 & 7 & 7.7 & \\
                              & Arthur & 7 & 8 & 8 & 7.7 & \\
                              & Alice  & 9 & 9 & 7 & 8.3 & \\
                              & Amelia & 9 & 8 & 8 & 8.3 & \\
                              & Anton  & 8 & 8 & 8 & 8.0 & \\
                              & Arthur & 7 & 9 & 7 & 7.7 & \\
                              & Alice  &10 & 9 &10 & 9.7 & \\
                              & Amelia & 9 & 7 & 8 & 8.0 & \\
                              & Anton  & 9 & 8 & 8 & 8.3 & \\
                              & Arthur & 9 &10 & 9 & 9.3 & \\
    \end{tabular}
\end{center}

\end{document}

但该\multirow命令产生了一些问题。 在此处输入图片描述

任何帮助,将不胜感激。

答案1

由于问题在于如何\multirow正确使用,我通过省略与颜色、字体大小和字体粗细相关的所有指令来简化布局。

在此处输入图片描述

\documentclass{article}
\usepackage{multirow,booktabs}

\begin{document}
\begin{center}
\begin{tabular}{@{} ll cccc r @{}}
\toprule
  Student & Marker & \multicolumn{4}{c}{Essay} & Total \\
\cmidrule(lr){3-6}
  & & Originality & Synthesis & Effort & Overall & \\
\midrule
      \multirow{4}{*}{James}  & Alice  & 9 & 8 & 7 & 8.0 & \multirow{4}{*}{7.9}\\
                              & Amelia & 8 & 9 & 7 & 8.0 & \\
                              & Anton  & 9 & 7 & 7 & 7.7 & \\
                              & Arthur & 7 & 8 & 8 & 7.7 & \\ 
      \addlinespace
      \multirow{4}{*}{Janice} & Alice  & 9 & 9 & 7 & 8.3 & \multirow{4}{*}{8.1}\\
                              & Amelia & 9 & 8 & 8 & 8.3 & \\
                              & Anton  & 8 & 8 & 8 & 8.0 & \\
                              & Arthur & 7 & 9 & 7 & 7.7 & \\ 
      \addlinespace
      \multirow{4}{*}{Julie}  & Alice  &10 & 9 &10 & 9.7 & \multirow{4}{*}{8.8}\\
                              & Amelia & 9 & 7 & 8 & 8.0 & \\
                              & Anton  & 9 & 8 & 8 & 8.3 & \\
                              & Arthur & 9 &10 & 9 & 9.3 & \\
\bottomrule
\end{tabular}
\end{center}
\end{document}

答案2

在此处输入图片描述

编辑: multirow单元格应在着色表格行之后写入,因此应将其放置在跨行数为负数的最后一个颜色单元格中。该表格代码具有统一格式,在下面的 MWE 中,所有multirow单元格都以相同的方式写入。

与您的代码相比,进行了以下更改:

  • 重新定义是\heading命令
  • 定义为multicolumn单元格的命令
  • 前四列带有数字,使用S列类型
  • 用于表格tabularx(对于具有数字的均匀分布的列,在定义用于列中列标题的命令时使用X列单元格)\mcxS
  • 更正了新列类型的定义(因为您定义它们没有意义)
  • 下面的 MWE 重现了您在问题图像中显示的表格
\documentclass{article}
\usepackage[svgnames,table]{xcolor}
\usepackage{booktabs, multirow, tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
%\newcolumntype{R}{>{\raggedleft\arraybackslash}X}
\usepackage{siunitx}

\NewExpandableDocumentCommand\heading{m}
    {\large\textbf{\textcolor{white}{#1}}}
\NewExpandableDocumentCommand\mcc{O{1}m}
    {\multicolumn{#1}{c}{#2}}
\NewExpandableDocumentCommand\mcx{O{1}m}
    {\multicolumn{#1}{C}{#2}}
    
\begin{document}
\begin{center}
\setlength\extrarowheight{2pt}
\setlength\tabcolsep{3pt}
    \begin{tabularx}{\linewidth}{ll *{3}{S[table-format=2.0]}
                                         S[table-format=1.1] c}
    \rowcolor{MidnightBlue}
\heading{Student}
    & \heading{Marker}
        & \mcc[4]{\heading{Essay}}
            & \heading{Total}           \\
    &   & \mcx{Originality} 
            & \mcx{Synthesis} 
                & \mcx{Effort} 
                    & \mcx{Overall} & \\
    \cmidrule(lr){3-6}
    & Alice  & 9 & 8 & 7 & 8.0 & \\
    & Amelia & 8 & 9 & 7 & 8.0 & \\
    & Anton  & 9 & 7 & 7 & 7.7 & \\
\multirow{-3.8}{*}{James}
    & Arthur & 7 & 8 & 8 & 7.7 & \multirow{-3.8}{*}{\textbf{7.9}} \\
    \rowcolor{cyan!20}
    & Alice  & 9 & 9 & 7 & 8.3 & \\
    \rowcolor{cyan!20}
    & Amelia & 9 & 8 & 8 & 8.3 & \\
    \rowcolor{cyan!20}
    & Anton  & 8 & 8 & 8 & 8.0 & \\
    \rowcolor{cyan!20}
\multirow{-3.8}{*}{Janice}
    & Arthur & 7 & 9 & 7 & 7.7 & \multirow{-3.8}{*}{\textbf{8.1}}\\
    & Alice  &10 & 9 &10 & 9.7 & \\
    & Amelia & 9 & 7 & 8 & 8.0 & \\
    & Anton  & 9 & 8 & 8 & 8.3 & \\
\multirow{-3.8}{*}{Julie}
    & Arthur & 9 &10 & 9 & 9.3 & \multirow{-3.8}{*}{\textbf{7.9}}\\
    \bottomrule
    \end{tabularx}
\end{center}

\end{document}

答案3

{NiceTabular}您可以使用轻松构建该表格nicematrix

table此外,如果您使用键,则将不会看到某些 PDF 查看器中出现的细白线xcolor(例如,参见 Zarko 的回答)。

\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{booktabs}
\usepackage{nicematrix}
\usepackage{siunitx}

\NewExpandableDocumentCommand\heading{m}
    {\large\textbf{\textcolor{white}{#1}}}
    
\begin{document}
\begin{center}
\setlength\extrarowheight{2pt}
\setlength\tabcolsep{3pt}
\begin{NiceTabular}{ll *{3}{S[table-format=2.0]}S[table-format=1.1]>{\bfseries}c}
\CodeBefore
  \rowcolor{MidnightBlue}{1} 
  \rowcolor{cyan!20}{7-10} 
\Body
  \heading{Student} & \heading{Marker} & \Block{1-4}{\heading{Essay}} &&&& \heading{Total} \\
      &   & {Originality} & {Synthesis} & {Effort} & {Overall} \\
      \cmidrule(lr){3-6}
  \Block{4-1}{James}
      & Alice  & 9 & 8 & 7 & 8.0 & \Block{4-1}{7.9} \\
      & Amelia & 8 & 9 & 7 & 8.0 & \\
      & Anton  & 9 & 7 & 7 & 7.7 & \\
      & Arthur & 7 & 8 & 8 & 7.7 \\
  \Block{4-1}{Janice}
      & Alice  & 9 & 9 & 7 & 8.3 & \Block{4-1}{8.1}\\
      & Amelia & 9 & 8 & 8 & 8.3 \\
      & Anton  & 8 & 8 & 8 & 8.0 \\
      & Arthur & 7 & 9 & 7 & 7.7 \\
  \Block{4-1}{Julie}
      & Alice  &10 & 9 &10 & 9.7 & \Block{4-1}{7.9}\\
      & Amelia & 9 & 7 & 8 & 8.0 \\
      & Anton  & 9 & 8 & 8 & 8.3 \\
      & Arthur & 9 &10 & 9 & 9.3 \\
  \bottomrule
\end{NiceTabular}
\end{center}

\end{document}

您需要多次编译(因为nicematrix使用 PGF/Tikz 节点)。

上述代码的输出

相关内容