10

I would like to define a newcommand that takes one required parameter, but instead of passing it in using {...} as normal, to use a different parameter delineator like the \verb command does (e.g., \mycmd|args|). Trying to do this with a normal \newcommand definition seems to behave strangely.

1

2 Answers 2

12

If you do not want catcode sanitization:

\newcommand\myverb[1]%
    {\def\domyverb##1#1{ the argument was `##1'}%
     \domyverb}

and then use it as follows.

\myverb|test|

\myverb+test+

\myverb!test!
5

It mostly depends on what you want to do. If all you need is to use the argument "as is", then

\def\mycmd|#1|{...#1...}

will do. This doesn't check whether \mycmd is defined; if you need the check, then use

\makeatletter
\@ifdefinable\mycmd{%
  \def\mycmd|#1|{...#1...}%
}
\makeatother

If you need this to do "verbatim" things, the definition must be quite more complicated.

1
  • what about defining a command whose argument can be placed between a pair of arbitrary symbols? How is \verb defined so that \verb|spleen|, \verb+spleen+, etc. work? Commented Jun 29, 2011 at 23:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .