防止 XeTeX 无限循环

防止 XeTeX 无限循环

使用 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 > 恢复以前的版本 > 右键单击​​以前的版本 > 打开。)

相关内容