Skip to content
Original
Ryan Lopopolo·· 08/26/2023AI score12

LaTeX Escapism:一份过度工程的 LaTeX 简历

Original title: LaTeX Escapism

The title and summary in the selected language are awaiting translation.

AI overview

Ryan Lopopolo 从零手写了一份 LaTeX 简历,未使用模板,正文前有 102 行导言区,采用 scrartcl 文档类,构建链从 pdfLaTeX、XeLaTeX 演进到 LuaLaTeX。

Full text

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. 🏗️

Vaporwave silhouette working at a desk, headphones, noir energy.

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 --update

The 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