breqn 和 \dashint 之间的冲突

breqn 和 \dashint 之间的冲突

如果我使用以下代码来获取平均积分

\documentclass{article}

\usepackage{scalerel}
\usepackage[usestackEOL]{stackengine}

\def\dashint{\,\ThisStyle{\ensurestackMath{%
            \stackinset{c}{.2\LMpt}{c}{.5\LMpt}{\SavedStyle-}{\SavedStyle\phantom{\int}}}%
        \setbox0=\hbox{$\SavedStyle\int\,$}\kern-\wd0}\int}

\begin{document}

    $\dashint f(t)\,dt$

\end{document}

我得到了这个好的结果:

在此处输入图片描述

但是,如果我还加载包布雷克(无论我在序言中把 \usepackage{breqn} 这一行放在哪里)它都不再起作用,即我得到了这个奇怪的结果:

在此处输入图片描述

有人能知道原因吗?

答案1

看起来好像breqn有一个 bug 被破坏了\mathchoice

以下是显示的 MWE:

\documentclass{article}
\usepackage{breqn}
\begin{document}
$\mathchoice{Displaystyle}{Textstyle}{Scriptstyle}{scriptscriptstyle}$
\end{document}

在此处输入图片描述

\mathchoice宏是用于区分数学模式样式的基本 TeX 命令。如果breqn未加载,上述情况应产生“Textstyle”,并且确实如此。这表明代码处于\textstyle数学模式。但是,加载 breqn 后,它会输出“Displaystyle”。

scalerel如果不知道所处的实际数学风格,该包就无法运行,因为它用于\mathchoice解码其\ThisStyle{...\SavedStyle...}语法。

对于 OP 的宏来说,问题在于,在breqn加载后,宏内的堆栈dashint会设置\int显示样式,即使\dashint以文本样式调用,如 OP 的示例一样。


虽然我最初展示了一种手动解决方法,但 OP 提醒我(引用了这个问题:mhchem 和 breqn 之间发生冲突。有什么方法可以避免或修复吗?\mathchoice),可以在加载之前保存旧的定义breqn,然后暂时恢复以供使用\dashint。这样,scalerel\ThisStyle{...\SavedStyle...}就可以正常运行。

代码如下:

\documentclass{article}

\usepackage{scalerel}
\usepackage[usestackEOL]{stackengine}
\let\oldmathchoice\mathchoice
\usepackage{breqn}
\let\newmathchoice\mathchoice

\def\dashint{\let\mathchoice\oldmathchoice\,\ThisStyle{\ensurestackMath{%
            \stackinset{c}{.2\LMpt}{c}{.5\LMpt}{\SavedStyle-}{%
            \SavedStyle\phantom{\int}}}%
        \setbox0=\hbox{$\SavedStyle\int\,$}\kern-\wd0}\int%
        \let\mathchoice\newmathchoice}

\begin{document}
\centering
    $\dashint_a^b f(t)\,dt$

    \[\dashint_a^b f(t)\,dt\]
\end{document}

在此处输入图片描述

相关内容