如何定义:\overmapsto 类似于 amsmath 的 \overrightleftarrow?

如何定义:\overmapsto 类似于 amsmath 的 \overrightleftarrow?

目的是定义\overmapsto哪个接受参数并产生类似于amsmath命令\overleftrightarrow和朋友的结果。但是,当然,箭头类型应该是\mapsto

为方便起见:amsmath文档代码实现


我尽力自己定义它;但我不知道如何解决某个间距问题(看起来更好,并且自动化)。而且它伸展得不好。这是 MWE;我的尝试被称为\overmapsto并基于 amsmath 的代码:

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


\newcommand{\ray}[1]{\overset{\mapsto}{#1}} % <- this is just \mapsto with \overset
\newcommand{\sline}[1]{\overleftrightarrow{#1}} %<- just a renaming of amsmath's \overleftrightarrow
\newcommand{\rline}[1]{\overrightarrow{#1}} %<- just a renaming of amsmath's \overrightarrow

%%vv my attempt vv%%

\makeatletter
\def\maptstoarrowfill@{\arrowfill@\relbar\relbar\mapsto}
\newcommand{\overmapsto}{%
\mathpalette{\overarrow@\maptstoarrowfill@}}
\makeatother

%%^^ my attempt ^^%%

\begin{document}
    
    ray: $\ray{r}$
    
    sline: $\sline{r}$
    
    rline: $\rline{r}$ (also ugly)
    
    -----------------
    
    ugly spacing: $\overmapsto{r}$
    
    better but not automatic: $\overmapsto{r\,}$
    
    doesn't stretch nicely: $\overmapsto{rrrrr}$
    
\end{document}

输出如下:

MWE 的输出


正如我们所见,\mapsto箭头\overmapsto太近了对于论点,在本例中是这封信r。拉伸也不起作用:垂直线放错了位置。

  • 问:如何改善输出?也许将参数稍微居中一点(即,将箭头\mapsto向右移动一点点)?如何使其正确拉伸?

请注意,amsmath's\overrightarrow存在与 "my" 相同的间距问题\overmapsto,因此我无法用自己的方式找到更好的间距。

答案1

该版本在某种程度上与数学风格相适应,并尝试考虑字母的倾向。

\documentclass[12pt]{article}

\usepackage{amsmath}% not strictly necessary

\newcommand*{\smallerstyle}[1]{%
   \ifx#1\displaystyle\scriptstyle\else
   \ifx#1\textstyle\scriptstyle\else
   \scriptscriptstyle\fi\fi
}

\makeatletter

\newcommand*{\overmapsto}{\mathpalette\over@mapsto}

\newcommand{\over@mapsto}[2]{%
   \setbox0=\hbox{$#1#2\mathchar"717F$}%
   \dimen@=\wd0
   \setbox0=\hbox{$#1#2\kern0pt\mathchar"717F$}%
   \advance\dimen@-\wd0
   \vbox{%
      \m@th
      \offinterlineskip
      \ialign{##\cr
              \kern2\dimen@$\smallerstyle#1\mapstochar-\mkern-6mu\cleaders\hbox{$\smallerstyle#1\mkern-2mu-\mkern-2mu$}\hfill\mkern-7mu{\rightarrow}$\cr
              \hfil$#1#2$\hfil\cr
             }%
   }%
}

\makeatother

\begin{document}
    
$\overmapsto{r} \; \overmapsto{rrrrr} \; \overmapsto{A} \; \overmapsto{ABCD} \; \overmapsto{\Gamma}$

$\scriptstyle \overmapsto{r} \; \overmapsto{rrrrr} \; \overmapsto{A} \; \overmapsto{ABCD} \; \overmapsto{\Gamma}$

$\scriptscriptstyle \overmapsto{r} \; \overmapsto{rrrrr} \; \overmapsto{A} \; \overmapsto{ABCD} \; \overmapsto{\Gamma}$
    
\end{document}

在此处输入图片描述

amsmath箭头相反,我使用较小的样式。如果您想要拥有与可扩展箭头相同的外观(在我看来并不出色),只需删除中amsmath的两个。\smallerstyle\over@mapsto

答案2

这只是一个小小的建议,仅供参考raccents包装如下姆韦

\documentclass[a4paper,12pt]{article}
\usepackage{amsmath,amssymb}
\usepackage{accents}

\begin{document}
$\accentset{\mapsto}{r}$
\end{document}

在此处输入图片描述

答案3

我写了包箭头来处理这些问题。

\overmapsto可以这样定义:

\NewOverArrowCommand{overmapsto}{%
  start={\mapstochar},
  trim start=-2.2,
  shift left=0,
  shift right=-6,
  min length=12,
}

查看结果:

\documentclass{article}

\usepackage{overarrows}

\NewOverArrowCommand{overmapsto}{%
  start={\mapstochar},
  trim start=-2.2,
  shift left=0,
  shift right=-6,
  min length=12,
}

\begin{document}

$\overmapsto{r} \quad \overmapsto{rrrrr} \quad \overmapsto{A} \quad \overmapsto{ABCD} \quad \overmapsto{\Gamma}$

$\scriptstyle \overmapsto{r} \quad \overmapsto{rrrrr} \quad \overmapsto{A} \quad \overmapsto{ABCD} \quad \overmapsto{\Gamma}$

$\scriptscriptstyle \overmapsto{r} \quad \overmapsto{rrrrr} \quad \overmapsto{A} \quad \overmapsto{ABCD} \quad \overmapsto{\Gamma}$

\bigskip

\TestOverArrow{overmapsto}

\end{document}

这使: 在此处输入图片描述

\NewOverArrowCommand\TestOverArrow来自箭头 包裹。

相关内容