由于我是初学者,如果我的问题措辞不当,请原谅。我在 Latex 中有一个表格,其数据最初是使用 Python 生成的。然后我使用 tablesgenerator.com 正确格式化数据并转换为 Latex 代码。
一切都很顺利。但是,现在我需要将表格中的数字四舍五入(一列保留 3 位小数,其余列保留 2 位小数)。我在网上找到了一些资源,包括之前在这个社区提出的问题。但是,我无法成功实现这些想法(尝试使用 numprint 和 siunitx)。如果有人能帮助我做到这一点,我将不胜感激。
以下是一个例子:
% Please add the following required packages to your document preamble:
% \usepackage{multirow}
\begin{table}[]
\adjustbox{max width=\textwidth}{%
\begin{tabular}{|l|rrrr|rr|rr|rr|rr|}
\hline
\multirow{3}{*}{Object} & \multicolumn{4}{c}{Scenario 1} & \multicolumn{4}{c|}{Scenario 2} & \multicolumn{4}{c|}{Scenario 3} \\ \cline{2-13}
& \multicolumn{2}{c}{Model 1} & \multicolumn{2}{c|}{Model 2} & \multicolumn{2}{c|}{Model 1} & \multicolumn{2}{c|}{Model 2} & \multicolumn{2}{c|}{Model 1} & \multicolumn{2}{c|}{Model 2} \\ \cline{2-13}
& \multicolumn{1}{c}{Stat 1} & \multicolumn{1}{c|}{Stat 2} & \multicolumn{1}{c}{Stat 1} & \multicolumn{1}{c|}{Stat 2} & \multicolumn{1}{c}{Stat 1} & \multicolumn{1}{c|}{Stat 2} & \multicolumn{1}{c}{Stat 1} & \multicolumn{1}{c|}{Stat 2} & \multicolumn{1}{c}{Stat 1} & \multicolumn{1}{c|}{Stat 2} & \multicolumn{1}{c}{Stat 1} & \multicolumn{1}{c|}{Stat 2} \\ \hline
$a$ & 49.143 & \multicolumn{1}{r|}{0.81} & 49.143 & 49.143 & 18.121 & 41.143 & 49.143 & 47.143 & 23.143 & 49.143 & 49.143 & 59.143 \\
$b$ & 52.411 & \multicolumn{1}{r|}{0.231} & 49.143 & 49.143 & 18.121 & 41.143 & 49.143 & 47.143 & 23.143 & 49.143 & 49.143 & 59.143 \\ \hline
\end{tabular}}
\end{table}
具体来说,我该如何将所有 Stat 1 列四舍五入到小数点后 2 位,并将所有 Stat 2 列四舍五入到小数点后 3 位(上表中已经是这种情况,但假设情况并非如此)?
注意:我的实际表格有数百行,因此手动编辑数字是不可能的。
感谢您的帮助!
答案1
您可以这样使用siunitx
选项table-auto-round
与 结合使用table-format
,以确定表格中的数字四舍五入和对齐的小数位数。
\multirow
我还通过删除不必要的命令并\multicolumn
在标题行中添加缺失的垂直线来简化代码。最后,我删除adjustbox
并减小了字体大小和值,\tabcolsep
以使表格不那么宽。
此外,我添加了booktabs
基于 的表格版本,其中不使用垂直线,而是使用一些水平线,间距有所改善。通过缩写长单词稍微改变第一列的标题,也可以使用稍大的字体大小,同时仍保持与第一个示例大致相同的宽度:
\documentclass{article}
\usepackage{geometry}
\usepackage{siunitx}
\usepackage{booktabs}
\begin{document}
\begin{table}
\footnotesize
\setlength{\tabcolsep}{4.75pt}
\sisetup{table-auto-round}
\begin{tabular}{|l|*{6}{S[table-format=2.2]S[table-format=2.3]|}}
\hline
& \multicolumn{4}{c|}{Scenario 1} & \multicolumn{4}{c|}{Scenario 2} & \multicolumn{4}{c|}{Scenario 3} \\ \cline{2-13}
Object & \multicolumn{2}{c|}{Model 1} & \multicolumn{2}{c|}{Model 2}
& \multicolumn{2}{c|}{Model 1} & \multicolumn{2}{c|}{Model 2}
& \multicolumn{2}{c|}{Model 1} & \multicolumn{2}{c|}{Model 2} \\ \cline{2-13}
& {Stat 1} & {Stat 2} & {Stat 1} & {Stat 2}
& {Stat 1} & {Stat 2} & {Stat 1} & {Stat 2}
& {Stat 1} & {Stat 2} & {Stat 1} & {Stat 2} \\ \hline
$a$ & 49.143 & 0.81 & 49.143 & 49.143 & 18.121 & 41.143 & 49.143 & 47.143 & 23.143 & 49.143 & 49.143 & 59.143 \\
$b$ & 52.411 & 0.231 & 49.143 & 49.143 & 18.121 & 41.143 & 49.143 & 47.143 & 23.143 & 49.143 & 49.143 & 59.143 \\ \hline
\end{tabular}
\end{table}
\begin{table}
\small
\centering
\setlength{\tabcolsep}{4.25pt}
\sisetup{table-auto-round}
\begin{tabular}{@{}l*{6}{S[table-format=2.2]S[table-format=2.3]}@{}}
\toprule
Obj. & \multicolumn{4}{c}{Scenario 1} & \multicolumn{4}{c}{Scenario 2} & \multicolumn{4}{c}{Scenario 3} \\
\cmidrule(r){2-5} \cmidrule(lr){6-9} \cmidrule(l){10-13}
& \multicolumn{2}{c}{Model 1} & \multicolumn{2}{c}{Model 2}
& \multicolumn{2}{c}{Model 1} & \multicolumn{2}{c}{Model 2}
& \multicolumn{2}{c}{Model 1} & \multicolumn{2}{c}{Model 2} \\
\cmidrule(r){2-3} \cmidrule(lr){4-5} \cmidrule(lr){6-7} \cmidrule(lr){8-9} \cmidrule(lr){10-11} \cmidrule(l){12-13}
& {Stat 1} & {Stat 2} & {Stat 1} & {Stat 2}
& {Stat 1} & {Stat 2} & {Stat 1} & {Stat 2}
& {Stat 1} & {Stat 2} & {Stat 1} & {Stat 2} \\ \midrule
$a$ & 49.143 & 0.81 & 49.143 & 49.143 & 18.121 & 41.143 & 49.143 & 47.143 & 23.143 & 49.143 & 49.143 & 59.143 \\
$b$ & 52.411 & 0.231 & 49.143 & 49.143 & 18.121 & 41.143 & 49.143 & 47.143 & 23.143 & 49.143 & 49.143 & 59.143 \\ \bottomrule
\end{tabular}
\end{table}
\end{document}