\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}}}