假设我定义了命令\newcommand{\d}[1]{\mathrm{d}#1}
。
\d{x}
我可以像或一样使用它\d{y}
。
是否可以定义命令\d
,以便我可以像参数一样\dx
或\dy
不使用参数来使用它?
答案1
首先,你不想要重新定义\d
。
我也没有理由想要一大堆命令,而不是一些更简单的命令,比如
\diff x
无论如何,你可以\da \db ... \dz
一次性定义
\documentclass{article}
\usepackage{amsmath}
\NewDocumentCommand{\diff}{}{\mathop{}\!\mathrm{d}}
\ExplSyntaxOn
\int_step_inline:nnn { `a } { `z }
{
\int_case:nnF { #1 }
{
{`h}{\iow_term:n {Not~redefining~\dh}}
{`j}{\iow_term:n {Not~redefining~\dj}}
{`o}{\iow_term:n {Not~redefining~\do}}
{`p}{\iow_term:n {Not~redefining~\do}}
}
{
\cs_new:cpx { d \char_generate:nn { #1 } { 11 } } { \diff \char_generate:nn { #1 } { 11 } }
}
}
\ExplSyntaxOff
\begin{document}
\[
\int_0^1 f(t)\dt = \int_0^1 f(b)\db
\]
\[
\da\db\dc\dd\de\dots\dx\dy\dz
\]
\end{document}
你不想要重新定义\dh
、、\dj
和\do
。\dp
这值得吗?
答案2
您可以通过以下代码定义命令\da
... :\dz
\def\sdef#1{\expandafter\def\csname#1\endcsname}
\def\definedif#1{\ifx\relax#1\else \sdef{d#1}{{\rm d}#1}\expandafter\definedif\fi}
\definedif abcdefghijklmnopqrstuvwxyz\relax
%test
\meaning \dv % macro:->{\rm d}v
\bye