\linewidth 加上 \cline 加上使用 tabularx 居中不起作用

\linewidth 加上 \cline 加上使用 tabularx 居中不起作用

我正在尝试使用 tabularx 创建一个表格,以便将表格拉伸到整个页面宽度。通常,它不需要整个宽度,但如果是这样,我更喜欢它。在我的表格中,我有一些多行单元格,因此我\cline{2-9}在某些时候使用 \hline 而不是 \hline。最后,我想让我的单元格内容居中。但是,我似乎无法将所有这些方面结合起来。

如果我使用\begin{tabularx}{\textwidth}{llXXXXXXX} %\textwidth or \linewith leads to the same result拉伸,但单元格值的居中却不起作用,正如本例所示 在此处输入图片描述

如果我尝试\begin{tabularx}{\textwidth}{llccccccc}居中工作,但 \cline 和 \hline 出了问题 在此处输入图片描述

精简代码:

\begin{table}[H]    
\centering
\begin{threeparttable} %because I'm using footnotes
\caption{some caption}
\label{tab:some table}
\begin{tabularx}{\textwidth}{llccccccc}
\toprule
 &    &\multicolumn{7}{c}{some ID} \\
 &    &1   &2   &3   &4  &5   &6   &7   \\ \midrule
\multirow{2}{*}{This is} &a test &$\sim$   &2   &+   &+   &+   &+   &+   \\ \cline{2-9}
                         &not a test    &+   &10   &+   &+   &+   &+   &--   \\ \hline
\end{tabularx}
\end{threeparttable}
\end{table}

有人能帮我解决这个问题吗?太好了!

PS:我也在Reddit但还没有收到答复。如果找到了可行的解决方案,我会告诉你。

答案1

这里有四种制作表格的方法。

最重要的是:你至少指定一Xtabularx。但您实际上并不需要它,如表 2 所示。

另一方面,这\multirow对清晰度没有任何帮助,恰恰相反,见表 3(其中左右填充也被删除)。

我会简单地使用自然宽度,除非最终尺寸与全局文本宽度没有太大差别。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tabularx,booktabs,multirow,array}

\begin{document}

\begin{table}
\centering

\caption{The table with \texttt{tabularx}}

\begin{tabularx}{\textwidth}{XX*{7}{c}}
\toprule
 &    &\multicolumn{7}{c}{some ID} \\
 &    &1   &2   &3   &4  &5   &6   &7   \\ \midrule
\multirow{2}{*}{This is} &a test &$\sim$   &2   &+   &+   &+   &+   &+   \\ \cmidrule{2-9}
                         &not a test    &+   &10   &+   &+   &+   &+   &--   \\ \bottomrule
\end{tabularx}

\bigskip

\caption{The table with \texttt{tabular*}}

\begin{tabular*}{\textwidth}{
  @{\extracolsep{\fill}\hspace{\tabcolsep}}
  ll
  >{$}c<{$}
  @{\extracolsep{0pt}\hspace{2\tabcolsep}}
  *{6}{>{$}c<{$}}
}
\toprule
 &    &\multicolumn{7}{c}{some ID} \\
 &    &1   &2   &3   &4  &5   &6   &7   \\ \midrule
\multirow{2}{*}{This is} & a test     & \sim &  2 & + & + & + &+ & + \\
\cmidrule{2-9}
                         & not a test & +    & 10 & + & + & + &+ & - \\
\bottomrule
\end{tabular*}

\bigskip

\caption{The table with \texttt{tabular*} and no \texttt{\string\multirow}}

\begin{tabular*}{\textwidth}{
  @{\extracolsep{\fill}}
  ll
  >{$}c<{$}
  @{\extracolsep{0pt}\hspace{2\tabcolsep}}
  *{6}{>{$}c<{$}}
  @{}
}
\toprule
 &    &\multicolumn{7}{c}{some ID} \\
\cmidrule(l){3-9}
 &    &1   &2   &3   &4  &5   &6   &7   \\ \midrule
This is & a test     & \sim &  2 & + & + & + &+ & + \\
\cmidrule(l){2-9}
        & not a test & +    & 10 & + & + & + &+ & - \\
\bottomrule
\end{tabular*}

\bigskip

\caption{The table as I would do}

\begin{tabular}{
  @{}
  ll
  *{7}{>{$}c<{$}}
  @{}
}
\toprule
 &    &\multicolumn{7}{c}{some ID} \\
\cmidrule(l){3-9}
 &    &1   &2   &3   &4  &5   &6   &7   \\ \midrule
This is & a test     & \sim &  2 & + & + & + &+ & + \\
\cmidrule(l){2-9}
        & not a test & +    & 10 & + & + & + &+ & - \\
\bottomrule
\end{tabular}

\end{table}

\end{document}

在此处输入图片描述

答案2

正如评论中所建议的那样,我添加了以下列类型

\newcolumntype{Z}{>{\centering\arraybackslash}X}

这样内容就居中了。然后我ccccccc*{7}{Z}(语法定义 7 个连续的Z类型列)更改了列。

我还添加了\otoprule分隔符,以便\toprule标题行之间的线条粗细相同但间距相等:

\newcommand{\otoprule}{\midrule[\heavyrulewidth]} 

MWE 如下:

\documentclass{article}
\usepackage{tabularx}
\usepackage{threeparttable}
\usepackage{booktabs}
\usepackage{multirow}

\begin{document}

\newcolumntype{Z}{>{\centering\arraybackslash}X}
\newcommand{\otoprule}{\midrule[\heavyrulewidth]} 

\begin{table}
    \centering
    \begin{threeparttable} %because I'm using footnotes
        \caption{some caption}
        \label{tab:sometable}
        \begin{tabularx}{\textwidth}{ll*{7}{Z}}
            \toprule
                                     &            & \multicolumn{7}{c}{some ID} \\
                                     &            & 1                              & 2  & 3 & 4 & 5 & 6 & 7   \\ \midrule
            \multirow{2}{*}{This is} & a test     & $\sim$                         & 2  & + & + & + & + & +   \\ \cline{2-9}
                                     & not a test & +                              & 10 & + & + & + & + & --   \\ \hline
        \end{tabularx}
    \end{threeparttable}
\end{table}
\end{document}

在此处输入图片描述

相关内容