![ucthesis + polyglossia hebrew + hyperref = TeX 容量超出](https://linux22.com/image/280598/ucthesis%20%2B%20polyglossia%20hebrew%20%2B%20hyperref%20%3D%20TeX%20%E5%AE%B9%E9%87%8F%E8%B6%85%E5%87%BA.png)
我在 ucthesis 类中遇到了一个问题,在多语环境中使用希伯来语并使用 hyperref 会导致在使用 \maketitle 时出现“TeX 容量超出”错误(只有这样!)我花了一些精力来寻找似乎是仍然会产生错误的最小代码:
\documentclass{ucthesis}
\usepackage{polyglossia}
\usepackage{hyperref}
\setotherlanguage{hebrew}
\begin{document}
\maketitle
\end{document}
请注意,此代码已被精简,因此实际上应该会抛出不同的错误,因为我尚未定义 ucthesis 所需的 \maketitle 的所有内容,但我想创建最小示例。绝对需要包含 \maketitle 行才能产生错误;其他任何操作都不会产生错误。
更令人困惑的是,如果我创建自定义的本地 ucthesis.cls 并将 \maketitle 定义替换为:
\def\maketitle{a}
我仍然可以产生错误。
我在 Windows XP 上的 MiKTeX 2.9 和 Mac OS 10.7 上的 MacTeX-2012 上都出现了这个错误(我很快会尝试一下 MacTeX-2013)。
帮助?
答案1
由于某些原因,\maketitle
被重新定义两次,第二次\HyOrg@maketitle
(hyperref
用于存储旧含义的\maketitle
)指向自身,从而形成了循环。
这似乎是在加载希伯来语时发生的。以下技巧应该会有所帮助。但是,这似乎是 的问题ucthesis
,因为标准类中没有出现此问题。
\documentclass{ucthesis}
\usepackage{polyglossia}
\setmainlanguage{english}
\let\keptmaketitle\maketitle
\usepackage{hyperref}
\setotherlanguage{hebrew}
\let\maketitle\keptmaketitle
\begin{document}
\maketitle
\end{document}