当我排版这个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=true
和overwrite-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
的。