我有一张如下的表格:
其代码为:
\documentclass{article}
\usepackage{siunitx}
\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\begin{table}[]
\centering
\begin{tabular}{cSSSSSc}
\toprule
\multirow{2}{*}{One} & \multicolumn{5}{l}{\num{2018}Year~\num{0}\num{7}Month~\num{0}\num{9}Day to~\num{2018}Year~\num{0}\num{7}Month~\num{13}day cheak results(\unit{\mg\per\liter})} & \multirow{2}{*}{Weather} \\ \cmidrule{2-6}
& $\text{COD}_\text{cr}$ & $\text{BOD}_\text{5}$ & NT &TP& SS \\
\midrule
1 & 73 & 22.3 & 21.4 & 3.7 & 52 & sun \\
2 & 69 & 18.9 & 11 & 1.3 & 28 & sun \\
3 & 80 & 29.1 & 10.8 & 1.3 & 37 & sun \\
4 & 78 & 26 & 10.8 & 1.4 & 30 & sun \\
5 & 72 & 19.4 & 10.4 & 1 & 33 & sun \\
average & 74.4 & 23.1 & 12.8 & 1.7 & 36
& \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
有几个地方我想改一下:
- 第 2 列至第 6 列未分布
- 第2列至第6列,数字和字符未居中
- 根据上面的1和2,我想让数字与小数对齐。
我应该如何改变我的代码来实现这些功能?
答案1
LaTeX 表格环境基于\halign
TeX 基元,\multiclumn
宏可扩展到所需数量的\omit\span
基元,从而省略(忽略)列声明并跨越更多列。\halign
基元的工作步骤更多。首先,它将所有表格项目保存在盒子中。然后,它测量每列盒子的最大宽度(第 i 列的 w_i),接下来它重新计算每列所有盒子的宽度,以便它们具有 w_i(使用\hbox to w_i
)。最后,它将盒子逐行放入外部垂直列表。如果有一个保存的盒子 B 的\omit\span
宽度为 w(假设它从第 i 列跨越到第 j 列),则 TeX 会执行以下操作:如果 w<w_i+...+w_j,则将盒子 B 重新计算为 w_i+...+w_j 宽度。如果 w>w_i+...+w_j,则将 w_j 扩大至 w=w_i+...+w_j。您的表格中发生了这种情况:表格标题比 w_2+...+w_6 宽。您无法更改 TeX 的这种硬连线行为。
最好的解决方案是使用较短的表头,正如 Mico 所建议的那样。或者您可以手动或通过智能宏向选定的列添加空格。
我不知道有自动解决方案可以将 w-(w_i+...+w_j) 按比例分配给 w_i,...,w_j 值。请记住,这项任务通常非常复杂:可以有更多框,它们跨越更多列,每个框跨越具有非空交集的不同列集。哪个框是将其宽度传播到列的“主框”?哪些列应该扩大?
答案2
这是一个可能的解决方案。
\documentclass{article}
\usepackage{siunitx,booktabs,multirow}
\begin{document}
\begin{table}
\centering
\begin{tabular}{@{} l
*{3}{S[table-format=2.1]}
S[table-format=1.1]
S[table-format=2.0]
c @{}}
\toprule
\multirow{2}{*}{One}
& \multicolumn{5}{@{}c@{}}{2018-07-09 to 2018-07-13
(\unit[per-mode=symbol]{\mg\per\liter})}
& \multirow{2}{*}{Weather} \\
\cmidrule(lr){2-6}
& {$\textnormal{COD}_{\textnormal{cr}}$}
& {$\textnormal{BOD}_{\textnormal{5}}$}
& {NT} & {TP} & {SS} \\
\midrule
1 & 73 & 22.3 & 21.4 & 3.7 & 52 & sun \\
2 & 69 & 18.9 & 11 & 1.3 & 28 & sun \\
3 & 80 & 29.1 & 10.8 & 1.3 & 37 & sun \\
4 & 78 & 26 & 10.8 & 1.4 & 30 & sun \\
5 & 72 & 19.4 & 10.4 & 1 & 33 & sun \\
\addlinespace
average & 74.4&23.1 & 12.8 & 1.7 & 36 & \\
\bottomrule
\end{tabular}
\end{table}
\end{document}