breqn 和改变 sqrt 符号的代码之间有奇怪的交互。分数对齐变得不好

breqn 和改变 sqrt 符号的代码之间有奇怪的交互。分数对齐变得不好

我想指出这个奇怪的问题。我使用的是来自 answer 的代码自动改善数学表达式之间的间距? 这会改变 sqrt 符号,因此

enter image description here

现在看起来像

enter image description here

奇怪的是,当我加载 breqn 时,奇怪的事情发生了。比较一下

\documentclass[12pt]{book}

\usepackage{amsmath} 
\usepackage{breqn}

\iftrue
%see https://tex.stackexchange.com/questions/553382/improving-spacing-between-math-expressions-automatically
%added july 13, 2020
% Give a nicer sqrt symbol. 
\usepackage{letltxmacro}
\makeatletter
\let\oldr@@t\r@@t
\def\r@@t#1#2{%
    \setbox0=\hbox{$\oldr@@t#1{#2\,}$}\dimen0=\ht0
    \advance\dimen0-0.2\ht0
    \setbox2=\hbox{\vrule height\ht0 depth -\dimen0}%
    {\box0\lower0.4pt\box2}}
\LetLtxMacro{\oldsqrt}{\sqrt}
\renewcommand*{\sqrt}[2][\ ]{\oldsqrt[#1]{#2}\,}
\makeatother
\fi 

\begin{document}
\[
\frac{\sqrt{2}\, \mathrm{arctanh} \left(\frac{f \sqrt{2}}{2 \sqrt{c_{1}}}\right)}{\sqrt{c_{1}}}
\]

\end{document}

使用 lualatex 编译,得到

enter image description here

字母f对齐变得不好。它已经倒下了。再次编译上述内容,但不加载 breqn,这是输出

enter image description here

现在f基数较高,这是正常的。

因此,目前我删除了改变 sqrt 符号的代码,并保留了breqn,因为我更需要这个。这是结果

\documentclass[12pt]{book}

\usepackage{amsmath} 
\usepackage{breqn}

\begin{document}
\[
\frac{\sqrt{2}\, \mathrm{arctanh} \left(\frac{f \sqrt{2}}{2 \sqrt{c_{1}}}\right)}{\sqrt{c_{1}}}
\]

\end{document}

enter image description here

这事谁对谁错? 是breqn上面链接的问题中的代码改变了 sqrt 符号,导致了这个对齐问题吗?

答案1

问题不在于 f,而在于根:它太大了。正如评论中提到的那样(以及之前的回答),breqn 重新定义了数学排版的许多方面。这让它变得非常脆弱。除此之外,它还加载了 mathstyle 包,该包重新定义了原始\mathchoice命令,并且不能正确处理带有可选参数的平方根。正如下面所看到的,如果您手动强制使用脚本样式或恢复为原始样式\mathchoice(但这可能会破坏 breqn 中的其他内容...),它就会起作用。

\documentclass[12pt]{book}
\usepackage{amsmath} 

\let\orimathchoice\mathchoice
\usepackage{mathstyle}

\begin{document}
\[
\frac{\frac{f\sqrt[x]{2}  \sqrt{2}}{2}}{xxx}
\]

\[
\frac{\frac{f\scriptstyle \sqrt[x]{2}\sqrt{2}}{2}}{xxx}
\]

\let\mathchoice\orimathchoice

\[
\frac{\frac{f\sqrt[x]{2}  \sqrt{2}}{2}}{xxx}
\]

\end{document}

enter image description here

相关内容