TransWikia.com

verb in custom command

TeX - LaTeX Asked on January 20, 2021

I have newcommanddd[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 `Ipar'.

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

4 Answers

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}
newcommanddd[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

Correct answer by Mico on January 20, 2021

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}
newcommanddd[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}
newcommanddd[2]{item[texttt{#1}] #2}
begin{document}
verbdefVerbA{(echo 5+4 | bc)}
verbdefVerbB{$((5+4))}
begin{description}
  dd{bc}{text VerbA text VerbB text}
end{description}
end{document}

Answered by Werner on January 20, 2021

Use the following:

newcommanddd[2]{texttt{detokenize{#1}} #2}

This will print #1 vermbatim.

Answered by Alkis on January 20, 2021

Nowadays you can use the more "robust" Verb from fvextra package.

Note both Verb|...| and Verb{...} is supported (with some restrictions). Also when used as argument, don't use # as delimiters.

documentclass{article}
usepackage{fvextra}
newcommanddd[2]{item[texttt{#1}] #2}

begin{document}
begin{description}
  dd{bc}{text Verb{$(echo 5+4 | bc)} text Verb{$((5+4))} text}
end{description}
end{document}

enter image description here

Answered by muzimuzhi Z on January 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP