I currently have a resume I've made in Illustrator with a time line of my work with academics on the lower part and jobs on the upper section:

time line constructed in Illustrator

The trouble with it being in Illustrator of course, is having to carefully rearrange everything whenever I update it. I wanted to switch to creating the time line programatically in LaTeX and attempted to use the chronology package

\event[2000]{2004}{\color{blue}Tennesse Technological University}
\event[2005]{2009}{University of Tennessee Chattanooga}

Which does give me a pretty nice time line:

Chronology time line

But it's pretty limited in positioning (I seem to be able to place either top or bottom; not both), label locations, etc.

Does anyone have any suggestions of packages I could use to create a complex time line? Or is this something I'd have to write/design myself?


A possible solution is to use the timeline library from Milestone graphic in TikZ with a few arrangements for having trapezium shapes.

An example:


\usetikzlibrary{timeline,shapes.geometric}% for trapezium shape

% redefinition for having a interval not starting from 1
  \draw[fill,opacity=0.8] (0,0) rectangle (\timelinewidth,\timelineheight);
  \shade[top color=black, bottom color=white,middle color=black!20]
    (0,0) rectangle (\timelinewidth,-\timelineoffset);
  \shade[top color=white, bottom color=black,middle color=black!20]  
    (0,\timelineheight) rectangle (\timelinewidth,\timelineheight+\timelineoffset);

  \foreach \smitem [count=\xi] in {#1}  {\global\let\maxsmitem\xi} 
  \node at (0,0.5\timelineheight)(\timespan-0){\phantom{Week 0}}; 

  \foreach \x[count=\xi] in {#1}{
       \node[text=white]at +(\xi*\position,0.5\timelineheight) (\timespan-\xi) {\timespan\ \x};

% redefinition to remove unfortunate anchor=west option
\node[phase appearance,#1,between week=0 and 1 in 0,] 
 at ($(\timespan-0)!0!(\timespan-1)$){};


\begin{tikzpicture}[timespan={},% empty to not display a label before the year
  between year/.style args={#1 and #2 in #3}{% auxiliary style for years
    initial week=#1,
    end week=#2,
    time point=#3,
  phase appearance/.append style={trapezium},% redefinition of the shape
  above line/.style={% new style for having the trapezium above the timeline
  below line/.style={% new style for having the trapezium below the timeline
    shape border rotate=180,

\timeline{2004,...,2013} % number of years

% put here the phases
\clip (0,-4) rectangle (\timelinewidth,4);% to clip the first trapezium
\initialphase{involvement degree=2cm,phase color=black,right color=black,left color=black!2,below line}
\phase{between year=1 and 2 in 0.7,involvement degree=2.25cm,above line,phase color=cyan!90!blue}
\phase{between year=3 and 4 in 0.5,involvement degree=2cm,below line, phase color=black}
\phase{between week=3 and 4 in 0.6,involvement degree=1cm,above line,phase color=cyan!90!blue}

%% put here the milestones
\addmilestone{at=phase-0.290,direction=-30:1cm,text={Initial meeting},text options={below}}
\addmilestone{at=phase-1.90,direction=60:0.5cm,text={Software Engineer},text options={above}}
\addmilestone{at=phase-2.270,direction=-120:1cm,text={Research},text options={below}}
\addmilestone{at=phase-3.80,direction=120:1cm,text={Need Agreement},text options={above}}


The result:

enter image description here

  • In order to compile, download the code of the library and put it in your working directory. For the particular case, I'm not completely sure that using the trapezium shape is really the best choice. – Claudio Fiandrino Jun 4 '14 at 6:01
  • Is it possible to use months instead of years? I would like to have August, September, October, ..., July?. Thank you – petobens Jul 18 '14 at 15:58
  • @petobens: yes, it is possible, but requires a little patch as in current form there's no support. I will provide you the code soon. – Claudio Fiandrino Jul 18 '14 at 16:44
  • Thank you! If you want I can open a new question, or I you prefer to update this one, just let me know. – petobens Jul 18 '14 at 17:05
  • @petobens: Indeed, if you can cook up a question it would be better. – Claudio Fiandrino Jul 19 '14 at 8:48

The package chronosys gives you a result quite similar to chronology but I find it more customizable. Here is a example:

\usepackage[paperwidth=34cm, paperheight=10cm]{geometry}%taille du document

\startchronology[align=left, startyear=1999,stopyear=2013, height=0pt, startdate=false, stopdate=false, dateselevation=0pt, arrow=false, box=true]
\chronoperiode[textstyle=\raggedleft\colorbox{gr!50}, color=gr, startdate=false, bottomdepth=0pt, topheight=8pt, textdepth=-25pt,dateselevation=16pt, stopdate=false]{2005}{2009}{University of Tennessee Chattanooga}
\chronoperiode[textstyle=\colorbox{blue!50}, color=blue, startdate=false, bottomdepth=8pt, topheight=16pt, textdepth=-25pt, dateselevation=12pt, stopdate=false]{2000}{2004}{Tennesse Technological University}

Obtaining the following:

Example of timeline


Another way to save manual rearrangement would be to use a tool specifically made for this purpose, like http://vizualize.me/.

(I am not certain they (still?) offer this double-edged timeline functionality, because it isn't used in the example CV, even though it's in the thumbnail:

enter image description here)


By using , I wrote this. It's maybe help.

Note that is really useful.

\usetikzlibrary{chains,positioning,shapes.symbols,fadings,shadows, backgrounds}
\usetikzlibrary{shapes.arrows, shadings}

\begin{document} \begin{tikzpicture}[background rectangle/.style={draw=blue!50,fill=blue!10, rounded corners=1ex}, show background rectangle] \tikzset{ arrow/.style={ draw, minimum height=.5cm, minimum width=1cm, inner sep=2pt, shape=signal, signal from=west, signal to=east, signal pointer angle=110, top color=green!60!black!90!, bottom color=green!30, % fill=blue!50, drop shadow, }, arrow_cur/.style={ draw, minimum height=.5cm, minimum width=1cm, inner sep=0pt, shape=signal, signal from=west, signal to=east, signal pointer angle=110, left color=red!60!black!90!, right color=green!60, % fill=blue!50, drop shadow, }, sign/.style={ draw, minimum height=.5cm, minimum width=1cm, inner sep=2pt, shape=signal, signal to=east, signal pointer angle=110, % fill=blue!50, top color=green!60!black!90!, bottom color=green!30, drop shadow, }, sign_past/.style={ draw, minimum height=.5cm, minimum width=1cm, inner sep=2pt, shape=signal, signal to=east, signal pointer angle=110, % fill=blue!50, top color=red!60!black!90!, bottom color=red!30, drop shadow, }, cercle/.style={ draw, circle, }, note/.style={ rectangle callout, drop shadow, anchor=west, fill=red!50, } } % \draw[yellow!80,step=.5cm] (0,0) grid (10,5); \begin{scope}[start chain=going right,node distance=3pt,] \foreach \mois / \Smois in {janv/Janv.} \node[name=sept, sign_past,on chain,anchor=west,on grid, yshift=1.5cm, xscale=.8] {\tiny{\Smois}};

\node[name=fev, arrow_cur,on chain, xscale=.8] {\tiny{Fév.}}; \foreach \mois / \Smois in {mar/Mars, avr/Avril, mai/Mai, jun/Juin, jul/Juil., aou/Août, sep/Sept., nov/Nov., dec/Déc.} \node[name=\mois, arrow,on chain, xscale=.8] {\tiny{\Smois}}; \node[note, fill=green!40,fill opacity=.8, callout absolute pointer={([xshift=-1mm] fev.south east)},] at (0,0) {\tiny{Mep Suisse (24/02)}}; \node[note, text width=2cm,align=center, top color=cyan!50!black!80, bottom color=cyan!30, callout absolute pointer={(mar.south west)},fill opacity=.8] at (2.5,0) {\tiny{Fin de la période 1\\étape suivante}}; \node[note, callout absolute pointer={(fev.north)},fill opacity=.8] at (2.2,3.5) {\tiny{Livraison 03/04}}; \node[note, text width=2cm,align=center, callout absolute pointer={([xshift=-2mm] fev.north)},fill opacity=.8] at (0,2.5) {\tiny{Livraison 1\\Borne 01/02}}; \node[note, callout absolute pointer={(mar.north west)},fill opacity=.8] at (3,2.8) {\tiny{B 1}}; \draw (0,3.5) node[sign,name=proto, anchor=south west,minimum width=2cm, top color=cyan!50!black!80, bottom color=cyan!30,] {\tiny{Période 1}}; \end{scope} \end{tikzpicture} \end{document}


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.