\ch
编辑(补充): chemmacros 包提供的所有用例(环境和命令)中的行为都是相同的。
在 chemmacros环境中,我尝试将反应箭头顶部给定温度范围的reactions
“to”或德语“bis”切换为“ --
” 。\SIrange
已加载
\usepackage{chemmacros}
% includes \usepackage{chemformula}
\usechemmodule{all}
\chemsetup{
%
language=auto,
%
charges/circled = all,
%
redox/parse = false,
%
redox/pos = top,
%
formula=chemformula
%
}
我试过
\begin{reactions}
A &->[\SI{200}{\degreeCelsius}] C+ 3 C ^ \\
2 D + C &->[\SIrange[range-units=single,range-phrase = -- ]{200}{300}{\degreeCelsius}] 2 E ^ + F
\end{reactions}
并得到一堆错误。第一个是“ Package siunitx Error: Unknown option 'range-phrase\tl_use:N
”没有行号,后面是“ Package siunitx Error: Invalid token '\chemformula ' in numerical input. \end
”和“ Package siunitx Error: Invalid numerical input '\chemformula_subscript:n(siunitx) {0}\chemformula_subscript:n {0}'. \end
”引用“ ”的行\end{reactions}
。接下来的大多是指缺少或太多“ }
”。
所以我尝试了同样的结果
\begin{reactions}
\sisetup{
range-units=single,
range-phrase = -- ,
} %
A &->[\SI{200}{\degreeCelsius}] C+ 3 C ^ \\
2 D + C &->[\SIrange{200}{300}{\degreeCelsius}] 2 E ^ + F
\end{reactions}
如果没有
range-phrase = -- ,
选项语句在两种情况下,一切都进行得很顺利。
也许这只是一个拼写错误?但是range-phrase
查阅了 siunitx 手册。因此,我对第一个错误语句(“ Unknown option 'range-phrase
”)感到疑惑。
编辑(补充):在equation
– 和eqnarray
– 环境中尝试过:相同情况。
使用的环境是实际的 MikTex。
关于如何设置该范围短语选项有什么想法吗?
编辑(补充):喜欢上一个问题chemmacros github。
答案1
让我们看看问题出在哪里。环境中的几乎所有东西都和直接放入中reactions
一样。(几乎因为或 之类的东西在这里需要以不同的方式工作……)。现在让我们看以下示例:chemformula
\ch
&
\\
\documentclass{article}
\usepackage{chemformula}
\begin{document}
\ch{A -- B}
\end{document}
这似乎令人惊讶,除非你仔细想想:chemformula
将其拆分为三部分:A
、--
和B
。这些都不匹配特殊输入,因此它们都被视为化合物。-
除非化合物有上标,否则化合物内部会被替换为单键。尾随部分-
被视为上标。这是为了允许以下输入:
\ch{CH3-CH2-O-}
这使
同样的情况也发生在输入如下内容时
\ch{\SIrange[range-phrase= -- ]{10}{20}{\celsius}}
\ch
看到三个复合词:\SIrange[range-phrase=
、--
和]{10}{20}{\celsius}
。现在你可能明白为什么这会导致错误了。更糟糕的是:数字被视为下标,就像数字一样\ch{H2O}
……
长话短说:如果您不想让某些内容被解析为公式,那么您需要告知chemformula
它!它有一个针对此情况的退出机制 – "..."
:
\documentclass{article}
\usepackage{chemformula,siunitx}
\begin{document}
\ch{A ->[ "\SIrange[range-phrase=--]{10}{20}{\celsius}" ] B}
\end{document}
那么这个怎么样:
\documentclass{article}
\usepackage{chemmacros}
\chemsetup{modules={reactions,units}}
\begin{document}
\begin{reactions}
"\sisetup{range-units=single,range-phrase=--}"
A &->[\SI{200}{\celsius}] C + 3 C ^ \\
2 D + C &->[\SIrange{200}{300}{\celsius}] 2 E ^ + F
\end{reactions}
\end{document}
好吧,它编译了,但没有给出所需的输出。为什么?因为reactions
在align
下面,并且align
只是一种复杂的tabular
。它们都有一个共同点,即单个表格单元格组成一个组。由于分配是本地的,因此它们在下一个或\sisetup
之后会被遗忘。&
\\
你的情况最简单的解决方案是
\documentclass{article}
\usepackage{chemmacros}
\chemsetup{modules={reactions,units}}
\begin{document}
\begin{reactions}
A &->[ "\SI{200}{\celsius}" ] C + 3 C ^ \\
2 D + C
&->[ "\SIrange[range-units=single,range-phrase=--]{200}{300}{\celsius}" ]
2 E ^ + F
\end{reactions}
\end{document}