I am looking to make a standard timeline, nothing fancy, like the one below (although, it does not have to be like that) using any library. How can I go about the achieving this in the best way?

A standard timeline

2 Answers 2


Here's one possibility using TikZ:


I made some additional improvements to the original code (older versions can be seen in the edit history of this answer):


\definecolor{arrowcolor}{RGB}{201,216,232}% color for the arrow filling
\definecolor{circlecolor}{RGB}{79,129,189}% color for the inner circles filling
\colorlet{textcolor}{white}% color for the text inside the circles
\colorlet{bordercolor}{white}% color for the outer border of circles



\newlength\taskwidth% width of the box for the task description
\newlength\taskvsep% vertical distance between the task description and arrow




  on chain,
  inner sep=4pt,
  line width=1.5pt,
  text width=1.2em,
  text height=1.25ex,
  text depth=0ex
on grid

\node[inner xsep=0pt] (c1) {\phantom{A}};
  (c\the\numexpr\value{task}+1\relax) {#1};
  at (c\the\numexpr\value{task}+1\relax) {\task{#2}};

\newcommand\drawarrow{% the arrow is placed in the background layer 
                                                     % after the node for the tasks have been placed
  \node[on chain] (c1) {}; % if no \Task command is used, the arrow will be drawn
\node[on chain] (f) {};
  inner sep=10pt,
  single arrow,
  single arrow head extend=0.8cm,
  fit= (c1) (f)
] (arrow) {};
\fill[white] % the decoration at the tail of the arrow
  (arrow.before tail) -- (c1|-arrow.west) -- (arrow.after tail) -- cycle;

\newenvironment{timeline}[1][node distance=.75\taskwidth]
  {\par\noindent\begin{tikzpicture}[start chain,#1]}


\Task{Complete oral presentation\\ 27/04/2012}
\Task{Work on user interface and some modulation \\ 28/04/2012}
\Task{Work on and complete proposal to hand in \\ 29/04/2012}
\Task{Hand in proposal and astart working on Software planning \\ 04/05/2012}
\Task{Hand in Software planning and work on more content \\ 06/05/2012}
\Task{Complete full user UI with action listeners \\ 12/05/2012}
\Task{Complete beta testing and debug \\ May 13th to May 29th}



\Task[M]{Grilled cheese sandwiches on whole-wheat bread, one peach}
\Task[Tu]{Penne pasta Caprese salad}
\Task[W]{Zucchini muffins with cream cheese, grapes, and watermelon}
\Task[Th]{Peanut butter and banana sandwiches, popcorn, one peach}
\Task[F]{Cream cheese and cucumber sandwich, grapes, and blueberries}
\Task[Sa]{Grilled fish with lemon, grilled corn, and whole-wheat biscuits}
\Task[Su]{Yogurth with honey and blueberries}


enter image description here

How the code works:

Inside the timeline environment, use \Task{<description>} for each task. For example:

\taskmark{This is the first task}
\taskmark{This is the description of the second task and it is a little long}
\taskmark{This is the description of the third task and it is short}
\taskmark{This is the description of the fourth task}
\taskmark{This is the description of the fifth task}
\taskmark{Here is the description of the sixth task}

If no \Task command is used, only the arrow will be drawn. The optional argument for \Task, allows to add a label to the inner circles (if the label is too long, the width for the inner style will have to be increased).

  • I'm getting this error "! LaTeX Error: Command \widering already defined. What could be the issue?
    – Jeel Shah
    Apr 15, 2013 at 1:40
  • @gekkostate that error indicates a conflict between names of commands. The only package that perhaps could be causing the name clash that in my code it's fourier; don't load it. If the error persists, it must be elsewhere in your code, not in mine. You can build a MWE illustrating the problem and add it to your question. Apr 15, 2013 at 1:44
  • I removed the fourier package it is fixed! Thanks a bunch!
    – Jeel Shah
    Apr 15, 2013 at 1:45
  • Can you please demonstrate how to add more tasks? I kind of have it figured out but it would be better if you could give an explanation of your code.
    – Jeel Shah
    Apr 15, 2013 at 1:47
  • 1
    @gekkostate yes, of course, I am improving the code. As soon as I finish, I'll update it and provide an explanation. Apr 15, 2013 at 1:59

With PSTricks.

enter image description here

    \pscircle[linewidth=2pt,linecolor=white,fillstyle=solid,fillcolor=blue!75](!2.5 #1 mul 1 add 0){.5}
        \rput[b](!2.5 #1 mul 1 add  1){\parbox{2cm}{\scriptsize #3}}}{%
        \rput[t](!2.5 #1 mul 1 add -1){\parbox{2cm}{\scriptsize #3}}}}

    \psline[linecolor=blue!50,linewidth=1.5,arrowinset=0,arrowlength=0.5]{->}(0,0)(!2.5 #1 mul 5 add 0)

    \Mark{0}{t}{Karl's students do not care about dashing patterns.}
    \Mark{1}{b}{Karl's students do not care about arrow tips.}
    \Mark{2}{t}{Karl's students, by the way, do not know what a transformation matrix is.}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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