% \iffalse meta-comment % % Copyright (C) 2008 by Henrik Skov Midtiby % ------------------------------------------------------- % % This file may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.2 % of this license or (at your option) any later version. % The latest version of this license is in: % % http://www.latex-project.org/lppl.txt % % and version 1.2 or later is part of all distributions of LaTeX % version 1999/12/01 or later. % % \fi % % \iffalse %<*driver> \ProvidesFile{todonotes.dtx} % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{todonotes} %<*package> [2008/08/11 .dtx Todonotes source and documentation.] % % %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks, linkcolor=black]{hyperref} \usepackage[colorinlistoftodos]{todonotes}[2008/08/11] \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{todonotes.dtx} %\iffalse % \PrintChanges % \PrintIndex %\fi \end{document} % % \fi % % \CheckSum{0} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % % \changes{0.1}{2008/04/17}{The first version of the package} % \changes{0.2}{2008/05/15}{Updated the option handling of the package} % \changes{0.2.1}{2008/05/16}{Slightly modified by Kjell Magne Fauske to % support notes in the left margin (for documentstyle book).} % \changes{0.2.2}{2008/05/28}{Added a missingfigure command} % \changes{0.2.3}{2008/06/10}{Made a dependency on the calc package} % \changes{0.3}{2008/07/11}{Delayed the requirements for the hyperref package % untill begin document and added an optional argument % to the todo command for adding inline todonotes (Idea % from Patrick Toche)} % \changes{}{2008/07/15}{Added some options to the todo macro (Idea: Patrick % Toche) and made the \\listoftodos point at the inserted % todos and not only the current / previous section, % subsection or figure using the \\phantomsection macro.} % \changes{0.4}{2008/07/28}{Modified the behaviour of the inline todonotes, to % avoid empty lines around the inline todonotes.} % \changes{0.4.1}{2008/07/28}{ % Added the option colorinlistoftodos which inserts a % small box with the used fillcolor of the todonotes in % the list of todos.} % \changes{0.4.2}{2008/07/30}{Fixed a bug with the disable option to the % package.} % \changes{0.5}{2008/09/05}{Created a dtx file containing both source % code and documentation of the package} % % \GetFileInfo{todonotes.dtx} % % \DoNotIndex{\newcommand,\newenvironment} % % % \title{The \textsf{todonotes} package\thanks{This document % corresponds to \textsf{todonotes}~\fileversion, dated \filedate.}} % \author{Henrik Skov Midtiby \\ \texttt{henrikmidtiby@gmail.com}} % % \maketitle % % \begin{abstract} % The |todonotes| package allows you to insert to--do items in your % document. At any point in the document a list of all the inserted % to--do items can be listed with the |\listoftodos| command. % \end{abstract} % % % \section{Introduction} % % The |todonotes| package makes three commands available to the % user: |\todo[]{}|, |\missingfigure{}| and |\listoftodos|. % |\todo[]{}| and |\missingfigure{}| makes it possible to insert % notes in your document about things that has to be done later % (todonotes \ldots). % I developed the basic functionality of the package while I worked % on my bachelor project. % % % % % \subsection{Usage} % % \DescribeMacro{\todo} % My \index{\todo}most common usage of the todonotes package, is to % insert an uncustomized todonotes somewhere in a latex document. % An example of this usage is the command % % |\todo{Make a cake \ldots}|, % % \noindent % which renders like\todo{Make a cake \ldots}. % The |\todo| command has this structure: % |\todo|\oarg{options}\marg{todo text}. % The |todo text| is the text that will be shown in the todonote and % in the list of todos. The optional argument |options|, allows the % user to customize the appearance of the inserted todonotes. % For a description of all the options see section % \ref{subsecTodoOptions}. % % % \DescribeMacro{\missingfigure} % The |\missingfigure| command inserts an image containing an % attention sign and the given text. % The command takes only one argument % |\missingfigure|\marg{text}, a text string that could % describe what the figure should consist of. % An example of its usage could be % % |\missingfigure{Make a sketch of the structure of a trebuchet.}| % % \noindent % which renders like. % % \missingfigure{Make a sketch of the structure of a trebuchet.} % % % \DescribeMacro{\listoftodos} % The |\listoftodos| command inserts a list of all the todos in the % current document. |\listoftodos| takes no arguments. % For this document the list of to--do's looks like. % \listoftodos % % % \subsection{Package options} % \DescribeMacro{disable} % If the option |disable| is passed to the package, the macros % usually defined by the package (|\todo|, |\listoftodos| and % |\missingfigure|) are defined as macros with no effect, and thus % all inserted notes are removed. % % \DescribeMacro{colorinlistoftodos} % Adds a small colored square in front of all items in the Todo % list. The color of the square is the same as the fill color of the % inserted todonote. % This can be usefull if there are different types of todos % (insert reference, explain in detail, \ldots) where the color of % the inserted todonote marks the type of todo. % % \DescribeMacro{color} % |color=val| sets the default background color of the inserted % todonotes to |val|. The default value is |color=orange|. % |val| must be a color understood by the |xcolor| package. % % \DescribeMacro{bordercolor} % |bordercolor=val| sets the default border color of the inserted % todonotes to |val|. The default value is |color=black|. |val| must % be a color understood by the |xcolor| package. % % \DescribeMacro{textwidth} % |textwidth=length| sets the width of a todo item in the margin to % |length|. The width of inline todonotes will allways be the same % as the current line width. % % \DescribeMacro{dvistyle} % When a document with todonotes is compiled with plain latex (to a % dvi-file), there is an issue with the visual % appearance\footnote{The problem is placement of text inside the % colored boxes.}. % The option |dvistyle| changes the appearance of the inserted % todonotes to avoid this problem. % % % % \subsection{Options for the todo command} % \label{subsecTodoOptions} % There are several options that can be given to the |\todo| % command. All the options are described here and often I have % included examples of the change in visual appearance. % % \DescribeMacro{color} % |color=val| sets the background color of the inserted % \todo[color=red!40]{A red note.}% % todonotes to |val|. The default value can be set by the color % option when the todonotes package is loaded. % The todo notes inserted in this paragraph is created with the % commands % |\todo[color=red!40]{A red note.}| and % \todo[color=green!40]{And a green note}% % |\todo[color=green!40]{And a green note}|. % The color of the inserted note could be used to mark different % types of tasks (insert references, explain something in detail, % \ldots), this could be streamlined by defining new commands like % below. % \begin{verbatim} % \newcommand{\insertref}[1]{\todo[color=green!40]{#1}} % \newcommand{\explainindetail}[1]{\todo[color=red!40]{#1}} % \end{verbatim} % % \DescribeMacro{line / noline} % If you want to get rid of the line connecting the inserted note % with the place in the text where the note occurs in the latex % code, the option |noline| can be used. % \todo[noline]{A note with no line connecting it to the placement % in the original text.} % |\todo[noline]{A note with no line ...}| % \vspace{1.0cm} % % \DescribeMacro{inline / noinline} % It is possible to place a todonote inside the text instead of % placing it in the margin, this could be desireable if the text in % the note has a considerable length. % |\todo[inline]{A todonote placed in the text}| % \todo[inline]{A todonote placed in the text} % % \DescribeMacro{size} % |size=val| changes the size of the text inside the todonote. % The commands used to create the notes below are % |\todo[size=\Large]{A note with a large fontsize.}| and % |\todo[inline, size=\tiny]{Note with very small fontsize.}|. % \todo[size=\Large]{A note with a large fontsize.} % \todo[inline, size=\footnotesize]{Note with very small fontsize.} % % \DescribeMacro{list / nolist} % When the option |nolist| is given, the todo item will not appear in % the list of todos. % % \subsection{Options for the missingfigure command} % Currently the missingfigure command takes no optional arguments. % % \subsection{Options for the listoftodos command} % Currently the listoftodos command takes no optional arguments. % % \iffalse % \StopEventually{\PrintChanges\PrintIndex} % \fi % \StopEventually{\PrintChanges} % % \section{Implementation} % % Identifies the package and loads the packages dependences. % \begin{macrocode} \ProvidesPackage{todonotes}[2008/08/11] \RequirePackage{ifthen} \RequirePackage{xkeyval} \RequirePackage{hyperref} \RequirePackage{xcolor} \RequirePackage{tikz} \RequirePackage{calc} % \end{macrocode} % Some default values are set % \begin{macrocode} \newcommand{\@backgroundcolor}{orange} \newcommand{\@bordercolor}{black} \newcommand{\@textwidth}{\marginparwidth} % \end{macrocode} % % \subsection{Declaration of options for the package} % In this part the various options for % the package are defined. % Make it possible to disable the functionality % of the package. If this option is given, the % commands |\todo{}| and |\listoftodos| are defined % as commands with no effect. (But you can still % compile you document with these commands). % \begin{macrocode} \newif{\ifdisabled} \DeclareOptionX{disable}{\disabledtrue} % \end{macrocode} % Show small boxes in the list of todos with the color of the % inserted todonotes. % \begin{macrocode} \newif{\ifcolorinlistoftodos} \DeclareOptionX{colorinlistoftodos}{\colorinlistoftodostrue} % \end{macrocode} % The default style behaves bad when compiled % with latex (some text placement problems). % The dvistyle option, changes the visual behavior % to avoid this text placement problem. % \begin{macrocode} \newif{\ifdviStyle} \DeclareOptionX{dvistyle}{\dviStyletrue} % \end{macrocode} % Make the background color of the notes as % an option. % \begin{macrocode} \define@key{todonotes.sty}% {color}{\renewcommand{\@backgroundcolor}{#1}} % \end{macrocode} % Make the color of the notes box color as % an option. % \begin{macrocode} \define@key{todonotes.sty}% {bordercolor}{\renewcommand{\@bordercolor}{#1}} % \end{macrocode} % Make the text width as an option. % \begin{macrocode} \define@key{todonotes.sty}% {textwidth}{\renewcommand{\@textwidth}{#1}} % \end{macrocode} % Finally process the given options. % \begin{macrocode} \ProcessOptionsX % \end{macrocode} % \subsection{Options for the todo command} % % In this part the various options for % commands in the package are defined. % Set an arbitrarily fill color % \begin{macrocode} \newcommand{\fillcolor}{}% \define@key{todonotes}{color}{\renewcommand{\fillcolor}{#1}}% % \end{macrocode} % Set a relative font size % \begin{macrocode} \newcommand{\sizecommand}{}% \define@key{todonotes}{size}{\renewcommand{\sizecommand}{#1}}% % \end{macrocode} % Should the todo item be included in the list of todos? % \begin{macrocode} \newif\ifappendtolistoftodos% \define@key{todonotes}{list}[]{\appendtolistoftodostrue}% \define@key{todonotes}{nolist}[]{\appendtolistoftodosfalse}% % \end{macrocode} % Should the todo item be displayed inline? % \begin{macrocode} \newif\ifinlinenote% \define@key{todonotes}{inline}[]{\inlinenotetrue}% \define@key{todonotes}{noinline}[]{\inlinenotefalse}% % \end{macrocode} % Should the note in the margin be connected to the insertion point % in the text? % \begin{macrocode} \newif\ifline% \define@key{todonotes}{line}[]{\linetrue}% \define@key{todonotes}{noline}[]{\linefalse}% % \end{macrocode} % Preset values of the options % \begin{macrocode} \presetkeys {todonotes} {color=\@backgroundcolor, noinline, line, list, size=\normalsize}{}% % \end{macrocode} % \subsection{The main code part} % Here is the actual macros defined. % If the option "disable" was passed to the package % define empty commands. % \begin{macrocode} \ifdisabled \newcommand{\listoftodos}{} \newcommand{\todo}[2][]{} \newcommand{\missingfigure}[1]{} \else % \ifdisabled % \end{macrocode} % Define the |\listoftodos| command and define the % appearance of the list of todos. % \begin{macrocode} \newcommand{\listoftodos} {\section*{Todo list} \@starttoc{tdo}} \newcommand{\l@todo} {\@dottedtocline{1}{0em}{2.3em}} % \end{macrocode} % Define styles used by the todo command % \begin{macrocode} \tikzstyle{notestyle} = [draw=\@bordercolor, line width=0.5pt, text width = \@textwidth - 1.6 ex - 1pt, inner sep = 0.8 ex] \tikzstyle{notestyleleft} = [notestyle, left] \tikzstyle{connectstyle} = [thick] \tikzstyle{inlinenotestyle} = [notestyle, text width=\textwidth - 1.6 ex - 1 pt] % \end{macrocode} % % \begin{macro}{\todo} % Define the todo command % \begin{macrocode} \newcommand{\todo}[2][]{% \setkeys{todonotes}{#1}% % \end{macrocode} % Add the item to the list of todos. When the option % |colorinlistoftodos| is given to the package a small colored % square is added in front of the text. % \begin{macrocode} \ifappendtolistoftodos% \phantomsection% \ifcolorinlistoftodos% \addcontentsline{tdo}{todo}{\protect{% \colorbox{\fillcolor}{\textcolor{\fillcolor}{\tiny i}} % #2}}% \else% \addcontentsline{tdo}{todo}{\protect{#2}}% \fi% \fi% % \end{macrocode} % Place the todonote as indicated by the options (inline or in a % marginpar), below is the code for the inline placement. % \begin{macrocode} \ifinlinenote% \ifdviStyle% {\par\noindent\tikz[remember picture] \draw node[inlinenotestyle, % fill=\fillcolor] {};\par}% {\noindent \sizecommand #2}% {\par\noindent\tikz[remember picture] \draw node[inlinenotestyle, % fill=\fillcolor] {};\par}% \else% {\par\noindent\tikz[remember picture] \draw node[inlinenotestyle, % fill=\fillcolor] {\sizecommand #2};\par}% \fi% \else% % \end{macrocode} % When the todonote should be placed inside a marginpar, the code % below is applied. % First is the current location in the document stored, this enables % us later to connect this point with the inserted todonote. % \begin{macrocode} \begin{tikzpicture}[remember picture, baseline=-0.75ex]% \node [coordinate] (inText) {};% \end{tikzpicture}% \marginpar[{% Draw note in left margin \ifdviStyle% \tikz[remember picture] \draw node[notestyle, fill=\fillcolor] {}; \\ % \begin{minipage}{\@textwidth}% \sizecommand #2% \end{minipage} \\% \tikz[remember picture] \draw node[notestyle, fill=\fillcolor] (inNote) {};% \ifline% \begin{tikzpicture}[remember picture, overlay]% \draw[connectstyle, draw=\fillcolor]% ([yshift=-0.2cm] inText)% -| ([xshift=0.2cm] inNote.east)% -| (inNote.east);% \end{tikzpicture}% \fi% \else% \tikz[remember picture] \draw node[notestyle, fill=\fillcolor] (inNote) {\sizecommand #2};% \ifline% \begin{tikzpicture}[remember picture, overlay]% \draw[connectstyle, draw=\fillcolor]% ([yshift=-0.2cm] inText)% -| ([xshift=0.2cm] inNote.east)% -| (inNote.east);% \end{tikzpicture}% \fi% \fi% % \end{macrocode} % In the book documentclass (which is a twoside layout), the % |\marginpar| marginpar macro takes two arguments |\marginpar[]|, % it is possible to let latex decide in % which % \begin{macrocode} }]{% Draw note in right margin \ifdviStyle% \tikz[remember picture] \draw node[notestyle, fill=\fillcolor] {}; \\ % \begin{minipage}{\@textwidth}% \sizecommand #2% \end{minipage} \\% \tikz[remember picture] \draw node[notestyle, fill=\fillcolor] (inNote) {};% \ifline% \begin{tikzpicture}[remember picture, overlay]% \draw[connectstyle, draw=\fillcolor]% ([yshift=-0.2cm] inText)% -| ([xshift=-0.2cm] inNote.west)% -| (inNote.west);% \end{tikzpicture}% \fi% \else% \tikz[remember picture] \draw node[notestyle, fill=\fillcolor] (inNote) {\sizecommand #2};% \ifline% \begin{tikzpicture}[remember picture, overlay]% \draw[connectstyle, draw=\fillcolor]% ([yshift=-0.2cm] inText)% -| ([xshift=-0.2cm] inNote.west)% -| (inNote.west);% \end{tikzpicture}% \fi% \fi% }% \fi% }% % \end{macrocode} % \end{macro} % \begin{macro}{\missingfigure} % Defines the |\missingfigure| macro. % \begin{macrocode} \newcommand{\missingfigure}[1]{ \addcontentsline{tdo}{todo}{Figure: \protect{#1}}% \par \noindent \begin{tikzpicture} \draw[fill=black!40, draw = white, line width=0pt] (-3, -2.5) rectangle +(\textwidth, 4cm); \draw (3, 0) node[right, text width=4cm] {#1}; \draw[red, fill=white, rounded corners = 5pt, line width=10pt] (30:2cm) -- (150:2cm) -- (270:2cm) -- cycle; \draw (0, 0.3) node {Missing}; \draw (0, -0.3) node {figure}; \end{tikzpicture} }% Ending \missingfigure command \fi % Ending \ifdisabled % \end{macrocode} % \end{macro} % % \Finale \endinput