我在嘗試建立 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}
您可以透過註解第二行來輕鬆檢查這是否重現(並透過取消註解修復)所看到的錯誤。