我在尝试构建 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}
仍然应该由比我更了解 latex 的人来确认\@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}
您可以通过注释第二行来轻松检查是否重现(并通过取消注释来修复)所看到的错误。