我想生成一个看起来大致(不一定)像的表格
如果你对这种数据表示有任何建议,请随时告诉我们。到目前为止,我想出了
\documentclass[12pt]{book}
\usepackage{booktabs}
\usepackage{caption}
\usepackage{siunitx}
\begin{document}
\begin{table}[h!]
\centering
\captionsetup
{
singlelinecheck = off,
justification = raggedright,
labelfont = bf,
}
\begin{minipage}[b]{1.0\linewidth}
\caption{ABC}%
\begin{tabular}{@{}l SSSSSSSSS }
\toprule
& \multicolumn{2}{l}{2010} & \multicolumn{2}{l}{2011} & \multicolumn{2}{l}{2012} & \multicolumn{2}{l}{2013} \\
\cmidrule{2-9}
Name & {bil}~\$ & \% & {bil}~\$ & \% & {bil}~\$ & \% & {bil}~\$ & \% \\
\midrule
{Aaaaaaaaaaaa} & 20 456 & 1.2 & 20150 & 90.5 & 20150 & 90.5 & 20150 & 90.5 \\
{Bbbbbbb} & 5 256 & 21.3 \\
{Ccccccc} & 58 & 0.5 \\
{Dddd} & 125 000\\
{Eeeeeeeeeee} & \\
{FFFFFF} & \\
{ggggggg} & \\
\bottomrule
$\sum$ & \\
\bottomrule
\end{tabular}
\medskip \noindent Reference: John Johnson
\label{1111}
\end{minipage}
\end{table}
\end{document}
不幸的是,这会导致两个问题:
它没有将数据条目居中,也没有将列名称“year”、“bil $”和“%”居中
表格太宽。我是否应该减小表格中的字体大小,或者有更好的办法吗?
编辑:另一个代码
\documentclass[12pt]{book}
\usepackage{booktabs}
\usepackage{caption}
\usepackage{siunitx}
\begin{document}
\begin{tabular}{ccccccccccccccc}
\toprule
\multicolumn{1}{l}{} &
\multicolumn{2}{c}{2010} &
\multicolumn{2}{c}{2011} &
\multicolumn{2}{c}{2012} &
\multicolumn{2}{c}{2013} \\
\cmidrule(lr){2-3}
\cmidrule(lr){4-5}
\cmidrule(lr){6-7}
\cmidrule(lr){8-9}
&
\multicolumn{1}{c}{bil~\$} &
\multicolumn{1}{c}{\%} &
\multicolumn{1}{c}{bil~\$} &
\multicolumn{1}{c}{\%} &
\multicolumn{1}{c}{bil~\$} &
\multicolumn{1}{c}{\%} &
\multicolumn{1}{c}{bil~\$} &
\multicolumn{1}{c}{\%} \\
\midrule
{Aaaaaaaaaaaa} & 20 456 & 1.2 & 20 456 & 1.2 & 20 456 & 1.2 & 20 456 & 1.2 \\
{Bbbbbbb} & 5 256 & 21.3 & 5 256 & 21.3& 5 256 & 21.3& 5 256 & 21.3 \\
{Ccccccc} & 58 & 0.5 & 58 & 0.5& 58 & 0.5& 58 & 0.5 \\
{Dddd} & 125 000 \\
{Eeeeeeeeeee} & \\
{FFFFFF} & \\
{ggggggg} & \\
\bottomrule
{$\sum$} \\
\bottomrule
\end{tabular}
\end{document}
enter code here
答案1
我不是这个领域的专家,但这里有一个解决方法。
- 首先,为了避免表格宽度过大,你可以告诉
siunitx
那些列应该是什么。*{4}{…}
只是为了避免写四次相同的内容。 和S[table-format = 5.0, group-minimum-digits = 3] S[table-format = 2.1]
意味着第一列的数字在逗号前有 5 位数字,逗号后没有数字,第二列的数字在逗号前有两位数字,在逗号后有一位数字。group-minimum-digits = 3
,正如 egreg 所建议的, 指示siunitx
添加一个空间每三位数字后(即使数字只有 4 位数字)。 - 要使单元格居中,您必须将它们括在里面
{}
(参见siunitx
文档)。
这是代码。
\documentclass{scrbook}
\usepackage{booktabs}
\usepackage{caption}
\usepackage{siunitx}
\begin{document}
\begin{table}[h!]
\centering
\captionsetup{
singlelinecheck = off,
justification = raggedright,
labelfont = bf,
}
\begin{minipage}[b]{1.0\linewidth}
\caption{ABC}%
\begin{tabular}{@{}l *{4}{S[table-format = 5.0, group-minimum-digits = 3] S[table-format = 2.1]} }
\toprule
& \multicolumn{2}{c}{2010} & \multicolumn{2}{c}{2011} & \multicolumn{2}{c}{2012} & \multicolumn{2}{c}{2013} \\
\cmidrule(lr){2-3}\cmidrule(lr){4-5}\cmidrule(lr){6-7}\cmidrule(lr){8-9}
Name & {bil \$} & {\%} & {bil \$} & {\%} & {bil \$} & {\%} & {bil \$} & {\%} \\
\midrule
Aaaaaaaaaaaa & 20 456 & 1.2 & 20150 & 90.5 & 20150 & 90.5 & 20150 & 90.5 \\
Bbbbbbb & 5256 & 21.3 \\
Ccccccc & 58 & 0.5 \\
Dddd & 125 000\\
Eeeeeeeeeee & \\
FFFFFF & \\
ggggggg & \\
\bottomrule
$\sum$ & \\
\bottomrule
\end{tabular}
\medskip \noindent Reference: John Johnson
\label{1111}
\end{minipage}
\end{table}
\end{document}