Professional LaTeX CV Templates: Resumes That Hold Their Formatting
A CV is the document where formatting matters most and word processors fail most often. You nudge one margin, and three pages reflow. LaTeX CV templates solve that by separating content from layout. You define the structure once, drop in your details, and every compile produces the same clean PDF. This guide walks through three solid templates (academic, modern professional, and creative), then covers the formatting techniques that make a CV scannable and ATS-friendly.
Why LaTeX for a CV
The honest pitch is narrow but real. LaTeX gives you typographic consistency that a word processor cannot promise, especially once a document has tables, columns, and custom spacing.
- Margins, spacing, and alignment follow rules you set once, so nothing shifts unexpectedly.
- A plain-text source diffs cleanly in Git, so you can track every change to your CV over time.
- The output is publication-quality typography, which reads as attention to detail in technical roles.
There is a learning curve, and it is steepest for heavily designed layouts. If your CV is one page of text, a word processor is faster. If it is a multi-page academic CV or a design-forward resume you will reuse for years, the upfront effort pays back.
The classic academic CV
For researchers, postdocs, and graduate students, the publications and teaching record carry the document. The moderncv class is the common starting point because it gives you structured entry commands out of the box.
\documentclass[11pt,a4paper,sans]{moderncv}
\moderncvstyle{classic}
\moderncvcolor{blue}
\usepackage[scale=0.85]{geometry}
\usepackage{fontawesome5}
% Personal data
\name{Jane}{Smith}
\title{Assistant Professor of Computer Science}
\address{123 University Ave}{City, State 12345}{USA}
\phone[mobile]{+1~(234)~567~8901}
\email{jane.smith@university.edu}
\social[linkedin]{janesmith}
\social[github]{janesmith}
\extrainfo{ORCID: 0000-0000-0000-0000} Each field uses a dedicated command, so updating a phone number never disturbs the layout. The fontawesome5 package supplies the contact and social icons.
The body uses \cventry for dated entries and \cvitem for one-line items.
\begin{document}
\makecvtitle
\section{Education}
\cventry{2015--2019}{Ph.D. in Computer Science}{Stanford University}{Stanford, CA}{}
{Dissertation: ``Machine Learning Applications in Bioinformatics''\newline
Advisor: Prof. John Doe}
\cventry{2013--2015}{M.S. in Computer Science}{MIT}{Cambridge, MA}{GPA: 3.9/4.0}{}
\section{Publications}
\cvitem{2024}{Author, A., et al. ``Paper Title.'' \emph{Journal Name}, 6(3), 234--245.}
\cvitem{2023}{Author, A. ``Another Paper.'' \emph{Journal Name}, 20(4), 1567--1579.}
\section{Teaching}
\cventry{2023--2024}{CS 501: Advanced Machine Learning}{Graduate Course}{}{}{}
\section{Skills}
\cvitem{Programming}{Python, R, C++, MATLAB, Julia}
\cvitem{Languages}{English (native), Spanish (fluent)}
\end{document} The \cventry arguments are date, title, organisation, location, an optional grade or note, and a description. Keeping them in that order is what makes a search committee able to scan your record in seconds.
The modern professional resume
For industry roles, the priority shifts to achievements and to passing an Applicant Tracking System. A custom article-based layout gives you tighter control than a packaged class.
\documentclass[letterpaper,11pt]{article}
\usepackage[empty]{fullpage}
\usepackage{titlesec}
\usepackage[hidelinks]{hyperref}
\usepackage{tabularx}
\usepackage{fontawesome5}
\usepackage{enumitem} A couple of reusable commands keep entries consistent.
\newcommand{\resumeItem}[1]{\item\small{#1 \vspace{-2pt}}}
\newcommand{\resumeSubheading}[4]{%
\vspace{-2pt}\item
\begin{tabular*}{0.97\textwidth}[t]{l@{\extracolsep{\fill}}r}
\textbf{#1} & #2 \\
\textit{\small#3} & \textit{\small #4} \\
\end{tabular*}\vspace{-7pt}
} The header keeps contact details on one line, with icons for scannability and live links for the PDF version.
\begin{document}
\begin{center}
{\Huge \scshape John Developer} \\ \vspace{1pt}
\faIcon{map-marker-alt} San Francisco, CA \\ \vspace{1pt}
\small
\faIcon{phone} \href{tel:+14155551234}{+1-415-555-1234} $|$
\faIcon{envelope} \href{mailto:john@email.com}{john@email.com} $|$
\faIcon{linkedin} \href{https://linkedin.com/in/johndeveloper}{linkedin.com/in/johndeveloper}
\end{center} For the experience section, lead each bullet with an action verb and a number. Recruiters skim, and ATS parsers reward concrete terms.
\section{Experience}
\resumeSubheading
{Senior Software Engineer}{Jan 2021 -- Present}
{Tech Company}{San Francisco, CA}
\resumeItem{Led a microservices migration serving 10M+ daily users}
\resumeItem{Cut API response time by 60\% with caching and query tuning}
\resumeItem{Mentored five engineers and set up the code review process} A practical ATS note: avoid putting critical content inside multi-column layouts or text boxes, because some parsers read columns out of order. Keep the skills and experience sections in a single column, even if the header is fancier.
The creative design CV
Designers and creatives can push the visuals further, as long as the document stays readable. TikZ handles a coloured header banner.
\documentclass[a4paper,10pt]{article}
\usepackage{geometry}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{fontawesome5}
\usepackage{multicol}
\definecolor{primarycolor}{RGB}{52, 152, 219}
\definecolor{darkcolor}{RGB}{44, 62, 80}
\newcommand{\cvheader}[3]{%
\begin{tikzpicture}[remember picture,overlay]
\node [rectangle, fill=primarycolor, anchor=north, minimum width=\paperwidth, minimum height=4cm] (box) at (current page.north){};
\node [anchor=center] (name) at (box) {\fontsize{40pt}{60pt}\color{white}\textbf{#1}};
\node [anchor=north] at (name.south) {\fontsize{14pt}{20pt}\color{white}#2};
\end{tikzpicture}
\vspace{3.5cm}
\begin{center}\color{darkcolor}#3\end{center}
}
\begin{document}
\cvheader{Emma Designer}{UX/UI Designer}{%
\faIcon{envelope} emma@design.com \quad
\faIcon{phone} +1-555-0123 \quad
\faIcon{globe} emmadesigner.com
} The rest of the document leans on colour and icons for hierarchy without sacrificing legibility.
\section*{\color{primarycolor}\faIcon{briefcase} Experience}
\textbf{Senior UX Designer} \hfill \textcolor{darkcolor}{2020 -- Present}\\
\textit{Design Studio, New York}
\begin{itemize}
\item Redesigned the flagship product and ran the usability testing
\item Built a design system adopted across the product team
\end{itemize}
\end{document} Use colour sparingly: headers, rules, and the occasional accent. A CV that is all colour is harder to read, not more impressive.
Formatting techniques that scale
Modular sections
Splitting your CV into files lets you assemble targeted versions without copy-paste drift.
\input{personal-data}
\input{experience-full}
\input{education} Conditional content
One source can produce both an academic and an industry version using a boolean switch.
\newif\ifacademic
\academictrue % set to \academicfalse for industry applications
\ifacademic
\input{publications-full.tex}
\else
\input{publications-selected.tex}
\fi Clean tabular alignment
For a skills grid, tabularx with custom column types gives you control over width and wrapping.
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\begin{tabularx}{\textwidth}{L{3cm}X}
\textbf{Category} & \textbf{Details} \\
\hline
Programming & Python, JavaScript, Java, SQL \\
Web & React, Node.js, Express \\
Data & Pandas, NumPy, scikit-learn \\
\end{tabularx} Common mistakes
A few traps catch people repeatedly.
Over-design is the big one. More than two or three font variations starts to look noisy rather than polished. Margins that drop below about 2cm read as cramped, so keep them generous. And hyperref is fussy about load order, so load it last in the preamble to avoid clashes with other packages.
On content, vague bullets waste the reader’s attention.
% Weak
\cvitem{2022}{Worked on various projects}
% Stronger
\cvitem{2022}{Led a 5-person team to ship an e-commerce platform, increasing checkout conversion by 35\%} Version control and CI for your CV
Because the source is plain text, you can treat your CV like any other repository.
git init my-cv
git checkout -b academic
git commit -am "Add latest publication"
git tag -a v2.0 -m "Version for tenure application" A GitHub Action can compile the PDF on every push so you always have a current build.
name: Compile CV
on: [push]
jobs:
compile:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: xu-cheng/latex-action@v3
with:
root_file: cv-main.tex
- uses: actions/upload-artifact@v4
with:
name: cv-pdf
path: cv-main.pdf Drafting and reviewing a CV with inscrive.io
A CV is rarely written alone. You send it to a mentor, a career advisor, or a friend in the field and iterate. inscrive.io is a browser-based LaTeX editor with real-time collaborative editing, so a reviewer can mark up the live document instead of trading PDF copies. Advanced version history lets you rewind to any earlier draft, which is handy when you keep several tailored variants. The template library lets a careers office share a standard layout across students.
The data point that matters for a document full of personal details: your CV stays in EU data centres (Hetzner, in Germany and Finland), under a signed DPA with no third-country transfers, and inscrive never uses your documents to train AI models. The Free plan is €0 forever with 60-second compiles, which is plenty for a CV; Pro adds 480-second compiles and AI-suggested fixes for compile errors at €7/month.
Resources
Related articles
inscrive.io is a collaborative, EU-hosted LaTeX editor for CVs, papers, and theses. Real-time editing, a template library, advanced version history, and full GDPR compliance, with a Free tier at €0 forever. Start writing, it’s free.




