如何调试挂起的 xetex 编译

如何调试挂起的 xetex 编译

我遇到了一个奇怪的问题。更新我的 MikTeX 安装后,我的论文文档不再编译。编译(使用 xelatex)挂起并占用了我所有 CPU 核心。

但是,如果我取出某一特定章节(这些章节位于单独的 .tex 文件中,我用它们加载\input)编译就会顺利完成。

,当我编译该特定章节时,单独编译顺利完成。换句话说,问题似乎不是由章节本身引起的,而是由多种因素造成的。此外,我必须强调,在我更新 MikTex 之前,一切都运行正常。

有人知道是什么原因造成的吗?或者只是一些关于如何调试这种情况的指示?

编辑(1)

(已删除,该问题毕竟与图像无关)

编辑(2)

我做了更多的研究,结果发现它与数学模式中的希腊字母有关。

我已将问题追溯到包含和的几个数学表达式( $-符号之间)。这些位于上述章节中。如果我注释掉这些表达式(或只是从中删除和),我的整个论文都可以毫无问题地编译(包括有问题的章节)。\mu\alpha\mu\alpha

更奇怪的是,当我编写这一章时(\mu和表达式\alpha)单独进行——通过注释掉主文件中所有其他章节的加载——一切正常,并且 mu 和 alpha 在 pdf 中看起来很好。

我猜这可能是内存问题。也许某种字体缓存无法加载希腊字形,因为它已经装满了我论文其他地方使用的所有字形。这有道理吗?

为这个问题提供 MWE 很难,因为当输入“最小”时它似乎根本不会发生。但是,这可能是我的预告的相关部分:

\usepackage{amsmath,amsfonts,amssymb}

%MATH FONT: Iwona Light
\usepackage[light,math]{iwona} %for basic math symbols

%AMS Blackboald (mathbb) font (used for mathematical fields)
\DeclareSymbolFont{AMSb}{U}{msb}{m}{n}
\protected\def\mathbb#1{{\mathchar\numexpr256*\symAMSb+`#1\relax}}

\usepackage{mathspec} %Also loads fontspec(!)
\defaultfontfeatures{Ligatures=TeX,Scale=MatchUppercase,Numbers={Lining,Proportional}}

%MAIN FONT and MATH digits and latin letters: Computer Modern Unicode (CMU) Bright (loaded by filenames to force use of OpenType versions)
\setallmainfonts(Digits,Latin)[BoldFont={cmunbbx.otf},ItalicFont={cmunbmo.otf},BoldItalicFont={cmunbxo.otf}]{cmunbmr.otf}

%MATH greek letters: Greek font is Iwona Light (loaded by filenames to force use of OpenType versions)
\setmathsfont(Greek)[BoldFont={Iwona-Bold.otf},ItalicFont={IwonaLight-Italic.otf},BoldItalicFont={Iwona-BoldItalic.otf},Numbers={Lining,Proportional}]{IwonaLight-Regular.otf}

%SANS FONT: idem (no need to set it because CMU Bright already is a sans serif font)

%MONOSPACE (typewrite) FONT: CMU Typewriter Text Light
\setmonofont[Scale=MatchLowercase]{CMU Typewriter Text Light}

\usepackage{xltxtra} %also loads xunicode

答案1

我可以通过以下两个步骤解决这个问题(两个都是必要的):

  • 停止使用\setmathsfont(Greek){Iwona Light}(相反,我只依赖于\usepackage[light,math]{iwona}无论如何加载的符号/大符号/等,并且也适用于希腊字母,如\alpha
  • 避免使用 mathspec 的所有“-feature(用于数学模式下的自定义间距)

之后再也没有出现过编译问题。

我应该注意到,mathspec 的“-'feature' 也被提及是 xetex 编译挂起的来源,在上面的评论中提到的线程 egreg 中。

不再使用的唯一缺点\setmathsfont(Greek)是,我无法再将希腊字母输入为 unicode 字符(因此αβ而不是\alpha\beta)。但是,我可以通过使所有希腊字符处于活动状态(基于它们的 unicode 代码)并用相关的数学命令替换它们的出现来解决这个问题,如下所示:

\catcode`\^^^^03b1=13
\let^^^^03b1=\alpha
\catcode`\^^^^03b2=13
\let^^^^03b2=\beta

我从这篇博文中得到了这个想法:http://uucode.com/blog/2010/03/26/unicode-math-in-xelatex

我制作了一个自定义包(如果有兴趣,我可能会在线发布),其中我为所有希腊字母(大写和小写)做了这个。此外,该包使得可以在数学和文本模式下使用希腊字符(当希腊 unicode 字符出现在文本模式下时,通过自动将 $ 对环绕 \alpha、\beta 等)。

我意识到更好的方法是使用 unicode-math,但我真的不喜欢该包中使用的任何字体(因为据我所知没有无衬线字体)。

答案2

我遇到了类似的问题。这更像是评论而不是答案,但由于声誉门槛,我无法发表评论。

mathspec就我的情况而言,当我将其放在软件包列表顶部时,问题就解决了。我真的不知道为什么,尽管我已经mathspec在使用 pandoc 和 RMarkdown 等 latex 生成工具时遇到了一些问题……这是一个非常精致的软件包,一般建议先加载它,否则可能会出现问题。

相关内容