当标题包含 \autoref{eq} 时,修改后的 autoref 方程名称会搞乱图表列表

当标题包含 \autoref{eq} 时,修改后的 autoref 方程名称会搞乱图表列表

考虑以下 MCWE:

\documentclass{memoir}
\usepackage{hyperref}
\hypersetup{colorlinks=true}
\hypersetup{linkcolor=[rgb]{0.2,0.4,0.7}}

\let\orgautoref\autoref
\providecommand{\Autoref}{\def{equationautorefname{Eq.}\orgautoref}
\renewcommand{\autoref}{\def\equationautorefname{eq.}\orgautoref}

\begin{document}
\frontmatter
\tableofcontents

\listoffigures

\mainmatter

\chapter{Bla}
\section{Bla}
\begin{figure}
 \caption{\Autoref{bla} \autoref{bla}\label{fig}}
\end{figure}
\autoref{fig}
\begin{equation}
bla\label{bla}
\end{equation}

\chapter{Bloo}
\section{Bloo}
\begin{figure}
 \caption{Bloo}
\end{figure}

\end{document}

如果我注释掉\autoref上面的重新定义,一切都会正常,但如果我不这样做,第二次运行 pdflatex 或 latex 就会出现此错误:

! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.2 ...quation{eq.}\autoref {bla}}}{1}{figure.1.1}

Please don't say `\def cs{...}', say `\def\cs{...}'.
I've inserted an inaccessible control sequence so that your
definition will be completed without mixing me up too badly.
You can recover graciously from this error, if you're
careful; see exercise 27.2 in The TeXbook.

罪魁祸首是\listoffigures,错误指的是文件.lof,其中包含以下内容:

\addvspace {10pt}
\contentsline {figure}{\numberline {1.1}{\ignorespaces Bla \def Equation{eq.}\autoref {bla}}}{1}{figure.1.1}
\addvspace {10pt}
\contentsline {figure}{\numberline {2.1}{\ignorespaces Bloo}}{3}{figure.2.1}

我觉得这不对:( \autorefequationname“Equation”) 已经展开,而不是\def正在执行的命令。documentclass 并不重要,例如 也会发生这种情况book

我该如何解决此错误?我已经重命名了所有\autoref名称,并且还引入了\Autoref,所以我真的不想停止使用它,除非没有其他办法。

答案1

\autoref我建议你不要破解宏,而是加载聪明人包中带有选项。这样,由和nameinlink生成的所有调用(前者用于小写名称,后者用于大写名称)将看起来像由 生成的调用。在您的编辑软件中,将 全局更改为并将更改为,这样就大功告成了。\cref\Cref\autoref\autoref\cref\Autoref\Cref

示例代码中的 LoF 如下所示:

在此处输入图片描述

\documentclass{memoir}
\usepackage{hyperref}
\hypersetup{colorlinks=true}
\hypersetup{linkcolor=[rgb]{0.2,0.4,0.7}}

\usepackage[nameinlink,noabbrev]{cleveref}
\crefname{equation}{eq.}{eqs.} % force abbreviated forms for equation "names"
\Crefname{equation}{Eq.}{Eqs.}

\begin{document}
\frontmatter
\tableofcontents

\listoffigures
\mainmatter

\chapter{Bla}
\section{Bla}
\begin{figure}
 \caption{\Cref{bla} \cref{bla} \label{fig}}
\end{figure}
\cref{fig}
\begin{equation}
bla\label{bla}
\end{equation}

\chapter{Bloo}
\section{Bloo}
\begin{figure}
 \caption{Bloo}
\end{figure}

\end{document}

相关内容