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.

Question

How can I \renewcommand{\todo} to give single spacing in the todonotes of an otherwise double spaced document?

What I have tried

The documentation (p. 11, section 1.8.6) suggests that something like this should work (with todonotes.sty in the proper directory), but it doesn't:

\documentclass[12pt]{article}              
\usepackage{setspace}
\doublespacing
\usepackage[backgroundcolor=white,textsize=tiny]{todonotes}
\newcommand{\smalltodo}[2][] 
    {\todo[caption={#2}, #1]
    {\begin{spacing}{0.5}#2\end{spacing}}} 
\begin{document}
\smalltodo[inline]{testing todonotes here with single spacing}
\end{document}

giving the following error:

Runaway argument?
{\todo [caption={##2}, ##1] {\begin {spacing}{0.5}##2\end {spacing}} \ETC.
! File ended while scanning use of \@xargdef.

But I can't figure out the error.

Once I get this to work, can I just replace \newcommand{\smalltodo} with \renewcommand{\todo} ?

share|improve this question
    
Your example compiles fine on my system (both with TeX Live 2010 and 2009). What versions of todonotes and setspace are you using? –  Caramdir Jan 5 '11 at 17:26
    
@Caramdir I was trying to compile the test case on LaTeXLab, I see that it does compile on my desktop installation, but am not sure how to tell what versions of the packages I am using. –  David Jan 5 '11 at 17:54
    
on your desktop you can see the version in todonotes.sty (the optional argument to \ProvidesPackage at the top) for LaTeXLab I have no idea. –  Caramdir Jan 5 '11 at 20:20
    
@Caramdir okay, this provides me with a date: \ProvidesPackage{todonotes}[2009/04/02], I was looking for a version number. –  David Jan 5 '11 at 20:25
    
This is the same version I have installed and it works for me. Strange. –  Caramdir Jan 5 '11 at 21:12
show 1 more comment

1 Answer

up vote 8 down vote accepted

While I don't know why it doesn't compile for you, here is an answer to your second question:

No, you can't just use \renewcommend as that would create an infinite loop; every call to \todo would have another call to \todo inside it. However, \todo is actually just an alias for \@todo (apparently the author thought that people might want to redefine it), so you can simply do the following:

\makeatletter
\renewcommand{\todo}[2][]{%
    \@todo[caption={#2}, #1]{\begin{spacing}{0.5}#2\end{spacing}}%
} 
\makeatother 
share|improve this answer
    
thanks for your help. What does \makeatletter, \makeatother do? –  David Jan 5 '11 at 17:55
1  
@David: per default, @ does not work in command names in the “end user” document, but only works in internal (class/package) files. The \makeatletter changes that and \makeatother resets it. –  Caramdir Jan 5 '11 at 20:15
    
@Caramidir Thanks for your answer and explanation –  David Jan 5 '11 at 20:17
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.