如何调整stackrel的精细定位?

如何调整stackrel的精细定位?

我使用 stackrel 定义自定义堆叠关系符号:

\def\qMapsfrom{\stackrel{?}{\Mapsfrom}}

但是问号没有正确居中,并且与 的距离太大\Mapsfrom。有没有办法微调 的垂直和水平间距\stackrel

答案1

对于垂直间距,您可以使用它\raisebox{<amount>}{<content>}来提高或降低(负量)内容。水平居中已在类似问题中显示 用另一个符号覆盖符号,这里可能需要稍微调整一下:

这是我的建议。它适用于所有不同数学模式下显示的测试。

\documentclass{article}

\usepackage{amsmath}
\usepackage{stmaryrd}

\newcommand\qMapsfrom{\mathrel{%
    \mathchoice{\qmf}{\qmf}{\scriptsize\qmf}{\tiny\qmf}%
}}
\newcommand\qmf{{%
    \setbox0\hbox{$\Mapsfrom$}%
    \rlap{\hbox to \wd0{\hss\hss\hss\raisebox{-.15\height}{?}\hss}}\box0
}}

\textwidth=2cm
\begin{document}

$ A \qMapsfrom B $

$ A \Mapsfrom B $

\[ A \qMapsfrom B \]
\[ A \Mapsfrom B \]

$ S_{ A \qMapsfrom B } $

$ S_{ A \Mapsfrom B } $

$ S_{S_{ A \qMapsfrom B }} $

$ S_{S_{ A \Mapsfrom B }} $

\end{document}

更新:

我刚想amsmath起来\text可用于数学样式依赖缩放。它已经使用与上面类似的代码。这将宏简化为:

\newcommand\qMapsfrom{\mathrel{\text{%
    \setbox0\hbox{$\Mapsfrom$}%
    \rlap{\hbox to \wd0{\hss\hss\hss\raisebox{-.15\height}{?}\hss}}\box0
}}}

结果

答案2

有一个更简洁的方法,可以避免马丁的许多盒子

\newcommand{\qMapsfrom}{\mathrel{\mathpalette\qmf\relax}}
\newcommand{\qmf}[2]{%
  \ooalign{$#1\Mapsfrom$\cr
    \hidewidth\raisebox{-.15ex}{$#1\mkern6mu?$}\hidewidth\cr}}

该代码实际上是受马丁的启发,但似乎更清晰,更容易适应其他字体(需要一些反复试验才能正确定位问号)。

相关内容