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?


4 Answers 4


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. Commented Jun 4, 2014 at 6:01
  • Is it possible to use months instead of years? I would like to have August, September, October, ..., July?. Thank you
    – petobens
    Commented Jul 18, 2014 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. Commented Jul 18, 2014 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
    Commented Jul 18, 2014 at 17:05
  • @petobens: Indeed, if you can cook up a question it would be better. Commented Jul 19, 2014 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

  • 1
    Welcome to TeX.SX! I added a missing backslash and also switched to the article class, because of tex.stackexchange.com/questions/42114/… (If you feel that change was unnecessary, you are of course free to change back.) Commented Jun 11, 2014 at 10:20

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}



I drew this timeline using TikZ:

enter image description here

Here is the code:


\usetikzlibrary{calc, arrows.meta, intersections, patterns, positioning, shapes.misc, fadings, through,decorations.pathreplacing}


\tikzstyle{descript} = [text = black,align=center, minimum height=1.8cm, align=center, outer sep=0pt,font = \footnotesize]
\tikzstyle{activity} =[align=center,outer sep=1pt]

\begin{tikzpicture}[very thick, black]

%% Coordinates
\coordinate (O) at (-1,0); % Origin
\coordinate (P1) at (4,0);
\coordinate (P2) at (8,0);
\coordinate (P3) at (12,0);
\coordinate (F) at (13,0); %End
\coordinate (E1) at (5,0); %Event
\coordinate (E2) at (0.5,0); %Event

%% Filled regions
\fill[color=ColorOne!20] rectangle (O) -- (P1) -- ($(P1)+(0,1)$) -- ($(O)+(0,1)$); % Studies
\path [pattern color=ColorOne, pattern=north east lines, line width = 1pt, very thick] rectangle ($(O)+(0.5,0)$) -- ($(O)+(2,0)$) -- ($(O)+(2,1)$) -- ($(O)+(0.5,1)$); % Something else
\fill[color=ColorTwo!20] rectangle (P1) -- (P2) -- ($(P2)+(0,1)$) -- ($(P1)+(0,1)$); % Work
\shade[left color=ColorThree, right color=white] rectangle (P2) -- (P3) -- ($(P3)+(0,1)$) -- ($(P2)+(0,1)$); % Current work

%% Text inside filled regions
\draw ($(P1)+(-2.5,0.5)$) node[activity,ColorOne] {Studies};
\draw ($(P2)+(-2,0.5)$) node[activity,ColorTwo] {Work};
\draw ($(P3)+(-2,0.5)$)  node[activity, ColorThree] {Current activity};

%% Description
\node[descript,fill=ColorTwo!15,text=ColorTwo](D2) at ($(P2)+(-2,-2.5)$) {%

\node[descript,fill=ColorThree!15,text=ColorThree](D3) at ($(P3)+(-2,-2.5)$) {%

%% Events
\draw[<-,thick,color=black] ($(E1)+(0,0.1)$) -- ($(E1)+(0,1.5)$) node [above=0pt,align=center,black] {Unexpected\\event};
\draw [decorate,decoration={brace,amplitude=6pt}]($(E2)+(-1,1.2)$) -- ($(E2)+(0.5,1.2)$) node [black,midway,above=6pt] {Something};

%% Arrows
\path[->,color=ColorTwo] ($(P2)+(-1,-0.1)$) edge [out=-90, in=130]  ($(D2)+(0,1)$);
\path[->,color=ColorThree]($(P3)+(-1,-0.1)$)  edge [out=-70, in=90]  ($(D3)+(0,1)$);

%% Arrow
\draw[->] (O) -- (F);
%% Ticks
\foreach \x in {0,2,...,12}
\draw(\x cm,3pt) -- (\x cm,-3pt);
%% Labels
\foreach \i \j in {0/2013,2/2014,4/2015,6/2016,8/2017,10/2018,12/2019}{
\draw (\i,0) node[below=3pt] {\j} ;


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .