![数学映射 f:A\to B 的宏](https://linux22.com/image/434411/%E6%95%B0%E5%AD%A6%E6%98%A0%E5%B0%84%20f%3AA%5Cto%20B%20%E7%9A%84%E5%AE%8F.png)
我想为数学图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}