我想标记一个\rightarrowtail
,但箭头对于我的标签来说太短了。所以我想要一个这个箭头的可扩展版本。我试过 extpfeil 包,但不确定如何使用它来创建我的箭头。目前,如果我有一个如下所示的箭头状符号,我会知道如何做:
“>--”
但是,我不知道有这样的符号。Detexify 和符号列表似乎也没有。我应该如何制作箭头?
答案1
另一种选择是使用 TikZ 定义\xrightarrowtail
宏:
\documentclass{amsart}
\usepackage{tikz}
\makeatletter
\newbox\xrat@below
\newbox\xrat@above
\newcommand{\xrightarrowtail}[2][]{%
\setbox\xrat@below=\hbox{\ensuremath{\scriptstyle #1}}%
\setbox\xrat@above=\hbox{\ensuremath{\scriptstyle #2}}%
\pgfmathsetlengthmacro{\xrat@len}{max(\wd\xrat@below,\wd\xrat@above)+.6em}%
\mathrel{\tikz [>->,baseline=-.75ex]
\draw (0,0) -- node[below=-2pt] {\box\xrat@below}
node[above=-2pt] {\box\xrat@above}
(\xrat@len,0) ;}}
\makeatother
\begin{document}
\[ f : G \xrightarrowtail[{\star}]{\text{\textbf{Grp}}} H \]
\end{document}
这将产生输出
(amsart
文档类只用于获取\text
,不用于宏定义。)
编辑:我意识到我应该解释一下这里发生了什么。这并不太复杂:我们分配框\xrat@below
和\xrat@above
来存储我们要放置在上方和下方的文本,并使用设置为脚本样式数学的参数填充它们。然后,我们将\xrat@len
箭头长度设置为两个宽度中较大的一个加上两边的 0.6 em 作为填充。然后我们只需绘制箭头,将下方框放在下方,将上方框放在下方。值得注意的是+.6em
,、、baseline=.75ex
和中的值below=-2pt
都是above=-2pt
完全任意的,是我简单调整的结果;更改它们可能会为您的用例提供更好的结果。选项baseline
将箭头向上移动到中间,而不是沿着地面移动,和below
选项above
将文本设置得更靠近箭头,这是本上下文所需的。
更好的解决方案可能是弄清楚如何使用删除它,这将需要您首先询问的 缺失的amsmath
的\ext@arrow
命令(它使用该命令来定义\xleftarrow
和\xrightarrow
,其他类似命令的软件包似乎也使用该命令),但我不知道它是如何工作的。\arrowtail
( ) 宏(因为在后台也使用)。 我想最好的办法可能是在 Metafont 或类似程序中创建这样的字符,但我不确定如何做到这一点。>--
extpfeil
\ext@arrow
答案2
类似于以下三个中的一个,或者其变体:
\documentclass{article}
\usepackage{extpfeil}
\newextarrow{\injecta}{5599}{\succ\relbar\relbar}
\newextarrow{\injectb}{5599}{>\relbar\relbar}
\newextarrow{\injectc}{5599}{\succ\relbar\rightarrow}
\begin{document}
\[x\injecta[under]{above}y\]
\[x\injectb[under]{above}y\]
\[x\injectc[under]{above}y\]
\end{document}
编辑:输出如下:
答案3
像这样吗?
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\makeatletter
\newcommand\xlongrightarrow[2][]{\ext@arrow 0055{\longrightarrowfill@}{#1}{#2}}
\def\longrightarrowfill@{\arrowfill@{>\mkern3mu}\relbar\relbar}
\makeatother
\begin{document}
$\xlongrightarrow[foo]{\text{looooong}}$
\end{document}