警告:标签可能已随 breqn 发生改变

警告:标签可能已随 breqn 发生改变

在我正在准备的一份文档中,我大量使用了该breqn软件包。然而,当我尝试在标题中使用数学时,这似乎会导致问题。MWE:

\documentclass[11pt,oneside,openright,a4paper]{memoir}

\usepackage[T1]{fontenc}
\usepackage{etoolbox}

% Equation breaking
\usepackage{breqn}

% Add support for automatic equation breaking
\gdef\wrap@breqn@environ#1#2{
    \expandafter\let\csname 
    breqn@oldbegin@#1\expandafter\endcsname\csname #1\endcsname
    \expandafter\let\csname 
    breqn@oldend@#1\expandafter\endcsname\csname end#1\endcsname
    \expandafter\gdef\csname breqn@begin@#1\endcsname{%
        \expandafter\let\csname #1\expandafter\endcsname\csname 
        breqn@oldbegin@#1\endcsname%
        \begin{#2}%
        }
        \expandafter\gdef\csname breqn@end@#1\endcsname{%
            \expandafter\let\csname end#1\expandafter\endcsname\csname 
            breqn@oldend@#1\endcsname%
        \end{#2}%
        \expandafter\let\csname #1\expandafter\endcsname\csname 
        breqn@begin@#1\endcsname%
        \expandafter\let\csname end#1\expandafter\endcsname\csname 
        breqn@end@#1\endcsname%
    }
    \expandafter\let\csname #1\expandafter\endcsname\csname 
    breqn@begin@#1\endcsname
    \expandafter\let\csname end#1\expandafter\endcsname\csname 
    breqn@end@#1\endcsname
}
\wrap@breqn@environ{equation}{dmath}
\wrap@breqn@environ{equation*}{dmath*}

\makeatletter
\AtBeginDocument{
    \catcode`_=12
    \begingroup\lccode`~=`_
    \lowercase{\endgroup\let~}\sb
    \mathcode`_="8000
    \immediate\write\@auxout{\catcode`_=12 }
}
\makeatother

\begin{document}

 \begin{figure}
  Foo
  \caption{\label{fig:sumrcpint}Graphical illustration of how  $\sum_{r = m +1}^n r^{-k} < \int_{m}^{\infty} r^{-k} d r$.}
 \end{figure}

 \end{document}

这似乎会不断生成警告,提示标签可能已更改。但是,.aux 文件保持不变。

答案1

一个更简单的例子:

\documentclass{memoir}
\usepackage{breqn}

\begin{document}

\begin{figure}
\caption{$a^b$\label{foo}}
\end{figure}

\end{document}

article请注意,如果使用 而不是 ,则问题会消失memoir

解决方案:还添加

\immediate\write\@auxout{\catcode`^=12 }%

到上面的设置:

\makeatletter
\AtBeginDocument{% <-- add this
    \catcode`_=12
    \begingroup\lccode`~=`_
    \lowercase{\endgroup\let~}\sb
    \mathcode`_="8000
    \immediate\write\@auxout{\catcode`_=12 }% <-- add this
    \immediate\write\@auxout{\catcode`^=12 }% <-- add this
}
\makeatother

相关内容