texlive 中的 pdflatex 进入无限循环

texlive 中的 pdflatex 进入无限循环

我正在处理一个文本,它使 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......

相关内容