siunitx 表格中的 S 列:我可以在一列中组合科学计数法和十进制数吗?

siunitx 表格中的 S 列:我可以在一列中组合科学计数法和十进制数吗?

我有一张表,其中的值从统计软件导出,其中值的格式如下(见下面的示例):

有些(非常小的)采用科学计数法,有些则采用“正常”十进制计数法。

\begin{tabular}{r}
3,158722 \\
-0,00061 \\
6,28E-05 \\
0,000303 \\
1,67E-04 \\
0,000175 \\
-0,00017 \\
0,000025 \\
-0,00012 \\
-7,7E-05 \\
-0,00042 \\
-0,0005 \\
0,128871 \\
-0,00689 \\
0,004255 \\
-0,00245 \\
0,010475 \\
0,007083 \\
0,000852 \\
0,004583 \\
-0,00042 \\
0,002032 \\
-0,00111 \\
0,000556 \\
12,53887 \\
0,0024 \\
-0,00387 \\
0,002836 \\
-0,00052 \\
-0,00022 \\
5,41E-05 \\
-0,00063 \\
3,17E-04 \\
0,000187 \\
-0,08153 \\
-0,07881 \\
0,316826 \\
0,001066 \\
0,009783 \\
-0,02701 \\
0,006054 \\
0,004167 \\
\end{tabular}%
  • 我如何定义有意义的数字格式?
  • 是否可以siunitx将十进制和科学计数法合并到一列中?
    如果可以,我该如何定义何时使用科学计数法,何时不使用?

答案1

虽然siunitx它擅长对齐一系列类似格式的数字,但它不太适合这种混合输入。我最初的想法是

\documentclass{article}
\usepackage{siunitx}

    \begin{document}
    \begin{tabular}{S[table-format = -1.6e1, table-align-exponent = false]}
    3,158722 \\
    -0,00061 \\
    6,28E-05 \\
    0,000303 \\
    1,67E-04 \\
    0,000175 \\
    -0,00017 \\
    0,000025 \\
    -0,00012 \\
    -7,7E-05 \\
    -0,00042 \\
    -0,0005 \\
    0,128871 \\
    -0,00689 \\
    0,004255 \\
    -0,00245 \\
    0,010475 \\
    0,007083 \\
    0,000852 \\
    0,004583 \\
    -0,00042 \\
    0,002032 \\
    -0,00111 \\
    0,000556 \\
    12,53887 \\
    0,0024 \\
    -0,00387 \\
    0,002836 \\
    -0,00052 \\
    -0,00022 \\
    5,41E-05 \\
    -0,00063 \\
    3,17E-04 \\
    0,000187 \\
    -0,08153 \\
    -0,07881 \\
    0,316826 \\
    0,001066 \\
    0,009783 \\
    -0,02701 \\
    0,006054 \\
    0,004167 \\
    \end{tabular}
    \end{document}

但这样右边距就会有太多空间。也许需要一个新的选项来siunitx处理这种情况。

一种替代方法是使用类似于dcolumn包的策略,使,E在数学模式下处于活动状态:

\documentclass{article}
\usepackage{array}
\newbox\tabboxa
\newbox\tabboxb
\newcommand*\tabalignstart{%
  \setbox\tabboxa=\hbox{$-1$}%
    \setbox\tabboxa=\hbox to \wd\tabboxa
      \bgroup
        $
        \lccode`\~=`\,\relax
        \mathcode`\,="8000%
        \lowercase{\def~}%
          {%
              $%
            \egroup
            \setbox\tabboxb=\hbox
              \bgroup
                $
                \lccode`\~=`\E\relax
                \mathcode`\E="8000%
                \lowercase{\def~}####1####2####3%
                  {\times 10^{####1####3}}%
                  .
          }%
        \hfill
}
\newcommand*\tabalignstop{%
    $
    \hfil
  \egroup
  \box\tabboxa
  \box\tabboxb
}

    \begin{document}
    \begin{tabular}{>{\tabalignstart}l<{\tabalignstop}}
    3,158722 \\
    -0,00061 \\
    6,28E-05 \\
    0,000303 \\
    1,67E-04 \\
    0,000175 \\
    -0,00017 \\
    0,000025 \\
    -0,00012 \\
    -7,7E-05 \\
    -0,00042 \\
    -0,0005 \\
    0,128871 \\
    -0,00689 \\
    0,004255 \\
    -0,00245 \\
    0,010475 \\
    0,007083 \\
    0,000852 \\
    0,004583 \\
    -0,00042 \\
    0,002032 \\
    -0,00111 \\
    0,000556 \\
    12,53887 \\
    0,0024 \\
    -0,00387 \\
    0,002836 \\
    -0,00052 \\
    -0,00022 \\
    5,41E-05 \\
    -0,00063 \\
    3,17E-04 \\
    0,000187 \\
    -0,08153 \\
    -0,07881 \\
    0,316826 \\
    0,001066 \\
    0,009783 \\
    -0,02701 \\
    0,006054 \\
    0,004167 \\
    \end{tabular}
    \end{document}

当然,问题在于没有数字分隔符。

相关内容