我遇到了一个奇怪的问题。更新我的 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 生成工具时遇到了一些问题……这是一个非常精致的软件包,一般建议先加载它,否则可能会出现问题。