A sane beamer directory structure
I had to give many talks, both to internal and external audiences. As you could imagine, I use LaTeX and Beamer to compile my slides. But until now, I had no good approach how to organize them. This lead to a chaos of copy-pasted Makefiles, assets such as images and TikZ sources, TeX preludes etc. Everything was scattered around several Git repositories, some talks have their own repositories, some were collected in a single one. That was quite a mess, to be honest.
So, I sat down and thought how to lay out things. Eventually, I set up one
repository for all Beamer sources which are simply structured in a year/title
hierarchy. I set up one repository for all assets and one repository for my
BibTeX databases. At the moment I don’t have a good reason to split them that
way other than that it doesn’t feel “semantically” right. To avoid repeating
myself in the prelude, I pulled out the most common settings – including
packages, fonts, colors, environments and commands – into its own top-level
beamercommon.sty
.
Each talk subdirectory as its own Makefile that consists of one of:
include ../../common.mk
include ../../common.pandoc.mk
The first Makefile is based on rubber and simply tries to compile all .tex
files found in the current directory. The second Makefile uses Pandoc and a
slightly modified template to build Beamer slides from Markdown input:
SRC=$(wildcard *.md)
PDF=$(subst .md,.pdf,$(SRC))
TEMPLATE=../../pandoc-template.tex
THEME_OPTIONS="english, titlepage0"
OPTS=-t beamer --latex-engine=xelatex --template=$(TEMPLATE) \
--variable theme=KIT \
--variable sansfont="Source Sans Pro" \
--variable monofont="Inconsolata" \
--variable fontsize=18pt \
--variable graphicspath=../../common/images/ \
--variable themeoptions=$(THEME_OPTIONS) \
.PHONY: clean
all: $(PDF)
%.pdf: %.md $(TEMPLATE)
@pandoc $(OPTS) -o $@ $<
clean:
@rm -f $(PDF)
In the talk-specific Makefile, I can then simply add or override the $(OPTS)
variable to customize the outcome.
There was one thing, I wasn’t sure about: keeping the common and BibTeX repos outside, inside as a submodule or inside as a subtree. I decided for the submodule approach, although I know, it could hurt me in the long run. In any case, this is what the final, version-controlled directory structure looks like: