我在 Overleaf 中使用以下代码创建了一个表格:
\begin{table}[H]
\centering
\begin{tabular}{|c|ccc|ccc|}
\hline
\multicolumn{1}{|c|}{} & \multicolumn{3}{|c|}{Partially Structured} & \multicolumn{3}{|c|}{Unstructured} \\
\hline
& \textbf{m1} & \textbf{m2} & \textbf{m3} & \textbf{m1} & \textbf{m2} & \textbf{m3} \\
\hline
\textbf{n1} & x & y & z & x & y & z \\
\textbf{n2} & x & z & z & z & x & y \\
\textbf{n3} & x & y & x & y & z & x \\
\hline
\end{tabular}
\end{table}
但是,输出存在一些格式问题,如您在此处所见(忽略黄色填充):
因为标题部分结构化比其下所有单元格中的文本都长,因此必须扩展列宽,但只能通过扩展 m3 列来实现,而不是同样扩展 m1、m2 和 m3(如果这很难理解,抱歉 - 很难用文字解释!)。有没有办法让此标题下的所有三列宽度相同?
答案1
我建议你不要让前三个数据列等宽,而是全部六个数据列同样宽。
在下面的解决方案中,计算数据列的(可用)宽度,以便均匀地“填充”第一个子标题(\textbf{Partially Structured
)下方的空间,然后为所有六个数据列分配该宽度。
如果您不熟悉 LaTeX 列宽计算,请按照以下分步指南操作:
这全部的前三个数据列的宽度为
\widthof{\textbf{Partialy Structured}} + 2\tabcolsep
。默认情况下,LaTeX 在\tabcolsep
单元格的每一侧插入 的空白填充,包括跨越三个“基本”列的单元格。前三个数据列的总宽度也可以表示为
3(usable width of equal-width columns)+6\tabcolsep
。这可用的因此,等距列的宽度可以计算为
( \widthof{\textbf{Partialy Structured}} - 4\tabcolsep ) / 4
下面的截图首先展示了所有六个数据列宽度相同的表格,然后展示了前三个数据列明显比后三个数据列宽的版本。希望你会同意第一个表格看起来更好。
\documentclass{article} % or some other suitable document class
\usepackage{calc} % for '\widthof' macro
\usepackage{array} % for 'w' column type
\newlength\mylen
% calculate (minimal) width of the 6 data columns:
\setlength\mylen{(\widthof{\textbf{Partially Structured}}-4\tabcolsep)/3}
\begin{document}
\begin{table}[ht!]
\centering
%% use \mylen as width of all 6 data columns:
\begin{tabular}{| c | *{3}{wc{\mylen}} | *{3}{wc{\mylen}} |}
\hline
& \multicolumn{3}{c|}{\textbf{Partially Structured}}
& \multicolumn{3}{c|}{\textbf{Unstructured}} \\
\hline
& \textbf{m1} & \textbf{m2} & \textbf{m3}
& \textbf{m1} & \textbf{m2} & \textbf{m3} \\
\hline
\textbf{n1} & x & y & z & x & y & z \\
\textbf{n2} & x & z & z & z & x & y \\
\textbf{n3} & x & y & x & y & z & x \\
\hline
\end{tabular}
\bigskip\bigskip
%% same table, but with 'c' column type for final 3 columns
\begin{tabular}{| c | *{3}{wc{\mylen}} | ccc |}
\hline
& \multicolumn{3}{c|}{\textbf{Partially Structured}}
& \multicolumn{3}{c|}{\textbf{Unstructured}} \\
\hline
& \textbf{m1} & \textbf{m2} & \textbf{m3}
& \textbf{m1} & \textbf{m2} & \textbf{m3} \\
\hline
\textbf{n1} & x & y & z & x & y & z \\
\textbf{n2} & x & z & z & z & x & y \\
\textbf{n3} & x & y & x & y & z & x \\
\hline
\end{tabular}
\end{table}
\end{document}
答案2
解决方案tabularray
均匀分配额外空间的包:
\documentclass{article}
\usepackage{tabularray}
\usepackage{float}
\begin{document}
\begin{table}[H]
\centering
\begin{tblr}{
colspec={|c|ccc|ccc|},
row{2} = {font=\bfseries},
column{1} = {font=\bfseries},
cell{1}{2,5} = {c=3}{c}, % mutlicolumn
hspan = even, % distribute extra space evenly
}
\hline
& Partially Structured & & & Unstructured & & \\
\hline
& m1 & m2 & m3 & m1 & m2 & m3 \\
\hline
n1 & x & y & z & x & y & z \\
n2 & x & z & z & z & x & y \\
n3 & x & y & x & y & z & x \\
\hline
\end{tblr}
\end{table}
\end{document}