Generating your own CV template with LaTex

Instead of just dumping my CV template here I will explain you the different environments and packages I use for mine. By this you can create your own CV at the end and have the full freedom to personalize it to your own needs. I used scrartcl as the documentclass.

Create your own commands


So you will most probably have several headings in your CV which all require the same formatting. Instead of modifying the existing commands like section I would recommend you to quickly define your own headings: \newcommand{\heading}[1]{\large\textsc{#1}\normalsize\vskip0.1cm} which you can then use throughout the entire document using e.g. \heading{Education}. The standard commands for heading such as section simply come with too many predefined properties and are not required in such a short document.

CV entries

Let’s assume that you will apply for multiple jobs and some of them require you to add a reference for each experience / job and others don’t. At some point you might get tired of commenting the references out and in for each entry in your CV. Here is the alternative: Create a new command for how you want to format your e.g. work experiences:

    #2 \hfill \textsc{#3} \hfill #1\\
    #4 \\

#2 could be the date range of your employment, #3 the title of the job, #1 the company you worked for, #4 describes your work, and #5 is the reference.

In the document you then use

    {ETH Zurich}
    {11/17 - Now}
    {PostDoc - Biomedical Imaging}
                    \item Considering equations
                    \item Exploring rabbit holes
                    \item Helping fibers
    {Prof. Someone \hfill \href{}{} \hfill  +41 44 123 4567}

If you want to remove all references for a certain application, you can simply remove the #5 from the command definition in the preamble instead of modifying all the entries.


I usually would put my five most relevant publications into the CV. To allow convenient opening of the article online, I embed them along with a DOI based link. For this we need the hyperref package in our preamble: \usepackage[hidelinks]{hyperref}.

The environment I use for to print my publications is then defined as

\newcommand{\publication}[4]{#1: #2 \textcolor{gray}{#3 \href{#4}{\faIcon{link}}}}

where #1 is the author / author list, #2 is the title, #3 is the journal, and #4 is the link to your paper.


Your CV needs to fit on a maximum of two pages. The default list command in LaTex will not allow you to use lists of your e.g. skills in this setting. To make the lists more compact, use the enumitem package:


Illustrations and Icons

Small icons can be nice next to e.g. your mail address or your phone number. There are probably numerous png or svg packages you could download for this purpose. The package fontawesome5 solves this issue for you and including icons becomes as easy as \faIcon{phone}.

Linking repositories

In the experience section, I describe several tasks which were related to programming and most of them have a public github repositories. To link them without much effort I generated a new command which generates a clickable icon:


Within the text I can now simply add \repositoryIcon{} next to the description in my CV that I developed Monte Carlo simulations in one of my positions and the icon will be inserted with the link pointing to the repository. This is of course only applicable if the person receiving the pdf uses the electronic version.

Linking publications

I did something very similar for my publications since I do not have enough space to put all of them as full text in the “Selected Publication” part (max. 5). Instead, I link them after the bullet points in my experience sections through


Multilanguage support

Simple language toggle

If you apply for multiple jobs, there comes the point when you might need to submit your CV in a different language. Instead of copying the whole file and rewriting every single line, I would make a single document with a language select upon compile time. For this, include in your preamble \newcommand{\langSelect}[2]{{#1}}. In the text you write each entry, heading etc. in the two languages you have, so for example \langSelect{Zurich}{Z\"urich} where in my case the first version corresponds to the English version of the CV and the second one to the German CV. I do this for every bit of content and upon compile time I can switch the #1 argument in the \newcommand field to #2 version if I want to change to the German output.

More advanced language environment

A little bit more advanced approach I found on stackexchange. It keeps everything more clean and sorted.

% Environment settings


% Multilingual support commands
    \ifthenelse{\equal{#1}{\doclang} \or \equal{#1}{\doclangshort}}

Afterwards in the document you can use the following


\lang{it}{Questa stringa appare solo in italiano.}
\lang{en}{This string shows up only in English.}
More information on multi-language support

Italic text

I really think italic text should be avoided in such a document because it somehow breaks the text flow from a typographic point of view. I would rather use a different font color like gray to distinguish between important and unimportant parts. My command for language skills for example is defined as: \newcommand{\langskill}[2]{#1 \textcolor{gray}{#2}}. Without any italic, bold, underline or brackets, it can be clearly distinguished between the language and the skill level.

Leave a Reply

Your email address will not be published. Required fields are marked *