Das kann man so machen: einen Befehl drum herum basteln:
\newcommand\newnotetype[1]{%
...
}
in diesem Befehl jedes Vorkommnis von »any« durch `#1` ersetzen. Wenn das Teile von Makronamen betrifft, diese mit `\csname ...\endcsname` aufrufen und wo nötig rechtzeitig expandieren, z.B. bei
\expandafter\newwrite\csname the#1notes\endcsname
Außerdem muss man jedes vorherige auftauchen von `#1` durch `##1` ersetzen (grundsätzlich gilt: jedes `#` muss verdoppelt werden).
werden -- bei weiterer Verschachtelung würde aus `##1` dann konsequenterweise ein `####1`):
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\newcommand\newnotetype[1]{%
\newcounter{#1note}%
\expandafter\newwrite\csname the#1notes\endcsname
\expandafter\immediate\expandafter\openout
\csname the#1notes\endcsname=\jobname.#1\relax
%
\expandafter\newcommand\csname#1note\endcsname[1]{%
\stepcounter{#1note}%
{%
\tiny\textsuperscript{%
\raisebox{1ex}{\hbox{\kern-0.0em\csname the#1note\endcsname\kern-0.0em}}%
}%
}%
\expandafter\immediate\expandafter\write\csname the#1notes\endcsname
{\csname the#1note\endcsname\ \unexpanded{##1 \par}}%
}%
%
\expandafter\newcommand\csname display#1notes\endcsname[1]{%
\vspace{1\baselineskip}%
\expandafter\immediate\expandafter\closeout
\csname the#1notes\endcsname
\par\tiny\textbf{##1}\par
\input\jobname.#1\normalsize
}%
}
\newnotetype{any}
\newnotetype{my}
\newnotetype{foo}
\begin{document}
Hier ist der\anynote{any note} Testtext.
Hier ist der\mynote{my note} Testtext.
Hier ist der\anynote{any note} Testtext.
Hier ist der\foonote{foo note} Testtext.
Hier ist der\foonote{foo note} Testtext.
Hier ist der\mynote{my note} Testtext.
\displayanynotes{Any notes}
\displaymynotes{My notes}
\displayfoonotes{Foo notes}
\end{document}
![alt text][1]
[1]: http://texwelt.de/wissen/upfiles/newnotetype_1.png