我定义了一个用于编写偏导数的宏:
\newcommand{\pder}[2]{\frac{\partial#1}{\partial#2}}
这在插入两个参数时有效。但我想修改它,以便当仅插入单个参数时,它将分子留空,只用该参数填充分母。即
\pder{x}
将产生
\frac{\partial}{\partial x}
我怎样才能实现这个目标?
答案1
最好的方法是使分子变量可选:
\newcommand{\pder}[2][]{\frac{\partial#1}{\partial#2}}
现在\pder[f]{x}
将\pder{x}
如您所愿地工作。
使用语法的解决方案\pder{f}{x}
是\pder{x}
\makeatletter
\DeclareRobustCommand{\pder}[1]{%
\@ifnextchar\bgroup{\@pder{#1}}{\@pder{}{#1}}}
\newcommand{\@pder}[2]{\frac{\partial#1}{\partial#2}}
\makeatother
然而,这非常危险,因为后面的开括号\pder{x}
会被误认为是第二个参数的开头(空格不受影响)。总之,可选参数路径似乎更好。
如果不打算经常\pder
在移动参数中使用,\DeclareRobustCommand
可以将其改为\newcommand
,但是该命令很脆弱,因此\protect
在移动参数中需要在它前面。
答案2
除了遵循 egreg 和 Ant 的出色回答(他们都建议使用\pder
宏的定义,其中第一个(分子)参数明确是可选的)之外,您还可以保留现有的宏,但插入一对空括号,例如{}
,每当您希望分子仅由符号组成时partial
:
$\pder{f(x,y,z)}{x}$ and $\pder{}{x} f(x,y,z)$
当然,这种方法不如其他方法优雅,但如果您不小心忘记指定命令的一个或另一个参数,您的代码将立即清晰\pder
。祝您 TeXing 愉快!
答案3
您可以#1
通过为它提供默认值来创建可选参数(在本例中没有任何默认值):
(編輯修复原始定义的意外粘贴 - 感谢@Gonzalo 发现这个问题!)
\newcommand{\pder}[2][]{\frac{\partial#1}{\partial#2}}
这允许
$\pder{x}$
和
$\pder[y]{x}$
(请注意现在可选参数的方括号)。
答案4
使用它作为可选参数:
\documentclass{article}
\newcommand\pder[2][]{\ensuremath{\frac{\partial#1}{\partial#2}}}
\begin{document}
\pder{x} will produce $\frac{\partial}{\partial x}$
\pder[x]{y} will produce $\frac{\partial x}{\partial y}$
\end{document}