我一直在单独使用breqn
和cleveref
包,我认为它们都是很棒的包;但最近我尝试将它们一起使用,但似乎无法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}