使用 XeTeX 编译以下内容时,它只会进入无限循环,甚至不会给出错误。删除包unicode-math
可以解决问题,但我想使用 unicode-math。重命名nfeq
也可以解决问题,但我如何知道哪些标识符通常与包不兼容?我花了很长时间才将问题缩小到这个单个宏,因为我已经有了一个很大的文档,并且想使用 unicode-math。因此,我的问题是是否有一种方法可以快速确定哪些是不可用的标识符,以及是否有更好的方法来定义宏,从而从一开始就防止问题的发生。
\documentclass{article}
\usepackage{unicode-math}
\begin{document}
\def\feq{=}
\def\nfeq{\not\feq}
$\nfeq$
\end{document}
答案1
首先,你必须检查你想要的命令是否已经定义:
% arara: xelatex
\documentclass{article}
\usepackage{unicode-math}
\show\feq
\show\nfeq
\begin{document}
foo
\end{document}
演出.log
:
> \feq=undefined.
l.12 \show\feq
> \nfeq=undefined.
l.13 \show\nfeq
所以使用它们应该没有问题。
如果它们已被某个包定义,则必须执行\renewcommand*{\feq}{=}
才能覆盖它。更好的方法始终是执行\newcommand*{\myfeq}{=}
。如果您不确定将来其他包是否会有此命令,则可以执行 ,\providecommand*{\feq}{=}
这将仅定义此命令(如果尚不存在)。
由于您现在陷入了无限循环,因此您已经定义了一个命令(daleif 已经说过,无法重现)。您可以删除它的定义,或者如果在其他情况下需要使用它,可以用\let\feq\relax
重命名它。\let\feq\oldfeq
最后,您应该首先查看的文档unicode-math
以找到您想要的符号,这些符号恰好是\equal
(或只是=
)和\ne
。
% arara: xelatex
\documentclass{article}
\usepackage{unicode-math}
\begin{document}
\[A=B\ne C\equal D\]
\end{document}
答案2
事实证明,unicode-math
我使用的软件包是旧版本(0.7e),而新版本(0.7f)没有问题...此外,如果有人在软件包更新时遇到麻烦,并且 TeXworks 和软件包更新程序都无法运行(他们抱怨缺少 DLL),我通过复制旧的 DLL 解决了这个问题(我在 Windows 上,所以我可以通过以下方式检索它们:右键单击文件夹 MiKTeX 2.9\miktex\bin > 恢复以前的版本 > 右键单击以前的版本 > 打开。)