A robust resume builder that generates customized resumes for different roles using a Python preprocessor and LaTeX.
The system uses a Python preprocessor to filter LaTeX content based on role tags before compilation:
- Source Files: Your LaTeX files in
tex-files/contain role tags - Python Preprocessor:
scripts/resume_builder.pyprocesses the files and removes/excludes content based on the target role - Clean LaTeX: Generates role-specific LaTeX files in
build/artifacts/ - PDF Generation: LaTeX compiles the filtered files into PDFs in
build/pdfs/
This approach is much more robust than complex LaTeX macros and allows for flexible, nested content filtering.
make allmake qr # Build for quantitative research role
make qd # Build for quantitative development role
make tech # Build for technical role
make soleng # Build for solutions engineering rolemake build-customrolemake list-pdfsresume-builder/
├── tex-files/ # Source LaTeX files (your content)
│ ├── main.tex # Main document
│ ├── header.tex # Header section
│ ├── experience.tex # Experience section
│ └── ... # Other sections
├── templates/ # LaTeX style files
├── scripts/ # Python preprocessor
│ └── resume_builder.py
├── build/ # Generated files
│ ├── artifacts/ # Processed LaTeX files (cleaned by 'make clean')
│ └── pdfs/ # Final PDFs (preserved by 'make clean')
└── Makefile # Build system
Wrap entire sections or experience blocks:
\begin{rolecontent}{qr,qd,tech}
\begin{experience}[City, ST]
{Company Name}
{2020 - 2023}
{Job Title}
\item This entire experience block appears for qr, qd, and tech roles
\end{experience}
\end{rolecontent}Tag individual bullets within experience blocks:
\begin{experience}[City, ST]
{Company Name}
{2020 - 2023}
{Job Title}
\item This bullet appears for all roles
\rolecontent{qr}{\item This bullet appears only for qr role}
\rolecontent{qd,tech}{\item This bullet appears for qd and tech roles}
\end{experience}Content without any tags appears in all role builds.
| Command | Description |
|---|---|
make all |
Build PDFs for all roles |
make qr |
Build PDF for quantitative research role |
make qd |
Build PDF for quantitative development role |
make tech |
Build PDF for technical role |
make soleng |
Build PDF for solutions engineering role |
make build-rolename |
Build for custom role |
make clean |
Remove build artifacts (keeps PDFs) |
make clean-all |
Remove everything including PDFs |
make list-pdfs |
Show available PDFs |
make force |
Force rebuild all PDFs |
Control whether location appears in the header:
# Include location (Chicago, IL)
make qr INCLUDE_LOC=1
make all INCLUDE_LOC=1
# Exclude location (default)
make qr
make allThe location is automatically included/excluded based on the INCLUDE_LOC variable in the Makefile or when passed as a parameter.
- Add the role to the
ROLESvariable inMakefile - Use the role name in your content tags
- Build with
make build-rolename
- No complex macros: No need for recursive LaTeX macros
- Order-independent: Role lists work regardless of order
- Nested support: Tags can be nested at any level
- Easy debugging: Python errors are clearer than LaTeX errors
- Extensible: Easy to add new features or roles
- Clean separation: Build artifacts separate from final PDFs
See tex-files/example-tags.tex for comprehensive examples of the tagging system.
- Python 3.6+
- LaTeX distribution (pdflatex)
- Make
- Python script not found: Ensure
scripts/resume_builder.pyexists and is executable - LaTeX compilation errors: Check that your LaTeX syntax is correct in source files
- Missing content: Verify your role tags match the roles defined in the Makefile
Run the Python preprocessor directly for debugging:
python3 scripts/resume_builder.py --source-dir tex-files --output-dir build/artifacts --role qr- Preprocessing: Python script reads your LaTeX files and filters content based on role tags
- Artifacts: Clean, role-specific LaTeX files are created in
build/artifacts/ - Compilation: LaTeX compiles the artifacts into PDFs in
build/pdfs/ - Cleanup:
make cleanremoves artifacts but preserves PDFs
- Add your content to the appropriate
.texfiles intex-files/ - Use the tagging system to specify which roles should see your content
- Test with
make clean && make all - Commit your changes