按比例调整表格列

按比例调整表格列

我创建了一个多列表格,并希望确保其宽度与文本一样宽,最重要的是,各列在空间上均等划分。我尝试了 \tabularx,但我不知道如何设置它。

\begin{table}[]
\begin{tabularx}{\textwidth}{lccc}
\multicolumn{1}{c}{} & col 1     & col 2     & col 3     \\ \hline
                     & \multicolumn{3}{c}{merged column} \\ \hline
row1                 & value     & value     & value     \\
row2                 & value     & value     & value     \\
row3                 & value     & value     & value    
\end{tabularx}
\caption{Caption}
\label{tab:non-parametric}
\end{table}

在此处输入图片描述

谢谢!

答案1

至少使用tabularx一个列,该列必须是其X派生类型或从其派生类型。对于您的情况,派生新列类型是明智的:

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

然后按如下方式使用它:

\documentclass{article}
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}

\begin{document}
\begin{table}[ht]
\begin{tabularx}{\textwidth}{X CCC}
        & col 1     & col 2     & col 3     \\ \hline
        & \multicolumn{3}{c}{merged column} \\ \hline
row1    & value     & value     & value     \\
row2    & value     & value     & value     \\
row3    & value     & value     & value     \\  \hline
        & \multicolumn{3}{c}{merged column} \\ \hline
row1    & value     & value     & value     \\
row2    & value     & value     & value     \\
row3    & value     & value     & value     \\
    \hline
\end{tabularx}
\caption{Caption}
\label{tab:non-parametric}
\end{table}
\end{document}

产生

在此处输入图片描述

在我看来,这不是很好看的表格(如果单元格中的真实文本没有代码片段中的虚拟内容那么宽)。

您可能有兴趣使用tabularray包来代替tabularx,该booktabs包作为tabularray库加载的包提供:

在此处输入图片描述

使用它,表格代码会短一点:

\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}

\begin{document}
\begin{table}[ht]
\begin{tblr}{colspec = {X[l] *{3}{X[c]}}}
        & col 1     & col 2     & col 3     \\ 
    \cmidrule{2-4}
        & \SetCell[c=3]{c}{merged column} 
                    &           &           \\ 
    \midrule
row1    & value     & value     & value     \\
row2    & value     & value     & value     \\
row3    & value     & value     & value     \\
    \cmidrule{2-4}
        & \SetCell[c=3]{c}{merged column}
                    &           &           \\
    \midrule
row1    & value     & value     & value     \\
row2    & value     & value     & value     \\
row3    & value     & value     & value     \\
    \bottomrule
\end{tblr}
\caption{Caption}
\label{tab:non-parametric}
\end{table}
\end{document}

答案2

我不确定我是否清楚地理解了你的问题。如果你想要一个所有列宽度相同的表格,你可以使用固定宽度的列

\documentclass{article}

\usepackage{array}

% left aligned fixed-width column
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

% centered fixed-width column
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\begin{document}
\begin{table}
\begin{tabular}{L{0.2\textwidth} *{3}{C{0.2\textwidth}}}
\multicolumn{1}{c}{} & col 1     & col 2     & col 3     \\ \hline
                     & \multicolumn{3}{c}{merged column} \\ \hline
row1                 & value     & value     & value     \\
row2                 & value     & value     & value     \\
row3                 & value     & value     & value    
\end{tabular}
\caption{Caption}
\label{tab:non-parametric}
\end{table}
\end{document}

在此处输入图片描述

这里,所有列的宽度相同。为了更好地理解,请参见带有垂直规则的表格

规则

附录:

通过使用booktabs包中的水平规则,您的表格的版本看起来(对我而言)更好一些。

在此处输入图片描述

\documentclass{article}

\usepackage{array}
\usepackage{booktabs}

\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\begin{document}
\begin{table}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{L{0.2\textwidth} *{3}{C{0.2\textwidth}}}
\toprule
\multicolumn{1}{c}{} & col 1     & col 2     & col 3     \\ \cmidrule(lr){2-4}
                     & \multicolumn{3}{c}{merged column} \\ \midrule
row1                 & value     & value     & value     \\
row2                 & value     & value     & value     \\
row3                 & value     & value     & value  
\\ \bottomrule
\end{tabular}
\caption{Caption}
\label{tab:non-parametric}
\end{table}
\end{document}

根据原作者的评论进行编辑:应该使用包X的类型列。该命令用于水平居中。tabularx\centering\arraybacklash

\documentclass{article}

\usepackage{tabularx}

\begin{document}
\begin{table}
\begin{tabularx}{\textwidth}{X *{3}{>{\centering\arraybackslash}X}}
\multicolumn{1}{c}{} & col 1     & col 2     & col 3     \\ \hline
                     & \multicolumn{3}{c}{merged column} \\ \hline
row1                 & value     & value     & value     \\
row2                 & value     & value     & value     \\
row3                 & value     & value     & value    
\end{tabularx}
\caption{Caption}
\label{tab:non-parametric}
\end{table}
\end{document}

在此处输入图片描述

相关内容