Creating a Curriculum Vitæ with LaTeX & the CurVe Document Class

This article is a guide to creating a CV with LaTeX using the CurVe document class by Didier Verna.

Whilst benefitting from different LaTeX strengths, such as professional typography and beautiful documents, the CurVe class also handles different CVs for different occasions particularly well. The CurVe class has a variety of options which allows customisation of your résumé.

The documentation for this document class is in-depth and may be overwhelming for LaTeX learners with little experience. However, Didier Verna, the author of the document class, published an article in PracTeX Journal (2006) which demonstrates the basic functionality of the CurVe class in a more accessible fashion: LaTeX curricula vitae with the CurVe class. The article is more readable and entry-level user-friendly than the documentation with its abundance of options. If you don't want to go through a whole tutorial, the cheat sheet «From blank page to CV with CurVe & \LaTeX» may be the faster route to get it done.

A sidenote & disclaimer: I am a German, writing this article in the UK, where most refer to the curriculum vitæ as a CV, curriculum vita or curriculum vitae. Visitors from North America know this document as a resumé or résumé. I use the different terms interchangeably, even though Wikipedia tells me that there is an apparent difference in what constitutes a résumé and a CV in different cultural contexts. And the last bit of fineprint, before we're getting started: this is an article about how to produce a LaTeX CV – I don't wish or aim to offer advice on the content a CV should present. I'm no expert in that department and all the example items are, well, exemplary to show off the CurVe class.

Finally, let's get started!

Getting started: document structure

Using the CurVe class requires you to use a highly structure approach: You have a main document (CV.ltx) and, depending on the number of sections in your CV, various files that contain the different sections, such as education.ltx, work.ltx, skills.ltx etc. These document parts are stored in separate files and are called from within the main CV.ltx document.

This is similar to working on a larger project where you save parts of a document in separate files and load them into the master document via the commands \include, \includeonly or \excludeonly without having to include all parts at once.

The main document: preamble

The main or master document in CV.ltx includes the preamble and the integration of the separate CV sections. The following is a working example for the preamble of a document using the CurVe class:

\documentclass[a4paper,skipsamekey,12pt,english]{curve} % your specs, esp the language of your CV 
\usepackage[T1]{fontenc} % special characters, etc.
\usepackage[a4paper,nohead,nofoot,hmargin=2cm,vmargin=2cm]{geometry} % adapt to your specs
\usepackage[english]{babel} % the language of your CV
\usepackage{textcomp} % Trademarks and other symbols
\usepackage{color} % for coloured link
\usepackage[colorlinks]{hyperref} % clickable links in the PDF
\definecolor{darkblue}{rgb}{0,0,.5} % defines link colour

%%% setup the options for the hyperref package

