hyperref、breqn 和下划线之间的奇怪交互

hyperref、breqn 和下划线之间的奇怪交互

我的问题可能与以下问题有类似的根本原因这个问题,尽管我找到了一个让我满意的解决方案,但我仍然不明白为什么会发生这种情况。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{}或另一个定义替换转义下划线也可以解决问题。

我已经尝试过的事情:

  1. 已尝试使用原版 TL 2010 DVD。
  2. 尝试使用当前软件包,今天早上从 CTAN 更新。
  3. 尝试在 hyperref 之后移动 breqn。

所有这些都没有区别。所有这些都出现了错误,虽然我没有尝试重新安装原始 DVD,但我认为在我更新的安装上运行的程序也应该在那里运行。

答案1

问题是,当.aux在文档开始时读取文件时,其 catcode_为 11,而在文档结束时则为 12。事实上,输入`\catcode_=11 just before\end{document}` 可以“解决”该问题。

我怀疑这与 LaTeX3 部分有关布雷克,其中的 catcode_确实设置为 11。并且

\showthe\catcode`\_

加载后布雷克之前显示11,之后\begin{document}显示12。

相关内容