使用 amsmath 和 mathabx 会弄乱在 vec 上堆叠 widehat

使用 amsmath 和 mathabx 会弄乱在 vec 上堆叠 widehat

这是一个简单的例子:

\documentclass[11pt]{article}

\usepackage{amsmath}
\usepackage{mathabx}

\begin{document}

\[\widehat{\vec{v}_{i-1}}\]

\end{document}

我期望这会在整个 上生成一个宽帽\vec{v}_{i-1},但实际上各个组件是随机间隔和重叠的。如果我删除 或amsmathmathabx问题就会消失。我该如何解决这个问题?我需要在一篇论文中排版这个,这篇论文必须使用amsmathmathabx

答案1

虽然amsmath使用了一种相当复杂的方法来处理数学重音,但为了能够正确地堆叠其中两个,它不会修改\widehat(和\widetilde) 的定义。但是,它确实重新定义了 的工作原理\DeclareMathAccent,以便在加载后声明的重音使用堆叠重音的代码。

另一方面,mathabx与并不真正兼容amsmath,因为它的重新定义会抹杀一些amsmath特性。

解决该具体问题的方法是恢复\widehat和的工作定义\widetilde

\documentclass[11pt]{article}

\usepackage{amsmath}
\usepackage{mathabx}

\renewcommand{\widehat}{\mathaccent "0670\relax}
\renewcommand{\widetilde}{\mathaccent "0672\relax}

\begin{document}

\[\widehat{\vec{v}_{i-1}}\qquad \widetilde{\vec{v}_{i-1}}\]

\end{document}

在此处输入图片描述

您可能应该导入所需的符号,而不是加载整个符号mathabx,请参阅从不同字体导入单个符号

答案2

如果你不需要mathx家人,只使用\usepackage[matha,mathb]{mathabx}它可以。

\documentclass[11 pt]{article}

\usepackage{amsmath}
\usepackage[matha,mathb]{mathabx}

\begin{document}

\[\widehat{\vec{v}_{i-1}}\]

\end{document}

否则,这里有一个肮脏的解决办法:

\documentclass[11 pt]{article}
\usepackage{stackengine}

\usepackage{amsmath}
\usepackage{mathabx}

\begin{document}
\[
\stackinset{c}{}{t}{-3pt}{$\widehat{\phantom{{v}_{i-1}}}$}{$\vec{v}_{i-1}$}
\]
\end{document}

在此处输入图片描述

相关内容