如何更改 xrightarrow 定义的样式

如何更改 xrightarrow 定义的样式

我们知道,\xrightarrow可以给出上标(箭头上方)和下标(箭头下方)。例如

X\xrightarrow{f}Y

X\xrightarrow[g]{f}Y

但是,我想定义一个命令,使其具有以下样式:

X\xra Y Equals to X\rightarrow{} Y
X\xra^{f}Y Equals to X\xrightarrow{f}Y
X\xra_{g}Y Equals to X\xrightarrow[g]Y

如何解决这个问题?

答案1

按任意顺序检查^和:_

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\DeclareRobustCommand{\xra}{%
  \def\xra@upper{}%
  \def\xra@lower{}%
  \xra@checksup
}
\newcommand{\xra@checksup}{\@ifnextchar^{\xra@sup}{\xra@checksub}}
\newcommand{\xra@sup}[2]{% #1 is ^
  \def\xra@upper{#2}%
  \xra@checksub
}
\newcommand{\xra@checksub}{\@ifnextchar_{\xra@sub}{\xra@do}}
\newcommand{\xra@sub}[2]{% #1 is _
  \def\xra@lower{#2}%
  \xra@checksup
}
\newcommand{\xra@do}{%
  \ifx\xra@sub\@empty
    \xrigtharrow{\xra@upper}%
  \else
    \xrightarrow[\xra@lower]{\xra@upper}
  \fi
}
\makeatother

\begin{document}

$A \xra B$

$A\xra^{f} B$

$A\xra^{f}_{g} B$

$A\xra_{g} B$

$A\xra_{g}^{f} B$

\end{document}

在此处输入图片描述

答案2

这是一种方法。可能不是最好的

\documentclass[a4paper]{article}
\usepackage{xparse,amsmath,amssymb}
\NewDocumentCommand\xra{ t_ t^  m}{
  \IfBooleanTF{#1}{
    \xrightarrow[#3]{}
  }{
    \IfBooleanTF{#2}{
      \xrightarrow{#3}
    }{
      \to #3
    }
  }
}
\begin{document}
\begin{align*}
  X \xra_ t  Y \\
  X \xra^ t  Y \\
  X \xra   Y \\
\end{align*}
\end{document}

相关内容