如何使 LaTeX 表格中的每列宽度相同、每列居中对齐以及每个数字按小数对齐?

如何使 LaTeX 表格中的每列宽度相同、每列居中对齐以及每个数字按小数对齐?

我有一张如下的表格:

在此处输入图片描述

其代码为:

\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}

有几个地方我想改一下:

  1. 第 2 列至第 6 列未分布
  2. 第2列至第6列,数字和字符未居中
  3. 根据上面的1和2,我想让数字与小数对齐。

我应该如何改变我的代码来实现这些功能?

答案1

LaTeX 表格环境基于\halignTeX 基元,\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}

相关内容