I want to define a macro \create
that accept a single mandatory argument from which another new macro is created and named.
The following code snippet may speak clearer what I want to achieve. But the following code cannot be compiled because it is wrong. 🙂
\documentclass{article}
\newcommand\create[1]{%
\newcommand\#1{My name is #1}}
\begin{document}
\create{test}
\test
\end{document}
How to define a macro to create a new macro with a name passed as its argument?
Best Answer
Use
\csname #1\endcsname
which must be expanded before\newcommand
using\expandafter
:If you want to pass the macro as control sequence instead, i.e.
\foobar
instead offoobar
then you need to turn it into a string and remove the backslash:There is also the
\@namedef
macro which is defined as\expandafter\def\csname #1\endcsname
, so you can use it as:The
etoolbox
package also provides a basically identical, but robust macro called\csdef
. For both you can provide a parameter text, e.g. for arguments direct after the name argument:\csdef{name}#1#2{some code with two arguments #1 and #2}
(the#
have to be doubled inside another macro).