数学映射 f:A\to B 的宏

数学映射 f:A\to B 的宏

我想为数学图f:A\to B在内联数学模式和f:A\longrightarrow B显示数学时编写一个宏。但我不知道如何检查它是在内联模式还是显示样式。

这是我的尝试:

\documentclass{article}

\newcommand{\map}[3]{#1\mathpunct{:}#2\longrightarrow #3}

\begin{document}

$\map{f}{A}{B}$
\[\map{f}{A}{B}\]
\end{document}

我已经尝试了以下但它产生了Undefined control sequence. $\map

\makeatletter
\newcommand[3]{\map}{
    #1\mathpunct{:}#2
    \if@display
    \longrightarrow #3
    \else
    \rightarrow #3
    \fi}
\makeatother

答案1

您无法使用 if 测试来区分 displaystyle 和 text style,因为使用纯 TeX\over会在事后更改 mathstyle。但您可以使用\mathchoice提供四个表达式(每个数学大小一个(display/text/script/scriptscript)),并且实际上只会显示正确大小的表达式:

\documentclass{article}

\newcommand{\map}[3]{#1\colon #2\mathchoice{\longrightarrow}{\to}{\to}{\to}#3}

\begin{document}

$\map{f}{A}{B}$
\[\map{f}{A}{B}\]
\end{document}

相关内容