LaTeX Content From Command Line

So I have found myself in the market for a new job recently. This isn’t the best feeling in the world, but I’m not letting an opportunity go to waste. Today, let’s talk about how to create a simple script that injects some content into a LaTex document, in the context of creating a script that emits different résumés with command-line-specified objectives.

An example of an objective in a résumé

Let’s stop retyping this

Background

For convenience and to track the history of my applications, I keep my résumé in a git repository and use LaTeX to generate it. The one part of this process that’s irritating to me is having to update the Objective section for every different job I’m applying for. Wouldn’t it be convenient, I said to myself, if I could parameterize that and supply the objective on the command line?

Using the \include macro

As far as I can tell, LaTeX doesn’t have an obvious way to read from stdin or set macros on the command line, but it does have the \include macro, which lets you pull in the contents of another file and inject it directly into the flow of a LaTeX document. So we take advantage of that to reference the objective as sourced from elsewhere.

My résumé is in a tex_resume.tex file, so I edit that file to add a macro for generating the objective, which pulls

\resumeobjective{
\include{objective}
}

Now, I just need to create an objective.tex file to hold the objective.

Updating the objective from the command line

With those pieces in place, updating the objective is straightforward. Here is the content of my update-with-objective.sh script.

#!/bin/sh
# Emits a new resume with an objective specified
# Usage: update-with-objective "Objective string"

OBJECTIVE="${1}"

echo "${OBJECTIVE}" > objective.tex
pdflatex tex_resume.tex

And we’re all set. I can update my résumé’s objective with ./update-with-objective.sh "Keep being awesome". If I have twenty companies to apply to, I could wrap this script in another script to inject the twenty objectives and rename the output file after each one.

And anyway, (EDIT: No longer looking for work. Yay!) feel free to reach out to me at iam+jobs@fixermark.com or via LinkedIn. Looking forward to seeing what’s out there!

Comments