参数中的双井号(数字符号,哈希字符)##1 是什么意思?

参数中的双井号(数字符号,哈希字符)##1 是什么意思?

##我有时看到人们在定义/使用参数时使用双井号( )。

#1普通参数和双符号参数之间有什么区别##1?其使用有什么限制吗?如果有的话,您能列出这种类型参数的良好做法吗?

答案1

它允许在嵌套的宏定义中使用参数。

\def\a#1{\def\b#1{...}}

该宏\b没有参数,因为#1它属于\a并且将被其参数替换。

然而,

\def\a#1{\def\b##1{...}}

\b用参数定义。在扩展期间

  • #1将被参数替换
  • ##变成#

然后\b就可以#1代替原来的使用了##1

因此,对于每个嵌套级别,您需要将#字符数加倍:

\def\a#1{\def\b##1{\def\c####1{...}}}

例子:

\documentclass{article}
\def\a#1{\def\b##1{#1 ##1}}
\begin{document}
\a{x} % consequence: \def\b#1{x #1}
\b{y} % prints: x y
\end{document}

在 LaTeX 语法中这将是:

\newcommand{\a}[1]{%
  \newcommand{\b}[1]{#1 ##1}}

或者,由于\a\b已经定义,如果你在小例子中尝试一下,你会看到,

\renewcommand{\a}[1]{%
  \renewcommand{\b}[1]{#1 ##1}}

相关内容