如何\标记并获得认可?

如何\标记并获得认可?

这个问题确实让我沮丧了一段时间,但在找到解决方案之前,我想知道为什么会发生这种情况。简而言之:我的 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}

在你的回答中...

我没有具体告诉你如何回答这个问题,本节只是我对这个问题的猜测。例如,

  1. pdf 编译器有问题?(我使用 Acrobat XI 和PdfLaTeX编译器并DVI -> PS -> PDF chain在 TeXStudio 中使用)
  2. 我的编译程序出错了?
  3. 我的格式错误(虽然我确实这么认为,因为我根据许多来源改变了我的格式,但没有运气)
  4. TeXStudio 有故障?(只是怀疑,但之前在其他 IDE 中也发生过这种情况,我使用的是 2.8.0 版本)
  5. 是我没仔细看说明书吗?(微笑)

事实证明,一些代码阻碍了 PdfLaTeX 识别一些 \label

更新

尽管我省略了部分内容,但我知道为什么会发生这种情况,但它并不是上述五个中的任何一个。

  1. 虽然我删除了其中的一些内容\frontmatter,但通过删除一个部分(参见上面的 MWE),就可以很好地识别引用。
  2. 我怀疑该部分阻碍了编译器识别某些内容\label

解决方案

请参阅 Mico 的回答,但我想补充一点,这实际上是因为

5. I haven't read the manual carefully

答案1

感谢您发布一些可以产生您想要解决的问题行为的代码。

你的序言中存在问题的陈述是

\usepackage[amsthm,thmmarks,hyperref]{ntheorem}

更具体地说,是选项thmmarks。删除此选项,交叉引用问题就会消失。

或者,由于您amsmath也加载了包,因此只需添加选项amsmaththmmarks选项也不会导致问题。(顺便说一句,此修复程序在该软件包的用户指南的第 3.2.1 节中明确提到ntheorem。)

\usepackage[amsthm,amsmath,thmmarks,hyperref]{ntheorem}

相关内容