\newcommand 的默认参数

\newcommand 的默认参数

我已经创建了一个命令来快速为我的 ODE 类插入导数运算符,但我想将四个字段中的两个字段默认为某些值,因为它们将是最常用的,但可能需要更改。

\newcommand{\dydx}[4]{\frac{d^{#1}{#2}}{d{#3}^{#4}}}

我希望 #2 和 #3 默认分别为 y 和 x,但可以在需要时进行更改\dxdy{2}{u}{t}{2}

答案1

如果你不介意改变语法,

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\NewDocumentCommand{\dydx}{O{y}mO{x}}{%
  \frac
    {d\ifnum#2=1\else^{#2}\fi#1}
    {d#3\ifnum#2=1\else^{#2}\fi}%
}

\begin{document}

\[
\dydx{2}+\dydx[u]{2}[t]+\dydx[v]{1}+\dydx{3}[t]
\]

\end{document}

在此处输入图片描述

也许您会喜欢下面的方式,并得到相同的输出。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\dydx}{O{}}
 {
  \group_begin:
  \keys_set:nn { scott/dydx } { #1 }
  \scott_dydx:
  \group_end:
 }

\keys_define:nn { scott/dydx }
 {
  x .tl_set:N = \l__scott_dydx_x_tl,
  y .tl_set:N = \l__scott_dydx_y_tl,
  n .tl_set:N = \l__scott_dydx_n_tl,
  x .initial:n = x,
  y .initial:n = y,
 }
\cs_new_protected:Nn \scott_dydx:
 {
  \frac
   {
    d
    \tl_if_empty:NF \l__scott_dydx_n_tl { ^{\l__scott_dydx_n_tl } }
    \l__scott_dydx_y_tl
   }
   {
    d
    \l__scott_dydx_x_tl
    \tl_if_empty:NF \l__scott_dydx_n_tl { ^{\l__scott_dydx_n_tl } }
   }
 }
\ExplSyntaxOff

\begin{document}

\[
\dydx[n=2]+\dydx[y=u,x=t,n=2]+\dydx[y=v]+\dydx[n=3,x=t]
\]

\end{document}

相关内容