表格中的标题带有换行符和适当的间隙

表格中的标题带有换行符和适当的间隙

我希望表格标题居中、顶部对齐并且无需任何手动调整。

经过大量搜索,我终于实现了大部分目标。如您所见,我仍然遇到一个问题,即当我们有多行时,底部间隙会粘在文本上,而它应该与顶部间隙一样大。有没有办法通过编程来解决这个问题?如果我手动执行此操作,\\[1cm]我必须 a) 目测和 b) 重做,以防我更改 arraystretch。 表头

更新:请注意,我希望标题中有正常的换行符,其余部分应根据进行调整arraystretch。如果我按照建议使用另一个表格和另一个类似更新命令,\newcommand{\ct}[1]{\renewcommand*{\arraystretch}{1}\tabular[t]{@{}c@{}}#1\endtabular}标题也会错位。

\documentclass{article}
\usepackage{booktabs}

\usepackage{pbox}
\begin{document}
%\newcommand{\ct}[1]{\renewcommand*{\arraystretch}{1}\tabular[t]{@{}c@{}}#1\endtabular}
\newcommand{\ct}[1]{\pbox[t]{3cm}{\relax\ifvmode\centering\fi#1}}

\begin{table} \centering
\renewcommand*{\arraystretch}{6}
{\small
\begin{tabular}{ccc}

\midrule
 {\ct{Data}}   &  { \ct{aa \\aaaaa } }  &  { \ct{A nice heading \\is worth (\%)\\alot}  } \\
 \midrule
 {cc}   &  { aa }  &  { ss } \\
 {cc}   &  { aa }  &  { ss } \\
 {cc}   &  { aa }  &  { ss } \\
 \midrule
\end{tabular}}
\end{table}


\end{document}

答案1

您必须重置\arraystretch,但也需要在多行条目末尾添加一些深度。这里有一种方法:

\documentclass{article}
\usepackage{booktabs}

\makeatletter
\newcommand{\ct}[1]{%
  \edef\ct@depth{\the\dp\@arstrutbox}%
  \renewcommand{\arraystretch}{1}%
  \tabular[t]{@{}c@{}}#1\vrule width\z@ depth\ct@depth\relax\endtabular}
\makeatother

\begin{document}
\renewcommand\arraystretch{2}
\begin{tabular}{ccc}
\toprule
Data & \ct{aa \\aaaaa}  & \ct{A nice heading \\is worth (\%)\\alot} \\
\midrule
1 & 2 & 3 \\
4 & 5 & 6 \\
\bottomrule
\end{tabular}
%%% The following one is for comparison
\begin{tabular}{ccc}
\toprule
Data & aa & alot \\
\midrule
1 & 2 & 3 \\
4 & 5 & 6 \\
\bottomrule
\end{tabular}
\end{document}

在此处输入图片描述

但是我的建议是不是设置\arraystretch为大值;最好根本不要设置它。

相关内容