![siunitx 每种模式和 s 列中的数学运算](https://linux22.com/image/330083/siunitx%20%E6%AF%8F%E7%A7%8D%E6%A8%A1%E5%BC%8F%E5%92%8C%20s%20%E5%88%97%E4%B8%AD%E7%9A%84%E6%95%B0%E5%AD%A6%E8%BF%90%E7%AE%97.png)
我正在尝试使用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}}
。
然后我对你的表格做了一些修改:
我引入了一种新的列类型
L
,这样您就不必为每个单元格重复数学模式。由此可见,您必须处理可能不同的标题。在这里,我只是选择使用命令\text
,但也可以使用\multicolumn
。因为给定的标题是德语,以及给定的键
siunitx
使用翻译值,所以我假设您想要产生德语结果。只需设置 就可以更轻松地完成locale=DE
。但是,通过根据活动语言选择适当的设置,可以更巧妙地完成。为此,我已将语言english
和添加ngerman
到\documentclass
并添加了babel
包。然后,您可以使用命令将 s 添加locale
到语言中\addto
(请查看下面的代码)。(您可以通过取消注释该\selectlanguage
行来测试它。)最后,我将
\cite
s 移至单独的列,并使用另一个\multicolumn
命令将标题置于两列上方的中心。为了实现这一点,我只在两列之间设置了所需的空间,我使用了表达式@{...}
“消除列间空白,并用花括号之间的内容替换它“。在这种情况下,我使用空格@{~}
,但也可以采用任何其他生成空格的命令。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}