133 lines
2.6 KiB
Plaintext
133 lines
2.6 KiB
Plaintext
|
#let icon(name, shift: 0.25em) = {
|
||
|
box(
|
||
|
baseline: shift,
|
||
|
height: 1.25em,
|
||
|
image("icons/" + name + ".svg", alt: name)
|
||
|
)
|
||
|
h(0.35em)
|
||
|
}
|
||
|
|
||
|
#let cv(
|
||
|
name: "",
|
||
|
tagline: "",
|
||
|
links: (),
|
||
|
paper: "a4",
|
||
|
accent: rgb("#870c66"),
|
||
|
heading_font: "Inter",
|
||
|
body_font: "Inter",
|
||
|
mono_font: "BerkeleyMono",
|
||
|
doc,
|
||
|
) = {
|
||
|
set text(size: 9pt, font: body_font, weight: "medium")
|
||
|
set page(paper, margin: (x: 0.8cm, y: 0.8cm))
|
||
|
set par(justify: true)
|
||
|
|
||
|
show raw: it => text(size: 1.2em, font: mono_font, baseline: -0.05em)[#it]
|
||
|
|
||
|
show heading.where(level: 1): it => text(
|
||
|
size: 1.6em,
|
||
|
font: heading_font,
|
||
|
tracking: 0.1pt,
|
||
|
weight: "semibold",
|
||
|
block[
|
||
|
#{it.body}
|
||
|
]
|
||
|
)
|
||
|
|
||
|
show heading.where(level: 2): it => text(
|
||
|
fill: accent,
|
||
|
font: heading_font,
|
||
|
tracking: 0.1pt,
|
||
|
weight: "bold",
|
||
|
size: 1.35em,
|
||
|
[
|
||
|
#{it.body}
|
||
|
#v(-0.85em)
|
||
|
#line(length: 100%, stroke: 1pt + accent)
|
||
|
#v(0.2em)
|
||
|
]
|
||
|
)
|
||
|
|
||
|
show heading.where(level: 3): it => text(
|
||
|
size: 1.2em,
|
||
|
weight: "semibold",
|
||
|
block[#it]
|
||
|
)
|
||
|
|
||
|
[= #name]
|
||
|
|
||
|
text(
|
||
|
font: body_font,
|
||
|
fill: accent,
|
||
|
size: 1.2em,
|
||
|
weight: "semibold",
|
||
|
block[#{tagline}]
|
||
|
)
|
||
|
|
||
|
v(-0.5em)
|
||
|
|
||
|
links.map(l => {
|
||
|
link(l.link)[
|
||
|
#set text(weight: "medium")
|
||
|
#icon(l.icon)
|
||
|
#if "text" in l.keys() { l.text } else { l.link }
|
||
|
]
|
||
|
h(1em)
|
||
|
}).join()
|
||
|
|
||
|
doc
|
||
|
}
|
||
|
|
||
|
#let divider(accent: rgb("#870c66")) = {
|
||
|
line(length: 100%, stroke: (paint: accent, thickness: 1pt, dash: "dotted"))
|
||
|
}
|
||
|
|
||
|
#let event(
|
||
|
accent: rgb("#870c66"), company_newline: false,
|
||
|
title, company, period, location
|
||
|
) = [
|
||
|
#text(1.2em)[
|
||
|
#text(weight: "semibold")[#title]
|
||
|
#h(1fr)
|
||
|
#if not company_newline {
|
||
|
text(fill: accent, weight: "bold", size: 0.8em, baseline: -0.125em)[_#[#company]_]
|
||
|
} else {
|
||
|
text(fill: accent, weight: "bold", size: 0.8em)[\
|
||
|
_#[#company]_]
|
||
|
}
|
||
|
]\
|
||
|
#text(1em)[
|
||
|
#if period != [] {
|
||
|
icon("calendar", shift: 0.18em)
|
||
|
[_#[#period]_]
|
||
|
}
|
||
|
#h(1fr)
|
||
|
#if location != [] {
|
||
|
icon("location")
|
||
|
location
|
||
|
}
|
||
|
]
|
||
|
]
|
||
|
|
||
|
#let article(
|
||
|
accent: rgb("#870c66"),
|
||
|
title: "", date: "", url: ""
|
||
|
) = [
|
||
|
#par(justify: false)[
|
||
|
#text(weight: "semibold")[
|
||
|
#text(size: 1.2em)["#title"]
|
||
|
]\
|
||
|
#text(size: 0.85em, style: "italic", weight: "bold", tracking: -0.025em, fill: accent)[
|
||
|
#icon("link", shift: 0.25em)
|
||
|
#h(-0.25em)
|
||
|
#link("https://" + url)[#url]
|
||
|
]
|
||
|
#v(-0.85em)
|
||
|
#text(size: 0.85em, style: "italic", weight: "semibold", tracking: -0.025em)[
|
||
|
#icon("calendar", shift: 0.15em)
|
||
|
#h(0.1em)
|
||
|
#date
|
||
|
]
|
||
|
]
|
||
|
]
|