有人知道如何修复这个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
mhchem
v4.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
}
}