Modular papers with LaTeX   latex programming

Earlier this week I wrote about how to structure an academic project directory and one of those directories was `paper`. The project write-ups (read: papers) will live here. My tool of choice for writing is LaTeX. It is not for everyone, and since you’re this far I’m going to assume that you’re already a fan!

While templates for many academic journals are available from ShareLaTeX, Overleaf, and often the journals themselves, they share a common problem: each template is a new file with the content copied into it. One of main reasons that we use LaTeX is the clean separation of content and style, and having a new, single tex file for each journal violates this principle. We can overcome this by using multiple files for the content of our writing. To start, we can take a paper that has files looking like this:

emotional-arcs-EPJ-template.tex
bmc-mathphys.bst
bmcart.cls
everything.bib

Into one that looks like this:

emotional-arcs-EPJ.tex
emotional-arcs.body.tex
emotional-arcs.abs.tex
bmc-mathphys.bst
bmcart.cls
everything.bib

We’ve taken the both and the abstract out, and included them inside the EPJ template using `\input{\filenamebase.abs}` and `\input{\filenamebase.body}` where for convenience we define the working name of the paper only once in the file with `\newcommand{filenamebase}{emotional-arcs}`.

Immediately, we can now easily switch between formats and rely on the same body and abstract files:

emotional-arcs-EPJ.tex
emotional-arcs-revtex4.tex
emotional-arcs.body.tex
emotional-arcs.abs.tex
bmc-mathphys.bst
bmcart.cls
unsrtabbrv.bst
everything.bib

Expanding on this idea, we’ll end up with a directory that looks just like the first academic paper directory I ever encountered, one laid out by Peter Dodds:

bmc-mathphys.bst
bmcart.cls
emotional-arcs-EPJ-supp.tex
emotional-arcs-EPJ.tex
emotional-arcs-dissertation-supplementary.tex
emotional-arcs-dissertation.tex
emotional-arcs-revtex4.tex
emotional-arcs.abs.tex
emotional-arcs.acknowledgments.tex
emotional-arcs.author.EPJ.tex
emotional-arcs.author.tex
emotional-arcs.biblio.tex
emotional-arcs.body.captions.tex
emotional-arcs.body.figures.tex
emotional-arcs.body.nocite.tex
emotional-arcs.body.nofigures.tex
emotional-arcs.body.tables.tex
emotional-arcs.body.tex
emotional-arcs.coverletter.tex
emotional-arcs.inputs.txt
emotional-arcs.kwd.tex
emotional-arcs.nbooks.tex
emotional-arcs.settings.tex
emotional-arcs.supplementary.SOM.tex
emotional-arcs.supplementary.SVD-all.tex
emotional-arcs.supplementary.SVD.tex
emotional-arcs.supplementary.construction.tex
emotional-arcs.supplementary.extras.tex
emotional-arcs.supplementary.networks.tex
emotional-arcs.supplementary.null.tex
emotional-arcs.supplementary.prediction.tex
emotional-arcs.supplementary.ringsort.tex
emotional-arcs.supplementary.stories.tex
emotional-arcs.supplementary.tex
emotional-arcs.supplementary.wards-all.tex
emotional-arcs.supplementary.wards.tex
emotional-arcs.title.tex
everything.bib
makefile
unsrtabbrv.bst

Wow, that’s a lot of files! And for your sake, I didn’t even include all of the automatically generated files. For starters, we can note that all five of these files are generated by a Python script from our body file:

emotional-arcs.body.captions.tex
emotional-arcs.body.figures.tex
emotional-arcs.body.nocite.tex
emotional-arcs.body.nofigures.tex
emotional-arcs.body.tables.tex

That allowed us to include the figures after the main text in our EPJ template. For this procedure, on would run

python ${PYTOOLDIR}split_body.py ${PAPER}.body.tex

which a line straight from the makefile. The Python code to do this is over at: https://github.com/andyreagan/kitchentabletools-python.

Other things that are now possible include making a `-combined.tex` file for pulling in all of the inputs (see `input-inputs.py` for that script), and copying the combined file into a directory with the figures locally (renamed fig01,fig01, etc).

Some of the `.tex` files aren’t even ones that we wrote: Python also spit out some of the tables (`*.SVD-all.tex`) and parameters (`*.nbooks.tex`) from the analysis itself. Made an update to the code? No problem, the figures and parameter files are refreshed all we need to do is run `make all` to build the paper!

For a repository with an example layout, see https://github.com/petersheridandodds/universal-paper-template.

previous | next | random