在 chemformula(chemmacros)命令中使用 SIrange 时无法设置“to”(范围短语)的表示选项

在 chemformula(chemmacros)命令中使用 SIrange 时无法设置“to”(范围短语)的表示选项

\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}

好吧,它编译了,但没有给出所需的输出。为什么?因为reactionsalign下面,并且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}

在此处输入图片描述

相关内容