# todonotes and verbatim

I want to put some comments about actual code into my document, and for that I thought I'd use \verb or \begin{verbatim}, but it turns out that the todonotes package does not like that:

\documentclass{minimal}

\usepackage{todonotes}

\begin{document}

\todo{\verb|Hello!|}

\end{document}


Which in turn gives the beautiful error:

! Argument of \reserved@a has an extra }.
<inserted text>
\par
l.7 \todo{\verb|Hello!|}


A similar problem applies to \begin{verbatim}.

So... how do I get verbatim text/code into my todo notes?

-
It's not \todo that doesn't like \verb: \verb cannot go in the argument of any command. Do you need special characters such as backslash or braces in the "verbatim"? –  egreg Jul 11 '12 at 15:58
Aha, I did not know that, thank you! And yes, I do; the minimal example I gave just doesn't have that. I am commenting on mathematical (source)-code. –  mSSM Jul 11 '12 at 16:00
If all you need is monospaced font, you may use \ttfamily instead of \verb. –  Jay Jul 11 '12 at 16:23
That is not very helpful. As I wrote just above, I need extra symbols. –  mSSM Jul 11 '12 at 17:36

Here's a way:

\documentclass{article}
\usepackage{todonotes}
\usepackage{xparse}
\newcounter{verbtodo}
\renewcommand{\theverbtodo}{\roman{verbtodo}}
\makeatletter
\NewDocumentCommand{\verbtodo}{v}{%
\stepcounter{verbtodo}%
\global\@namedef{verbtodo@\theverbtodo}{#1}%
\todo{\texttt{\expandafter\protect\csname verbtodo@\theverbtodo\endcsname}}%
}
\makeatother

\begin{document}
\verbtodo|Hello${okp}^&| \listoftodos \end{document}  Limitation: the \listoftodos command must go at the end of the document. It shouldn't be a big deal. The following more complicated version allows for having \listoftodos also at the start. \documentclass{article} \usepackage{todonotes} \usepackage{xparse} \newcounter{verbtodo} \renewcommand{\theverbtodo}{\roman{verbtodo}} \makeatletter \NewDocumentCommand{\verbtodo}{v}{% \refstepcounter{verbtodo}\label{verbtodo@\theverbtodo}% \global\@namedef{verbtodo@\theverbtodo}{#1}% \addtocontents{tdo}{\defineverbtodo{\theverbtodo}|#1|}% \todo{\texttt{\expandafter\protect\csname verbtodo@\theverbtodo\endcsname}}% } \NewDocumentCommand{\defineverbtodo}{mv}{% \@namedef{verbtodo@#1}{#2}} \makeatother \begin{document} \listoftodos \verbtodo|Hello${okp}^&|

\end{document}


Limitations Braces must be balanced and % is not allowed.

-
Thank you for your effort; I stumbled over fancyvrb, which seems to be nestable in other environments. Do you think this might be a better solution to my problem? –  mSSM Jul 13 '12 at 10:09
@mSSM Also the standard verbatim can go in other environments, but not in arguments. The same holds for Verbatim from fancyvrb. –  egreg Jul 13 '12 at 10:13
Yeah, I actually tried it out after posting my comment, and noticed the same thing. Going to use your solution. –  mSSM Jul 13 '12 at 23:58