我有一个表示具有特定属性“属性”的同态的符号,其代码类似于
\newcommand*{\verylongrightarrow}{\relbar\joinrel\relbar\joinrel\relbar\joinrel\rightarrow}
\newcommand{\homprop}{\mathrel{\overset{\textup{property}}{\verylongrightarrow}}}
(这个想法是在箭头上方插入单词“property”。当然,“property”只是一个虚拟词,用于此目的。)
现在我用符号\twoheadrightarrow
来表示同态是全射。
如果同态恰好是全射并且具有属性“property”,我想像以前一样在箭头上方添加“property”。
这或多或少是正确的,只是,当高于 时\twoheadrightarrow
,我得到的文本比 稍微高一些\rightarrow
。
我想到的一个解决方案是使用\raisebox
。然而,这更糟糕,因为(我想这就是原因)它创建了一个新的框,它“忘记”了它在范围内\overset
并以正常大小打印属性的名称。
有没有更好的方法呢?
(我真的不知道我是否选择了正确标签。请随意编辑。)
答案1
\verylongrightarrow
我建议您不要创建自己的宏,而是使用\xrightarrow
或加载extarrows
包并使用其\xlongrightarrow
宏。 产生的箭头\xlongrightarrow
比 产生的箭头稍长\xrightarrow
。
请注意,使用\xrightarrow
和\xlongrightarrow
时,无需提前决定\relbar
长箭头中应使用多少个 s。此外,使用这些宏,单词“property”中的字母“y”不会与箭头头纠缠在一起。
\documentclass{article}
\usepackage{amsmath,extarrows}
\newcommand*{\verylongrightarrowa}{\relbar\joinrel\relbar\joinrel\relbar\joinrel\rightarrow}
\newcommand*{\hompropa}{\mathrel{\overset{\textup{property}}{\verylongrightarrowa}}}
\newcommand*{\verylongrightarrowb}{\xlongrightarrow{\phantom{\textup{property}}}}
\newcommand*{\hompropb}{\xlongrightarrow{\textup{property}}}
\begin{document}
\obeylines
$\verylongrightarrowa$
$u\hompropa v$
\medskip
$\verylongrightarrowb$
$u\hompropb v$
\end{document}
答案2
这是默认字体特有的(使用 Minion Pro 时我没有遇到此问题)。解决方法是“粉碎” \twoheadrightarrow
。不过,我建议一种变体:定义一个可扩展双头右箭头,其行为类似于\xrightarrow
,箭头上方有一个参数,箭头下方有一个可选参数,均以 \scriptsize 为单位。指南第 38 节对此进行了记录Mathmode
。
在此基础上我定义了一个\xhomprop
和a\xhomontoprop
命令。你可以在以下代码中看到两种解决方案:
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsfonts, amssymb, latexsym}
\usepackage{lmodern, mathtools}
\makeatletter
\newcommand{\xtwoheadrightarrow}[2][]{%
\ext@arrow 0099\xtwoheadfill@{#1}{#2}%
}%
\newcommand{\xtwoheadfill@}{%
\arrowfill@\relbar\relbar{\mathrel{\vphantom{ → }\smash{\twoheadrightarrow}}}
\newcommand*{\verylongrightarrow}{\relbar\joinrel\relbar\joinrel\relbar\joinrel → }
\newcommand{\homprop}{\mathrel{\overset{\textup{property}}{\verylongrightarrow}}}
\makeatother
\newcommand*{xhomprop}{\xrightarrow{\text{property}}}
\newcommand*{xhomontoprop}{\xtwoheadrightarrow{\text{property}}}
\newcommand*{\verylongtwoheadrightarrow}{\vphantom{ → }\smash{\relbar\joinrel\relbar\joinrel\relbar\joinrel\twoheadrightarrow}}
\newcommand{\homontoprop}{\mathrel{\overset{\textup{property}}{\verylongtwoheadrightarrow}}}
\begin{document}
\[ \begin{array}{l@{\qquad}ll}
\homprop & \homontoprop \\
\xrightarrow{\text{property}} & \xtwoheadrightarrow{\text{property}}
\end{array} \]
\end{document}