不插入规则的举帽运算符

不插入规则的举帽运算符

在发布之前我已经查看了一段时间,但我自己或在网上都没有找到解决方案,所以我在这里询问。

基本上,我必须写下一些运算符,并且我想要一个\mathbf顶部带有粗体帽子的方面,例如

\newcommand{\op}[1]{\mathop{}\!\mathbf{\hat{#1}}}
% ...
\op{O}

这或多或少正是我想要的:

在此处输入图片描述

麻烦就来了。

  1. 对于某些字母,让我们挑选最有问题的字母,例如“X”,我有这种可怕的行为:

在此处输入图片描述

当从很远的距离看它时,符号显得太近,因此它叠加在 X 上产生了恼人的混叠(乍一看也不是完全清楚)。

  1. 当我必须用匕首表示伴随时,如果我有网络上推荐的规则来升起帽子(我不喜欢这个规则,因为每个字母的升起量相同),我会遇到一些符号问题\dagger

    \newcommand{\opdag}[1]{\mathop{}\!\mathbf{\hat{\rule{0pt}{1.5ex}#1}^{\dag}}}
    % ...
    \opdag{X}
    

在此处输入图片描述

所以匕首太高了,我真的不喜欢它。

总结一下,我想找到一种方法,将帽子稍微抬高到字母上方,但根据帽子下方的内容使用可变的拉伸系数,并且不干扰上标。基本上,如果可以重新定义帽子在字母上方的高度,那么这些目标中的每一个都可以实现。

谢谢你的帮助!

答案1

使用堆栈可以调整帽子的垂直间隙……\smash这样就不会[极大地]影响后续的上标。

\documentclass{article}
\usepackage{stackengine}
\newcommand{\op}[1]{\mathop{}\!\ensurestackMath{\stackon[-.95ex]{%
  \mathbf{#1}}{\smash{\mathbf{\hat{}}}}}}
\newcommand{\opdag}[1]{\mathop{}\!\op{#1}^{\dag}}
\begin{document}

$ \mathbf{O} \op{O} \opdag{O} \mathbf{O}^\dag$

$ \mathbf{X} \op{X} \opdag{X} \mathbf{X}^\dag$

$ \mathbf{x} \op{x} \opdag{x} \mathbf{x}^\dag$

\end{document}

在此处输入图片描述

制造\op\opdag 完全不受上标位置影响,可以将\smash整个东西都使用\vphantom。另外,为了演示,我将堆栈间隙从更改-.95ex-1.1ex显示帽子位置的可调性:

\documentclass{article}
\usepackage{stackengine}
\newcommand{\op}[1]{\mathop{}\!\ensurestackMath{\smash{\stackon[-1.1ex]{%
    \mathbf{#1}}{\mathbf{\hat{}}}}}\vphantom{#1}}
\newcommand{\opdag}[1]{\mathop{}\!\op{#1}^{\dag}}
\begin{document}

$ \mathbf{O} \op{O} \opdag{O} \mathbf{O}^\dag$

$ \mathbf{X} \op{X} \opdag{X} \mathbf{X}^\dag$

$ \mathbf{x} \op{x} \opdag{x} \mathbf{x}^\dag$

\end{document}

在此处输入图片描述

相关内容