我想在使用 MDPI 模板的项目中使用\cref
该包提供的命令cleveref
。但是,似乎无法做到这一点,否则会出错。
因为我是根据模板来工作的,所以 MWI 会很长,因此这里给出了重现该问题的精确步骤:
使用 MDPI 模板开始新项目。如果使用 Overleaf,可以通过选择“新项目”,然后选择“日志模板”,然后选择 mdpi 模板来完成。
将代码插入
\cref{fig1}
文档主体的某处。(fig1
是模板已定义的标签。)模板中的注释表明cleveref
默认情况下会加载,因此理论上它应该可以工作,但事实并非如此 - 它说这\cref
是一个未定义的命令。为了修复该问题,请
\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}}