在以下使用 XeLaTeX 编译的示例中,如果在之前的数学运算中使用了,则\thinspacing
mu 的值(由 所使用\,
)的间距/值会受到干扰:\SI
\documentclass{article}
\usepackage{unicode-math}
\usepackage{siunitx}
\begin{document}
$1\mskip20mu1$ $\Leftarrow$
$\SI{1}{1}$
$1\mskip20mu1$ $\Leftarrow$
$1\mskip20mu1$
$\SI{1}{1}$
$1\mskip20mu1$ $\Leftarrow$
$a\SI{1}{1}$
$1\mskip20mu1$
\end{document}
unicode-math
\SI
如果是第一个命令,则可以看到类似的效果:
\documentclass{article}
\usepackage{unicode-math}
\usepackage{siunitx}
\begin{document}
$a\SI{2}{2}1\mskip20mu1$
$\SI{2}{2}a1\mskip20mu1$
\end{document}
观察结果
- LuaLaTeX 不会发生这种情况,
- 并非所有字体都会发生这种情况(
unicode-math
Cambria 不受影响,但xits
是), - 必须
\SI
在数学和数学模式中使用, - 如果仅当
\SI
数学中只有一件事时才会发生(这意味着它可能不是一个非常棘手的问题), - 下次计算时,该值再次正确。
有人知道它是 XeTeX 吗?siunitx
或fontspec
/unicode-math
数学错误?
通过“一轮”最小化示例,我们可以删除siunitx
但不能unicode-math
\documentclass{article}
\usepackage{unicode-math}
\begin{document}
$1\mskip20mu1$
\hbox{\everymath{\scriptscriptstyle} $a\,b$}
$1\mskip20mu1$
$1\mskip20mu1$
\end{document}
正如您所看到的,我已经在“核心”中\text
放入了足以导致失败的代码。
答案1
经过进一步调查,我认为“这是谁的错误?”这个问题的答案是,问题出在 xetex 中。不知何故,scriptscriptsize 字体的 mu 值泄露了。
我在 xetex 错误跟踪器中提交了一个错误报告,其中包含一个既未使用 unicode-math 也未使用 siunitx 的示例。