McDowell CV LaTeX template
The McDowell CV LaTeX template is Daniil Belyakov's one page resume class, built around the compact design that Gayle McDowell proposed for software engineers.
- Engine: LuaLaTeX
- Source: dnl-blkv/mcdowell-cv 2.7k b7e2d27 19 Sep 2026
- License: MIT
Open in LaTeX.to Download all files (zip)
Files:
McDowell_CV_Template.tex
Download McDowell_CV_Template.tex
%% The MIT License (MIT)
%%
%% Copyright (c) 2015 Daniil Belyakov
%%
%% Permission is hereby granted, free of charge, to any person obtaining a copy
%% of this software and associated documentation files (the "Software"), to deal
%% in the Software without restriction, including without limitation the rights
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
%% copies of the Software, and to permit persons to whom the Software is
%% furnished to do so, subject to the following conditions:
%%
%% The above copyright notice and this permission notice shall be included in all
%% copies or substantial portions of the Software.
%%
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
%% SOFTWARE.
% The font could be set to Windows-specific Calibri by using the 'calibri' option
\documentclass[]{mcdowellcv}
% For mathematical symbols
\usepackage{amsmath}
% Set applicant's personal data for header
\name{Gayle L. McDowell}
\address{123 Spruce St, Apt 35 \linebreak Philadelphia PA 19103}
\contacts{(555) 555-1212 \linebreak [email protected]}
\begin{document}
% Print the header
\makeheader
% Print the content
\begin{cvsection}{Employment}
\begin{cvsubsection}{Software Engineer, Intern}{Apple Computer}{Summer 2004}
iChat AV
\begin{itemize}
\item Reduced time to render the user’s buddy list by 75\% by implementing prediction algorithm.
\item Implemented iChat integration with OS X Spotlight Search by creating tool which extracts metadata from saved chat transcripts and provides metadata to a system-wide search database.
\item Redesigned chat file format and implemented backwards compatibility for search.
\end{itemize}
\end{cvsubsection}
\begin{cvsubsection}{Lead Student Ambassador}{Microsoft Corporation}{Fall 2003 -- Spring 2005}
\begin{itemize}
\item Promoted to Lead Student Ambassador in Fall 2004; supervised 10 -- 15 Student Ambassadors.
\item Created and taught Computer Science course, CSE 099: Software Design and Development.
\end{itemize}
\end{cvsubsection}
\begin{cvsubsection}{Head Teaching Assistant}{University of Pennsylvania}{Fall 2001 -- Spring 2005}
\begin{itemize}
\item Courses: Advanced Java III, Software Engineering, Mathematical Foundations of Computer Science I \& II.
\item Promoted to Head TA in Fall 2004; led weekly meetings and supervised four other TAs.
\end{itemize}
\end{cvsubsection}
\begin{cvsubsection}{Software Design Engineer, Intern}{Microsoft Corporation}{Summers 2001 -- 2003}
Visual Studio Core (Summer 2003)
\begin{itemize}
\item Implemented a user interface for the VS open file switcher (ctrl-tab) and extended it to tool windows.
\item Created service to provide gradient across VS and VS add-ins. Optimized service via caching.
\end{itemize}
Programmer Productivity Research Center (Summers 2001, 2002)
\begin{itemize}
\item Built app to compute similarity of all methods in a code base; reduced time from $O(n^2)$ to $O(n\ log\ n)$.
\item Created test case generation tool which creates random XML docs from XML Schema.
\end{itemize}
\end{cvsubsection}
\end{cvsection}
\begin{cvsection}{Education}
\begin{cvsubsection}{Philadelphia, PA}{University of Pennsylvania}{Fall 2000 -- May 2005}
\begin{itemize}
\item M.S.E. in Computer and Information Science, May 2005. GPA: 3.6
\item B.S.E. in Computer Science Engineering with Minor in Mathematics, May 2005. In-major GPA: 3.4.
\item Graduate Coursework: Software Foundations; Computer Architecture; Algorithms; Artificial Intelligence; Comparison of Learning Algorithms; Computational Theory.
\item Undergraduate Coursework: Operating Systems; Databases; Algorithms; Programming Languages; Comp. Architecture; Engineering Entrepreneurship; Calculus III.
\end{itemize}
\end{cvsubsection}
\end{cvsection}
\begin{cvsection}{Technical Experience}
\begin{cvsubsection}{Projects}{}{}
\begin{itemize}
\item \textbf{Multi-User Drawing Tool} (2004). Electronic classroom where multiple users can view and simultaneously draw on a “chalkboard” with each person’s edits synchronized. C++, MFC
\item \textbf{Synchronized Calendar} (2003 – 2004). Desktop calendar with globally shared and synchronized calendars, allowing users to schedule meetings with other users. C\#.NET, SQL, XML
\item \textbf{Operating System} (2002). UNIX-style OS with scheduler, file system, text editor and calculator. C
\end{itemize}
\end{cvsubsection}
\end{cvsection}
\begin{cvsection}{Additional Experience and Awards}
\begin{cvsubsection}{}{}{}
\begin{itemize}
\item \textbf{Instructor (2003 – 2005):} Taught two full-credit Computer Science courses; average ratings of 4.8 out of 5.0.
\item \textbf{Third Prize, Senior Design Projects:} Awarded 3rd prize for Synchronized Calendar project, out of 100 projects.
\end{itemize}
\end{cvsubsection}
\end{cvsection}
\begin{cvsection}{Languages and Technologies}
\begin{cvsubsection}{}{}{}
\begin{itemize}
\item C++; C; Java; Objective-C; C\#.NET; SQL; JavaScript; XSLT; XML (XSD) Schema
\item Visual Studio; Microsoft SQL Server; Eclipse; XCode; Interface Builder
\end{itemize}
\end{cvsubsection}
\end{cvsection}
\end{document}
mcdowellcv.cls
%% The MIT License (MIT)
%%
%% Copyright (c) 2015 Daniil Belyakov
%%
%% Permission is hereby granted, free of charge, to any person obtaining a copy
%% of this software and associated documentation files (the "Software"), to deal
%% in the Software without restriction, including without limitation the rights
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
%% copies of the Software, and to permit persons to whom the Software is
%% furnished to do so, subject to the following conditions:
%%
%% The above copyright notice and this permission notice shall be included in all
%% copies or substantial portions of the Software.
%%
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
%% SOFTWARE.
\ProvidesClass{mcdowellcv}[2022/03/18 v1.2.0 McDowell CV class]
% Set up the fonts according to options
\def\mainfontsize{11pt}
\def\mainfontface{TeX Gyre Termes}
\DeclareOption{calibri}{%
\def\mainfontface{Calibri}
}
% Set up papersize according to options, default to US letter
\def\papersize{letterpaper}
%Set up bool for adjusting vspacing later
\newif\ifpapersize
\DeclareOption{a4paper}{%
\def\papersize{a4paper}
\papersizetrue
}
\DeclareOption{letterpaper}{%
\def\papersize{letterpaper}
\papersizefalse
}
\ProcessOptions\relax
% Set font size and paper type
\LoadClass[\papersize,\mainfontsize]{article}
% Set document margins
\usepackage[left=0.75in,top=0.6in,right=0.75in,bottom=0.6in]{geometry}
% Set font face
\usepackage{fontspec}
\setmainfont[SmallCapsFeatures={Renderer=Basic},
Ligatures={TeX, NoCommon, NoDiscretionary}]{\mainfontface}
% Remove paragraph indentation
\usepackage[parfill]{parskip}
% Required for boldface (\bf and \bfseries) tabular columns
\usepackage{array}
% Required for ifthenelse statements
\usepackage{etoolbox}
% Suppress page numbers
\pagestyle{empty}
% Flexible tables
\usepackage{tabu}
\expandafter\in@\expandafter$\expandafter{\@tabular}
\ifin@\else
\patchcmd\tabu@setcleanup{\aftergroup\aftergroup\aftergroup\tabu@cleanup}{\aftergroup\tabu@cleanup}{}{}
\fi
% For custom margins
\usepackage{changepage}
% To customize lists
\usepackage{enumitem}
% Remove left margin from lists, suppress vertical item separation and set top
% separation to a negative value to suppress a single parskip before lists
\setlist{leftmargin=*, noitemsep, topsep=-1\parskip}
% For adjusting spacing based on the platform used
\usepackage{ifthen}
\usepackage{ifplatform}
% For spcaed small caps
\usepackage{microtype}
\DeclareMicrotypeSet*{smallcapsi} {
encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1,EU1,EU2},
shape = {sc*,si,scit}
}
%--------------------------------------------------------------------------------
% Constants -
%--------------------------------------------------------------------------------
\ifthenelse{\equal{\platformname}{\notwindowsname}}{
\def\namespaceskip{0.575em}
\def\afterheaderspace{1.1pt}
\def\beforesectionheaderspace{5pt}
\def\sectionheadermargin{6pt}
\def\beforesectionheaderhrulespace{2.85pt}
\def\sectionheaderhrlueheight{0.518pt}
\def\aftersectionheaderspace{-5.8pt}
\ifpapersize
\def\aftersinglelinesubsectionheaderspace{-5.75pt}
\else
\def\aftersinglelinesubsectionheaderspace{-20.25pt}
\fi
\def\afterdoublelinesubsectionheaderspace{-11.75pt}
\def\aftermultilinesubsectionheaderspace{-7.75pt}
\def\afteremptysubsectionheaderspace{1.25pt}
\def\subsectionmargin{9pt}
\def\aftersubsectionspace{2.1pt}
}{
\def\namespaceskip{0.4em}
\def\afterheaderspace{3pt}
\def\beforesectionheaderspace{4.75pt}
\def\sectionheadermargin{6pt}
\def\beforesectionheaderhrulespace{3pt}
\def\sectionheaderhrlueheight{0.5pt}
\def\aftersectionheaderspace{-4pt}
\ifpapersize
\def\aftersinglelinesubsectionheaderspace{-4pt}
\else
\def\aftersinglelinesubsectionheaderspace{-18.5pt}
\fi
\def\afterdoublelinesubsectionheaderspace{-10pt}
\def\aftermultilinesubsectionheaderspace{-6pt}
\def\afteremptysubsectionheaderspace{3pt}
\def\subsectionmargin{9pt}
\def\aftersubsectionspace{4pt}
}
%--------------------------------------------------------------------------------
% Header Setup and Printing -
%--------------------------------------------------------------------------------
% Address
\makeatletter
\newcommand\address[1]{\def\@address{#1}}
\address{}
\newcommand\printaddress{
\small{\@address}
}
\makeatother
% Name
\makeatletter
\newcommand\name[1]{\def\@name{#1}}
\name{}
\newcommand\printname{
\typeout {kokoko}
\typeout \spaceskip
\spaceskip \namespaceskip \relax
\textbf{\LARGE\textls[110]{\textsc{\@name}}}
}
\makeatother
% Contacts
\makeatletter
\newcommand\contacts[1]{\def\@contacts{#1}}
\contacts{}
\newcommand\printcontacts{
\small{\@contacts}
}
\makeatother
\makeatletter
\newcommand\makeheader{
\begin{center}
\begin{tabu} to 1\textwidth { X[l,m] X[2,c,m] X[r,m] }
\printaddress & \printname & \printcontacts \\
\end{tabu}
\end{center}
\vspace*{\afterheaderspace}
}
\makeatother
%--------------------------------------------------------------------------------
% Sections and Subsections -
%--------------------------------------------------------------------------------
% Print a section header
\makeatletter
\newenvironment{cvsection}[1]{
\vspace*{\beforesectionheaderspace}
% Set text margins to equal \tabcolsep (6pt by default)
\begin{adjustwidth}{\sectionheadermargin}{\sectionheadermargin}
\textsc{\textbf{#1}}
\end{adjustwidth}
\vspace*{\beforesectionheaderhrulespace}
\hrule height \sectionheaderhrlueheight
\vspace*{\aftersectionheaderspace}
}{}
\makeatother
% Print a subsection
\makeatletter
% Define toggles checking if titles were defined
\newtoggle{lefttitledefined}
\newtoggle{centertitledefined}
\newtoggle{righttitledefined}
\newenvironment{cvsubsection}[4][1]{
\notblank{#2}{\toggletrue{lefttitledefined}}{}
\notblank{#3}{\toggletrue{centertitledefined}}{}
\notblank{#4}{\toggletrue{righttitledefined}}{}
\ifboolexpr{togl {lefttitledefined} or togl {centertitledefined} or togl {righttitledefined}}{
\begin{tabu} to 1\textwidth { X[l,p] X[c,p] X[r,p] }
\textbf{#2} & \textbf{#3} & \textbf{#4} \\
\end{tabu}
% Add space according to the specidied number of lines
\ifnumcomp{#1}{=}{1}{\vspace*{\aftersinglelinesubsectionheaderspace}}{
\ifnumcomp{#1}{=}{2}{\vspace*{\afterdoublelinesubsectionheaderspace}}{
\vspace*{\aftermultilinesubsectionheaderspace}
}
}
}{
\vspace*{\afteremptysubsectionheaderspace}
}
\togglefalse{lefttitledefined}
\togglefalse{centertitledefined}
\togglefalse{righttitledefined}
\begin{adjustwidth}{\subsectionmargin}{\subsectionmargin}
}
{
\end{adjustwidth}
\vspace*{\aftersubsectionspace}
}
\makeatother
LICENSE
The MIT License (MIT)
Copyright (c) 2015 Daniil Belyakov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
changes.txt
Changes made for LaTeX.to to the McDowell CV template
Template page: https://latex.to/templates/github/mcdowell-cv/
Repository: https://github.com/dnl-blkv/mcdowell-cv
Commit: b7e2d271c64814ee02b3505b191389c8df614035
Author: Daniil Belyakov
License: MIT, see LICENSE
Changes from the original (a/) to this copy (b/):
--- a/mcdowellcv.cls
+++ b/mcdowellcv.cls
@@ -24,7 +24,7 @@
% Set up the fonts according to options
\def\mainfontsize{11pt}
-\def\mainfontface{Times New Roman}
+\def\mainfontface{TeX Gyre Termes}
\DeclareOption{calibri}{%
\def\mainfontface{Calibri}
@@ -71,6 +71,10 @@
% Flexible tables
\usepackage{tabu}
+\expandafter\in@\expandafter$\expandafter{\@tabular}
+\ifin@\else
+ \patchcmd\tabu@setcleanup{\aftergroup\aftergroup\aftergroup\tabu@cleanup}{\aftergroup\tabu@cleanup}{}{}
+\fi
% For custom margins
\usepackage{changepage}
Why each change was made, in the order of the diff:
- mcdowellcv.cls: the default font is TeX Gyre Termes instead of Times New
Roman. Times New Roman is a commercial font that TeX Live does not carry and
that cannot be shipped with the copy. TeX Gyre Termes is the free Times
design in TeX Live, it has the bold and small caps faces the class sets the
name and the headings in, and it keeps the example on one page. To use Times
New Roman on a computer that has it, put the name back in the
\def\mainfontface line.
- mcdowellcv.cls: four lines are added after the tabu package is loaded. tabu
2.9 (2019, no longer maintained) stops at every table with "Undefined
control sequence" in \tabu@cleanup under the array package of TeX Live 2026
(v2.7b): array no longer sets a tabular inside a math group, so the cleanup
tabu schedules two groups out runs after \end{tabu}, where the values it
restores are gone. The added lines look for that math group in array's
\@tabular and, only when it is missing, schedule the cleanup one group out.
An older TeX Live still has the group and compiles the class as the
repository ships it.
How to use this template
Everything runs in your browser: nothing to install, no login, no compile timeout.
- Click Open in LaTeX.to. The template opens as a project in the Projects pane, with McDowell_CV_Template.tex in the editor and its finished PDF in the preview.
- Click Preview, or press Ctrl+Enter (Cmd+Enter on a Mac), to compile. The preview shows the new PDF; you do not need to save first.
- If the compile fails, the Console pane opens with the LaTeX log. The first error in it says what went wrong and on which line.
- To add an image, a .bib file or another .tex file, open the project's menu (the three dots next to its name in the Projects pane) and choose Upload file or New file.
- The arrow next to Preview has Download PDF. Ctrl+S saves your edits, and the project stays in your browser on this device.
How to use A4 paper
The class is made for US letter, and its A4 option is the most commented topic in the repository.
- Add
a4paperinside the brackets of the\documentclass[]{mcdowellcv}line. The example stays on one page. - A4 is narrower, so a long title such as
Software Design Engineer, Internwraps on to a second line and runs into the text under it. - Shorten such a title until it fits on one line, as in
Software Design Intern. - The number in brackets that
cvsubsectiontakes for a header of several lines, as in\begin{cvsubsection}[2], does not clear the overlap on A4.
How to change the font
The class asks for Times New Roman or Calibri, fonts a TeX system does not have, which is what the repository's users report as a failed compile.
- The example here is set in TeX Gyre Termes, the free Times design, where the original asks for Times New Roman (
changes.txtsays why). - Add
calibriinside the brackets of the\documentclass[]{mcdowellcv}line for the narrower look. Calibri is replaced with Carlito, which has the same widths, and the Console pane says so in a line that starts withFont substituted:. - Carlito has no small caps, so with that option the name and the section headings are set in ordinary letters.
- To pick the font yourself, put a family this TeX system has, such as
EB Garamond, in the first\def\mainfontface{...}line ofmcdowellcv.cls. - A wider font, such as
TeX Gyre Pagella, runs the example on to a second page.
More templates: Awesome CV, billryan resume, sb2nov resume, Deedy Resume, latexcv, Jake's Resume, moderncv, AltaCV and all templates.