定义名称带有后缀的命令

定义名称带有后缀的命令

假设我定义了命令\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

相关内容