Template Guide
Prerequisites
- Quarto (v1.4+)
- R with the
yamlpackage - Fonts installed locally:
- Source Sans 3:
brew install --cask font-source-sans-3(macOS) or download from Google Fonts - FontAwesome 6 desktop fonts (OTF files in your system fonts folder). Download from fontawesome.com
- Academicons TTF. Download from jpswalsh/academicons
- Source Sans 3:
Project Structure
quarto-typst-cv-template/
├── cv.qmd # Main CV document (R + Typst)
├── cv-template.typ # Typst helper functions (layout, entries)
├── typst-template.typ # Quarto-Typst bridge (header, footer, page setup)
├── typst-show.typ # Pandoc template (metadata -> article())
├── publications.bib # BibTeX (keywords: published, under-review)
├── data/
│ ├── appointments.yml
│ ├── education.yml
│ ├── grants.yml
│ ├── teaching.yml
│ ├── presentations.yml
│ ├── honors.yml
│ └── service.yml
└── output/
└── cv.pdf # Generated PDF
How It Works
The rendering pipeline:
- Quarto reads
cv.qmdand executes R chunks - R chunks load YAML/BibTeX data and emit raw Typst blocks
- Pandoc converts to Typst format, using
typst-show.typto pass metadata to the template - Typst compiles the final PDF using helpers from
cv-template.typand page setup fromtypst-template.typ
Customization
Change your contact info
Edit the YAML front matter in cv.qmd:
cv-name: "Your Name"
cv-email: "you@university.edu"
cv-phone: "555-123-4567"
cv-url: "www.yoursite.com"
cv-orcid: "0000-0000-0000-0000"
cv-github: "yourgithub"
cv-address: "Your Office, University, City, State ZIP"
cv-date: "Month Year"Add a publication
Edit publications.bib. Use keywords = {published} for journal articles or keywords = {under-review} for papers under review:
@article{yourkey2025,
author = {Last, First and Coauthor, Name},
title = {Your Paper Title},
journal = {Journal Name},
year = {2025},
doi = {10.xxxx/xxxxx},
keywords = {published}
}Add an appointment, grant, course, etc.
Edit the corresponding YAML file in data/. Each file follows a simple structure. See the sample files for the format.
Change the font
Replace "Source Sans 3" with your preferred font in both cv-template.typ and typst-template.typ. Make sure the font is installed on your system.
Change colors
Edit the color palette at the top of cv-template.typ:
#let color-darkgray = rgb("#000000") // Main text
#let color-gray = rgb("#333333") // Secondary text
#let color-lightgray = rgb("#777777") // Detail text
#let color-rule = rgb("#CCCCCC") // Horizontal rules
#let color-link = rgb("#1a5276") // HyperlinksModify the header layout
The contact info grid is in typst-template.typ. It uses a 3-column, 2-row layout with FontAwesome icons. Add, remove, or rearrange items there.
Bold your name in publications
In cv.qmd, the format_authors() function handles author formatting. Change the name check to match yours:
if (grepl("YourLastName", last, ignore.case = TRUE)) {
sprintf("*%s, %s.*", last, initial) # Typst bold
}Entry Types
| Helper | Used For | Layout |
|---|---|---|
cv-entry() |
Appointments | 3-col: institution, title, date |
edu-entry() |
Education | 3-col: institution, degree, date |
pub-entry() |
Publications | 2-col: citation, year |
grant-entry() |
Grants | 2-col: title/details, date |
teaching-entry() |
Teaching | 2-col: course, semesters |
presentation-entry() |
Presentations | 2-col: content, date |
service-entry() |
Service | 3-col: role, organization, date |
Tips
- Typst uses
*bold*(single asterisk), not**bold**like Markdown - All entry blocks use
breakable: falseto prevent splitting across page breaks - Pandoc escapes
@as\@in Typst output; the template handles this automatically - DOIs in published articles are automatically hyperlinked