siunitx 和 hyperxmp 冲突吗?

siunitx 和 hyperxmp 冲突吗?

当我排版这个MWE时:

% arara: lualatex: {synctex: yes, shell: yes}
\documentclass[%
                fontsize=10pt, %
                twoside,%
                DIV=calc, %
                a4paper]{scrartcl}

\usepackage{mathtools}

\usepackage[free-standing-units=true,overwrite-functions=true]{siunitx}

\usepackage{hyperxmp}

\usepackage{hyperref}
%
\begin{document}

\begin{equation}
s_{ij} =\int_a^b {s_i \left( t \right) \phi _j ^{\ast} \left( t \right)dt},\quad \begin{aligned}
i&=1,\ldots, M\\
j&=1,\ldots, N
\end{aligned}
\end{equation}

\end{document}

第二次运行出现错误。如果我不加载 hyperxmp 包,则不会出现此错误。有什么帮助吗?提前致谢

答案1

该包在执行hyperxmp时插入了一些代码,这些代码期望是一个数字。是一个 TeX 原始寄存器,用于保存当前日期的数字,所以到目前为止一切都很好。\end{document}\ifnum\day<10 <do things>\fi\day\day

但是,当您使用free-standing-units=trueoverwrite-functions=true(危险的组合)时,siunitx会将 TeX 基元重新定义\day为天的 SI 单位。但是该hyperxmp包(实际上还有许多其他包)期望这\day是 TeX 基元,而不是其他东西。当它\ifnum\day<10发现某个不是数字的东西时,TeX 会说Missing number, treated as zero。这就是为什么siunitx只在自己的命令中定义单位,这样就不会发生这种类型的冲突。

如果您删除,free-standing-units=true错误将消失。或者,您可以设置overwrite-functions=false,这样唯一siunitx将定义“独立”的函数是那些名称尚未被占用的函数,因此\day仍将是 TeX 的\day,而\metre例如将是siunitx的。

相关内容