将 cleveref 与 mdpi 模板结合使用

将 cleveref 与 mdpi 模板结合使用

我想在使用 MDPI 模板的项目中使用\cref该包提供的命令cleveref。但是,似乎无法做到这一点,否则会出错。

因为我是根据模板来工作的,所以 MWI 会很长,因此这里给出了重现该问题的精确步骤:

  1. 使用 MDPI 模板开始新项目。如果使用 Overleaf,可以通过选择“新项目”,然后选择“日志模板”,然后选择 mdpi 模板来完成。

  2. 将代码插入\cref{fig1}文档主体的某处。(fig1是模板已定义的标签。)模板中的注释表明cleveref默认情况下会加载,因此理论上它应该可以工作,但事实并非如此 - 它说这\cref是一个未定义的命令。

  3. 为了修复该问题,请\usepackage{cleveref}在该行之前插入\begin{document}

不幸的是,步骤 3 并没有解决问题。相反,我得到了一个错误,Package cleveref Error: cleveref must be loaded after hyperref!.我不知道如何解决这个问题,因为我hyperref根本没有手动加载 - 它是由模板自动加载的。

为了解决这个问题,我尝试了

\AfterPackage{hyperref}{\usepackage{cleveref}}

就在之前\begin{document}。这不会给出错误,但也不能正常工作 - 引用被给出为“??”并且无论我重新编译多少次,我都会收到有关未定义引用的警告。

使用 MDPI 模板时正确的加载方式是什么cleveref,以便\cref可以使用该命令?

答案1

我遇到了同样的问题。似乎 cleveref 未包含在类文件 (mdpi.cls) 中,尽管模板中声明了它。类文件设置为使用 \AddToHook 最后加载 hyperref 包。然而,这违反了 cleveref 的使用规则,它必须在 hyperref 之后加载。

解决方法是以与 hyperref 相同的方式添加 cleveref,即在 \begin{document} 之前添加以下代码:

\AddToHook{begindocument}{ 
\usepackage[capitalise,nameinlink,sort&compress]{cleveref}}

相关内容