我希望表格标题居中、顶部对齐并且无需任何手动调整。
经过大量搜索,我终于实现了大部分目标。如您所见,我仍然遇到一个问题,即当我们有多行时,底部间隙会粘在文本上,而它应该与顶部间隙一样大。有没有办法通过编程来解决这个问题?如果我手动执行此操作,\\[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
为大值;最好根本不要设置它。