mhchem 与 expl3 错误

mhchem 与 expl3 错误

有人知道如何修复这个mhchem包问题吗?

! Undefined control sequence.
<argument> \l__mhchem_cg_isScript_bool 

最近我发现了这部分mhchem.sty代码:

\cs_new_protected:Npn \__mhchem_output_escapeFromTextToItalicMath:n #1
  {
    \ensuremath
      {
        \mhchem@hook@beforeItalicMath
        \bool_if:NT \l__mhchem_cg_isScript_bool
          {
            \medmuskip=0mu
            \thinmuskip=0mu
            \thickmuskip=0mu
          }
        #1
      }
  }

我觉得问题\bool_if:NT \l__mhchem_cg_isScript_bool与最新软件包中可能出现的错误条件有关expl3。软件包中的相同错误已成功解决siunitx

Win 10,MikTeX 2.9.6236,最新

答案1

该代码\bool_if:NT \l__mhchem_cg_isScript_bool {...}是在 4.04 版中添加的mhchem.sty。但是,所寻址的布尔变量未在任何地方定义。

在以前的版本中expl3,这种情况是通过将布尔值视为假来处理的,但现在不再如此。

顺便说一句,由于显然没有办法切换布尔值,因此该代码完全无用(即使定义了布尔值也是如此)。

这是一个临时修复,即使包作者定义了布尔变量后它也不会无效。

\documentclass{article}
\usepackage[version=4]{mhchem}

\ExplSyntaxOn
\bool_if_exist:NF \l__mhchem_cg_isScript_bool
 {
  \bool_new:N \l__mhchem_cg_isScript_bool
 }
\ExplSyntaxOff

\begin{document}

$\ce{NO_$x$}$

$\ce{NO_$x+y$}$

\end{document}

在此处输入图片描述

答案2

mhchemv4.07 修复了此错误。

非常感谢您报告此事以及您对此事的所有研究。谢谢@egreg!这似乎确实是我曾经做过的实验的遗留问题,并没有完全逆转。而且我的(错误)代码在更新后停止工作。我将在接下来的几天内expl3发布更新。mhchem

答案3

我已经直接在 mhchem.sty 中修复了它:

\bool_new:nT \l__mhchem_cg_isScript_bool
\cs_new_protected:Npn \__mhchem_output_escapeFromTextToItalicMath:n #1
  {
    \ensuremath
      {
        \mhchem@hook@beforeItalicMath
        \bool_lazy_any:nT \l__mhchem_cg_isScript_bool
          {
            \medmuskip=0mu
            \thinmuskip=0mu
            \thickmuskip=0mu
          }
        #1
      }
  }

相关内容