如何在具有居中数字块的表格中创建等距的列,这些列本身与小数点标记对齐?

如何在具有居中数字块的表格中创建等距的列,这些列本身与小数点标记对齐?

我搜索过这个网站并且用 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 的数字格式,而列bbhh看起来有些奇怪。我也希望这些数字居中。使用该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}

相关内容