Monday, July 28, 2008

Todonotes version 2008-07-28

The todonotes package has now hit CTAN (the Comprehensive TeX Archive Network) and can be found at http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/todonotes.html.


Recently I have received some ideas for improvements (thanks a lot!!!) of my todonotes package for latex. This has lead to a new version of the todonotes package with an improved handling of options (now for both the package and the individual todo command.)

The todonotes package lets you insert small notes in your latex document by the \todo{} command.

Options to the package:
  • disable
  • 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).

  • colorinlistoftodos
  • Show small boxes in the list of todos with the color of the inserted todonotes.

  • dvistyle
  • 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.

  • color
  • Sets the default background color of the todonotes

  • bordercolor
  • Sets the border color of the todonotes

  • textwidth
  • Sets the width of the todonotes

Options to the todo command:
  • color
  • Sets the background color of the todonote

  • size
  • Changes the relative size of the todonote

  • list / nolist (default: list)
  • Toggles whether the todo item is shown in the list of todos

  • inline / noinline (default: noinline)
  • Toggles inline view of the todonote

  • line / noline (default: line)
  • Toggles a line that connects the insertion point of the todonote with the note in the margin

Known issues:
  • Rendering differences between pdflatex and latex for items in the list of todos (latex do not break long lines, pdflatex does)

Source code and examples
todonotes.sty : http://pastebin.com/f749c073f (updated file) http://pastebin.com/f6a477b17 (original posted file)
exampledocument.tex : http://pastebin.com/f56db437a

Thursday, May 15, 2008

Updated todonotes package

The package has been updated, find the new version at http://midtiby.blogspot.com/2008/07/todonotes-version-2008-07-28.html.

In response to a request for making an option for the text width of the todonote, I have updated the todonotes package, including defining some additional options.

The package makes the following commands available
  • \todo{}
  • \listoftodos
The options the package understands are the following:
  • disable, if given the available commands have no effect
  • dvistyle, another layout of the todonotes which properly places the todo notes text when the document is compiled with latex and not pdflatex
  • color=value, sets the background color of the notes to value. Value is a color defined using the xcolor package
  • bordercolor=value, sets the border color of the notes to value
  • textwidth=value, sets the total width of the todonote to value. Value is a length.

I hope you'll find this useful. If you notice some rough edges / bugs let me hear, I might be able to get rid of them then.

Best
Henrik


The source code of the package is given below, and below of that the code for the sample document (the image at the top) is given.


% todonotes.sty
% ====================
% Part: Identification
% ====================
\ProvidesPackage{todonotes}[2008/05/15]


% ==============================
% Part: The package loading part
% ==============================
% Loads the packages that todonotes depends on.
\RequirePackage{ifthen}
\RequirePackage{xkeyval}
\RequirePackage{hyperref}
\RequirePackage{tikz}
\RequirePackage{calc}


% ==================
% Part: Initial code
% ==================
% Here the default values are set
\newcommand{\@backgroundcolor}{orange}
\newcommand{\@bordercolor}{black}
\newcommand{\@textwidth}{3cm}


% ================================
% Part: The declaration of options
% ================================
% 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).
\newif{\ifdisabled}
\DeclareOptionX{disable}{\disabledtrue}

% 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.
\newif{\ifdviStyle}
\DeclareOptionX{dvistyle}{\dviStyletrue}

