5

I have \newcommand\dd[2]{\item[\texttt{#1}] #2} and later I have

\dd{bc}{text \verb#$(echo 5+4 | bc)# text \verb#$((5+4))# text}

and I get

! You can't use `macro parameter character #' in math mode.
<argument> ...nicht mit \verb ##$(echo 5+4 | bc)##
rechnen, sondern die neue...
l.74 ...ekten Rechnen, \verb#$((5+4))#, benutzen.}
Sorry, but I'm not programmed to handle this case;
I'll just pretend that you didn't ask for it.
If you're in the wrong mode, you might be able to
return to the right one by typing `I}' or `I$' or `I\par'.

How can I get the verbatim into my command without the command interpreting it wrongly?

  • 3
    You can't use verbatim inside a macro argument in general, because the whole argument will then already be parsed before \verb does its thing. Therefore # is still the normal macro argument character which can't be used on its own here. – Martin Scharrer Oct 30 '11 at 12:44
  • 1
    The best thing to do is to define \dd with one argument, that is, \newcommand{\dd}[1]{\item[\texttt{#1}]}; then \dd{bc} text \verb#$(echo 5+4 | bc)# text \verb#$((5+4))# text will work as you wish. – egreg Oct 30 '11 at 13:36
2

I'm not sure I fully understand what you're trying to achieve, but I think the simplest solution may be something along the following model. Note that one has to "escape" the dollar sign by prefixing a backslash to it; on the other hand, it's not necessary to introduce verbatim strings explicitly.

\documentclass{article}
\newcommand\dd[2]{\item[\texttt{#1}] #2}
\begin{document}
\begin{description}
\dd{bc}{text \texttt{\$(echo 5+4 $|$ bc)} text \texttt{\$((5+4))} text}
\end{description}
\end{document}

enter image description here

3

As already mentioned in comment, verbatim or its short form \verb is a different beast altogether. If you must pass verbatim stuff as arguments, you could consider a fancyvrb work-around.

Using fancyvrb you can save and restore your verbatim commands in the following way:

\usepackage{fancyvrb}% http://ctan.org/pkg/fancyvrb
\DefineShortVerb{\#}% # denotes verbatim opening/closing character
\SaveVerb{VerbA}#(echo 5+4 | bc)#
\SaveVerb{VerbB}#$((5+4))#

This stores (echo 5+4 | bc) as-is in VerbA, and $((5+4)) in VerbB, which can be used (restored) later by means of \UseVerb{VerbA} and \UseVerb{VerbB} respectively. Here is a minimal working example:

enter image description here

\documentclass{article}
\usepackage{fancyvrb}
\newcommand\dd[2]{\item[\texttt{#1}] #2}
\begin{document}
\DefineShortVerb{\#}% # denotes verbatim opening/closing character
\SaveVerb{VerbA}#(echo 5+4 | bc)#
\SaveVerb{VerbB}#$((5+4))#
\begin{description}
  \dd{bc}{text \UseVerb{VerbA} text \UseVerb{VerbB} text}
\end{description}
\end{document}

Edit: A similar work-around exist using the verbdef package. It provides \verbdef{<cmd>}{<verb>} that defines \<cmd> with verbatim <verb> content. The following MWE produces the same output as above:

\documentclass{article}
\usepackage{verbdef}
\newcommand\dd[2]{\item[\texttt{#1}] #2}
\begin{document}
\verbdef\VerbA{(echo 5+4 | bc)}
\verbdef\VerbB{$((5+4))}
\begin{description}
  \dd{bc}{text \VerbA\ text \VerbB\ text}
\end{description}
\end{document}
  • 2
    I would prefer \verbdef from the verbdef package. – Martin Scharrer Oct 30 '11 at 20:41
  • @MartinScharrer: Great simplification. I've added it as an edit to my answer. – Werner Oct 30 '11 at 20:47
0

Use the following:

\newcommand\dd[2]{\texttt{\detokenize{#1}} #2}

This will print #1 vermbatim.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.