\documentclass[12pt]{article}
\usepackage[hypertex]{hyperref}
\usepackage{todo}

\providecommand\cs[1]{\texttt{\string#1}}
\title{\texttt{todo} package test file and sample}
\author{Federico Garcia}
\begin{document}
\maketitle
\todos

\tableofcontents

\section{Basic todos}
The present text has a \cs{\todo} command in it.\todo{Just showing.} It is supposed to step the counter, show the todo as a superscript with the default label, and add an item to the todo list at the end, which points to this page.

\todo{Fixing the bug}A \cs{\todo} command can also start a paragraph without trouble (bug fixed).

The label for todos can be specified with the optional argument to the \cs{\todo} command, as here.\todo[Ex.]{Optional argument} The specified label will also be put in the todo list, after the todo number and the todo page.

\section{Quiet todos}
Todo commands can be quiet. This paragraph features one after this coming comma,\todo*{Quiet todo.} but it has no visible sign here. However, the list does show it, with its own number, and with a hyperlink to this page. The quiet todo is achieved with a starred \texttt{\string\todo*} command.

Quiet todos with optional command are possible as well\todo*[Ex.]{Quiet \# 2}, and this paragraph has one (after ``well,'' before the comma).

\section{Verbose todos}
On the other hand, todos can be verbose just as they can be quieter. Uppercase \cs{\Todo} includes its contents (the `todo text') in the superscript or marginpar, like here.\Todo{A verbose todo} As usual, an optional argument changes the label.\Todo[Ex.]{A verbose todo with a different label}

A starred \emph{and} uppercase todo makes no sense, but it will be taken as a lowercase starred todo (i.e., it will be quiet). A Package Warning will also be issued.\Todo*{Absurd} The result is the same when in addition it has an optional argument.\Todo*[Ex]{Labeled absurd}

\section{Long todos with the \texttt{todoenv} environment}
When a todo is too long (say, longer than a line of text) but it is still intended to be a verbose one (whose text should appear in the text and not only in the todo list), then \cs{\Todo} is not necessarily the best option. \begin{todoenv}A better alternative is illustrated by the present sentence, which is in fact the contents of a \texttt{todoenv} environment. The long todo is assigned a number, as usual, and listed in the todo list. However, the list doesn't quote the full text of the todo once again, but substitutes ``\emph{see text}.''\end{todoenv}

\renewcommand\todoopen{}\renewcommand\todoclose{}
\begin{todoenv}
The \texttt{todoenv} environment doesn't have a starred or an uppercase version, because its behavior is fully customizable. A `quiet' version that simply lists the todo in the final list, but otherwise shows no sign of it in the text, can be achieved by redefining the \cs{\todoopen} and \cs{\todoclose} to do nothing. This whole paragraph is such a \texttt{todoenv}, coming after just those redefinitions.
\end{todoenv}

The contents itself of the environment can also be formatted, through redefinition of the command \cs{\todoenvformat}. \font\usli=cmu10 at 12pt\renewcommand\todoenvformat{\usli}\begin{todoenv}For example, this final sentence is set in unslanted italics because the \cs{\todoenvformat} was just set to that font, and the sentence is the contents of a \texttt{todoenv} environment.\end{todoenv}

\section{Done!}

When a todo has been actually done in a later version of the document, it might be useful to leave the todo information in the input file anyway, rather than just simply deleting it. If for no other reason, because deleting a \cs{\todo} will rearrange the numbering of the other ones, possibly creating confusion in references to previous versions of the document.

The present line has a \cs{\todo},\done\todo{Example of a todo that has been `done'} but it doesn't show as a superscript because it is preceded by the command \cs{\done}. The todo text is included in the list of todos, but the box is checkmarked.

The optional argument of a \cs{\done}\cs{\todo} is handled appropriately.\done\todo[Ex.]{A done todo} Starred \cs{\todo*} can also be \cs{\done},\done\todo*{A done quiet todo} with or without the optional argument.\done\todo*[Ex.]{Starred-labled-done}, and \cs{\Todo} and all its variations are also subject to \cs{\done}.\done[FG]\Todo{Done verbose}\done[HI]\Todo[Ex]{Done labled verbose}\done\Todo*{Starred verbose (absurd), done}\done\Todo*[Ex.]{Labeled absurd done}

However, \cs{\done} has no effect on the \texttt{todoenv} environment.

\cs{\done} itself has an optional argument, for extra notes (date, initials, etc.) regarding the fact that it is done. Several of the previous \cs{\done}\cs{\todo}'s have that extra argument, that makes it into the final list of todos.
\todos

\newpage
\section{After the todos\dots}

(This section should not exist. It is here just to test the behavior of the package after \cs{\todos})

Here is an effect-less todo.\todo{No effect} A starred one,\todo*{Still nothing} and one with optional argument.\Todo[No]{Effect}

A \texttt{todoenv} after the \cs{\todos} should not do much: \begin{todoenv}this is its text, which remains unformatted.\end{todoenv}


Lastly, a second \cs{\todos} gives nothing but an error message (to see it in action please uncomment it).%\todos

\end{document} 