Cleveref 和 breqn 软件包不能很好地协同工作

Cleveref 和 breqn 软件包不能很好地协同工作

我一直在单独使用breqncleveref包,我认为它们都是很棒的包;但最近我尝试将它们一起使用,但似乎无法cleveref识别dmath环境,因此我对方程式的所有引用都引用了包含部分。有没有办法让这些包一起工作?

下面是一个说明该问题的 MWE:

\documentclass{article}
\usepackage{breqn}
\usepackage{cleveref}

\begin{document}

\section{Content}

\begin{dmath}\label{equ:test}
a=d+c
\end{dmath}
\cref{equ:test}

\end{document}

在此处输入图片描述

答案1

另一个答案,允许您\label正常使用:

问题是由于cleveref依赖于重新定义 而引起的\refstepcounter,而breqn并不真正使用它来推进equation计数器。幸运的是,cleveref处理脚注的代码不使用\refstepcounter,它为将 s 作为另一种特殊情况处理提供了基础,dmath即在 中添加一些代码\eq@setnumber

\makeatletter
\let\cref@old@eq@setnumber\eq@setnumber
\def\eq@setnumber{%
\cref@old@eq@setnumber%
\cref@constructprefix{equation}{\cref@result}%
\protected@xdef\cref@currentlabel{%
[equation][\arabic{equation}][\cref@result]\p@equation\theequation}}
\makeatother

将此代码包含在序言中可为 MWE 产生正确的结果。

答案2

我曾经用过Ant 的 makeatletter 方法,但包含 2014 年 2 月 MikTex 2.9 安装中包含的软件包:

Package: cleveref 2013/12/28 v0.19 Intelligent cross-referencing
Package: breqn 2012/05/10 v0.98b Breaking equations

这开始导致:

TeX capacity exceeded, sorry [input stack size=5000]

错误。

现在,dmath 和 cleverref 似乎默认可以很好地协同工作,因此升级 latex 包现在似乎是一个可行的解决方案。

答案3

虽然不太理想,但一种解决方法是equation向每个标签添加一个可选参数:

\label[equation]{equ:test}

相关内容