If you’ve ever had to maintain a resume, it’s often tedious and inconvenient to customize for multiple positions. To solve this, it makes sense to start with a template and generate resumes with different content. This small bit of code was created to help me do this. Furthermore, in my experience, combining templates with document generation is the simplest way to ensure consistent formatting. To this end, I’ve created some simple macros that you can use to build a resume. To best fake advantage of these macros, you’ll need three things:
- an installation of the m4 macro processor to build the input for the document.
- an installation of the LaTeX document preparation system.
- an installation of the GNU Make utility.
After you’ve checked out the source, you’ll want to start by writing a custom Makefile.inc. It will look something like the following:
FILES = architect.pdf techlead.pdf NAME='Frumious Bandersnatch' ADDRESS='123 \\ Tulgey Wood \\ (424) 242-4242 \\ [email protected]'
In the previous example, we are creating different resumes for an architect and technical lead role. Likewise, you’ve customized the name and address on the resume and they’ll format almost effortlessly. Finally, you should understand that the top-level Makefile has variable–=DIR=–that can be used to customize the location of your Makefile.inc.
By default, I’ve setup the resume to have the following sections:
- **OBJECTIVE**
- **PROFESSIONAL EXPERIENCE**
- **EDUCATION**
- **TECHNICAL SKILLS**
- **INTERESTS**
In the resume.m4 file, you can see the each of these areas setup using the Section
macro. This macro takes two arguments:
- the section name (e.g. OBJECTIVE)
- text that will be expanded in the body of the macro. To make editing easier, I intend that a user have a separate file for each section except the OBJECTIVE section as that section is customized with the file that sets up in the initial environment for per resume customization.
I have included the following example for clarification for the technical lead position (the file **must** be named techlead.m4 to ensure make works correctly):
find a technical lead position that makes me a cheshire cat.
A couple of important notes for the file above:
- the
include(`resume.m4')
isn’t optional as that’s what ensures the larger resume gets formatted. - the
`'
characters used for quoting are only used untilresume.m4
is included. After that, all quoting is done with a more conventional autoconf pattern of[]
.
Finally, while it’s expected that the most common application of a different file is to create custom Objective
macros, this is also th entry point for any other conditional customization a user may need[fn::Currently, there is only one additional customization supported–the Font
macro which can be set to switch to a different font from the default /Helvetica./]
Without editing the default resume.m4, you can customize the following files:
- positions.m4
- education.m4
- technicalskills.m4
- interests.m4
Each of these files can be formatted any way you’d like including breaking a single file into multiples. To facilitate this, I have created helper macros (see the beginning of resume.m4) to assist you in formatting content. Once you’ve put this minimal skeleton together, you can almost ignore formatting and focus on making your content compelling and engaging.
To make managing your files easier, the Makefile contains a DIR
environment variable[fn::Why? It enables you to clone this repository while keeping your personal data in a separate, private repository.] that defaults to resume.
You should customize this setting to your setup.
If you want to add another section, you’ll need to update resume.m4 directly and then add the new content by creating a corresponding sectionfilename.m4
file.
Adding sections is easy and looks something like the following:
Section(NEW SECTION,[include([mynewsection.m4])])
While the content of this section can be anything renderable by LaTeX, I recommend keeping the file as clean as possible by adding formatting macros to resume.m4. Why bother? It does the following:
- ensures content is consistently formatted.
- easier to edit as complicated constructs are in one area.
- makes global changes trivial.
- allows you to have consistent primitives between files.
After you’ve done your customizations, you’ll want to generate your resume(s) using the following command: make
If you’ve done things correctly, you’ll end up with consistently formatted PDF files generated from easily maintained sources.
All macros are described below:
Macro | Function | Number of Arguments | Arguments | Notes |
---|---|---|---|---|
List | format an itemized list | 2 | list content, preamble | $2 is seldom used |
SmallSpace | reduce the vertical space | 0 | ||
Degree | format an education stanza | 4 | degree, major, school, date | |
Position | format a simple position stanza | 4 | company,date,title,responsibilities | |
Company | format a company stanza | 2 | company, location | |
SubPosition | format a position in a company | 3 | title,date,responsibilities | |
Bullet | add a bullet | 1 | content | |
Center | center the content | 1 | content | |
I__ | italicize all content | 1 | content | |
B__ | **bold all content** | 1 | content | |
SkipLine | linefeed | 1 | content | preceded by newline |
Section | define a resume section | 1 | content |
Generating your resume’s wordcloud
The Makefile also contains the ability to generate a wordcloud from your resume. To do this, you need to run the following command:
make wordcloud.pdf
Because this creates additional dependencies:
- R
- Several R libraries (installed with some variant of
install.packages('packagename')
in the REPL.- wordcloud
- tm
wordcloud.pdf is not built by default.