这个问题确实让我沮丧了一段时间,但在找到解决方案之前,我想知道为什么会发生这种情况。简而言之:我的 TeXStudio 可以识别我的所有 \label
,但输出不能识别某些标签。
问题
我正在写物理笔记,但是有时我会收到以下警告:
LaTeX Warning: Reference `eq:pointcd' on page 196 undefined on input line 985.
这只是举例,文档中还有其他示例无法\label
识别。还有一些奇怪的情况,我使用了相同的格式\label
,但编译器却识别了。
平均能量损失
\documentclass[12pt,a4paper,headinclude,openright]{scrbook}
\usepackage{amsmath}
\usepackage{amssymb}
% ------------here comes the problem part------------
\usepackage[listings,theorems,skins,breakable]{tcolorbox}
\tcbuselibrary{breakable}
%======================== Ch.4 boxes =========================
\tcbset{exercisestyle04/.style={arc=0.5mm,coltitle=black,fonttitle=\sffamily\bfseries,colback=color04!50!,colframe=color04}}
\newtcolorbox[auto counter,number within=chapter,list inside=eg]%
{exercise04}[2][]{exercisestyle04,
title={Exercise ~\thetcbcounter: #2}}
\tcbuselibrary{theorems}
\usepackage[amsthm,thmmarks,hyperref]{ntheorem}
% theorem
\usepackage{regexpatch}
\makeatletter
\xpatchcmd*{\thm@@thmline@name}{2.3em}{5em}{}{}
\xpatchcmd*{\thm@@thmline@noname}{2.3em}{5em}{}{}
\makeatother
\makeatletter
\renewtheoremstyle{plain}%
{\item[\hskip\labelsep \theorem@headerfont ##1\ ##2 \theorem@separator]}%
{\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\ \sffamily{##3} \theorem@separator]}
\makeatother
\theoremstyle{plain}
\theorembodyfont{\normalfont\sffamily}
\theoremheaderfont{\bfseries}
\newtheorem{theorem}{Theorem}[section]
% ------------here ends the problem part------------
\begin{document}
\begin{equation}
\rho\left(\mathbf{r}\right)\;=\;\sum_{k=1}^{N}\: q_k \delta\left(\mathbf{r}\;-\;\mathbf{r}_k\right)
\label{eq:pointcd}
\end{equation}
However, one should alert for the unphysical divergence in other quantities associated with \eqref{eq:pointcd}.
\end{document}
在你的回答中...
我没有具体告诉你如何回答这个问题,本节只是我对这个问题的猜测。例如,
pdf 编译器有问题?(我使用 Acrobat XI 和PdfLaTeX
编译器并DVI -> PS -> PDF chain
在 TeXStudio 中使用)我的编译程序出错了?我的格式错误(虽然我确实这么认为,因为我根据许多来源改变了我的格式,但没有运气)。TeXStudio 有故障?(只是怀疑,但之前在其他 IDE 中也发生过这种情况,我使用的是 2.8.0 版本)- 是我没仔细看说明书吗?(微笑)
事实证明,一些代码阻碍了 PdfLaTeX 识别一些 \label
。
更新
尽管我省略了部分内容,但我知道为什么会发生这种情况,但它并不是上述五个中的任何一个。
- 虽然我删除了其中的一些内容
\frontmatter
,但通过删除一个部分(参见上面的 MWE),就可以很好地识别引用。 - 我怀疑该部分阻碍了编译器识别某些内容
\label
。
解决方案
请参阅 Mico 的回答,但我想补充一点,这实际上是因为
5. I haven't read the manual carefully
答案1
感谢您发布一些可以产生您想要解决的问题行为的代码。
你的序言中存在问题的陈述是
\usepackage[amsthm,thmmarks,hyperref]{ntheorem}
更具体地说,是选项thmmarks
。删除此选项,交叉引用问题就会消失。
或者,由于您amsmath
也加载了包,因此只需添加选项amsmath
和thmmarks
选项也不会导致问题。(顺便说一句,此修复程序在该软件包的用户指南的第 3.2.1 节中明确提到ntheorem
。)
\usepackage[amsthm,amsmath,thmmarks,hyperref]{ntheorem}