Compare commits
2 Commits
c175bdb709
...
2dd6e8aaa3
Author | SHA1 | Date |
---|---|---|
Ethan Reece | 2dd6e8aaa3 | |
Ethan Reece | c90ef8fa72 |
|
@ -0,0 +1,8 @@
|
||||||
|
#let base_page(body) = page(
|
||||||
|
paper: "us-letter",
|
||||||
|
margin: (
|
||||||
|
x: 0.5in,
|
||||||
|
y: 0.3in,
|
||||||
|
),
|
||||||
|
body
|
||||||
|
)
|
|
@ -0,0 +1,6 @@
|
||||||
|
#let base_text(body) = text(
|
||||||
|
font: "Inter",
|
||||||
|
size: 10pt,
|
||||||
|
weight: "regular",
|
||||||
|
body
|
||||||
|
)
|
29
src/main.typ
29
src/main.typ
|
@ -1,5 +1,5 @@
|
||||||
#{
|
#{
|
||||||
import "resume_page.typ": resume_page
|
import "page_resume.typ": page_resume
|
||||||
|
|
||||||
let config = (
|
let config = (
|
||||||
identity: (
|
identity: (
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
"Java",
|
"Java",
|
||||||
"C",
|
"C",
|
||||||
"C++",
|
"C++",
|
||||||
"Guile",
|
"Guile/Scheme",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
@ -49,14 +49,23 @@
|
||||||
title: "The University of Texas at Dallas",
|
title: "The University of Texas at Dallas",
|
||||||
degree: "Bachelor of Science in Computer Science",
|
degree: "Bachelor of Science in Computer Science",
|
||||||
graduation: "May 2026",
|
graduation: "May 2026",
|
||||||
gpa: "Current GPA: 3.764",
|
gpa: "Current GPA: 3.749",
|
||||||
coursework: (
|
coursework: (
|
||||||
"Probability and Statistics for CS",
|
completed: (
|
||||||
"Data Structures and Algorithms",
|
"Programming Language Paradigms",
|
||||||
"Software Engineering",
|
"Digital Logic & Computer Design",
|
||||||
"C/C++ Programming in UNIX",
|
"Operating Systems Concepts",
|
||||||
"Computer Architecture",
|
"Probability and Statistics for CS",
|
||||||
"Discrete Mathematics II",
|
"Data Structures and Algorithms",
|
||||||
|
"Software Engineering",
|
||||||
|
"C/C++ Programming in UNIX",
|
||||||
|
"Computer Architecture",
|
||||||
|
"Discrete Mathematics II",
|
||||||
|
),
|
||||||
|
current: (
|
||||||
|
"Database Systems",
|
||||||
|
"Advanced Algorithm Design & Analysis",
|
||||||
|
),
|
||||||
),
|
),
|
||||||
highlights: (
|
highlights: (
|
||||||
"Collegium V Honors Program",
|
"Collegium V Honors Program",
|
||||||
|
@ -140,5 +149,5 @@
|
||||||
date: none,
|
date: none,
|
||||||
)
|
)
|
||||||
|
|
||||||
resume_page(..config)
|
page_resume(..config)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
#let page_resume(
|
||||||
|
identity: (
|
||||||
|
name: "",
|
||||||
|
email: "",
|
||||||
|
phone: "",
|
||||||
|
location: "",
|
||||||
|
website: "",
|
||||||
|
),
|
||||||
|
skills: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
items: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
education: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
degree: "",
|
||||||
|
graduation: "",
|
||||||
|
gpa: "",
|
||||||
|
coursework: (""),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
work_experience: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
location: "",
|
||||||
|
timeframe: "",
|
||||||
|
role: "",
|
||||||
|
skills: (""),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
professional_development: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
timeframe: "",
|
||||||
|
role: "",
|
||||||
|
skills: (""),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
) = {
|
||||||
|
import "base/text.typ": base_text
|
||||||
|
import "base/page.typ": base_page
|
||||||
|
import "section/identity.typ": section_identity
|
||||||
|
import "section/skills.typ": section_skills
|
||||||
|
import "section/education.typ": section_education
|
||||||
|
import "section/work_experience.typ": section_work_experience
|
||||||
|
import "section/professional_development.typ": section_professional_development
|
||||||
|
|
||||||
|
let resume_content(
|
||||||
|
skills: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
items: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
education: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
degree: "",
|
||||||
|
graduation: "",
|
||||||
|
gpa: "",
|
||||||
|
coursework: (""),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
work_experience: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
location: "",
|
||||||
|
timeframe: "",
|
||||||
|
role: "",
|
||||||
|
skills: (""),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
professional_development: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
timeframe: "",
|
||||||
|
role: "",
|
||||||
|
skills: (""),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
) = grid(
|
||||||
|
gutter: 2.4em,
|
||||||
|
section_skills(skills: skills),
|
||||||
|
section_education(education: education),
|
||||||
|
section_work_experience(work_experience: work_experience),
|
||||||
|
section_professional_development(professional_development: professional_development),
|
||||||
|
)
|
||||||
|
|
||||||
|
base_page(
|
||||||
|
base_text(
|
||||||
|
grid(
|
||||||
|
gutter: 2.75em,
|
||||||
|
section_identity(identity: identity),
|
||||||
|
resume_content(
|
||||||
|
skills: skills,
|
||||||
|
education: education,
|
||||||
|
work_experience: work_experience,
|
||||||
|
professional_development: professional_development,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
|
@ -1,373 +0,0 @@
|
||||||
#let resume_page(
|
|
||||||
identity: (
|
|
||||||
name: "",
|
|
||||||
email: "",
|
|
||||||
phone: "",
|
|
||||||
location: "",
|
|
||||||
website: "",
|
|
||||||
),
|
|
||||||
skills: (
|
|
||||||
(
|
|
||||||
title: "",
|
|
||||||
items: (""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
education: (
|
|
||||||
(
|
|
||||||
title: "",
|
|
||||||
degree: "",
|
|
||||||
graduation: "",
|
|
||||||
gpa: "",
|
|
||||||
coursework: (""),
|
|
||||||
highlights: (""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
work_experience: (
|
|
||||||
(
|
|
||||||
title: "",
|
|
||||||
location: "",
|
|
||||||
timeframe: "",
|
|
||||||
role: "",
|
|
||||||
skills: (""),
|
|
||||||
highlights: (""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
professional_development: (
|
|
||||||
(
|
|
||||||
title: "",
|
|
||||||
timeframe: "",
|
|
||||||
role: "",
|
|
||||||
skills: (""),
|
|
||||||
highlights: (""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
) = {
|
|
||||||
let _block(
|
|
||||||
below: 0em,
|
|
||||||
width: 100%,
|
|
||||||
padding: (
|
|
||||||
top: 0em,
|
|
||||||
right: 0em,
|
|
||||||
bottom: 0em,
|
|
||||||
left: 0em,
|
|
||||||
),
|
|
||||||
body
|
|
||||||
) = block(
|
|
||||||
below: below,
|
|
||||||
width: width,
|
|
||||||
align(
|
|
||||||
top + left,
|
|
||||||
pad(
|
|
||||||
..padding,
|
|
||||||
body
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
let _text(
|
|
||||||
font: "Inter",
|
|
||||||
size: 10pt,
|
|
||||||
weight: "regular",
|
|
||||||
block: (
|
|
||||||
below: 0em,
|
|
||||||
width: 100%,
|
|
||||||
padding: (
|
|
||||||
top: 0em,
|
|
||||||
right: 0em,
|
|
||||||
bottom: 0em,
|
|
||||||
left: 0em,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
body
|
|
||||||
) = text(
|
|
||||||
font: font,
|
|
||||||
size: size,
|
|
||||||
weight: weight,
|
|
||||||
_block(
|
|
||||||
..block,
|
|
||||||
body
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
let _heading(title: "") = _text(
|
|
||||||
size: 13pt,
|
|
||||||
block: (below: .95em),
|
|
||||||
heading(
|
|
||||||
_text(
|
|
||||||
size: 13pt,
|
|
||||||
weight: "bold",
|
|
||||||
title
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
let section_base(
|
|
||||||
title: "",
|
|
||||||
body
|
|
||||||
) = _text(
|
|
||||||
block: (below: 2.5em),
|
|
||||||
{
|
|
||||||
_heading(title: title)
|
|
||||||
_text(
|
|
||||||
block: (
|
|
||||||
padding: (left: 1em),
|
|
||||||
),
|
|
||||||
body
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
let section_item(
|
|
||||||
title: "",
|
|
||||||
subtitle: "",
|
|
||||||
role: "",
|
|
||||||
timeframe: "",
|
|
||||||
skills: (""),
|
|
||||||
highlights: (""),
|
|
||||||
) = _text(
|
|
||||||
block: (below: 1.5em),
|
|
||||||
{
|
|
||||||
_text(
|
|
||||||
block: (below: 0.95em),
|
|
||||||
grid(
|
|
||||||
columns: (40%, 60%),
|
|
||||||
rows: 2,
|
|
||||||
gutter: 0.75em,
|
|
||||||
align: (
|
|
||||||
left,
|
|
||||||
right,
|
|
||||||
),
|
|
||||||
grid(
|
|
||||||
columns: 2,
|
|
||||||
gutter: 1.5em,
|
|
||||||
align: bottom,
|
|
||||||
text(
|
|
||||||
weight: "semibold",
|
|
||||||
title
|
|
||||||
),
|
|
||||||
text(
|
|
||||||
size: 9pt,
|
|
||||||
weight: "extralight",
|
|
||||||
subtitle
|
|
||||||
)
|
|
||||||
),
|
|
||||||
text(
|
|
||||||
weight: "regular",
|
|
||||||
timeframe
|
|
||||||
),
|
|
||||||
text(
|
|
||||||
weight: "light",
|
|
||||||
size: 9.5pt,
|
|
||||||
role
|
|
||||||
),
|
|
||||||
text(
|
|
||||||
weight: "light",
|
|
||||||
size: 9.5pt,
|
|
||||||
skills.join(", "),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
_text(
|
|
||||||
block: (
|
|
||||||
padding: (left: 2em),
|
|
||||||
),
|
|
||||||
for highlight in highlights {
|
|
||||||
_text(
|
|
||||||
block: (below: 1em),
|
|
||||||
par(
|
|
||||||
justify: true,
|
|
||||||
highlight
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
let section(
|
|
||||||
title: "",
|
|
||||||
items: (
|
|
||||||
(
|
|
||||||
title: "",
|
|
||||||
subtitle: "",
|
|
||||||
role: "",
|
|
||||||
timeframe: "",
|
|
||||||
skills: (""),
|
|
||||||
highlights: (""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
) = section_base(
|
|
||||||
title: title,
|
|
||||||
for item in items {
|
|
||||||
section_item(..item)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
let title_block(title: "") = _text(
|
|
||||||
size: 28pt,
|
|
||||||
block: (below: 0.60em),
|
|
||||||
weight: "extrabold",
|
|
||||||
align(
|
|
||||||
center,
|
|
||||||
title
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
let contact_info_block(
|
|
||||||
email: "",
|
|
||||||
phone: "",
|
|
||||||
location: "",
|
|
||||||
website: "",
|
|
||||||
) = _text(
|
|
||||||
size: 10.5pt,
|
|
||||||
block: (below: 2.75em),
|
|
||||||
weight: "medium",
|
|
||||||
align(
|
|
||||||
center,
|
|
||||||
grid(
|
|
||||||
columns: 4,
|
|
||||||
rows: 1,
|
|
||||||
gutter: 4em,
|
|
||||||
email,
|
|
||||||
phone,
|
|
||||||
location,
|
|
||||||
website,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
let skills_block(
|
|
||||||
skills: (
|
|
||||||
(
|
|
||||||
title: "",
|
|
||||||
items: (""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
) = section_base(
|
|
||||||
title: "Skills",
|
|
||||||
_text(
|
|
||||||
grid(
|
|
||||||
columns: (33%, 67%),
|
|
||||||
gutter: 1em,
|
|
||||||
..for skill in skills {
|
|
||||||
(
|
|
||||||
_text(
|
|
||||||
weight: "semibold",
|
|
||||||
skill.title
|
|
||||||
),
|
|
||||||
skill.items.join(", "),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
let education_block(
|
|
||||||
education: (
|
|
||||||
(
|
|
||||||
title: "",
|
|
||||||
degree: "",
|
|
||||||
graduation: "",
|
|
||||||
gpa: "",
|
|
||||||
coursework: (""),
|
|
||||||
highlights: (""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
) = section(
|
|
||||||
title: "Education",
|
|
||||||
items: education.map(school => (
|
|
||||||
title: school.title,
|
|
||||||
role: school.degree,
|
|
||||||
timeframe: school.graduation,
|
|
||||||
skills: (
|
|
||||||
school.gpa,
|
|
||||||
),
|
|
||||||
highlights: (
|
|
||||||
..school.highlights,
|
|
||||||
{
|
|
||||||
_text(
|
|
||||||
weight: "medium",
|
|
||||||
block: (
|
|
||||||
below: 0.75em,
|
|
||||||
),
|
|
||||||
"Relevant Coursework"
|
|
||||||
)
|
|
||||||
_text(
|
|
||||||
size: 9.5pt,
|
|
||||||
block: (
|
|
||||||
padding: (
|
|
||||||
left: 2em,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
school.coursework.join(", ")
|
|
||||||
)
|
|
||||||
}
|
|
||||||
),
|
|
||||||
))
|
|
||||||
)
|
|
||||||
|
|
||||||
let work_experience_block(
|
|
||||||
work_experience: (
|
|
||||||
(
|
|
||||||
title: "",
|
|
||||||
location: "",
|
|
||||||
timeframe: "",
|
|
||||||
role: "",
|
|
||||||
skills: (""),
|
|
||||||
highlights: (""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
) = section(
|
|
||||||
title: "Work Experience",
|
|
||||||
items: work_experience.map(company => (
|
|
||||||
title: company.title,
|
|
||||||
subtitle: company.location,
|
|
||||||
timeframe: company.timeframe,
|
|
||||||
role: company.role,
|
|
||||||
skills: company.skills,
|
|
||||||
highlights: company.highlights,
|
|
||||||
)),
|
|
||||||
)
|
|
||||||
|
|
||||||
let professional_development_block(
|
|
||||||
professional_development: (
|
|
||||||
(
|
|
||||||
title: "",
|
|
||||||
timeframe: "",
|
|
||||||
role: "",
|
|
||||||
skills: (""),
|
|
||||||
highlights: (""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
) = section(
|
|
||||||
title: "Professional Development",
|
|
||||||
items: professional_development.map(item => (
|
|
||||||
title: item.title,
|
|
||||||
timeframe: item.timeframe,
|
|
||||||
role: item.role,
|
|
||||||
skills: item.skills,
|
|
||||||
highlights: item.highlights,
|
|
||||||
)),
|
|
||||||
)
|
|
||||||
|
|
||||||
page(
|
|
||||||
paper: "us-letter",
|
|
||||||
margin: (
|
|
||||||
x: 0.5in,
|
|
||||||
y: 0.4in,
|
|
||||||
),
|
|
||||||
{
|
|
||||||
title_block(title: identity.name)
|
|
||||||
contact_info_block(
|
|
||||||
email: identity.email,
|
|
||||||
phone: identity.phone,
|
|
||||||
location: identity.location,
|
|
||||||
website: identity.website,
|
|
||||||
)
|
|
||||||
skills_block(skills: skills)
|
|
||||||
education_block(education: education)
|
|
||||||
work_experience_block(work_experience: work_experience)
|
|
||||||
professional_development_block(professional_development: professional_development)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
#let section_base_full(
|
||||||
|
title: "",
|
||||||
|
items: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
subtitle: "",
|
||||||
|
role: "",
|
||||||
|
timeframe: "",
|
||||||
|
skills: (""),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
) = {
|
||||||
|
import "small.typ": section_base_small
|
||||||
|
import "item.typ": section_base_item
|
||||||
|
|
||||||
|
section_base_small(
|
||||||
|
title: title,
|
||||||
|
grid(
|
||||||
|
gutter: 1.5em,
|
||||||
|
for item in items {
|
||||||
|
section_base_item(..item)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
#let section_base_item(
|
||||||
|
title: "",
|
||||||
|
subtitle: "",
|
||||||
|
role: "",
|
||||||
|
timeframe: "",
|
||||||
|
skills: (""),
|
||||||
|
highlights: (""),
|
||||||
|
) = {
|
||||||
|
import "../../base/text.typ": base_text
|
||||||
|
import "item/header.typ": section_base_item_header
|
||||||
|
|
||||||
|
let item_highlights(highlights: highlights) = for highlight in highlights {
|
||||||
|
block(
|
||||||
|
below: 1em,
|
||||||
|
par(
|
||||||
|
justify: true,
|
||||||
|
highlight
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
grid(
|
||||||
|
gutter: 0.95em,
|
||||||
|
section_base_item_header(
|
||||||
|
title: title,
|
||||||
|
subtitle: subtitle,
|
||||||
|
role: role,
|
||||||
|
timeframe: timeframe,
|
||||||
|
skills: skills,
|
||||||
|
),
|
||||||
|
pad(
|
||||||
|
left: 2em,
|
||||||
|
item_highlights(highlights: highlights)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
#let section_base_item_header(
|
||||||
|
title: "",
|
||||||
|
subtitle: "",
|
||||||
|
role: "",
|
||||||
|
timeframe: "",
|
||||||
|
skills: (""),
|
||||||
|
) = {
|
||||||
|
import "../../../base/text.typ": base_text
|
||||||
|
|
||||||
|
let header_title(
|
||||||
|
title: "",
|
||||||
|
subtitle: "",
|
||||||
|
) = grid(
|
||||||
|
columns: 2,
|
||||||
|
gutter: 1.5em,
|
||||||
|
align: bottom,
|
||||||
|
heading(
|
||||||
|
level: 2,
|
||||||
|
base_text(
|
||||||
|
text(
|
||||||
|
weight: "semibold",
|
||||||
|
title
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
text(
|
||||||
|
size: .9em,
|
||||||
|
weight: "extralight",
|
||||||
|
subtitle
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
grid(
|
||||||
|
columns: 2,
|
||||||
|
rows: 2,
|
||||||
|
gutter: 0.75em,
|
||||||
|
align: (
|
||||||
|
left,
|
||||||
|
right,
|
||||||
|
),
|
||||||
|
header_title(
|
||||||
|
title: title,
|
||||||
|
subtitle: subtitle,
|
||||||
|
),
|
||||||
|
block(
|
||||||
|
width: 100%,
|
||||||
|
text(
|
||||||
|
weight: "regular",
|
||||||
|
timeframe
|
||||||
|
)
|
||||||
|
),
|
||||||
|
text(
|
||||||
|
weight: "light",
|
||||||
|
size: .95em,
|
||||||
|
role
|
||||||
|
),
|
||||||
|
block(
|
||||||
|
width: 100%,
|
||||||
|
text(
|
||||||
|
weight: "light",
|
||||||
|
size: .95em,
|
||||||
|
skills.join(", ")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
#let section_base_small(
|
||||||
|
title: "",
|
||||||
|
body
|
||||||
|
) = {
|
||||||
|
import "../../base/text.typ": base_text
|
||||||
|
|
||||||
|
grid(
|
||||||
|
gutter: 1.1em,
|
||||||
|
heading(
|
||||||
|
base_text(
|
||||||
|
text(
|
||||||
|
size: 1.3em,
|
||||||
|
weight: "bold",
|
||||||
|
title
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
pad(
|
||||||
|
left: 1em,
|
||||||
|
body
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
#let section_education(
|
||||||
|
education: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
degree: "",
|
||||||
|
graduation: "",
|
||||||
|
gpa: "",
|
||||||
|
coursework: (
|
||||||
|
completed: (""),
|
||||||
|
current: (""),
|
||||||
|
),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
) = {
|
||||||
|
import "base/full.typ": section_base_full
|
||||||
|
import "education/coursework.typ": section_education_coursework
|
||||||
|
|
||||||
|
section_base_full(
|
||||||
|
title: "Education",
|
||||||
|
items: education.map(school => (
|
||||||
|
title: school.title,
|
||||||
|
role: school.degree,
|
||||||
|
timeframe: school.graduation,
|
||||||
|
skills: (
|
||||||
|
school.gpa,
|
||||||
|
),
|
||||||
|
highlights: (
|
||||||
|
..school.highlights,
|
||||||
|
section_education_coursework(..school.coursework),
|
||||||
|
),
|
||||||
|
))
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
#let section_education_coursework(
|
||||||
|
completed: (""),
|
||||||
|
current: (""),
|
||||||
|
) = {
|
||||||
|
let coursework_content(
|
||||||
|
completed: (""),
|
||||||
|
current: (""),
|
||||||
|
) = grid(
|
||||||
|
columns: 2,
|
||||||
|
rows: 2,
|
||||||
|
gutter: 1em,
|
||||||
|
text(
|
||||||
|
weight: "regular",
|
||||||
|
"Completed",
|
||||||
|
),
|
||||||
|
text(
|
||||||
|
weight: "light",
|
||||||
|
completed.join(", "),
|
||||||
|
),
|
||||||
|
text(
|
||||||
|
weight: "regular",
|
||||||
|
"Current",
|
||||||
|
),
|
||||||
|
text(
|
||||||
|
weight: "light",
|
||||||
|
current.join(", "),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
grid(
|
||||||
|
gutter: .95em,
|
||||||
|
text(
|
||||||
|
weight: "medium",
|
||||||
|
"Relevant Coursework"
|
||||||
|
),
|
||||||
|
pad(
|
||||||
|
left: 1.5em,
|
||||||
|
text(
|
||||||
|
size: .95em,
|
||||||
|
coursework_content(
|
||||||
|
completed: completed,
|
||||||
|
current: current,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
#let section_identity(
|
||||||
|
identity: (
|
||||||
|
name: "",
|
||||||
|
email: "",
|
||||||
|
phone: "",
|
||||||
|
location: "",
|
||||||
|
website: "",
|
||||||
|
),
|
||||||
|
) = {
|
||||||
|
let title(title: "") = text(
|
||||||
|
size: 2.8em,
|
||||||
|
weight: "extrabold",
|
||||||
|
title
|
||||||
|
)
|
||||||
|
|
||||||
|
let contact_info(
|
||||||
|
email: "",
|
||||||
|
phone: "",
|
||||||
|
location: "",
|
||||||
|
website: "",
|
||||||
|
) = text(
|
||||||
|
size: 1.05em,
|
||||||
|
weight: "medium",
|
||||||
|
grid(
|
||||||
|
columns: 4,
|
||||||
|
rows: 1,
|
||||||
|
gutter: 4em,
|
||||||
|
email,
|
||||||
|
phone,
|
||||||
|
location,
|
||||||
|
website,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
grid(
|
||||||
|
gutter: 1.5em,
|
||||||
|
align: center,
|
||||||
|
title(title: identity.name),
|
||||||
|
contact_info(
|
||||||
|
email: identity.email,
|
||||||
|
phone: identity.phone,
|
||||||
|
location: identity.location,
|
||||||
|
website: identity.website,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
#let section_professional_development(
|
||||||
|
professional_development: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
timeframe: "",
|
||||||
|
role: "",
|
||||||
|
skills: (""),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
) = {
|
||||||
|
import "base/full.typ": section_base_full
|
||||||
|
|
||||||
|
section_base_full(
|
||||||
|
title: "Professional Development",
|
||||||
|
items: professional_development.map(item => (
|
||||||
|
title: item.title,
|
||||||
|
timeframe: item.timeframe,
|
||||||
|
role: item.role,
|
||||||
|
skills: item.skills,
|
||||||
|
highlights: item.highlights,
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
#let section_skills(
|
||||||
|
skills: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
items: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
) = {
|
||||||
|
import "../base/text.typ": base_text
|
||||||
|
import "base/small.typ": section_base_small
|
||||||
|
|
||||||
|
section_base_small(
|
||||||
|
title: "Skills",
|
||||||
|
grid(
|
||||||
|
columns: 2,
|
||||||
|
gutter: 1em,
|
||||||
|
..for skill in skills {
|
||||||
|
(
|
||||||
|
heading(
|
||||||
|
level: 2,
|
||||||
|
base_text(
|
||||||
|
text(
|
||||||
|
weight: "semibold",
|
||||||
|
skill.title
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
skill.items.join(", "),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
#let section_work_experience(
|
||||||
|
work_experience: (
|
||||||
|
(
|
||||||
|
title: "",
|
||||||
|
location: "",
|
||||||
|
timeframe: "",
|
||||||
|
role: "",
|
||||||
|
skills: (""),
|
||||||
|
highlights: (""),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
) = {
|
||||||
|
import "base/full.typ": section_base_full
|
||||||
|
|
||||||
|
section_base_full(
|
||||||
|
title: "Work Experience",
|
||||||
|
items: work_experience.map(company => (
|
||||||
|
title: company.title,
|
||||||
|
subtitle: company.location,
|
||||||
|
timeframe: company.timeframe,
|
||||||
|
role: company.role,
|
||||||
|
skills: company.skills,
|
||||||
|
highlights: company.highlights,
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in New Issue