% Make the background color of the notes as
% an option.
\define@key{todonotes.sty}%
{color}{\renewcommand{\@backgroundcolor}{#1}}

% Make the color of the notes box color as
% an option.
\define@key{todonotes.sty}%
{bordercolor}{\renewcommand{\@bordercolor}{#1}}

% Make the text width as an option.
\define@key{todonotes.sty}%
{textwidth}{\renewcommand{\@textwidth}{#1}}

% Finally process the given options.
\ProcessOptionsX


% ========================
% Part: The main code part
% ========================
\ifdisabled
% If the option "disable" was passed to the package
% define two empty commands.
\newcommand{\listoftodos}{}
\newcommand{\todo}{}
\else
% Define the list of todos command
\newcommand{\listoftodos}
{\section*{Todo list} \@starttoc{tdo}}
\newcommand{\l@todo}
{\@dottedtocline{1}{0em}{2.3em}}

% Define styles used by the todo command
\tikzstyle{notestyle} = [
draw=\@bordercolor,
line width=0.5pt,
fill=\@backgroundcolor,
text width = \@textwidth - 1.6 ex - 1pt,
inner sep = 0.8 ex]
\tikzstyle{notestyleleft} = [notestyle]
\tikzstyle{connectstyle} = [
draw = \@backgroundcolor,
thick]

% Define the todo command
\newcommand{\todo}[1]{%
% Add to todo list
\addcontentsline{tdo}{todo}{\protect{#1}}%
%
% Remember where we are
\begin{tikzpicture}[remember picture, baseline=-0.75ex]%
\node [coordinate] (inText) {};%
\end{tikzpicture}%
%
% Make the margin par
\marginpar {% Draw note in right margin
\ifdviStyle%
% Using dviStyle
\tikz[remember picture] \draw node[notestyle] {}; \\ %
\begin{minipage}{\@textwidth}%
#1%
\end{minipage} \\%
\tikz[remember picture] \draw node[notestyle] (inNote) {};%
\begin{tikzpicture}[remember picture, overlay]%
\draw[connectstyle]%
([yshift=-0.2cm] inText)%
-| ([xshift=-0.2cm] inNote.west)%
-| (inNote.west);%
\end{tikzpicture}%
\else%
% Using normal style (non dviStyle)
\tikz[remember picture] \draw node[notestyle] (inNote) {#1};%
\begin{tikzpicture}[remember picture, overlay]%
\draw[connectstyle]%
([yshift=-0.2cm] inText)%
-| ([xshift=-0.2cm] inNote.west)%
-| (inNote.west);%
\end{tikzpicture}%
\fi % Ending \ifdviStyle
}%
}%
\fi % Ending \ifdisabled


And the code for the sample document


\documentclass{article}
\usepackage[colorlinks]{hyperref}
\usepackage{todonotes}

\begin{document}

\listoftodos

\section{The text}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam quam
quam, sodales vel, iaculis at, varius fringilla, urna. Cras urna.
\todo{A simple ting to do.}%
Morbi lorem eros, ullam\-corper id, egestas ac, interdum eu, nunc. Nam
enim eros, sodales at, dapibus eget, semper nec, augue. Morbi orci
\todo{Something much more difficult to explain. So it takes several
lines in the todo note and in the list of to do's.}%
orci, tincidunt ac, pellentesque vel, facilisis et, dolor. Nunc nec
mauris eu felis fringilla dictum.


Donec ornare, mauris in posuere
faucibus, lacus enim luctus nibh, vitae vestibulum sapien purus id
nisl. Morbi non dolor non odio ornare faucibus. Proin in purus.
\todo{There is still something to update in this document.}%
Vivamus nulla sem, eleifend ac, lacinia suscipit, facilisis a, est.
Mauris vitae purus. Donec ullamcorper, magna vitae sodales semper,
elit diam adipiscing neque, quis mattis ante orci a orci. Mauris eu
mauris non arcu pharetra euismod. Duis non elit. Etiam faucibus,
mauris quis mollis lobortis, mauris sem feugiat dolor, sit amet
porta libero lectus non erat. Donec cursus pede in tellus. Fusce
egestas. Aenean ut nisl.

Fusce eu arcu. Aliquam ultrices, turpis in facilisis lobortis, enim
massa bibendum ante, id blandit purus sapien non eros. Aenean
sodales ante eu magna. Proin vestibulum dolor auctor erat. Maecenas
at neque. Fusce ante odio, sollicitudin eget, cursus condimentum,
egestas in, urna.

Suspendisse rutrum eros. Phasellus suscipit velit
non nunc. Donec sollicitudin erat non dui. Aenean nec turpis. Aenean
pellentesque porta ipsum. Mauris eget nulla eu nunc pellentesque
sollicitudin. Pellentesque lacus. Fusce vehicula orci quis libero.
Vivamus consequat. Cum sociis natoque penatibus et magnis dis
parturient montes, nascetur ridiculus mus. Cras hendrerit elit. In
hac habitasse platea dictumst. Phasellus rhoncus massa non ipsum.
\end{document}

Thursday, April 24, 2008

Introduktionkursus til LaTeX

Den 30. april skal jeg afholde et introduktions kursus i latex for IDA på Ingeniør Højskolen i København. Her på denne side vil jeg samle henvisninger til de materialer der skal benyttes under kurset.


Forskellige ressourcer

Latex skabeloner
  1. Min nuværende latex skabelon, hent den her.
  2. En ældre skabelon, hent den her.
  3. En ældre skabelon til MAC, hent den her.
Latex referencer
  1. The not so short introduction to latex, link.
  2. Short math guide for latex, link.
  3. The comprehensive latex symbol list, link.
Slides til introduktionskurset
  1. Slides benyttet til kurset, hent det her.
  2. Kildekoden til de benyttede slides, hent det her.
Forskellige mindre latex opgaver
  1. Skrivning af matematik, hent det her.
  2. Overskrifter og indholdsfortegnelse, hent det her.
  3. Referencer og litteraturliste, hent det her.
  4. Lister i latex, hent det her.
  5. Spalter og figurer inde i teksten, hent det her.




Windows

Installing latex on windows
  1. Download MikTeX from here.
  2. Run the installer.
  3. Start -> All programs -> MikTeX ->
Installing a latex editor on windows

This requires that latex (eg. MikTeX) has been installed.
  1. Download TexnicCenter from: here
  2. Run the installer.
  3. Set path to your MikTeX installation (something like "C:\Programmer\MiKTeX 2.6\miktex\bin\")
  4. Select output profile: "LaTeX => PDF"
  5. Extract my template document and open the file doc\project.tex in TexnicCenter and try to compile it with pdflatex.
  6. During the compilation miktex will ask for permission to install some required packages (fancyhdr, listings, caption, subfig, pgf, xcolor, xkeyval)
  7. In case of trouble install the missing packages via: Start -> All program -> MikTeX 2.6 -> Browse packages
  8. Your document should now have been compiled, examine the generated .pdf file.

Linux

Installing latex on linux (ubuntu)
  1. Install the packages: texlive
Installing a latex editor on linux (ubuntu)
  1. Install kile

Thursday, April 17, 2008

Todo notes in Latex as a package

The package has been updated, find the new version at http://midtiby.blogspot.com/2008/07/todonotes-version-2008-07-28.html.

I have transformed the previously described script into a latex package (pheww, this is my first package, so there may exists some rough edges ...). The source for the package is given below.

The package currently takes three arguments
* disable = [true, false] if false the package will only define empty commands, so no output from the embedded todo commands are generated, but you document will compile
* color = [color values accepted by pgf] Defines the background color of the todonotes and the line connecting the todo note with the place it was inserted in the test.
* bordercolor = [color values accepted by pgf] Defines the border color of the todonotes.

I use the following line to import the package to a document.

\usepackage[
disable=false,
color=orange!80,
bordercolor=black]
{todonotes}

I hope that someone will find this usefull.

Henrik


======= begin: todonotes.sty ========
% Part: Identification
\ProvidesPackage{todonotes}

% Part: The package loading part
\RequirePackage{xkeyval}
\RequirePackage{hyperref}
\RequirePackage{tikz}

% Part: Initial code
\newcommand{\@backgroundcolor}{orange}
\newcommand{\@bordercolor}{black}

% Part: The declaration of options
\define@boolkey{todonotes.sty}%
[todo]{disable}{}
\define@key{todonotes.sty}%
{color}{\renewcommand{\@backgroundcolor}{#1}}
\define@key{todonotes.sty}%
{bordercolor}{\renewcommand{\@bordercolor}{#1}}
\ProcessOptionsX

% Part: The main code part
\iftododisable
\newcommand{\listoftodos}{}
\newcommand{\todo}{}
\else
\newcommand{\listoftodos}
{\section*{Todo list} \@starttoc{tdo}}
\newcommand{\l@todo}
{\@dottedtocline{1}{0em}{2.3em}}

\tikzstyle{notestyle} = [draw=\@bordercolor,
fill=\@backgroundcolor, text width = 3cm]
\tikzstyle{notestyleleft} = [notestyle]
\tikzstyle{connectstyle} = [draw = \@backgroundcolor, thick]

\newcommand{\todo}[1]{%
% Add to todo list
\addcontentsline{tdo}{todo}{\protect{#1}}%
%
% Remember where we are
\begin{tikzpicture}[remember picture, baseline=-0.75ex]%
\node [coordinate] (inText) {};%
\end{tikzpicture}%
%
% Make the margin par
\marginpar {% Draw note in right margin
\tikz[remember picture] \draw node[notestyle] (inNote) {#1};%
\begin{tikzpicture}[remember picture, overlay]%
\draw[connectstyle]
([yshift=-0.2cm] inText)
-| ([xshift=-0.2cm] inNote.west)
-| (inNote.west);
\end{tikzpicture}%
}%
}%
\fi
======= end: todonotes.sty ========