我有一张表格,其列标题(中心对齐\multicolumn{1}{c}{Foobar here}
)比左对齐数据宽。这看起来有点奇怪,因为每列都有很大的右边距。
用一个例子来说明我的查询可能是最简单的方法。假设列标题为 10em,列中的数据从 2em 到 3em 不等。目前,每行数据的右边距在 8em 到 7em 之间(因为数据是左对齐的,所以右边距会弥补任何不足)。
我想要的是一种使其均衡的方法;因此左边距为 (10em - 3em) / 2 = 3.5em,右边距在 3.5em 和 4.5em 之间变化。
我该怎么做?我知道每个列标题的文本和表格中最宽数据部分的文本。
答案1
该eqparbox
软件包将解决这个问题。这是一个示例(根据eqparbox
文档修改,使其具有如您所描述的左对齐数据,并使用 使其更加美观booktabs
)。(您必须将其通过 latex 运行两次,以使框宽度收敛。)
\documentclass{article}
\usepackage{eqparbox}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{@{}lccc@{}} \toprule
& \multicolumn{3}{c}{Sales (in millions)} \\ \cmidrule{2-4}
Product &
October & November & December \\ \midrule
Widgets & \eqparbox{oct}{55.2} &
\eqparbox{nov}{\textbf{89.2}} &
\eqparbox{dec}{57.9} \\
Doohickeys & \eqparbox{oct}{\textbf{65.0}} &
\eqparbox{nov}{64.1} &
\eqparbox{dec}{9.3} \\
Thingamabobs & \eqparbox{oct}{10.4} &
\eqparbox{nov}{8.0} &
\eqparbox{dec}{\textbf{109.7}} \\ \bottomrule
\end{tabular}
\end{document}
为了使包装更加自动化,你可以对包装eqparbox
做一些小技巧array
\documentclass{article}
\usepackage{eqparbox}
\usepackage{array}
\newsavebox{\tempbox}
\newcolumntype{Q}[1]{>{\begin{lrbox}{\tempbox}}%
c<{\end{lrbox}\eqparbox{#1}{\unhcopy\tempbox}}}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{@{}lQ{oct}Q{nov}Q{dec}@{}}
\toprule
& \multicolumn{3}{c}{Sales (in millions)} \\
\cmidrule{2-4}
Product &
\multicolumn{1}{c}{October} &
\multicolumn{1}{c}{November} &
\multicolumn{1}{c}{December} \\
\midrule
Widgets & 55.2 & 89.2 & 57.9 \\
Doohickeys & 65.0 & 64.1 & 9.3 \\
Thingamabobs & 10.4 & 8.0 & 109.7 \\
\bottomrule
\end{tabular}
\end{document}
答案2
我只是创建了多列(并使用了多列标题)。然后在表格主体内,我只需要替换&
-> &&
; 而不需要输入太多内容。在第一行中,您可以添加一些间距命令,以确保空列不会太窄。
如果你想让你的表格主体保持非常简单,这里还有另一个技巧:
\newcommand{\filler}{\hspace{2em}}
\begin{tabular}{r@{\filler}r@{\filler}r@{\filler}}
\multicolumn{1}{c}{Long heading} &
\multicolumn{1}{c}{Long heading} &
\multicolumn{1}{c}{Long heading} \\
1 & 2 & 123 \\
111 & 12 & 23 \\
21 & 2 & 3 \\
1 & 22 & 13
\end{tabular}