使用 onlyamsmath 在标题中使用数学方程式

使用 onlyamsmath 在标题中使用数学方程式

显然,如果我想在图片标题中使用数学等式,并且在文档序言中使用 onlyamsmath 和 hyperref 包,则似乎会引发警告 »LaTeX 警告:标签可能已更改。请重新运行以获取正确的交叉引用。«:

\documentclass{scrartcl}

\usepackage{amsmath}
\usepackage[all,error]{onlyamsmath}
\usepackage{hyperref}

\begin{document}

Reference~\ref{fig:foobar}.

\begin{figure}[htb!]
  \caption{Foo Bar $f=2$}
  \label{fig:foobar}
\end{figure}

\end{document}

我目前不知道为什么会发生这种情况以及我应该改变什么......

答案1

我认为,正确的解决方案是onlyamsmath根本不使用:它造成的损害比它解决的问题还多。

但是,如果你真的喜欢使用它,那么就习惯于写

\(a=b\)

对于所有公式,而不是$a=b$。请记住还要加载包,否则在尝试使用或时,fixltx2e标题中的公式将导致灾难。\listoffigures\listoftables

\documentclass{scrartcl}

\usepackage{fixltx2e}    
\usepackage{amsmath}
\usepackage[all,error]{onlyamsmath}
\usepackage{hyperref}

\begin{document}

Reference~\ref{fig:foobar}.

\begin{figure}[htb!]
  \caption{Foo Bar \(f=2\)}
  \label{fig:foobar}
\end{figure}

\end{document}

答案2

当您使用 LaTeX 内联数学环境而不是常用的(虽然是普通的 TeX 指令)\(...时,这个问题就解决了。\)$$

答案3

解释很简单 - 但只有你知道它之后才会明白;)。实际上,我也遇到过类似的问题没有 hyperref,但我怀疑问题是一样的。

当你在源文件上运行 LaTeX 时,第一的文件aux被读取并且命令\AtBeginDocument被执行。因为onlyamsmath

\AtBeginDocument{\catcode‘\$=13 }

这意味着标签等在正常的 catcode 机制下$,并且已检查在编译期间,将$catcode 设置为“active”。因此,对于所有使用此字符的标签,LaTeX 将总是抱怨。(而让问题变得棘手的是字符代码文件中所有内容aux保持不变,即aux文件本身在某种意义上保持不变diff

因此,解决这个问题的方法很简单:只需说

\catcode`\$=13

在你的序言中(最好就在之前编辑: 不是之前,而是之后,因为它也onlyamsmath使用$其正常的 catcode!,\usepackage{onlyamsmath}或者至少要小心,以便在这一行和加载该包之间绝不实际上使用美元符号)。

相关内容