我搜索过这个网站并且用 Google 进行了大量搜索,但没有找到解决我的问题的确切方法。
我想创建一个宽度相等(且自动)的表格列。这些列包含数值,这些数值应在小数点处对齐。在每一列中,整数块应相对于该列居中。
我尝试使用带有 table-number-alignment=center 选项的包S
的列siunitx
,并使用 table-format=nm 进行尝试,但是,这仅在所有列中至少出现一次具有 +n 个整数或 m 个小数位的数字时才有效。下面是我的努力的一个简短示例,垂直线仅用于可视化:
\documentclass{article}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{siunitx}
\begin{document}
\begin{table}\small
\centering
\sisetup{
table-number-alignment = center,
table-format=+2.3
}
\begin{tabularx}{\textwidth}{
@{}c|*{7}{S|}@{}
}
\toprule
Text & aa & bb & cc & ff & gg & hh & kk \\
\midrule
Text & 1 & 0.115 & 0.086 & 1.41 & 0.23 & 0.092 & 6.82 \\
Text & -32 & 5.3 & -36 & 0.01 & 50.1 & 0.7 & -18.8 \\
\bottomrule
\end{tabularx}
\caption{Example}
\end{table}
\end{document}
列cc
看起来应该如此,因为它符合 +2.3 的数字格式,而列bb
或hh
看起来有些奇怪。我也希望这些数字居中。使用该siunitx
包是否可以获得所需的外观?
答案1
目前无法自动设置table-format
。要设置以保持对齐,必须知道要保留多少空间。这取决于列中的所有条目,而不仅仅是当前的条目。因此,要自动设置,table-format
需要对整个表格的构造方式进行一些重大更改。由于该S
列旨在与一系列类似 LaTeX 的实现一起使用tabular
,因此这并不是真正理想的。因此,您必须根据每列设置格式。
答案2
根据约瑟夫的回答,这里有一种用表格填充线宽的方法:
\documentclass{article}
\usepackage{booktabs}
\usepackage{widetable}
\usepackage{siunitx}
\begin{document}
\begin{table}\small
\centering
\sisetup{table-number-alignment = center}
\begin{widetable}{\textwidth}{
c
S[table-format=+2.0]
S[table-format=1.3]
S[table-format=+2.4]
S[table-format=1.2]
S[table-format=2.2]
S[table-format=1.3]
S[table-format=+2.2]
}
\toprule
Text & aa & bb & cc & ff & gg & hh & kk \\
\midrule
Text & 1 & 0.115 & 0.086 & 1.41 & 0.23 & 0.092 & 6.82 \\
Text & -32 & 5.3 & -36 & 0.01 & 50.1 & 0.7 & -18.8 \\
\bottomrule
\end{widetable}
\caption{Example}
\end{table}
\end{document}
这宽表包克服了tabular*
环境的一些问题。我原以为它不适用于S
列,我错了。widetable
环境的工作方式与类似tabular*
,增加了列间空间,这正是这里所需要的。
答案3
受到 @egreg 的回答的启发,我自己想出了一个解决方案。在发布代码之前,我可能应该澄清一下,在我最初的问题中对我来说很重要的一点是 siunitx 列的宽度相等。不幸的是,我写的是“等距列”,而不是“宽度相等的列”。
widetable 包解决方案不提供等宽列。我改用 tabu 包,因为这显然允许在 tabu X 列中嵌入 S 列。正如 @Joseph 指出的那样,格式必须基于每列进行设置。
\documentclass{article}
\usepackage{booktabs}
\usepackage{tabu}
\usepackage{siunitx}
\begin{document}
\begin{table}\footnotesize
\centering
\sisetup{table-number-alignment = center}
\begin{tabu} to \textwidth {
c|
X[c]{S[table-format=+2]}|
X[c]{S[table-format=1.3]}|
X[c]{S[table-format=+2.3]}|
X[c]{S[table-format=1.2]}|
X[c]{S[table-format=2.2]}|
X[c]{S[table-format=1.3]}|
X[c]{S[table-format=+2.2]}|
}
\toprule
Text & aa & bb & cc & ff & gg & hh & kk \\
\midrule
Text & 1 & 0.115 & 0.086 & 1.41 & 0.23 & 0.092 & 6.82 \\
Text & -32 & 5.3 & -36 & 0.01 & 50.1 & 0.7 & -18.8 \\
\bottomrule
\end{tabu}
\caption{Example}
\end{table}
\end{document}