使用命令中存储的小数位数在 siunitx 表中进行对齐

使用命令中存储的小数位数在 siunitx 表中进行对齐

考虑以下示例。

\documentclass{article}

\usepackage[locale = DE]{siunitx}
\usepackage{booktabs}


\begin{document}

\def\accuracy{2}

\begin{table}
 \centering
  \begin{tabular}{
    S[table-format = 1]
    S[table-format = 1.\accuracy]
    S[table-format = 2.\accuracy]
  }
   \toprule
      {Time, $x$}
    & {Erosion per year, $g(x)$}
    & {Erosion in total, $h(x)$} \\[0.75ex]
      {Year}
    & {\unit{\m}}
    & {\unit{\m}} \\
   \midrule
     1 & 2.25 &  2.25 \\
     2 & 3.14 &  5.39 \\
     3 & 4.98 & 10.37 \\
   \bottomrule
  \end{tabular}
\end{table}

\end{document}

输出

当我使用中定​​义的值\accuracy作为第二列和第三列对齐的小数位数指标时,对齐相当于小数点后 1 位而不是 2 位。我做错了什么,该如何解决?

当我\accuracy以-column2格式替换时S,一切都正常。

PS 我在其他地方使用相同数量的小数;这就是我将值存储在中的原因\accuracy

答案1

虽然我不认为这是一个彻头彻尾的错误,但显然它并不理想:在其他地方,表格单元格在检查数字之前就被展开了。因此,我将进行调整table-format以对此进行排序。目前,您可以添加

\ExplSyntaxOn
\makeatletter
\keys_define:nn { siunitx }
  {
    table-format .code:n =
      {
        \group_begin:
          \protected@edef \l__siunitx_table_tmp_tl {#1}
        \exp_args:NNV \group_end:
        \__siunitx_table_split:nNNN \l__siunitx_table_tmp_tl
          \l__siunitx_table_before_model_tl
          \l__siunitx_table_model_tl
          \l__siunitx_table_after_model_tl
        \exp_args:NV \__siunitx_table_generate_model:n \l__siunitx_table_model_tl
        \tl_set:Nn \l__siunitx_table_align_mode_tl { format }
      }
  }
\makeatother
\ExplSyntaxOff

到您的来源。

更新

代码已添加到siunitx自版本 3.0.14 起的软件包;请参阅https://www.ctan.org/ctan-ann/id/[电子邮件保护]

答案2

问题在于扩张。siunitxtable-format在解析时不会完全展开 的值。您可以在将其传递给 之前对其进行展开,然后一切正常(您必须注意,在 的参数中,通过或siunitx保护表读取其前导码之前不应展开的任何内容):\noexpand\unexpanded{<things>}\expanded

\documentclass{article}

\usepackage[locale = DE]{siunitx}
\usepackage{booktabs}


\begin{document}

\def\accuracy{2}

\begin{table}
 \centering
  \expanded{\noexpand\begin{tabular}{
    S[table-format = 1]
    S[table-format = 1.\accuracy]
    S[table-format = 2.\accuracy]
  }}
   \toprule
      {Time, $x$}
    & {Erosion per year, $g(x)$}
    & {Erosion in total, $h(x)$} \\[0.75ex]
      {Year}
    & {\unit{\m}}
    & {\unit{\m}} \\
   \midrule
     1 & 2.25 &  2.25 \\
     2 & 3.14 &  5.39 \\
     3 & 4.98 & 10.37 \\
   \bottomrule
  \end{tabular}
\end{table}

\end{document}

在此处输入图片描述

相关内容