我有一张如下所示的表格:
\documentclass{article}
\usepackage{booktabs}
\usepackage{dcolumn}
\newcolumntype{d}{D{.}{.}{2}}
\begin{document}
\begin{tabular}{l r@{\thinspace}d r@{\thinspace}d r@{\thinspace}d}
\toprule
& \multicolumn{2}{c}{Special Programs} & \multicolumn{2}{c}{Equipment Maintenance} & \multicolumn{2}{c}{General} \\
\cmidrule{2-7}
Category 1 & \$ & 15.25 & & & & \\
Category 2 & & 25.34 & & & \$ & 73.00 \\
Category 3 & & & \$ & 5.15 & & 128.16 \\
\cmidrule{3-3} \cmidrule{5-5} \cmidrule{7-7}
Totals & \$ & 40.59 & \$ & 5.15 & \$ & 201.16 \\
\bottomrule
\end{tabular}
\end{document}
这给了我如下结果:
我使用单独的列来表示美元符号和金额,以便顶部和底部的美元符号始终对齐。不幸的是,当两列标题比其下方的列宽时,额外的空间会被添加到金额列,这会导致美元符号和金额之间出现相当大的空间。
\thinspace
有没有办法重新格式化,以便美元符号距离金额文本左侧不超过一个距离?
我确实非常倾向于让 LaTeX 管理整个列的宽度,因此我宁愿不做任何涉及在任何地方对列宽进行硬编码的事情。(除其他事项外,所有表格内容(金额、类别和列名称)都是动态的。我希望有一个解决方案可以一次性放入生成程序中,而不必针对每个单独的数据集进行微调。)
答案1
该siunitx
包可以根据小数点分隔符对齐数字,并将单位保留在同一列中。在第二个表中,我还使用该makecell
包在长列标题中引入了换行符。
\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\DeclareSIUnit{\dollar}{\$}
\usepackage{makecell}
\begin{document}
\sisetup{table-space-text-pre=\si{\dollar}, table-align-text-pre=true}
\begin{tabular}{l S[table-format=2.2]S[table-format=1.2]S[table-format=3.2]}
\toprule
& {Special Programs} &{Equipment Maintenance} & {General} \\
\cmidrule{2-4}
Category 1 & \si{\dollar} 15.25 & & \\
Category 2 & 25.34 & & \si{\dollar} 73.00 \\
Category 3 & & \si{\dollar} 5.15 & 128.16 \\
\cmidrule(r){2-2} \cmidrule(lr){3-3} \cmidrule(l){4-4}
Totals & \si{\dollar} 40.59 & \si{\dollar} 5.15 & \si{\dollar} 201.16 \\
\bottomrule
\end{tabular}
\bigskip
\begin{tabular}{l S[table-format=2.2]S[table-format=1.2]S[table-format=3.2]}
\toprule
& {\makecell{Special\\ Programs}} &{\makecell{Equipment\\ Maintenance}} & {General} \\
\cmidrule{2-4}
Category 1 & \si{\dollar} 15.25 & & \\
Category 2 & 25.34 & & \si{\dollar} 73.00 \\
Category 3 & & \si{\dollar} 5.15 & 128.16 \\
\cmidrule(r){2-2} \cmidrule(lr){3-3} \cmidrule(l){4-4}
Totals & \si{\dollar} 40.59 & \si{\dollar} 5.15 & \si{\dollar} 201.16 \\
\bottomrule
\end{tabular}
\end{document}