如果我尝试构建以下文档:
\documentclass{memoir}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{fancyvrb}
\usepackage{siunitx}
\usepackage{bigfoot}
\begin{document}
Test.
\end{document}
Latex
只会引发错误:
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 15.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 15.
\c__siunitx_mathtt_int=\count327
input stack size=5000]
TeX STOPPED: fatal errors occurred. Check the TeX log file for details
相关问题:
答案1
分析
当中的标记\AtBeginDocument
被评估时,编译停止。由于历史原因bigfoot
,
\def\FN@allmarks#1{\@elt{#1}%
\ifnum#1<\count266
\expandafter\FN@allmarks\expandafter{\number\numexpr#1+\@ne}%
\fi}
因为etex.sty
有
\count266=1 % globally allocates \marks classes 1, 2, ...
在 LaTeX 合并了大部分内容(包括扩展寄存器(超过 255)的分配)之后,该bigfoot
包尚未更新,etex.sty
但保存最后分配的marks
寄存器的计数器不再存在\count266
。
在您的情况下发生的情况是,作为加载的一部分\count266
进行分配并接收值,这当然会在执行时产生太长的循环。siunitx
expl3
16777216
\FN@allmarks0
fancyvrb
之后加载siunitx
不会触发错误,但也不能解决问题,因为\count266
将保存一个很可能与分配的寄存器数量无关的值marks
。LaTeX 内核\count256
为此保留。
解决方案
修补\FN@allmarks
以使用正确的寄存器。
\documentclass{memoir}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{fancyvrb}
\usepackage{siunitx}
\usepackage{bigfoot}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\FN@allmarks}{266}{256}{}{}
\makeatother
\begin{document}
Test.
\end{document}
答案2
如果我将包加载顺序更改为:
\usepackage{siunitx}
\usepackage{fancyvrb}
\usepackage{bigfoot}
它被修复了。