请考虑此文档:
\documentclass{report}
\usepackage[portuguese]{babel}
\DeclareTextAccent{\'}{EU1}{"00B4}
\begin{document}
\chapter{Introduction}
\end{document}
如果我尝试使用 XeLaTeX 编译它,则会收到以下错误消息:
! TeX capacity exceeded, sorry [input stack size=5000].
\'->\EU1-cmd \'
\EU1\'
l.5 \chapter{Introduction}
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.
仅当我使用带有选项的 Babel 包时才会发生这种情况portuguese
。我尝试了其他语言,一切顺利。
我该怎么做才能避免这个错误?
答案1
错误显示为葡萄牙语而不是英语或法语,因为 LaTeX 想要排版“chapter”的本地化版本,而葡萄牙语的“Capítulo”恰好包含\'i
,而其他语言则不会发生这种情况。
你也可以得到相同的结果
\documentclass{report}
\usepackage[<language>]{babel}
\DeclareTextAccent{\'}{EU1}{"00B4}
\begin{document}
\'a
\end{document}
(任何语言选项)。
babel
发生的情况是,当使用(也使用)时,EU1 不是最新版本的 LaTeX 的已知编码fontspec
:默认编码是TU
。
你的\DeclareTextAccent
定义\'
扩展为
\EU1-cmd \'\EU1\'
但\EU1-cmd
只是\relax
(因为编码未知)这让 TeX 继续尝试扩展\'
:
\'->\EU1-cmd \'
\EU1\'
\'->\EU1-cmd \'
\EU1\'
解决方案:
\documentclass{report}
\usepackage[portuguese]{babel}
\DeclareTextAccent{\'}{\encodingdefault}{"00B4}
\begin{document}
\chapter{Introduction}
\end{document}