定义带有可选参数的宏

定义带有可选参数的宏

我喜欢定义带有可选参数的宏。例如,考虑一个微分宏:

\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{bm}

\newcommand\drm{\mathop{}\!\mathrm{d}}
\newcommand\Drm[1]{\mathop{}\!\mathrm{d^#1}}

\begin{document}

\begin{equation}
\int\limits_0^\infty \drm t \, f(t)
\end{equation}

\begin{equation}
\int\limits_0^\infty \Drm{3} r \, g(\bm{r})
\end{equation}

\end{document}

差速器的宏取自先前的帖子。除了我自己的问题,为什么\mathop{}在微分的定义中有一个?但其次,我如何才能实现一个将它们放在一起的宏?就像 一样\sqrt,你可以做\sqrt{x}\sqrt[3]{x}。我喜欢做\drm\drm[3]

答案1

你确定要

\newcommand\Drm[1]{\mathop{}\!\mathrm{d^#1}}

而不是

\newcommand\Drm[1]{\mathop{}\!\mathrm{d}^{#1}}

我认为这会更常见(如果上标是数字则没有区别,但请尝试) ,如果可能有两位数字,n则肯定需要{}左右。#1

为了使参数可选,你可以使用

 \newcommand\Drm[1][]{\mathop{}\!\mathrm{d}^{#1}}

但这样会产生^{}空的情况,从而影响间距,所以更好的是

 \newcommand\Drm[1][\relax]{%
   \mathop{}\!\mathrm{d}\ifx\relax#1\relax\else^{#1}\fi}

在默认情况下省略上标。

相关内容