带有参数的新命令位于另一个带有参数的新命令中

带有参数的新命令位于另一个带有参数的新命令中

如果我在另一个新命令中定义一个新命令,并且内部和外部都有参数,我该如何访问内部新命令的参数?在下面的例子中,我有“***”,我想访问传递到内部新命令的“#1”参数。

\newcommand{\defTerm}[3]{%
    \expandafter\newcommand\csname #1\endcsname[1][]{%
        \ifthenelse{\equal{#***}{}}%
            {\textbf{\tooltip{#2}{\begin{varwidth}{10cm}#3\end{varwidth}}}}%
            {\textbf{\tooltip{#***}{\begin{varwidth}{10cm}#3\end{varwidth}}}}%
    }%
}

其用法示例如下:

\defTerm{ETNZ}{Emirates Team New Zealand}{The winner of the 35th America's Cup}

然后在正文中:

\ETNZ was the winner in Bermuda. \ETNZ[They] beat BMW Oracle Racing.

更新

在我的例子中已更正\ETNZ{They}为。\ETNZ[They]

答案1

#在每一层嵌套定义中,其值都翻倍:

\newcommand{\defTerm}[3]{%
    \expandafter\newcommand\csname #1\endcsname[1][]{%
        \ifthenelse{\equal{##1}{}}%
            {\textbf{\tooltip{#2}{\begin{varwidth}{10cm}#3\end{varwidth}}}}%
            {\textbf{\tooltip{##1}{\begin{varwidth}{10cm}#3\end{varwidth}}}}%
    }%
}

另一个例子:

\documentclass{article}
\begin{document}

\newcommand*{\foo}[3]{%
  foo=(#1, #2, #3)\par
  \def\foobar##1##2{%
    foo=(#1, #2, #3) foobar=(##1, ##2)\par
    \newcommand{\foobarbaz}[1]{%
      foo=(#1, #2, #3) foobar=(##1, ##2) foobarbaz=####1\par
    }%
    \foobarbaz{##2}%
  }%
  \foobar{#2}{#3}%
}

\foo{A}{B}{C}

\end{document}

结果

相关内容