以下是我的问题的 MWE。使用以下文档
\documentclass{report}
\AtBeginDocument{\listoffigures}
\usepackage{cleveref}
\begin{document}
\begin{figure}
\caption{This caption cross-references \cref{eqn}.}
\label{fig}
\end{figure}
\begin{equation} F = ma \label{eqn}\end{equation}
\end{document}
生成如下所示的文档:
但是,如果我\listoffigures
从中删除命令\AtBeginDocument
并直接在 tex 文件 ( 之后\begin{document}
) 中调用它,我会得到以下结果:
显然,第一种情况cleveref
无法确定引用的类型,而第二种情况可以。这两者有什么区别?
我的实际用例是一个大型 LaTeX 文档类文件,它为该类提供各种自定义report
,其中之一是自动创建图形列表,即无需用户记住插入指令\listoffigures
。 使用第一种方法时,如何获取嵌入在文档中的正确信息以供cleveref
解析?
答案1
正如你所注意到的,该指令\AtBeginDocument{\listoffigures}
最终确保\listoffigures
“排队”前LaTeX 有机会“学习”其\cref
含义。
一个解决方案是指示类文件cleveref
也加载包——并这样做前发布指令\AtBeginDocument{\listoffigures}
。
\usepackage{cleveref}
\AtBeginDocument{\listoffigures}