What LaTeX Packages and Compilers Are Used in the AI Job Search Framework
The AI Job Search framework uses LuaLaTeX for CV generation and XeLaTeX for cover letters, relying on packages such as fontspec, fancyhdr, geometry, and import to produce professional PDF documents.
The MadsLorentzen/ai-job-search repository automates job application document generation using specific LaTeX packages and compilers tailored to each document type. Understanding this toolchain is essential for customizing templates or troubleshooting build failures in the document pipeline.
LuaLaTeX for CV Compilation
Why LuaLaTeX Is Required
According to SETUP.md, pdflatex often fails on modern MiKTeX installations when processing the FontAwesome5 font expansion required by the moderncv class. The framework mandates LuaLaTeX to handle these modern font features reliably. The continuous integration workflow in .github/workflows/ci.yml validates this choice by explicitly invoking lualatex with strict error handling flags.
CV Package Dependencies
The main CV template in cv/main_example.tex declares several direct dependencies:
\usepackage[utf8]{inputenc}– Ensures UTF-8 encoding support\usepackage[scale=0.80]{geometry}– Controls page margins with a 0.80 scale factor\usepackage{import}– Facilitates modular document structure for sections
Additionally, the moderncv document class automatically loads fontawesome5 for icons. The hyperref package is also provided by the class, though it remains commented out in the template source.
XeLaTeX for Cover Letter Compilation
Font Management with XeLaTeX
Cover letters require XeLaTeX because the custom cover.cls class in cover_letters/cover.cls uses \RequirePackage{fontspec} to load system fonts. This compiler provides the necessary backend for fontspec to access the bundled Lato and Raleway OpenType fonts located in cover_letters/OpenFonts/fonts/.
Cover Letter Package Stack
The cover_letters/cover_example.tex template and its underlying class rely on the following packages:
\usepackage{fancyhdr}– Customizes headers and footers for professional layoutfontspec– Loads the Lato and Raleway font families via\fontspecdeclarationsxunicodeandxltxtra– Loaded automatically byfontspecto handle Unicode characters and XeLaTeX-specific optimizations
Build Commands and CI Integration
The repository standardizes compilation flags across both document types. As defined in SETUP.md and validated in .github/workflows/ci.yml, the build commands use non-stop mode and halt immediately on errors to fail fast in automation.
Compile a CV with LuaLaTeX:
cd cv
lualatex -interaction=nonstopmode -halt-on-error main_example.tex
# For generated job-specific files:
lualatex -interaction=nonstopmode -halt-on-error main_<company>_<role>.tex
Compile a cover letter with XeLaTeX:
cd cover_letters
xelatex -interaction=nonstopmode -halt-on-error cover_example.tex
# For generated job-specific files:
xelatex -interaction=nonstopmode -halt-on-error cover_<company>_<role>.tex
Summary
- LuaLaTeX compiles CVs to handle
fontawesome5font expansion wherepdflatexfails, using directly declared packages includinginputenc,geometry, andimportincv/main_example.tex. - XeLaTeX compiles cover letters to support
fontspecfor custom Lato and Raleway fonts, utilizingfancyhdrfor layout control as defined incover_letters/cover.cls. - Both compilers use the flags
-interaction=nonstopmode -halt-on-erroras specified inSETUP.mdand enforced in.github/workflows/ci.yml. - The framework separates concerns strictly: CV generation depends on the
moderncvclass ecosystem, while cover letters depend on the customcover.clsand bundled OpenFonts.
Frequently Asked Questions
Why does the CV use LuaLaTeX instead of pdfLaTeX?
According to the ai-job-search source code, pdflatex frequently fails on modern MiKTeX installations when expanding fontawesome5 fonts required by the moderncv document class. LuaLaTeX provides superior font handling capabilities that ensure consistent icon rendering across different platforms and TeX distributions.
Can I switch the cover letter compiler to LuaLaTeX?
No. The custom cover.cls class explicitly requires XeLaTeX because it relies on \RequirePackage{fontspec} to load the bundled Lato and Raleway OpenType fonts from cover_letters/OpenFonts/fonts/. While LuaLaTeX technically supports fontspec, the repository's class structure and font path configuration are specifically validated for XeLaTeX compilation only.
Where are the font files located for cover letters?
The Lato and Raleway font files are stored in cover_letters/OpenFonts/fonts/. These are accessed by cover.cls through fontspec commands when XeLaTeX processes the document, ensuring the custom typography renders correctly without requiring system-wide font installation on the build machine.
How does the CI pipeline validate LaTeX compilation?
The .github/workflows/ci.yml file defines separate jobs that execute lualatex -interaction=nonstopmode -halt-on-error on cv/main_example.tex and xelatex with identical flags on cover_letters/cover_example.tex. This automated validation ensures that template modifications or dependency updates do not break PDF generation in the pipeline.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →