表格多列居中

表格多列居中

我为表格编写了以下代码:

\documentclass{article}
\begin{document}
\begin{table}
\centering
\begin{tabular}{|c|c|c|c|c|} 
\hline
x & \multicolumn{2}{c|}{y} & \multicolumn{2}{c|}{zzzzzzzzzzzzzzzzzzzzzzzzz}  \\ 
\hline
  & t & w                  & h & f                                           \\ 
\hline
  &   &                    &   &                                             \\ 
\hline
  &   &                    &   &                                             \\
\hline
\end{tabular}
\end{table}
\end{document}

结果是:

在此处输入图片描述

我怎样才能将包括“h”和“f”在内的列置于包括“zzzzzzzzzzzzzzzzzzzzzzzz”在内的多列下方?

事实上,这就是我想要的:

在此处输入图片描述

谢谢

答案1

您可以使用 tabularx:

\documentclass{article}

\usepackage{tabularx}
\begin{document}
\newcolumntype{A}{>{\centering\arraybackslash}X}

\begin{table}[htbp]
    \centering
    \begin{tabularx}{\textwidth}{| c | c | c | A | A |}
        \hline
            x     & \multicolumn{2}{c|}{y} & \multicolumn{2}{c|}{zzzzzzzzzzzzzzzzzzzzzzzzzzzz}   \\ \hline
                  & t        & w      & h & f   \\ \hline
                  &          &      &     &   \\ \hline
    \end{tabularx}
\end{table}


\end{document}

在此处输入图片描述

答案2

为了适应代码这个答案对于您的文档,您需要做的就是执行以下三个步骤。

  • 首先,将以下前言代码复制到您的文档中:

    \usepackage{calc}  % to ease performing of some calculations
    \usepackage{array} % for 'w' column type
    \newlength\lenA \newlength\lenB
    % Retrieve the usable width of the combined header cell:
    \settowidth\lenA{bcbcbcbc} 
    % Compute the usable width of the underlying columns:
    \setlength\lenB{(\lenA-2\tabcolsep-\arrayrulewidth)/2} 
    
  • 接下来,更改bcbcbcbczzzzzzzzzzzzzzzzzzzzzzzzz(或第 4 列和第 5 列的组合标题可能包含的内容)。

  • 最后,改变

    \begin{tabular}{|c|c|c|c|c|}
    

    \begin{tabular}{|c|c|c|w{c}{\lenB}|w{c}{\lenB}|}
    

完整的 MWE(最小工作示例)及其相关输出:

在此处输入图片描述

\documentclass{article}

       \usepackage{calc}  % to ease performing of some calculations
       \usepackage{array} % for 'w' column type
       \newlength\lenA \newlength\lenB
       % Retrieve the usable width of the combined header cell:
       \settowidth\lenA{zzzzzzzzzzzzzzzzzzzzzzzzz} % rather than "bcbcbcbc"
       % Compute the usable width of the underlying columns:
       \setlength\lenB{(\lenA-2\tabcolsep-\arrayrulewidth)/2} 
       
\begin{document}
\begin{table}
\centering
\begin{tabular}{|c|c|c|w{c}{\lenB}|w{c}{\lenB}|} 
\hline
x & \multicolumn{2}{c|}{y} & \multicolumn{2}{c|}{zzzzzzzzzzzzzzzzzzzzzzzzz}  \\ 
\hline
  & t & w                  & h & f                                           \\ 
\hline
  &   &                    &   &                                             \\ 
\hline
  &   &                    &   &                                             \\
\hline
\end{tabular}
\end{table}
\end{document}

答案3

所需的功能似乎非常自然,但不幸的是,它没有在 TeX 的内部算法中实现(即在\halign原始算法中)。因此,如果我们想要这样的功能,我们必须使用更复杂的宏并做出妥协。这里接受的答案(由 Roland 提供)给出了更大但固定的hf列宽度。Mico 的答案对大多跨度进行了测量,但必须在表格外部给出。我的解决方案在表格内部进行测量。但我们必须知道哪些列会受到此问题的影响,并在表格声明中做一些特殊设置。

由于我不懂 LaTeX,因此我使用 OpTeX 来展示实现,但原理是相似的。您可以通过 运行此示例。您可以尝试更改或optex document的数量,然后您可以看到会发生什么。zzzhhh

\newdimen\bigpartw
\def\bigpart#1{\setbox0=\hbox{#1}\global\bigpartw=\wd0 \box0 }
\def\multipart#1#2;;{%
   \setbox0=\hbox{\ignorespaces #2\unskip}%
   \ifdim\wd0<#1\bigpartw \setbox0=\hbox to#1\bigpartw{\hss\unhbox0\hss}\fi
   \hss\box0\hss}

\table{|c|c|c|:(\multipart{0.5})c(;;)|:(\multipart{0.5})c(;;)|}{
   \crl
   x & \mspan2[c|]{y} & \mspan2[c|]{\bigpart{zzzzzzzzzzzzz} } \crl
     & t & w          &  hh &  f                              \crl
     & a & b          &  c  &  d                              \crl
}

\end

相关内容