How do you create a resume on macOS using LaTeX?

I’ve been wanting to migrate my resume from MS Word to a format the separates the content and style into separate documents. Another “want” is to be able to version control and tag the content with a tool like git.

I looks like LaTeX combined with pandoc and achieve this while also allowing me to send my resume out in different formats ( docx, pdf , html ) .

Does anyone know of guide to doing this? Below I detail how far my guess work has gotten me.

While I’ve found examples of “tex” and “cls” files all over the Web, I haven’t found any guides on how to install and configure the software necessary for this work. Except pandoc. That was easy to install using brew.

Brew gives me a few options for LaTeX
brew search latex

If you meant “latex” specifically:
There are three versions of MacTeX.

Full installation:
brew cask install mactex

Full installation without bundled applications:
brew cask install mactex-no-gui

Minimal installation:
brew cask install basictex

I’m not sure which one of these to install. I installed basictex on a whim since I plan on using VS Code as my editor.

For the VS Code, there is an extension that looks promising called “LaTeX Workshop”.


That is what I have so far. I’ll probably start installing and configuring things tomorrow night after work since it’s already pretty late where I am.

Please leave a comment if you have any experience with what I’m trying to achieve. I’m ok with using another language like Markdown, as long as there is a way to apply style ( change font, align text ,etc ) to the document before I deliver it to a recruiter or hiring manager.

I use LaTeX on my MacBook Pro. I usually install mactex since you get most of the packages at once. With basictex, sometimes you have download packages to get the formatting you want.

You can start with mine if you want. It uses the geometry and fontenc packages. You compile it with xelatex.

Here is the code to produce it.

\documentclass[11pt,oneside]{article}
\usepackage{geometry}
\usepackage[T1]{fontenc}

\pagestyle{empty}
\geometry{letterpaper,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in,headheight=0in,headsep=0in,footskip=.3in}

\setlength{\parindent}{0in}
\setlength{\parskip}{0in}
\setlength{\itemsep}{0in}
\setlength{\topsep}{0in}
\setlength{\tabcolsep}{0in}

% Name and contact information
\newcommand{\name}{John Doe}
\newcommand{\addr}{123 Street Ave, City, SA 12345, USA}
\newcommand{\phone}{(123) 456-7890}
\newcommand{\email}{user@domain.com}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% New commands and environments

% This defines how the name looks
\newcommand{\bigname}[1]{
	\begin{center}\fontfamily{phv}\selectfont\Huge\scshape#1\end{center}
}

