在下面的 mwe 中我收到两个警告:LaTeX Warning: Citation 'foo' on page 2 undefined on input line 29.
和pdfTeX warning (ext4): destination with the same identifier (name{definition.1}) has been already used, duplicate ignored
。
虽然第一个很明显,但我不明白第二个警告从何而来。例如,如果\newpage
删除了 或错误引用被删除或更正或被cleveref
删除,第二个警告就会消失。如果我使用\newtheorem
而不是thmtools
和,它也会消失\declaretheorem
。
有人能解释一下为什么会出现这个警告吗?我一开始有一个很大的文档,里面包含了所有这些内容,因此我很想知道。
我研究过类似的问题这,这,这和这但似乎有些不同。我也尊重加载包的顺序。
数学家协会
\documentclass{scrbook}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheorem[style=plain,parent=section]{theorem}
\declaretheorem[style=definition,qed=$\triangle$,sibling=theorem]{definition}
% \newtheorem{theorem}{Theorem}[section]
% \newtheorem{definition}[theorem]{Definition}
\usepackage{hyperref}
\usepackage{cleveref}
\begin{document}
\chapter{chap}
\section{Sec1}
\begin{definition}
Text
\end{definition}
\newpage
\section{Sec2}
The reference \cite{foo} is undefined.
\begin{definition}
Text
\end{definition}
\end{document}
答案1
(重新发布之前的评论,以便查询可以被视为已收到答复。)
问题的直接原因是这两个指令当前放在了和包加载\declaretheorem
之前而不是之后。hyperref
cleveref
请更改这两个指令的位置,而不管\newpage
文档正文中可能存在什么指令。
回答您的后续问题:该cleveref
软件包的用户指南确实提到,虽然所有与定理相关的软件包(例如amsthm
和thmtools
)都应该在之前加载,但和种类cleveref
的语句应该只出现\newtheorem
\declaretheorem
后 cleveref
已加载。(有关更多详细信息,请参阅软件包用户指南第 25 页第 14.1 节第二个要点中的最后一句。)