siunitx 每种模式和 s 列中的数学运算

siunitx 每种模式和 s 列中的数学运算

我正在尝试使用siunitx s-columnper-mode = reciprocal作为单位列,但希望将单位乘以幂。如果有本机方法可以使用来执行此操作,siunitx我错过了,因此我改用标准数学。似乎 -columns意味着数学模式,因此我在单位后立即输入幂\cubic\meter\per\mole \times10^{-5}。这可以正常工作(尽管感觉有点不礼貌),但是在同一个表的所有其他行中,都尊重per-mode的 -setting reciprocal,在具有额外数​​学运算的单元格中, 的\per排版为fraction/当我删除数学运算时,它被正确排版reciprocal^-1

siunitx如果我不想引入另一列,那么正确的方法是什么,因为由于双列纸质文档布局,水平空间已经非常有限?

完整的表格如下:来自序言的相关加载包和选项:

\documentclass[a4paper, 10pt, twocolumn]{scrartcl}
\usepackage{siunitx}
    \sisetup{
        per-mode = symbol,
        output-decimal-marker = {.},
        list-final-separator = { und },
        list-pair-separator = { und },
        range-phrase = { bis },
        separate-uncertainty = true
    }
\usepackage{csquotes}
\usepackage{booktabs}

\begin{document}
\begin{table}[htbp]
    \centerline{
        \begin{tabular}{
            l
            s[table-unit-alignment=left, per-mode=reciprocal]
            S[table-format=3.3(2)]
            S[{table-format=3.3, table-space-text-post=~[0]}]
        }
            \toprule
                                    &                                           & {Experiment}      & {Literatur} \\
            \midrule
            \( p_\mathrm{c} \)      & \bar                                      &  37.3  +-  0.5    &  37.59    ~\cite{DeanLange}           \\
            \( V_\mathrm{c,mol} \)  & \cubic\centi\meter\per\mole               & 238    +- 32      & 198.05    ~\cite{BrakerAllen}     \\
            \( T_\mathrm{c} \)      & \degreeCelsius                            &  47    +-  1      &  45.6     ~\cite{Merck}               \\
            \( K_\mathrm{c} \)      &                                           &   3.00 +-  0.32   &   3.56                                \\
            \( a \)                 & \pascal\meter\tothe{6}\per\mole\tothe{2}  &   0.8  +-  0.53   &  78.57    ~\cite{ReidPrausnitzPoling} \\
            \( b \)                 & \cubic\meter\per\mole \times10^{-5}       &  88.5  +-  0.47   &   9.795   ~\cite{ReidPrausnitzPoling} \\
            \bottomrule
        \end{tabular}
    }
\end{table}
\end{document}

有问题的列是第二列,有问题的单元格在最后一行。具体来说\cubic\meter\per\mole \times10^{-5}

(是的,实验值完全是无稽之谈,我们还没有测量。仅供参考,该测量是关于六氟化硫的范德华气体行为。)

答案1

首先,您的主要问题是\times 10^{-5}。我认为您混淆了s此处的列,因为您输入了 无法处理的内容siunitx。因此,我认为siunitx退出了s模式,因此此单元格的处理方式类似于将其括起来{...}。(提示一下,您可以只输入一个虚拟行\cubic\meter\per\mole,它将得到正确处理,但是当您在它之后添加 时a,您会看到输出切换回模式per,该模式在列“外部”有效s。也许这是一个错误,列仍在正确解释单位内容(因此没有用 标记它\si)。当 Joseph 查看问题时,我们将会看到 ;))

因此,我认为正确的方法是s通过用括号括住单元格来退出该列,并在其中输入所需的内容,即{\SI{e5}{\cubic\metre\per\mole}}

然后我对你的表格做了一些修改:

  1. 我引入了一种新的列类型L,这样您就不必为每个单元格重复数学模式。由此可见,您必须处理可能不同的标题。在这里,我只是选择使用命令\text,但也可以使用\multicolumn

  2. 因为给定的标题是德语,以及给定的键siunitx使用翻译值,所以我假设您想要产生德语结果。只需设置 就可以更轻松地完成locale=DE。但是,通过根据活动语言选择适当的设置,可以更巧妙地完成。为此,我已将语言english和添加ngerman\documentclass并添加了babel包。然后,您可以使用命令将 s 添加locale到语言中\addto(请查看下面的代码)。(您可以通过取消注释该\selectlanguage行来测试它。)

  3. 最后,我将\cites 移至单独的列,并使用另一个\multicolumn命令将标题置于两列上方的中心。为了实现这一点,我只在两列之间设置了所需的空间,我使用了表达式@{...}消除列间空白,并用花括号之间的内容替换它“。在这种情况下,我使用空格@{~},但也可以采用任何其他生成空格的命令。

  4. 2我已将第一列的小数位数更正为S。至少对于给定的 MWE,这是给定的最大数字。

最后我想指出的是,你可以利用cellspace包(已存在于以下代码中)来“扩大”具有“大”内容的单元格的间距,例如具有下标和上标的数学符号。要使用它,只需将行替换\newcolumntype{L}{>{$}l<{$}}\newcolumntype{L}{>{$}Cl<{$}}。(有关更多详细信息,请查看cellspace手动的


\documentclass[
    a4paper,
    10pt,
    twocolumn,
    english,ngerman,
        ]{scrartcl}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{array}
\usepackage{booktabs}
    \newcolumntype{L}{>{$}l<{$}}
\usepackage{cellspace}
    \addtolength\cellspacetoplimit{2pt}
    \addtolength\cellspacebottomlimit{2pt}
\usepackage{siunitx}
    \sisetup{
        per-mode = symbol,
        separate-uncertainty = true,
    }
    % add appropriate `locale' values to the corresponding languages
    \addto\extrasenglish{\sisetup{locale = UK}}
    \addto\extrasngerman{\sisetup{locale = DE}}
\begin{document}
%    \selectlanguage{english}
\begin{table}[htbp]
        \newcommand*\mc[1]{\multicolumn{2}{c}{#1}}
    \centerline{
        \begin{tabular}{
            L
            s[table-unit-alignment=left, per-mode=reciprocal]
            S[table-format=3.2(2)]
            S[table-format=3.3]
            @{~}l
        }
                \toprule
            \text{Symbol}     & {Einheit}                                 & {Experiment}      & \mc{Literatur} \\
                \midrule
            p_\mathrm{c}      & \bar                                      &  37.3  +-  0.5    &  37.59    & \cite{DeanLange}           \\
            V_\mathrm{c,mol}  & \cubic\centi\meter\per\mole               & 238    +- 32      & 198.05    & \cite{BrakerAllen}     \\
            T_\mathrm{c}      & \degreeCelsius                            &  47    +-  1      &  45.6     & \cite{Merck}               \\
            K_\mathrm{c}      &                                           &   3.00 +-  0.32   &   3.56                                \\
            a                 & \pascal\meter\tothe{6}\per\mole\tothe{2}  &   0.8  +-  0.53   &  78.57    & \cite{ReidPrausnitzPoling} \\
            b                 & {\SI{e5}{\cubic\meter\per\mole}}          &  88.5  +-  0.47   &   9.795   & \cite{ReidPrausnitzPoling} \\
                \bottomrule
        \end{tabular}
    }
\end{table}
\end{document}

该图显示了上述代码的结果

相关内容