当表格中的多列标题使用的水平空间比它们所“标示”的列多时,则额外的宽度将完全分配给最右边的列。以下 MWE:
\documentclass{article}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{lccc}\toprule
& \multicolumn{3}{c}{Wide multicolumn cell}\\
& x & y & z \\ \midrule
A & 1 & 2 & 3 \\ \bottomrule
\end{tabular}
\end{document}
生成:
我想为 x、y 和 z 列分配相同数量的水平空间。我确实意识到一个简单的解决方法是使用固定宽度的 x、y 和 z 列,但我正在寻找一个动态解决方案。所以我的问题如下:
1)有没有一种简单的方法可以将水平空间均匀地分配给 x、y 和 z 列?
2)假设 1)的答案是否定的:有什么优雅的方法可以将单个可变宽度列的宽度增加一定百分比,例如,将 x 列的宽度增加到默认值的 150%?
答案1
有几种可能性:
\documentclass{article}
\usepackage{booktabs,tabularx}
\begin{document}
\setlength\parskip{1cm}
\begin{tabular}{lccc}\toprule
& \multicolumn{3}{c}{Wide multicolumn cell}\\
& x & y & z \\ \midrule
A & 1 & 2 & 3 \\ \bottomrule
\end{tabular}
\dotfill
\begin{tabular*}{.5\textwidth}
{l!{\extracolsep{\textwidth minus \textwidth}}lccc}
\toprule
& \multicolumn{3}{c}{Wide multicolumn cell}\\
& x & y & z \\ \midrule
A & 1 & 2 & 3 \\ \bottomrule
\end{tabular*}
\begin{tabular}{lc@{\hspace{4em}}c@{\hspace{4em}}c}\toprule
& \multicolumn{3}{c}{Wide multicolumn cell}\\
& x & y & z \\ \midrule
A & 1 & 2 & 3 \\ \bottomrule
\end{tabular}
\begin{tabularx}{.5\textwidth}{l*{3}{>{\centering\arraybackslash}X}}\toprule
& \multicolumn{3}{c}{Wide multicolumn cell}\\
& x & y & z \\ \midrule
A & 1 & 2 & 3 \\ \bottomrule
\end{tabularx}
\begin{tabular}{lccc}\toprule
& &\makebox[60pt]{Wide multicolumn cell}&\\
& x & y & z \\ \midrule
A & 1 & 2 & 3 \\ \bottomrule
\end{tabular}
\end{document}
答案2
感谢您的这些建议。我更喜欢使用表格环境,因此我被第二个带有 的建议所吸引@{\hspace{4em}}
,但要扩大两端的列宽,需要在列的左侧和右侧添加一半的空间。结果是多列单元格也包含额外的空间,这是不希望的。此外,它似乎与在多列单元格下划线 ( \cline{2-4}
) 配合得不太好。
目前我更喜欢以下解决方案(即使它可能是一个丑陋的黑客......):
\documentclass{article}
\usepackage{booktabs}
\begin{document}
\newcommand{\cspace}{\hspace*{2.5em}}
\begin{tabular}{lccc}
& \cspace & \cspace & \cspace \\ [-2.5ex]
\toprule
& \multicolumn{3}{c}{Wide multicolumn cell}\\ \cline{2-4}
& x & y & z \\ \midrule
A & 1 & 2 & 3 \\ \bottomrule
\end{tabular}
\end{document}
结果: