The way to think of this is that ##
gets replaced by #
in just the
same way that #1
gets replaced by 'whatever is the first argument'.
So if you define a macro and use it as:
the macro expansion produces '+++b+++b+++b+++', which people find normal. However, if we now replace part of the macro:\def\a#1{+++#1+++#1+++#1+++} \a{b}
\def\a#1{+++#1+++\def\x #1{xxx#1}}
\
a{b
} will expand to '+++b+++\def\x b{xxxb}
'. This
defines \
x
to be a macro delimited by b
, and taking no
arguments, which people may find strange, even though it is just a
specialisation of the example above. If you want \
a
to
define \
x
to be a macro with one argument, you need to write:
and\def\a#1{+++#1+++\def\x ##1{xxx##1}}
\
a{b
} will expand to
'+++b+++\def\x #1{xxx#1}
', because #1
gets replaced by 'b'
and ##
gets replaced by #
.
To nest a definition inside a definition inside a definition then
you need ####1
, as at each stage ##
is replaced by
#
. At the next level you need 8 #
s each time, and so on.
This question on the Web: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=hash