This question led to a new package:

I just had the idea of using a timeline to specify dates in my CV. I've made a mockup in Inkscape:


The idea, as you see it, is to display the dates of experience on timelines instead of just typesetting them. I think this makes it nicer and more understandable somehow. When the position is still held, I want to use a gradient at the end of the line. Since I'm using moderncv and it uses lines for sections (like the orange line in front of "Experience"), I would like to calibrate the time lines on this line, setting a start and an end dates corresponding to the extremities of the section line. In my example, the section line goes from 2000 to 2011 for example.

I think using TiKz could do. How would you suggest to implement this? Is there an existing package that would almost do this?

  • it will be nice if the package come up with a template that includes an entry of each nice stuff that the package can do. – SAM Jun 28 '16 at 1:56
  • @SAM if you want an example, you can check my own CV on – ℝaphink Jun 28 '16 at 8:20
  • @ℝaphink: The code in my answer doesn't work with recent versions of moderncv. Could you accept your answer instead of mine, so mine isn't shown at the top? – Jake Jun 28 '16 at 11:11
  • Done, thank you @jake. – ℝaphink Jun 28 '16 at 11:54
up vote 79 down vote accepted

For the record, I have adapted Jake's code and began working on a new package called moderntimeline:


% Set the scale.
% I go up to 2013 otherwise some late dates overflow on the entry
% Set the line width.
% This automatically sets the space under the top label to be 1pt more
% Set the labels text size

And then a few examples:

\subsection{IT Experience}
\tlcventry[blue]{2006}{0}{Systems Engineer}{\href{}{ORNESS} then \href{}{Alten}}{Sophia Antipolis}{}
{Consultant at France T\'el\'ecom
 \item Administration of Cfengine, FAI and the software package repository;
 \item Renewal and industrialization of the software deployment system for Debian/Ubuntu;
 \item Management of the Gforge (collaborative development web interface) platform;
 \item Monitoring of the fleet of servers;
 \item Writing of technical documentation.


  {\href{}{French Red Cross}}{Paris Suburbs}{}
  {Served in several volunteer missions as a paramedic}


\tldatelabelcventry[red]{2004}{July 2004}{Blue Collar Internship}
  {Assembled and equilibrated turbo reactors for planes}


\tldatecventry[green]{2005}{Student in Pedagogy (`Gestion Mentale')}
  {Pedagogy, Didacticism, Cognitive Psychology}


Edit: Since moderncv aligns the left column to the right, there were weird things with dates, so I decided to put a white rectangle all over each entry to make sure the whole space was used. After that, my wife suggested I used a thin line to every entry to make things clearer, so now it looks like this (color and width of the thin line can be set):


Full examples can be seen in my updated CV.

  • 8
    Appreciate you turning useful thing into packages! – N.N. Sep 28 '11 at 12:35
  • Package uploaded to CTAN :-) – ℝaphink Sep 28 '11 at 14:10
  • @NN: If I had some time, I think I would turn a lot of answers on TeX.SX into packages. I just think it makes life easier once it's done. – ℝaphink Sep 29 '11 at 6:16
  • 2
    I really like the version with the thin lines - makes the entire timeline thought clearer to the reader. Thank your wife from me! =) – Tomas Aschan Apr 23 '12 at 19:08
  • 1
    tex community is great… that seems like a good starting point. – Sik Nov 28 '13 at 17:19

This code doesn't work with versions of moderncv after 2012. Please use ℝaphink's moderntimeline package instead

Here's a way of getting this to work with moderncv. I've defined a new macro, \funkycventry that takes the start and end year and then all the same arguments as cventry, and uses this to draw the timeline bar in the same colour and width as the section headers. If the end year is 0, the bar fades out, and no end year is printed.




        inner xsep=0pt,
        anchor=base west,
        inner xsep=0pt,
        anchor=north east,


    \fill [sectionrectanglecolor] (0,0) 
        node [startyear] {#1}
        rectangle (\endfraction*\hintscolumnwidth,0.5ex)
        node [endyear] {\pgfmathparse{ifthenelse(#2==0,,#2)}\pgfmathresult}
        (\hintscolumnwidth,0pt) ;
    \ifnum #2=0
        \shade [left color=sectionrectanglecolor]
        (\endfraction*\hintscolumnwidth-1em,0pt) rectangle ++(1em,0.5ex);

\funkycventry{2002}{2007}{Job title}{Employer}{City}{}{General description no longer than 1--2 lines.\newline{}%
Detailed achievements:%
\item Achievement 1;
\item Achievement 2, with sub-achievements:
\item Achievement 3.
\funkycventry{2000}{2011}{Job title}{Employer}{City}{}{Description line 1\newline{}Description line 2}
\funkycventry{2005}{0}{Job title}{Employer}{City}{}{Description}

  • 3
    Great. I've adapted the code for my need. I might make a package out of it. – ℝaphink Sep 28 '11 at 7:35
  • Looking forward to seeing it! – Jake Sep 28 '11 at 7:36
  • I have pushed a (not ready for release yet, missing the doc) version on github. – ℝaphink Sep 28 '11 at 11:54
  • 1
    This was beautiful. I'm going to start working on my CV right now! – Tomas Aschan Apr 23 '12 at 19:07
  • 1
    @Jake moderntimeline now supports months in a simpler way. Recently I made some changes to the code on my CV to display them with three letters; when I'll have some time I'll make a pull request to modertimeline repository. – Astrinus Jun 28 '16 at 14:19

If I understood your description correctly, this could be what you need:



\begin{tikzpicture}[ultra thick]
\def\timelineunfinished#1#2{\node (refnode) at (0,0) {};%
                   \shade [left color=#1,right color=white] (${#2-2000}*(1,0)$) rectangle ++(${2011-#2}*(1,0)+1*(0,-0.5)$) node [pos=0, label=#2] (startdate) {};}


\def\timelinefinished#1#2#3{\node (refnode) at (0,0) {};%
                   \path [fill=#1] (${#2-2000}*(1,0)$) rectangle ++(${#3-#2}*(1,0)+1*(0,-0.5)$) node [pos=0, label=#2] (startdate) {} node [label=#3] (enddate) at ++(0,0.5) {};}


What I did, is define two new commands, one for timelines that have a start and an end date (these will not be rendered with gradient, but with solid fill) and one for the timelines that are 'in progress'. The timelines can start at 2000 earliest and end at latest in 2011. To change the limits, just replace the numbers in the code accordingly.

The code can probably be cleaned up, error checking could be included to avoid having the end earlier than the start, etc. But for a primer I hope this will do.

Your Answer


By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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