如果 retain-unity-mantissa 为 false,siunitx 的 S 列将错位数字

如果 retain-unity-mantissa 为 false,siunitx 的 S 列将错位数字

考虑一下这个MWE:

\documentclass{article}

\usepackage{amsmath}
\usepackage{booktabs}
\usepackage{siunitx}

\begin{document}
\begin{tabular}{l @{\hskip+0.5em} S[retain-unity-mantissa = false]}
    \toprule
    Force           & \multicolumn{1}{c}{Relative Strength} \\
    \midrule
    Strong          & 1                                     \\
    Electromagnetic & 1e-3                                  \\
    Weak            & 1e-8                                  \\
    Gravity         & 1e-37                                 \\
    \bottomrule
\end{tabular}
\end{document}

产生

糟糕的结果

显然数字没有正确对齐。是我使用siunitx不当还是这是一个错误?如果是这样,有人能想出解决办法吗?

答案1

这确实超出了范围siunitx(因为没有小数部分)。当然应该解决这个问题,但目前最好的解决方案可能是低级解决方案。例如,如果我们可以假设我们可以通过拾取分隔符来获取单元格内容,\\那么

\documentclass{article}
\usepackage{array,booktabs}
\newlength\mylength
\AtBeginDocument{\settowidth\mylength{$10^{-37}$}}
\newcommand*\autoexp{}
\def\autoexp\ignorespaces#1\\{\autoexpaux#1e\stop\\}
\newcommand\autoexpaux{}
\def\autoexpaux#1e#2\stop{%
  \setbox0=\hbox to \mylength{%
    $
    \ifx\relax#2\relax
      #1
    \else
      \ifnum#1=1 %
      \else
        \times
      \fi
      \autoexpauxii#2\stop
    \fi
    $%
    \hfil
  }%
  \hfil\box0\hfil
}
\newcommand\autoexpauxii{}
\def\autoexpauxii#1e#2\stop{10^{#1}}
\begin{document}

\begin{tabular}{@{}l>{\autoexp}l@{}}
    \toprule
    Force           & \multicolumn{1}{l}{Relative Strength\hspace*{-\tabcolsep}} \\
    \midrule
    Strong          & 1                                     \\
    Electromagnetic & 1e-3                                  \\
    Weak            & 1e-8                                  \\
    Gravity         & 1e-37                                 \\
    \bottomrule
\end{tabular}
\end{document}

输出

会起作用。这里的想法是抓取单元格内容,然后进行快速解析:如果有部分e,则使用该部分,但删除任何前导部分1,如果没有,则e直接使用它。所有内容都被装箱成宽度等于(硬编码)最宽列的宽度,然后该框被正确放置在标题下方。

可以进行改进,例如更稳健地收集细胞,允许使用不同形式的数字,ETC。,但最好还是由我在siunitx这里修复。

答案2

这种情况在包中没有处理siunitx,因为很难说应该发生什么。如果你要对齐数字,你应该将个位数与个位数对齐,将十位数与十位数对齐,将百位数与百位数对齐……对于指数符号,这会变得更加复杂,因为你将幂与普通数字混合在一起。我想,最好的解决方案是写10^0在第一行,因为这样看起来最一致。在每种情况下,你都必须手动输入。

这是您的版本,位于1第二行(没有像您的评论中那样左对齐,因为这看起来确实令人困惑):

% arara: pdflatex

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}

\begin{document}
    \begin{tabular}{l @{\hskip+0.5em} S[table-format = 2.0, table-space-text-post =\textsuperscript{$-37$}]}
        \toprule
        Force           & {Relative Strength}       \\
        \midrule
        Strong          & 1                         \\
        Electromagnetic & 10\textsuperscript{$-3$}  \\
        Weak            & 10\textsuperscript{$-8$}  \\
        Gravity         & 10\textsuperscript{$-37$} \\
        \bottomrule
    \end{tabular}
\end{document}

在此处输入图片描述

相关内容