我的问题可能与以下问题有类似的根本原因这个问题,尽管我找到了一个让我满意的解决方案,但我仍然不明白为什么会发生这种情况。MWE:
\documentclass{article}
\usepackage{mathtools}
\usepackage{breqn}
\usepackage{hyperref}
\begin{document}
\section{Content}
\begin{figure}
\mbox{Figure content}
%%% Version 1, causes "Rerun to get cross-references right" warning every time
%%% if hyperref, mathtools, and breqn loaded simultaneously.
%\caption{dirac\_example.m}
%%% Version 2, works fine
\caption{dirac\textunderscore{}example.m}
%%% Version 3, works fine
%\newcommand{\mycaption}{dirac\_example.m}
%\caption{\mycaption{}}
\label{dirac}
\end{figure}
\end{document}
正如评论中所述,我的图形标题的第一个版本导致 pdflatex 不断抛出“重新运行以获取正确的交叉引用”警告。删除 hyperref 或 breqn 可使问题消失,显然,用\textunderscore{}
或另一个定义替换转义下划线也可以解决问题。
我已经尝试过的事情:
- 已尝试使用原版 TL 2010 DVD。
- 尝试使用当前软件包,今天早上从 CTAN 更新。
- 尝试在 hyperref 之后移动 breqn。
所有这些都没有区别。所有这些都出现了错误,虽然我没有尝试重新安装原始 DVD,但我认为在我更新的安装上运行的程序也应该在那里运行。
答案1
问题是,当.aux
在文档开始时读取文件时,其 catcode_
为 11,而在文档结束时则为 12。事实上,输入`\catcode
_=11 just before
\end{document}` 可以“解决”该问题。
我怀疑这与 LaTeX3 部分有关布雷克,其中的 catcode_
确实设置为 11。并且
\showthe\catcode`\_
加载后布雷克之前显示11,之后\begin{document}
显示12。