不使用 S 列对表格中的数字进行分组

不使用 S 列对表格中的数字进行分组

这与我的有点不同上一个问题

我有一张有 7 到 8 位数字的巨大表格。

我需要在数字的三位数组之间留一个小空格。我使用了包siunitx

我想做到这一点,但不需要\SI在所有数字前面写字,也不需要S在代码中使用-column,因为我的原始表格太大了。

另外,我的表格中的某些数据每三位数字都有一个逗号,所以我想用一个小空格替换这个逗号。

这是我的代码的最简单版本:

\begin{tabular}{|l|l|l|}
\hline
x & y & z \\ 
\hline
9,833.823 & 550,245 & 15004568 \\ 
\hline
9,458.230 & 81,345.23 & 198000344 \\ 
\hline
\end{tabular}

输出

答案1

您的帖子似乎包含两个不同的问题:(i)一些宏格式,即如何将具有多行和大量多位数字的表格放入可用的文本块中,以及(ii)一些微格式,即如何将数字分组为三块(同时忽略输入中的任何逗号)以及如何在小数点标记上对齐数字。

对于您的微格式化目标,迄今为止最好的工具是siunitx包及其S列类型。熟悉它的属性确实对您最有利。如果出于某种原因您不是想要使用S列类型,您可以继续进行以下操作:(a) 用\,(thinspace) 替换所有输入逗号,(b)\,手动插入任何需要实现三块分组的地方,以及 (c) 使用大量\phantom语句实现小数点对齐。(该dcolumn软件包可让您避免采取步骤 (c)。但是,如果您不想使用列S类型,我无法想象您D也想使用列类型。)

为了实现宏格式化目标,您可以先减少列间空白量,然后局部切换到略小的字体大小。省略所有垂直线(每条垂直线都有宽度0.4pt)很有用,因为它可以节省空间,即有助于使表格适合可用的文本块,因为表格几乎肯定看起来更好,更易读没有那些垂直线。

下面的截图显示这两个目标可以同时实现。

在此处输入图片描述

\documentclass{article}
\usepackage{booktabs}  % for good-looking horizontal rules
\usepackage{siunitx}
\sisetup{input-ignore={,},
         input-decimal-markers={.},
         group-minimum-digits=4}

\begin{document}

before:

\smallskip
\begin{tabular}{|l|l|l|}
\hline
x & y & z \\ 
\hline
9,833.823 & 550,245 & 15004568 \\ 
\hline
9,458.230 & 81,345.23 & 198000344 \\ 
\hline
\end{tabular}


\bigskip
after:

\small  % 11% linear reduction in font size
\setlength\tabcolsep{4pt} % default value: 6pt
\small
\begin{tabular}{@{} S[table-format=4.3]
                    S[table-format=6.2]
                    S[table-format=9.0] @{}}
\toprule
{x} & {y} & {z} \\ 
\midrule
9,833.823 & 550,245 & 15004568 \\ 
9,458.230 & 81,345.23 & 198000344 \\ 
\bottomrule
\end{tabular}

\end{document}

相关内容