我正在处理一个文本,它使 pdflatex(来自 texlive)进入无限循环。经过一段时间的试验,我得到了一个最小的工作示例,如下所示:
\documentclass{article}
\usepackage{biblatex}
\usepackage{hyperref}
\usepackage{exercise}
\usepackage{mathtools}
\usepackage{tkz-berge}
\begin{document}
\[
\begin{matrix}
a
\end{matrix}
\]
\end{document}
如果我删除任何\usepackage{...}
行,texlive 都会正常编译文档。如果删除所有行,则在处理矩阵时会进入无限循环。
我\tracingall
在后面添加了\begin{document}
,结果是这样的:
{changing \reserved@a=macro:->cccccccccccccccccccccccccccccc\ETC.}
{into \reserved@a=macro:->cccccccccccccccccccccccccccccc\ETC.}
{\advance}
{changing \count24=28952}
{into \count24=28951}
{\relax}
{\expandafter}
{\else: \ifnum (level 3) entered on line 14}
{\fi: \ifnum (level 3) entered on line 14}
\@iwhilenum #1->\ifnum #1\expandafter \@iwhilenum \else \expandafter \@gobble \
fi {#1}
#1<-\@tempcnta >\z@ \relax \edef \reserved@a {\reserved@a c}\advance \@tempcnta
\m@ne \relax
{\ifnum: (level 3) entered on line 14}
{true}
{\relax}
{\edef}
\reserved@a ->ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
...
ccccccccccccccccccccccccccccccccccccccc
{changing \reserved@a=macro:->cccccccccccccccccccccccccccccc\ETC.}
{into \reserved@a=macro:->cccccccccccccccccccccccccccccc\ETC.}
我使用的是 Debian 的 texlive。这是 版本2015.20150703-2
。 的版本biblatex
是 2.7a-1(也是 Debian 软件包)
这个问题的根源是什么?
谢谢你!
答案1
如果您更新etex.sty
到版本 2.3(将在第二天左右到达 ctan 镜像),则原始文档运行时不会出现错误,但会出现一个警告,解释原始问题。我已在包中添加了针对这种情况的检查。
Package etex Warning: Extended allocation already in use.
(etex) etex.sty code will not be used.
(etex) To force etex package to load, add
(etex) \RequirePackage{etex}
(etex) at the start of the document.
原始答案:
如果你这样做,它不会循环
\RequirePackage[2014/01/01]{latexrelease}
\documentclass{article}
\makeatletter
\usepackage{biblatex}
\usepackage{hyperref}
\usepackage{exercise}
\usepackage{mathtools}
\usepackage{tikz}
\usepackage{tkz-berge}
\tracingonline2
\begin{document}
\[
\tracingmacros2
\begin{matrix}
a
\end{matrix}
\]
\end{document}
原来发生的情况是,在 latex 已经分配寄存器之后,etex.sty 才被加载,并且冲突导致计数器保存的矩阵列数从 20 更改为 32768,并且 latex 在尝试制作具有那么多的数组前导时死亡c
......