Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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?

share|improve this question
7  
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
1  
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
add comment

1 Answer 1

up vote 4 down vote accepted

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.

share|improve this answer
    
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
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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