这与我的有点不同上一个问题。
我有一张有 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}