![使用 amsmath 和 mathabx 会弄乱在 vec 上堆叠 widehat](https://linux22.com/image/362480/%E4%BD%BF%E7%94%A8%20amsmath%20%E5%92%8C%20mathabx%20%E4%BC%9A%E5%BC%84%E4%B9%B1%E5%9C%A8%20vec%20%E4%B8%8A%E5%A0%86%E5%8F%A0%20widehat.png)
这是一个简单的例子:
\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{mathabx}
\begin{document}
\[\widehat{\vec{v}_{i-1}}\]
\end{document}
我期望这会在整个 上生成一个宽帽\vec{v}_{i-1}
,但实际上各个组件是随机间隔和重叠的。如果我删除 或amsmath
,mathabx
问题就会消失。我该如何解决这个问题?我需要在一篇论文中排版这个,这篇论文必须使用amsmath
和mathabx
。
答案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}