LaTeX Escapism:一份过度工程的 LaTeX 简历
Original title: LaTeX Escapism
The title and summary in the selected language are awaiting translation.
Ryan Lopopolo 从零手写了一份 LaTeX 简历,未使用模板,正文前有 102 行导言区,采用 scrartcl 文档类,构建链从 pdfLaTeX、XeLaTeX 演进到 LuaLaTeX。
Many of my side projects take the shape of over-engineered. They serve as a fun sandbox to go wild, put my mind on a treadmill, try new things, and take maximum control of the outcome. 🏰
This tends to mean every project, no matter how small, has GitHub Actions CI,
lint passes, prettier-formatted READMEs, dependabot, a locked trunk branch
and PR-oriented merge workflow. There is always some sort of build system;
sometimes Vite, sometimes Bazel, sometimes Cargo, sometimes an
amalgamation of make and docker. 🏗️

My LaTeX Résumé
Nowhere is this energy more apparent than the repository that houses my résumé. 🙋
I built my LaTeX résumé from scratch. I did not use a template; I started with
an empty buffer in vim. There are currently 102 lines of prelude before
\begin{document}. The résumé uses the scrartcl document class and content
entries within each \section*{} are defined using custom environments. Early
versions of the source were built with pdfLaTeX, then later with XeLaTeX. The
current revision is built with LuaLaTeX. 📇
My résumé’s git respository has a build system. make all invokes make
recursively in a Docker container to invoke latexmk (which itself invokes
make for some dynamic \inputA includes). The PDFs and PNGs generated by this
build process are reproducible. 🪞
The Dockerfile installs a curated and minimal set of packages required to pull
in a lightweight TeX install. Line 40 regenerates the font cache as part of the
image baking process to speed up the PDF rendering step. 📚
# pregenerate font caches
RUN set -eux; \
luatools --generate; \
mtxrun --script fonts --reload; \
luaotfload-tool --updateThe sources run through several layers of linters: check-style runs on every
commit; custom scripts reject commits which contain non-ASCII characters
(preferring the LaTeX equivalent macros); hadolint ensures the Dockerfile
follows all of the best practices (except for DL3008, I don’t have the
patience to pin apt package versions). ⏳
@dependabot keeps Docker base images current with automatic dependency upgrade PRs. GitHub Actions CI ensures the TeX source builds without warnings on every commit. 🪜
I use GitHub releases with PDF artifacts to track which things end up getting pushed to the web. Releases are tagged by date. 🏷️
The most recent hurdle I overcame was how to create blue underlined hyperlinks. The sources are easy to work with. 😅
why tho
When I work on a side project, I am choosing to enter a box. Being able to exercise this level of control lets me indulge into some escapism, exploration, and for the sake of it engineering. 📦
Source: Ryan Lopopolo · hyperbo.la