% A ressection is a main section (<H1>Section</H1>)
\newenvironment{ressection}[1]{
	\vspace{4pt}
	{\fontfamily{phv}\selectfont\Large#1}
	\begin{itemize}
	\vspace{3pt}
}{
	\end{itemize}
}

% A resitem is a simple list element in a ressection (first level)
\newcommand{\resitem}[1]{
	\vspace{-4pt}
	\item \begin{flushleft} #1 \end{flushleft}
}

% A ressubitem is a simple list element in anything but a ressection (second level)
\newcommand{\ressubitem}[1]{
	\vspace{-1pt}
	\item \begin{flushleft} #1 \end{flushleft}
}

% A resbigitem is a complex list element for stuff like jobs and education:
%  Arg 1: Name of company or university
%  Arg 2: Location
%  Arg 3: Title and/or date range
\newcommand{\resbigitem}[3]{
	\vspace{-5pt}
	\item
	\textbf{#1}---#2 \\
	\textit{#3}
}

% This is a list that comes with a resbigitem
\newenvironment{ressubsec}[3]{
	\resbigitem{#1}{#2}{#3}
	\vspace{-2pt}
	\begin{itemize}
}{
	\end{itemize}
}

% This is a simple sublist
\newenvironment{reslist}[1]{
	\resitem{\textbf{#1}}
	\vspace{-5pt}
	\begin{itemize}
}{
	\end{itemize}
}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now for the actual document:

\begin{document}

\fontfamily{ppl} \selectfont

% Name with horizontal rule
\bigname{\name}

\vspace{-8pt} \rule{\textwidth}{1pt}

\vspace{-1pt} {\small\itshape \addr \hfill \phone; \email}

\vspace{8 pt}



\begin{ressection}{Professional Goals}
	\resitem{A position in water resource engineering that will capitalize upon my water modeling skills gained from working on projects in Mexico and the U.S.}
	\resitem{Join a team of skilled professionals motivated to increase quality of life through engineering.}
\end{ressection}


%%%%%%%%%%%%%%%%%%%%%%%%
\begin{ressection}{Experience}

	\begin{ressubsec}{Aquaveo, LLC}{Provo, UT}{Water modeling consultant/Information Technology Officer: April, 2007--Present}

		\ressubitem{Implement a scripting engine within Groundwater Modeling System software (GMS).}
		\ressubitem{Manage 30+ computers and the company network infrastructure.}
	\end{ressubsec}

	\begin{ressubsec}{U.S. Army Corps of Engineers ERDC}{Vicksburg, MS}{Model Developer: May, 2006--August, 2006}
		\ressubitem{Built a hydrologic model of San Diego Bay watersheds.}
		\ressubitem{Maintained and improved hydrologic and hydraulic simulation model codes. }
		\ressubitem{Enabled two water simulation models to exchange data at runtime using the OpenMI framework.}
	\end{ressubsec}

	\begin{ressubsec}{Environmental Modeling Research Laboratory}{Provo, UT}{Interface Programmer for Water Modeling Software: January, 2005--April, 2007}
		\ressubitem{Created a new interface for the Hydrologic Simulation Fortran within WMS.}
		\ressubitem{Contributed to the development of WMS.}
	\end{ressubsec}

\end{ressection}


%%%%%%%%%%%%%%%%%%%%%%%%
\begin{ressection}{Education}

	\begin{ressubsec}{Brigham Young University}{Provo, UT}{Civil/Environmental Engineering}
		\ressubitem{Pending Master of Science---expected December 2007}
		\ressubitem{Bachelor of Science---April 2006}
		\ressubitem{GPA 3.6}
	\end{ressubsec}

\end{ressection}

%%%%%%%%%%%%%%%%%%%%%%%%
\begin{ressection}{Skills}

	\resitem{\textbf{Water resources:} Hydrologic and hydraulic modeling using industry standard models.}

	\resitem{\textbf{Computer:} ArcGIS, AutoCAD, WMS, GMS, Office, Mac/Windows/Unix}

	\resitem{\textbf{Languages:} Read, write, and speak Spanish.  Speak intermediate Mandarin Chinese.}

\end{ressection}


%%%%%%%%%%%%%%%%%%%%%%%%
\begin{ressection}{Achievements and Activities}
	\resitem{Served a voluntary two-year mission in Venezuela (1999--2001).}
	\resitem{Received several academic scholarships.}
\end{ressection}


\end{document}

Do you really want LaTeX? Or would Markdown do? If the latter then there are more possibilities.

I use Texpad for my cv/resume. It has a button to install a latex package for you, MacTeX, I think. It has live preview that shows you what the pdf looks like as you write the latex.
There are online latex editors too, sharelatex is one.
For markdown, there are R Markdown packages like vitae.
Another example: http://svmiller.com/blog/2016/03/svm-r-markdown-cv/

Personally, I think Texpad is the way to go.

1 Like

One part is easy: unless you’re very tight on disk space, install the full MacTeX distribution. You never know what TeX tool you’ll take a fancy to, and it’s nice to have so many to experiment with.

But the bigger question is whether putting your resume in LaTeX is a good way to achieve your goals. If you’re already a serious LaTeX user, the answer is yes. But if you’re new to LaTeX—as I assume you are, since you’re asking about installing MacTeX—a resume seems like a poor choice to start with. LaTeX is at its best when you can set up a format you like and then create document after document in that same style. That’s not what a resume is.

Also, you may be under the misapprehension that Git is limited to handling text files. It isn’t. You could put the Word version of your resume under Git control and generate the PDF version directly from it. Admittedly, that does leave the HTML version (which you could also have under Git control) hanging out by itself, but you could use Pandoc to generate it from the Word version.

I’m a big fan of LaTeX. I’ve used it for hundreds of reports over the past 20 years or so, and it has saved me tons of time and effort in getting a consistent format to my work. I never use a word processor. But there’s a learning curve to LaTeX, and you may not get the benefits out of it if your use is limited to one-off documents.

8 Likes

This is solid advice. I like learning new ways of formatting documents for reports (whether for work or personal use), but I tend to just make one type of document template and use it over and over.

5 Likes

I’m ok with using another language like Markdown , as long as there is a way to apply style ( change font, align text ,etc )
As I said above, I’m fine with other text formatting languages such as Markdown. I tried using it for my resume in the past, but it lacks the ability to natively ( ie no html or css ) change fonts or do things such as align left , align right, align center.

If there was a way to achieve that with just markdown( no html or css ), then I would be interested in it.

1 Like

My CV is one of the few documents I actually use Word for, given the complexity of formatting required. You might consider just starting over with a plain text export of the existing resume and a blank Word document, and being very diligent & consistent about using styles. That seems easier than learning LaTeX just for this.

3 Likes

Cool. I hit 40 or so websites looking for an alternative to a document app like LibreOffice, MS Word, etc I would really prefer to work in a plain text editor and use something like style or formatting commands to handle the presentation of the information.

Today I reviewed Markdown, restructuredText, R Markdown, LaTeX , HTML/CSS and decided to try LaTex first. Especially since I found a good set of instruction for installing in on Mac on Stackoverflow, and also because it’s supported by my favorite editor, Visual Studio Code. I live in that application for writing code, technical documentation, and (hopefully) my resume for both personal and work projects.

I suspect I’ll need to include pandoc in my workflow before I’m done, but this is a start.

1 Like

I wrote my resume in LaTeX and I concur with the advice you’ve been given so far. LaTeX shines when you can adhere to common conventions, which resumes almost never do. If you’re making a CV which can be several pages long then it might be ok. However, when you’re trying to get several things on a page squeezed in just right, with just the right spacing here and those letters have to be aligned just so over there – well it’s possible but it’s a pain in the neck and you’ll find yourself dipping into some pretty obscure packages and worrying about things you never thought you’d have to worry about. For me that was learning what the heck \baselineskip was and how messing with different fonts made my formatting just ever so slightly misaligned. God that drove me crazy.

One possible solution to the “version controlled resume that I can build in a text editor” problem that I’ve seen a number of people use is JSON Resume. I’ve never used it myself but it seems really nifty! If your resume fits nicely into one of their themes, I recommend taking this approach. Saves you a lot of effort and gets a pretty good result at the end.

1 Like

It depends on your Markdown processor.

You can in any case intersperse HTML with Markdown. Worst case you can wrap things in <span> elements and apply the style via a class or inline.

(The “span manoeuvre” works even without inline styling if you have a Markdown processor that handles CSS - perhaps to exceptionally format some text.)

Here’s why I like LaTeX so much. After some initial work setting up the commands, getting the formatting looking good, etc. I can just add a line under one of my headings, then add a detail line, and know that the formatting will look the same as the others. No bending Word to my will, fighting over alignment, etc.

I need to add my summer’s teaching here, so I would just add:

\taught{Scientific Foundations of Health}{Graduate Teaching Assistant}{Summer 2020}{}
\taughtitem{Assisted with grading.}
2 Likes

This. And I tend to send my resume to others for editing purposes occasionally and ZERO of them are using LaTeX or Mardown formats, but everyone uses word, or at least has immediate access to it.

1 Like

That looks awesome. Do you have a way to easily add (or add to) your publications list from a citation manager, or do you have to cut and paste?

Thanks!

So far I haven’t faced that challenge (papers in the works, none published yet).
I’ve heard that people create bibliographies of their work (in a .bib file exported from e.g. Bookends) that they then include in their CV using something like the biblatex package, or another.
Here’s related discussion a quick Google turned up:

This one uses the bibentry package.

2 Likes

That does look nice. I’m getting pretty far along using these instructions to install MacTex and the LaTex Workshop for VS Code.

I started writing my first tex file using this CV Example.

I did into problems trying to transcribe data from my previous MS Word resume into the .tex file due to my Macbook Pro being out for repairs. I’m using my Mac Mini in the meantime, and even after downloading and installing my LEGAL COPY of MS Word 2019, it says the license in use on other computer. I can either purchase it or use another account.

Well, I’m glad I’m leaving MS Word! I don’t have time to call MS tech support and figure out how to get access the application that I purchased last year. It should just let me deactivate it on the other computer and activate it on my current computer. But it isn’t that simple. Luckily, I was able to open my MS Word resume in Pages :).
Score:
Microsoft Word: -10
Apple: 100.

I might try moderncv later. To be honest, I don’t know how packages work in LaTeX. Like how to install them and then how to use them. I downloaded one called “AwesomeCV.” and extracted it in my resume “root” folder. I’ll try using the example .tex file that came with it as a template as it looks pretty nice.

If there is a cheatsheet for LaTex , I’d love to see it as I’m slowly figuring out what the \ and {} sections mean.

\ starts a command.
For example, \begin{document} that’s a begin command, and you’re telling it you want to start a document.
\\ is a command that starts a new line.
\"a makes an ä
and so forth.
Curly braces are for argument passing, like {document} above.

These instructions at overleaf might be helpful.

1 Like

I will preface this with my personal history. I’ve used LaTeX since the days of command-line input on VAX/VMS over three decades ago. As a document layout tool, it can not be beat with some modest exceptions. But LaTeX is not to be looked at lightly. This is not a disrespect to anyone who wants to try using it but, the convolutions that I’ve seen in reasons why folks want to try it and refuse to try it often have me scratching my head. The two extremes are folks such as you who leave the impression that they will gain something profound by using LaTeX for a short document and correspondingly the folks who leave the impression that the difficulties to use LaTeX increase exponentially as the documents they should produce get longer or more complicated and therefore who shun its use entirely for such cases (e.g. PhD dissertations or textbooks or even journal articles).

The Good

When you are serious about learning to use LaTeX:

  • As others have already said, just download the (full) install package from theTug - MacTeX Web page.
  • Become familiar with the TeXLive Utility that resides in the TeX folder in your Applications folder.
  • Get yourself a good basic book on LaTeX. Debates are between the LaTeX Companion (my personal favorite) and LaTeX (sometimes said to be more readable for first-timers).
  • Lots and lots of style files and templates exist on CTAN to make building resumés with LaTeX easier. Folks have posted templates here as well. Do not try to roll your own. Take something and run with it.

The Bad

I should try to address two things that you said in your opening statement:

  • You want to separate content and style --> OK. But LaTeX is only half a step there. In LaTeX, you still have to think about the style that you are going to apply to a piece of content while you are creating the content. Here is instead a direct process to do exactly what you said you want to do: Create the content in an ASCII text editor. Paste that content into Word. Apply styles. Viola … done! Much faster, more transportable, and greater acceptance across all levels where this type of information is to be distributed.

  • You want to use version control and tags and git … (Oh my!). --> LaTeX has no advantage here. In fact, almost the opposite is true. You’d be better off using the ease of Google Docs with its versioning system than trying to manage the variety of LaTeX files with some version control process. The overhead on this … for just a resumé … is almost as much work as creating the document itself.

The Ugly

In your situation, I would not do what you are doing. LaTeX is not a good starting point to learn while preparing a short, one-off document. LaTeX is a good tool to consider as an investment for creating a life’s worth of documents. LaTeX should also not be a standard starting point to create documents that end up in .docx and .html formats. This is akin to using a tool to create a sparkling diamond (a gem of a final document) and then turning that sparkling diamond into lump of shiny glass (a WYSIW(think that)YG document). Finally, in the real world as I understand it to be, more companies ask for resumés in Word format before they as for them in PDF format (or HTML format).

Finally, a small word of advice. Even LaTeX can allow you to create what I would call butt-ugly documents. With multiple types of bullets on items. With multiple levels of indentation. With multiple changes in font faces. Take some time to read about why you should use only the simplest of formatting changes, especially on a resumé. Learn that content shines when format is minimally focused, not overtly present. Realize that getting things as close as possible to a basic ASCII text document with just enough tweaking to format can sometimes be the best goal to have. Then go make an RTF resumé in TextEdit and get on with the more important things that you might have to do.


JJW

4 Likes

I switched to R Markdown , which wasn’t perfect, but lets me create a document that is pretty close to what my recruiter wants.

With R Markdown, you can a metadata header , the markdown content, and scripts (python ruby etc ) that you can use to create dynamic content.

It uses pandoc , which you can customize with metadata in your document. A key feature is ability to specify a template docx file. You can customer the styles and some of the content of the output document there.

It’s working pretty well for me, though still have do some post-processing work to make the resume look the way I want it to.

e.g. For employment, I put the Company name and dates I worked there on the same line, Company name is left justified, dates worked are right justified. Also different fonts and colors for each.

Ty for the replies. I’m set so I am no longer watching this topic.

1 Like

Even though to late for the OP, I wanted to share that I use latex to write letters. In Germany, lots of things are standardized, and so are letters.
There is a nice template (blog post in German).

(Formal) letters are a good fit for latex, as the content is always different, but the layout always the same. So only once the setup, and from there on all the benefits.

1 Like