以下是 MWE:
\documentclass{minimal}
\usepackage{unicode-math}
\let\x\times
\begin{document}
\let\y\times
\[a \x b\]
\[c \y d\]
\end{document}
该命令\times
显然在该\begin{document}
行改变了含义,因为在该行之前对它所作的别名无法正常工作:
如果没有该软件包,这种情况就不会发生unicode-math
。我在这里看到了什么?我一直认为这\begin{document}
是一个相当无害的标记,它只界定了前言的结尾(不允许进一步使用某些命令),但它显然至少在与该软件包交互时有副作用。
我正在使用,xelatex
看看这是否有任何区别。
答案1
当你这样做时,\let\x\times
含义\times
仍然是 LaTeX 默认值;事实上,如果你添加
\show\x
手术后\let
,你会得到
> \x=\mathchar"2202.
l.4 \show\x
\showthe\textfont2
如果进一步在第一个 之前添加\]
,即在显示中\x
使用 的位置,则会得到
> \TU/latinmodern-math.otf(2)/m/n/10 .
<to be read again>
\protect
l.7 \[a \x b\showthe\textfont2\]
你会看到\x
指示 TeX 制作一个操作符号(第一个字节是2
),从数学系列 2 中的字体中取出插槽中的字符"02
。日志文件确实显示
Missing character: There is no ^^B in font
[latinmodern-math.otf]/OT:script=math;language=dflt;!
没有字符,但数学二进制运算符号周围的间距是值得尊重的。
为什么加载时unicode-math
的含义没有改变?因为它需要知道整个数学和文本字体设置,而这只能在开始文档时检测到。\times