Writing a Resume with Org-Mode
Table of Contents
I use org-mode as my document production software. This means that I produce everything in Org. Notes, papers, presentations, and now my resume.
When I began looking at resume production with Org, I noticed the lack of straightforward packages and user guides. I'm sure there's something out there, but I sure couldn't find it.
The simplest raw-org method I found is the use of macros, along with a custom export-template.
I've found a better way. Check out the revision.
This approach is nice because it can be adapted to any standard LaTeX template. In my case, McDowell CV by Daniil Belyakov is perfect.
1. Setup
1.1. Installing the Template
First, get the .cls
for your desired template.
If it's on texlive, just install it the usual way.
Since the template I want is on Github, I'll just put the .cls
into /home/user/texmf/tex/latex/
.
1.2. Preparing Org-Mode
1.2.1. Custom Class
I add a custom entry to org-latex-classes
to make use of McDowellcv:
(add-to-list 'org-latex-classes '("mcdowellcv" "\\documentclass[]{mcdowellcv} \\usepackage{amsmath} \\usepackage[]{multicol} \\usepackage[hidelinks]{hyperref} [NO-DEFAULT-PACKAGES] [NO-PACKAGES]" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
Note that I prevent Org-mode from adding any extra packages to this.
Then I custom-add the multicol
and hyperref
packages.
1.2.2. Lualatex as PDF Processor
This template requires lualatex a its pdf producer. While you could set this as a per-document setting, I like it well enough for everything.
(after! ox-latex (setq org-latex-pdf-process '("lualatex --output-directory=/home/user/Documents -shell-escape -interaction nonstopmode %f")))
1.3. Creating the Macros
At the top of my resume file I use a config block to keep my macro definitions tidy:
:CONFIG: :END:
Other options can be set here as well, of course.
If you're using some other resume template, or even some unrelated LaTeX template, you can see how easy it would be to adapt the macro workflow.
2. Writing your Resume
After you've set up your macros, use is simple.
You use standard org headlines with the ignore
tag to structure your document, and then macros to manage the cv content.
Notice that I separate the ending macros using another header line.
I'm not sure why that's necessary, but when I attempt to remove it, export breaks.
I like to keep my resume on a single sheet. This requires some content juggling, but it forces me to filter out everything that is unimportant. Of course, being young I have little content and so I can fit just about everything.
If you're in school, the careers department can almost certainly help you out with more specific style guides.
3. Future improvements.
Back when configuring the custom class you may have noticed the rows of cons cells underneath the header-string.
These define what each level of org-header is to translate into.
If you're paying attention you've also noticed that McDowellCV provides a set of commands cvsection
and cvsubsection
that would work perfectly in this scenario.
You're right, except that these commands require extra properties to specify dates and other features.
At some point I'll figure out how to pass parameters into them through the default header-export mechanism. For now I'm comfortable with my macros.
4. Revision
I have spent some more time configuring, and I've figured out the appropriate settings.
(add-to-list 'org-latex-classes '("mcdowellcv" "\\documentclass[]{mcdowellcv} \\usepackage{amsmath} \\usepackage[]{multicol} \\usepackage[hidelinks]{hyperref} [NO-DEFAULT-PACKAGES] [NO-PACKAGES]" ("\\begin{cvsection}{%s}" "\\end{cvsection}") ("\\begin{cvsubsection}{%s}" "\\end{cvsubsection}")))
Now, as I mentioned above, each section takes just one argument.
I need a way to shoehorn multiple arguments into the cvsubsection
command.
Fortunately, org-mode provides a subtle set of symbols to do just that:
It took me an hour to discover this piece of syntax. Next time I'll check the manual first!