% Who are you? e. g. Assistant Professor, Chief Engineer, Senior Executive: 
\title{Graduate Student}
% a bit more info about you
\subtitle{at the Peace Institute, Z"urich, Switzerland} 
% vertical space after subrubric 
\setlength\subrubricspace{3ex}% CurVe default: 5pt
% special characters as bullet point symbols
\usepackage{pifont} % only if you need them
\prefix{\ding{43}} % pointing finger as a bullet list item symbol
% if rubric is spread onto multiple pages, the rubric name is repeated and followed by:
\continuedname{~~(continued)} % for a CV in English

The main document: the CV sections

The main document CV.ltx refers to the different sections of the CV in rubric documents (either as *.tex or *.ltx files). Let’s have a look at some common rubrics we may see in almost every résumé or curriculum vitæ:

  • experience.ltx – includes prior jobs, internships, volunteer gigs etc.
  • education.ltx – information about your eduction such as apprenticeships, degree programmes etc.
  • skills.ltx – What is your particular skillset? software, languages, etc.

Other potential sections, especially if you are applying for academic positions, scholarships and so forth:

  • references.ltx – if you are already at the stage where you want to include contact details for referees
  • publications.ltx – if you have a list of publications

Note that the rubric names are not defined by the file names you choose. However, as we will see later, the amount of files in your working directory can become confusing quite quickly. To avoid confusion you’d want to make navigating the different sections as easy as possible. One way to facilitate clarity is to use meaningful file names for your rubric files.

The file names and the rubric names are yours to choose. However, make sure that the file names do not contain spaces, i.e. avoid file name.ltx use file_name.ltx, or even better: rubric_name.ltx, instead.

The main document follows a very simple structure:

% call the rubric files in preferred order 
% make sure your file names are correct
\makerubric{experience} % calls experience.ltx
\makerubric{education} % calls education.ltx
\makerubric{skills} % calls skills.ltx
\makerubric{references} % calls references.ltx
\makerubric{publications} % calls publications.ltx
\end{document} % end of main document CV.ltx

This is a minimalistic version that demonstrates how the CurVe class works. There are several different ways to adapt the style and form of the output beyond the supplied defaults.

I urge anybody who wants to start tweaking the results to have a look at the documentation of the CurVe class. Make sure to refer to the correct version of the documentation which should match your installed version of the CurVe class.

The sections of your CV: example of a rubric file

A rubric file – in this example experience.ltx – is basically a single LaTeX file which only contains a list that represents the stages of your CV under a thematic headline, such as «Professional experience»: experience.ltx

\begin{rubric}{Professional Experience} % rubric title, e.g. Work Experience, Education, Interests…
\subrubric{Research} % subrubric title for the first subrubric / subsection of this rubric “Professional Experience”, e.g. research, volunteer work, internships…
\entry*[Month/Year — Month/Year] % 1st step
Graduate Assistant, Department for Science Fiction, Hogwarts School of Witchcraft and Wizardry, UK (xy hours/week) % description of your 1st step
\entry*[MM/YY — MM/YY] % 2nd step
Research Internship with the “Non-Violent Com-mu-ni-ca-tion”-Project at the Peace Institute, Z"urich, Switzerland % description of your 2nd step
\subrubric{Honorary Office} % subrubric title for the second subrubric / subsection of this rubric “Professional Experience”, e.g. research, volunteer work, internships…
\entry*[Month/Year — Month/Year] % 1st step in the second subrubric Charter member and organizer of the Association for Young Wizards, London, UK
\entry*[MM/YY — MM/YY] % 2nd step in the second subrubric and even more volunteer work

The generic framework of a rubric file is very simple:

\begin{rubric}{Rubric Title} % open the rubric, choose a title, e.g. Education, Work Experience, Interests, Skills, …
\subrubric{Subrubric Title} % bspw. Research, Internships, Volunteering, …
\entry*[Month/Year — Month/Year] % if you do not need a time period here, you can use keywords, umbrella terms etc. % A short description of this stage in your CV follows – don’t forget the action words!
 \end{rubric} % close the rubric

A résumé, of course, includes several different rubric documents, but all follow the same basic structure. You have to decide for yourself how many rubrics, subrubrics and therefore, sections you will include in your CV. However, I think it advisable to avoid subrubrics with only one entry. If you run into the dilemma of having a rubric or subrubric with a singular entry, you may be able to rephrase another subrubric title or rubric title to accommodate this particular item.

A special case: a list of publications

If you have a list of publications you want to reference in your CurVe class CV you can include them via a BibTeX file. The output of bibliographic reference may be adapted using the BibLaTeX package.

However, this is only viable if you already use BibLaTeX and your publications are already stored in the BibTeX format. If you don’t have any experience with the former, I think a complete introduction into the BibTeX universe is a bit too much only to be able to refer to two or three of your articles within your CV. Should you decide to use BibLaTeX be sure to load the package before you load the hyperref package!

For a simple bibliography with only a few entries, thebibliography and \bibitem are your best options to produce something quickly. The thebibliography environment is supported by CurVe as it treats the environment as a special variety of the rubric structure.

One CV – several variants

CurVe allows «flavors» and enables the production of different outputs for one CV. The different sections of one CV are stored in separate «rubric» documents. If you need different variants of that CV – e.g. to apply for a academic type job and for an industry job – you can highlight different areas of your experience by applying these «flavors» to your CV.

The section or rubric of your CV which is available in different forms are stored in rubric documents with prefixes to their file extension. Instead of one experience.ltx file you will need the (two) different versions of the file in the same folder as your main document. In this example there would be two files named according to the pattern rubricname.flavorname.ltx, as in experience.academic.ltx and experience.corp.ltx.

By calling on \flavor{corp} in the preamble of your main document, CV.ltx, you include the experience.corp.ltx version of your job experience section. Respectively, you call on \flavor{academic} to include the experience.academic.ltx version of your job experience section.

Note that each «flavored» rubric file contains a complete rubric with all the information you want to include with this flavor or for this purpose. The source code for the rubric file does not change – the information within the rubric is merely geared toward a specific purpose, specific types of applications, jobs etc.

There are several ways to switch to a flavor: You may either chose the macro \flavor{flavorname} to call on a specific flavor in the main document, CV.ltx. In our example you would write \flavor{academic} or \flavor{corp}. Or you point the macro to «ask» you every time you typeset the document: \flavor{ask} will then prompt you to specify a flavor.

Preparing different output styles

In addition to having different types of content for your CV, the CurVe class also accommodates different styles for non-rubric-elements. This means that you could, for instance, have different styles for your title and subtitle elements.

A typical example would be: you want a clickable element that links your name (in the title) to your professional homepage. You want to style this linked title for readers of your online CV. However, for people who will read the hardcopy print-out, you’d want a different, printer-friendly version of your CV without the link. The input-element enables you to use non-rubric elements accordingly.

You will have two different versions of the title element in your working directory, saved in two separate files: title.print.ltx and

title.print.ltx contains: \title{Print Version of Your Title} contains: \title{Online Version of \href{}{Your Title with Link}}

You will call upon those different types in the preamble of your main document via the input command: \input{elementname.flavorname.ltx}. In this case via \input{} or \input{title.print.ltx}.

As this option presents you with new flexibility for putting together a CV that answers all your needs, I want to emphasise again the importance of meaningful file names and comments in your source code. Going back into the specifics of an unusual document class – six months after you put together your first documents – will lead you to start from square 1 again. So make sure you’ll have an easy time understanding what you did and re-acquainting yourself with the specifics rather quickly.

Nota bene, tips & tricks

The CurVe class accomodates various use cases and allows for great flexibility in putting together a résumé in LaTeX. However, as with all things that require a fair amount of attention to detail, the process can be frustrating. When you attempt to will the code into producing a certain output using tried and tested methods that work in other document classes, CurVe may surprise you with error messages or «breaking» your layout.

Here are some of the tricks & discoveries I gathered using CurVe over the past five years:

  • Potential for mix-ups: The title commands \title, \subtitle, \maketitle and the macros and arguments for \leftheader, \rightheader and \makeheader are not the information that goes into a page header. To adapt page header and footer use the fancyhdr package.
  • Every rubric environment needs explicit opening and closing: (\begin{rubric} … \end{rubric}).
  • Subrubrics (\subrubric{title}) don’t even require a title entry – the \subrubric{} macro can be empty.
  • \entry*[]: Whatever you have in square brackets – the longest string within the brackets defines the width of your \entry*[]-column for the whole rubric. I.e., if you have only one \entry*[with an exceptionally long text] in one of your rubric files, the \entry*[]-column in this rubric will be exceptionally wide (and produces whitespace, thus putting your document out of balanced proportions). To avoid this, you’d want to keep entry elements as short as possible.
  • If you want to produce a consistent \entry*[]-column across all rubrics in your CV, you can include the \noentry{} element which does not produce a printed entry but defines a consistent textwidth for the key column in the rubric: \noentry{example string to produce consistent column width}. Note that the \noentry{} element has curly brackets, not square brackets.
    In order to be consistent across all the rubrics, you’ll have to include the same \noentry{} element in each rubric.
  • The document class option skipsamekey avoids the duplication of identical \entry*[elements]. If the same \entry*[element] repeats itself without a break, the second output of the \entry*[element] will be suppressed. The item description belonging to this \entry*[element] will be aligned with the other rubric entries as expected.
  • Indented line breaks within an \entry*[]-item is produced via the \newline command, not via //.



The CurVe class offers a very flexible way to creating your CV and manage different versions of you résumé with LaTeX. To benefit from the flexibility beyond the defaults, one definitely has to devote some time and effort into setting the document up. However, the modular approach pays off once you are trying to put together CVs for different purposes.

The fact that CurVe does play nicely with the staples of the LaTeX 2e world – such as the fancyhdr package and BibTeX – turns it into a one-stop-shop for your CV needs and is well worth the learning curve.

Details & meta

Tue, 24/05/2011 - 17:41