目的是定义\overmapsto
哪个接受参数并产生类似于amsmath
命令\overleftrightarrow
和朋友的结果。但是,当然,箭头类型应该是\mapsto
。
我尽力自己定义它;但我不知道如何解决某个间距问题(看起来更好,并且自动化)。而且它伸展得不好。这是 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}
输出如下:
正如我们所见,\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
答案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
来自箭头 包裹。