如何制作一个具有多列且不同行下有不同数量元素的表格?

如何制作一个具有多列且不同行下有不同数量元素的表格?

我尝试使用以下代码,结果显示如下意外结果(我还附上了我期望的结果):

\documentclass{article}

\usepackage{siunitx}
\usepackage{array,booktabs}


\begin{document}
\begin{table}

    \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}lSS@{}} \\\toprule
    &{\textit{Score}}\\\midrule
        \textbf{class 1}  & 0 \\
        \midrule
        &\multicolumn{2}{cc}{\textbf{Model A}\textbf{Model B}}\\
        \midrule
        \textbf{class A}   0  &  0\\ 
        \textbf{class B}  0  &  0\\
        \textbf{class C}  0  &  0\\
        \textbf{class D}  0  &  0\\
        \midrule
        \textbf{class X}  0  &  0\\
        \textbf{class Y}  0  &  0\\
        \textbf{class Z}  0  &  0\\
        \bottomrule
    \end{tabular*}


    \caption{caption here}
    \label{table:results}
\end{table}

\end{document}

这有三个主要问题,如下所示:(1)“分数”的对齐应该居中,(2)模型 A 模型 B 重复,以及(3)值0向左移动

在此处输入图片描述

我试图获得如下输出:

在此处输入图片描述

答案1

nicematrix包是重现绘制表格所需的唯一包。

该软件包提供\Block以下命令:

(1)同时取代multirowmulticolumn

\\(2)允许在单元格内部使用(新行);

(3)内容水平、垂直居中;

\Block{1-2}{..}将生成一个高 1 行、宽 2 列的单元格。

技术出版物中通常不鼓励使用垂直线,但在许多情况下它们当然很有用。有些软件包很难连接垂直线和水平线。但 并非如此nicematrix

正如您所看到的,最终的代码更加简单,因此更容易理解和更改。

第一次或更改表布局时需要进行两次编译。

也可以看看https://tex.stackexchange.com/a/584492/161015

A

\documentclass{article}

\usepackage{nicematrix}

\begin{document}

\NiceMatrixOptions{cell-space-top-limit = 5pt,cell-space-bottom-limit = 5pt} %expand the cells vertically and horizontally

\begin{table}
\centering
    \begin{NiceTabular}{|>\bfseries{c}|c|c|}  % first column in bf
        \hline
                & \Block{1-2}{\textit{Score}}       \\ 
        \hline
        class 1 & \Block{1-2}{0}                    \\ 
        \hline
                &\textbf{Model A} & \textbf{Model B}\\ 
        \hline
        class A & 0 & 0         \\
        class B & 0 & 0         \\
        class C & 0 & 0         \\ 
        \hline
        class X & 0 & 0         \\
        class Y & 0 & 0         \\
        class Z & 0 & 0         \\
        \hline
    \end{NiceTabular}
\caption{Score of classes}
\label{tbl:scoreii}
\end{table}

\end{document}

答案2

可以从以下几点开始:

在此处输入图片描述

\documentclass{article}

\usepackage{siunitx}
\usepackage{array,booktabs}


\begin{document}
\begin{table}
    \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}lSS@{}}
      \toprule
      &\multicolumn{2}{c}{\textit{Score}}\\
      \midrule
      \textbf{class 1}  & \multicolumn{2}{c}{0} \\
      \midrule
      &\textbf{Model A} & \textbf{Model B}\\
      \midrule
      \textbf{class A} & 0  &  0\\ 
      \textbf{class B} & 0  &  0\\
      \textbf{class C} & 0  &  0\\
      \textbf{class D} & 0  &  0\\
      \midrule
      \textbf{class X} & 0  &  0\\
      \textbf{class Y} & 0  &  0\\
      \textbf{class Z} & 0  &  0\\
      \bottomrule
    \end{tabular*}
    \caption{caption here}
    \label{table:results}
\end{table}

\end{document}

答案3

使用arraybooktabs包足以编写您的表格...(不清楚为什么您使用“S”列,特别是因为您没有指定任何格式可能性):

\documentclass{article}
\usepackage{array, makecell}

\begin{document}
    \begin{table}
    \setcellgapes{4pt}
    \makegapedcells
    \centering
\begin{tabular}{|>{\bfseries}l | c | c | }
    \Xhline{1.2pt}
        & \multicolumn{2}{c|}{\textit{Score}}   \\
class 1 & \multicolumn{2}{c|}{0}                \\
    \Xhline{0.8pt}
        &   \textbf{Model A}
                &   \textbf{Model B}            \\
    \hline
class A &   0   &   0   \\
class B &   0   &   0   \\
class C &   0   &   0   \\
class D &   0   &   0   \\
    \hline
class X &   0  &    0   \\
class Y &   0  &    0   \\
class Z &   0  &    0   \\
    \Xhline{1.2pt}
\end{tabular}
\caption{caption here}
\label{table:results}
    \end{table}
\end{document}

经过一次编译后,结果为:

在此处输入图片描述

相关内容