如果我在另一个新命令中定义一个新命令,并且内部和外部都有参数,我该如何访问内部新命令的参数?在下面的例子中,我有“***”,我想访问传递到内部新命令的“#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}