Skip to content

Instantly share code, notes, and snippets.

@FedericoTartarini
Created April 28, 2025 11:33
Show Gist options
  • Save FedericoTartarini/92d3aa994cadbda5aab83dc1e7297774 to your computer and use it in GitHub Desktop.
Save FedericoTartarini/92d3aa994cadbda5aab83dc1e7297774 to your computer and use it in GitHub Desktop.
typst-cv-youtube-video
#import "resume.typ": *
// Personal information
#let name = "Dr Federico Tartarini - CV"
#let location = "Sydney, AU"
#let email = ""
#let github = "github.com/FedericoTartarini"
#let linkedin = "linkedin.com/in/federico-tartarini-3991995b"
#let scopus = "www.scopus.com/authid/detail.uri?authorId=57194517775"
#let scholar = "scholar.google.com/citations?user=QcamSPwAAAAJ&hl=en"
#show: resume.with(
author: name,
location: location,
email: email,
github: github,
linkedin: linkedin,
orcid: "0000-0002-8739-5062",
personal-site: "https://federicotartarini.github.io/",
accent-color: "#e76f51",
font: "Lato",
paper: "a4",
author-position: left,
personal-info-position: left,
)
// Work and Research Experience
== Work and Research Experience
#work(
title: "Senior Lecturer and USYD Horizon Fellow",
company: "University of Sydney - School of Architecture Design and Planning",
location: "Sydney, AU",
dates: dates-helper(start-date: "06/2024", end-date: "present"),
)
- *Beat the Heath*: Advancing Our Understanding of Heat Stress and Developing Effective Sustainable Interventions to Reduce Health Risks in a Warming World.
- *Teaching*: Architectural and building science.
#import "@preview/scienceicons:0.0.6": orcid-icon
#import "@preview/fontawesome:0.5.0": *
#let resume(
author: "",
author-position: left,
personal-info-position: left,
pronouns: "",
location: "",
email: "",
github: "",
linkedin: "",
phone: "",
personal-site: "",
orcid: "",
accent-color: "#000000",
font: "New Computer Modern",
paper: "us-letter",
body,
) = {
// Sets document metadata
set document(author: author, title: author)
// Document-wide formatting, including font and margins
set text(
// LaTeX style font
font: font,
size: 10pt,
lang: "en",
// Disable ligatures so ATS systems do not get confused when parsing fonts.
ligatures: false
)
// Reccomended to have 0.5in margin on all sides
set page(
margin: (0.5in),
paper: paper,
)
// Link styles
show link: underline
// Small caps for section titles
show heading.where(level: 2): it => [
#pad(top: 0pt, bottom: -10pt, [#smallcaps(it.body)])
#line(length: 100%, stroke: 1pt)
]
// Accent Color Styling
show heading: set text(
fill: rgb(accent-color),
)
show link: set text(
fill: rgb(accent-color),
)
// Name will be aligned left, bold and big
show heading.where(level: 1): it => [
#set align(author-position)
#set text(
weight: 700,
size: 20pt,
)
#pad(it.body)
]
// Level 1 Heading
[= #(author)]
// Personal Info Helper
let contact-item(value, prefix: "", link-type: "") = {
if value != "" {
if link-type != "" {
link(link-type + value)[#(prefix)]
} else {
value
}
}
}
// Personal Info
pad(
top: 0.25em,
align(personal-info-position)[
#{
let items = (
contact-item(pronouns),
contact-item(phone),
contact-item(location),
contact-item(email, prefix: [#fa-icon("envelope")], link-type: "mailto:"),
contact-item(github, prefix: [#fa-icon("github")], link-type: "https://"),
contact-item(linkedin, prefix: [#fa-icon("linkedin")], link-type: "https://"),
contact-item(personal-site, prefix: [#fa-icon("user")], link-type: "https://"),
contact-item(orcid, prefix: [#orcid-icon(color: rgb("#AECD54"))], link-type: "https://orcid.org/"),
)
items.filter(x => x != none).join(" | ")
}
#h(1fr) #datetime.today().display()],
)
// Main body.
set par(justify: true)
body
}
// Generic two by two component for resume
#let generic-two-by-two(
top-left: "",
top-right: "",
bottom-left: "",
bottom-right: "",
) = {
[
#top-left #h(1fr) #top-right \
#bottom-left #h(1fr) #bottom-right
]
}
// Generic one by two component for resume
#let generic-one-by-two(
left: "",
right: "",
) = {
[
#left #h(1fr) #right
]
}
// Cannot just use normal --- ligature becuase ligatures are disabled for good reasons
#let dates-helper(
start-date: "",
end-date: "",
) = {
start-date + " " + $dash.em$ + " " + end-date
}
// Section components below
#let edu(
institution: "",
dates: "",
degree: "",
gpa: "",
location: "",
// Makes dates on upper right like rest of components
consistent: false,
) = {
if consistent {
// edu-constant style (dates top-right, location bottom-right)
generic-two-by-two(
top-left: strong(institution),
top-right: dates,
bottom-left: emph(degree),
bottom-right: emph(location),
)
} else {
// original edu style (location top-right, dates bottom-right)
generic-two-by-two(
top-left: strong(institution),
top-right: location,
bottom-left: emph(degree),
bottom-right: emph(dates),
)
}
}
#let work(
title: "",
dates: "",
company: "",
location: "",
) = {
generic-two-by-two(
top-left: strong(title),
top-right: dates,
bottom-left: company,
bottom-right: emph(location),
)
}
#let project(
role: "",
name: "",
url: "",
dates: "",
) = {
generic-one-by-two(
left: {
if role == "" {
[*#name* #if url != "" and dates != "" [ (#link("https://" + url)[#url])]]
} else {
[*#role*, #name #if url != "" and dates != "" [ (#link("https://" + url)[#url])]]
}
},
right: {
if dates == "" and url != "" {
link("https://" + url)[#url]
} else {
dates
}
},
)
}
#let certificates(
name: "",
issuer: "",
url: "",
date: "",
) = {
[
*#name*, #issuer
#if url != "" {
[ (#link("https://" + url)[#url])]
}
#h(1fr) #date
]
}
#let extracurriculars(
activity: "",
dates: "",
) = {
generic-one-by-two(
left: strong(activity),
right: dates,
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment