在我正在准备的一份文档中,我大量使用了该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