Превышена емкость Tex, извините, размер входного стека = 5000

Превышена емкость Tex, извините, размер входного стека = 5000

Я получаю эту ошибку при попытке построить свой tex-файл. Как только я включаю пакет cleveref, я получаю эту ошибку, и она отображается cleveref.styс курсором в выделенной жирным шрифтом части файла.

\def\make@df@tag@@@#1{%
    \gdef\df@tag{\tagform@{#1}%
      \toks@\@xp{\p@equation{#1}}%
      \edef\@currentlabel{\the\toks@}%
      \edef\cref@currentlabel{[equation][2147483647][]\the\toks@}}}
**}{}%  end of \@ifpackageloaded{amsmath}**
\@ifpackageloaded{IEEEtrantools}{%
  \PackageInfo{cleveref}{`IEEEtrantools' support loaded}
  \let\cref@orig@@IEEEeqnarray\@@IEEEeqnarray
  \def\@@IEEEeqnarray[#1]#2{%
    \refstepcounter{equation}%

В чем может быть причина этой ошибки?

из комментариев:

\begin{filecontents*}{example.eps}
gsave newpath 20 20 moveto 20 220 lineto 220 220 lineto 220 20 lineto
closepath 2 setlinewidth gsave .4 setgray fill grestore stroke grestore
\end{filecontents*}
\RequirePackage{fix-cm} 
\documentclass[smallextended]{svjour3} 
\smartqed \let\proof\relax \let\endproof\relax \usepackage{cleveref} 
\begin{document} 
\title{Title} \author{First Author} \date{Received: date / Accepted: date} 
\maketitle 
\begin{abstract} \end{abstract} 
\maketitle 
\section{Introduction} 
\end{document}

решение1

svjour3 не находится в texlive, но я получил копию с сайта Springer. Похоже, в нем есть ошибка, и ваш документ переходит в бесконечный цикл, \cl@chapterкоторый определен для расширения в себя. Это исправляет (или, по крайней мере, избегает) эту непосредственную проблему.

\begin{filecontents*}{example.eps}
gsave newpath 20 20 moveto 20 220 lineto 220 220 lineto 220 20 lineto closepath 2 setlinewidth gsave .4 setgray fill grestore stroke grestore \end{filecontents*}
\RequirePackage{fix-cm} 
\documentclass[smallextended]{svjour3} 
\smartqed \let\proof\relax \let\endproof\relax

\makeatletter
%\def\cl@chapter{\cl@chapter \@elt {theorem}}%bug in class
\def\cl@chapter{\@elt {theorem}}
\makeatother

\usepackage{cleveref} 

\begin{document}

\title{Title} \author{First Author} \date{Received: date / Accepted: date} 
\maketitle 
\begin{abstract} \end{abstract} 


\section{Introduction} 
\end{document}

решение2

Во-первых, ваш действительно минимальный MWE (за исключением пробелов) будет таким:

\documentclass{svjour3}
\usepackage{cleveref}
\begin{document}
    \section{}
\end{document}

Теперь добавлю к ответу Дэвида Карлайла (но поле для комментария слишком короткое):

Я думаю, что проблема в \@addtoreset{theorem}{chapter}. svjour3.clsПо крайней мере, я могу воспроизвести проблему в этом MWE независимо от svjour3:

\documentclass{article} 
\makeatletter
\@addtoreset{theorem}{chapter}
\makeatother
\usepackage{cleveref} 
\begin{document} 
    \section{}
\end{document}

Конечно, article(то же самое, что и svjour3) не имеет \chapter:

\documentclass{svjour3}
\begin{document}
    \chapter{}
\end{document}

Теперь \@addtoresetэто выглядит так latex.ltx:

\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}}
\def\@cons#1#2{\begingroup\let\@elt\relax\xdef#1{#1\@elt #2}\endgroup}

Что он делает, хорошо объяснено здесь: https://www.tug.org/TUGboat/tb18-4/tb57work.pdf Однако, похоже, что при попытке использовать его для элемента секционирования, который не определен, происходит сбой; следовательно, расширение \cl@chapterне удается при переопределении \cl@chapterдля добавления \@elt {theorem}в список.

Поэтому одним из решений было бы исправление \@addtoreset/ \@consпроверка существования \cl@<unit>при переопределении \cl@<unit>. Это не должно быть слишком сложно, например:

\makeatletter
%\def\@cons#1#2{\begingroup\let\@elt\relax\xdef#1{#1\@elt #2}\endgroup}
\def\@cons#1#2{\begingroup\let\@elt\relax\xdef#1{\ifx#1\relax\else#1\fi\@elt #2}\endgroup}
\makeatother
\documentclass{svjour3}
\usepackage{cleveref} 
\begin{document} 
    \section{}
\end{document}

Все равно должен быть уверен кто-то, кто разбирается в латексе лучше меня, будет ли \@consон по-прежнему выполнять свои функции при любых обстоятельствах, и будет ли эта заплатка иметь смысл вlatex.ltx . Подписатьсяhttp://www.latex-project.org/cgi-bin/ltxbugs2html?pr=latex/4427об этом, если интересно.

Пока (или если) это не будет сделано, я предлагаю следующий обходной путь:

\makeatletter
\def\cl@chapter{}
\makeatother
\documentclass{svjour3}
\usepackage{cleveref} 
\begin{document} 
    \section{}
\end{document}

Вы можете легко проверить, закомментировав вторую строку, что она воспроизводит (и исправляет, если раскомментировать) обнаруженную ошибку.

Связанный контент