About half a year ago, I posted a blog post on how I created my business card. This post was my most popular post to date. It was even the most tending post for a few hours on Hacker News. Lots of people were asking about my curriculum vitæ (CV) design, but to be honest, I was using the moderncv document class at the time. After finishing my dissertation and graduating, I’ve found the time to fully design my own CV and this is the result:

CV front page
CV cover letter


I took the time to design my own template. In this series of four blog post, I will detail the design as a standard document. However, I’ve also converted the design to a document class. This should make it easier for others to use this template. If you’re only interested in using the document class, you should check the GitHub repository and package documentation.

As highlighted in the business card post, one might wonder why bother doing this in LaTeX, a typesetting system that is notorious for its quirks and dirty hacks to make it produce the desired output. The answer is: why not? (La)TeX is open source, available on all major platforms, and the fact that it’s a pain in the ass sometimes makes it all the more challenging and fun to do.

This first blog post will be about the general design considerations. Next, we will design the sidebar in a dedicated post, followed by the main section. This section will contain details about interests, experience and education. Finally, we’ll also add a cover letter design.

About the Layout: Overall Style Ideas

From the very beginning, I knew I wanted to have a two-column layout: one column for personal details such as name, position, languages, etc. And one for the “main” content such as education and experience. It also has to match the business card I’ve previously designed, so we’ll use the same colour/font combination.

An overview of the layout structure, widths and margins can be found to the rightbelow. We’ll immediately be using proper length variables, since that makes iterating way faster!

As one can see in this figure, we have defined three new lengths: \margin, \mainwidth and \sidewidth. \paperwidth and \paperheight are LaTeX built-ins and set using appropriate options passed to the geometry package. From the relationship between all three lengths, we can deduce that \mainwidth is \paperwidth-\sidewidth-4\margin.

We will be designing a regular CV, so A4 paper is the target size. We will set the margin to 1 cm here, to maximise information density on the first page. The base preamble looks as follows:

<figure id="cv-margins" class="centre-element" >
    <img src="https://olivierpieters.be/blog/2017/09/12/designing-a-cv-in-latex-part-1/limecv-layout.svg" alt="CV margins" class="frame" />
% !TEX TS-program = xelatex
% !TEX encoding = UTF-8 Unicode



% define length

% set a4paper width minimal options

% define more lengths


The basic preamble is fairly standard. One unusual package my be the calc package which redefines \setlength. We can now make use of more complicated expressions and arithmetic to set lengths and not only use hard-coded numbers.

Notice that we are using the XeTeX compiler. This compiler is needed for some of the features we will use in the subsequent sections such as font loading and minor spacing corrections. We will correct some of the left and right side-bearings of some characters. As a result, we require a recent version of XeTeX (the code is not compatible with regular LaTeX nor with LuaTeX).

We will be using a similar colour palette as for the business card, but instead of using !30 to make the colour lighter, I’ve opted to use a dedicated colour that is slightly more saturated than the previous version. The business card can be easily adopted to match this colour.

C29 M26 Y0 K74
C30 M27 Y0 K60
C58 M0 Y65 K50
C19 M0 Y21 K11

By now, we know the overall layout and the colour palette that we’re going to use. In the next blog post we will start the actual implementation by designing the sidebar.