使用多列时的表格列宽

使用多列时的表格列宽

我在 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}

在此处输入图片描述

相关内容