我正在尝试使用 diffcoeff 包排版微分形式。但是,当我尝试排版带有索引的变量时,出现了错误。以下是一段不起作用的代码片段:
\documentclass{article}
\usepackage{diffcoeff}
\begin{document}
\[ \dl{u_{ij}} \]
\end{document}
我收到的错误是:
! Missing number, treated as zero.
<to be read again>
u
l.4 \[ \dl{u_{ij}}
\]
使用时可以正常工作\dl0
,但这似乎是一种解决方法。这是软件包中的错误还是有方法可以正确排版?
答案1
问题是由 周围的括号引起的 u_{ij}
。省略它们,您的示例就可以编译:
\documentclass{article}
\usepackage{diffcoeff}
\begin{document}
\[ \dl u_{ij} \]
\end{document}
正如其他人所指出的,有一个更新的版本 (v5) diffcoeff
。在旧版本中,差速器的代码是事后才想到的(而且有点令人尴尬)。在版本 5 中,它已正确集成到代码中。
[稍后添加] 请注意,\usepackage{diffcoeff}
示例中指的是v4.(\dl{x,y,z}
在 v5 中可行,但在 v4 中不行。)我知道在多标记参数(如u_{ij}
或)周围加上括号是很自然的\vec{x}
,但在 v4 中这会导致问题。\dl
在 v4 中吞下下一个标记或括号组并测试它是数字还是减号。不幸的是,如果括号组本身包含一个括号参数,则测试会失败,因此\dl {u_{ij}}
会失败,因为\dl
graspsu_{ij}
本身包含一个括号组,但\dl u_{ij}
会成功,因为 onlyu
被 抓住了\dl
。出于同样的原因,\dl {\vec{x}}
测试会失败但\dl \vec{x}
会成功。
问题在于,v4 代码\dl
使用了条件\tl_if_in:NnTF
。如果将其更改为\str_if_in:NnTF
自然地用括号括住多标记参数,则可以接受。(如果您有权访问代码,请随意这样做。)
v5 相对于 v4 用户界面有很多变化。(我提议给新包起一个不同的名字,但 CTAN 维护人员改变了我的想法。)其中一个变化是,差分的多标记参数现在(v5)应该用大括号括起来。