Automatic CV building
I'm currently in the process of looking for a new job. Last time I was in this situation was in mid 2018. But instead of searching for another Working Student position, like back then, this time I seek full time employment. Hence, instead of a makeshift Word Doc with a one liner introduction and a three column table with duration, job title and employer, I need something more professional.
During my studies I grew fond of LaTeX
LaTeX is a widely-used, free document preparation system designed for high-quality typesetting, specializing in technical and scientific, formula-heavy documentation . It operates as a markup language, separating content from design, where users write code that is compiled into formatted PDFs.
Which is perfect for my plan.
In this post/note today, we will write a quick template that we can fill with source files and then build our nicely looking, constistently styled curriculum vitae.
Quick LaTeX intro
One thing up-front, you're gonna be way better off looking into a tutorial/guide around LaTeX. The platform overleaf is a great and rich resource for that. For instance here.
We can code LaTeX documents in our text editors and then build/compile/render them using a command line tool-chain.
Some of these tool chains are pdfTeX, XeTeX or LuaTeX.
The whole build process is quite complicated. We'll focus on two tools today, pdfTeX and BibTeX. Actually, we'll be using philsupertramp/tex-starter, a pre-built pipeline for all of my LaTeX documents.
pdfTeX will handle layout and content rendering for us, whereas BibTex takes care of references. We will most likely not use BibTeX in our CV, but I use it mostly to have a consistent build process accross all my documents.
Alright, without any further ado here's a quick example of an article document.
\documentclass{article} % Starts an article
\begin{document} % Begins a document
Hello World!
\end{document}
which renders to
Building the CV template
LaTeX offers many different document types we can use, including the moderncv document class.
The following snippet is incomplete and won't build
\documentclass{moderncv}
\begin{document}
Hello World!
\end{document}
We need to define at least the name of the CV holder, which is very straight forward. You can look up the options in the manual.
\documentclass{moderncv}
\name{Philipp}{Zettl}
\begin{document}
Hello World!
\end{document}
and before we dive deeper, we will set the following three attributes on the document
- page size: DIN-A4
- font size: 11pt
- font type: Sans
Apart from that we chose one of the available designs of moderncv, e.g. casual, set the geometry of a page using the geometry package and enabling UTF-8 character sets for our input documents
\documentclass[11pt,a4paper,sans]{moderncv}
\moderncvtheme[green]{casual}
\usepackage[utf8]{inputenc}
\usepackage[scale=0.8]{geometry}
\recomputelengths
\name{Philipp}{Zettl}
\begin{document}
Hello World
\end{document}
This still renders the same document
Great, now we can start writing our actual CV!
First, we'll set a title and build up the structure of the CV
- Professional Summary
- Skills
- Professional Experience
- Projects
- Education
- Other
\documentclass[11pt,a4paper,sans]{moderncv}
\moderncvtheme[green]{casual}
\usepackage[utf8]{inputenc}
\usepackage[scale=0.8]{geometry}
\recomputelengths
\name{Philipp}{Zettl}
\begin{document}
\makecvtitle % renders name in CV head
\section{Professional Summary}
\section{Skills}
\section{Experience}
\section{Selected Projects}
\section{Education}
\section{Other}
\end{document}
and if we fill out our personal data a little more, we even get the job title as a sub-header.