数学模式星号命令的奇怪行为

数学模式星号命令的奇怪行为
\documentclass[a4paper]{report}
\usepackage{amsmath,amsfonts,amssymb}
\makeatletter
\newcommand{\2}{\@ifstar{\hspace{2pt}}{\hspace{-2pt}}}
\newcommand{\dd}{\@ifstar{\,}{}\mathrm{d}}

\begin{document}
$$a\dd*x\2*b.$$
\end{document}

我期望从中得到相当于 的结果$$a\,\mathrm{d}x\hspace{2pt}b.$$。相反,我得到的是:

在此处输入图片描述

它看起来像 的等价物$$a\mathrm{d}*x\hspace{2pt}b.$$。为什么 带星号的版本的\dd行为不符合预期?

答案1

如果你的期望正确,它的行为将符合预期。\@ifstar检查两个参数后的第一个非空白标记是否为*

\newcommand{\dd}{\@ifstar{\,}{}\mathrm{d}}

这意味着它总是检查是否\mathrm*

与之比较

\newcommand{\dd}{\@ifstar{\,\mathrm{d}}}{\mathrm{d}}}

相关内容