我创建了一个多列表格,并希望确保其宽度与文本一样宽,最重要的是,各列在空间上均等划分。我尝试了 \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}