| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- #let lang = sys.inputs.at("lang", default: "de")
- #set page(paper: "a4", margin: 2.5cm)
- #set text(font: "Linux Libertine O", size: 11pt, lang: lang)
- #show link: set text(fill: black)
- #let light = "Archivo Narrow"
- #let data = json("resume." + lang + ".json")
- #let months = (
- de: (
- "Januar", "Februar", "März", "April", "Mai", "Juni",
- "Juli", "August", "September", "Oktober", "November", "Dezember",
- ),
- en: (
- "January", "February", "March", "April", "May", "June",
- "July", "August", "September", "October", "November", "December",
- ),
- )
- #let sections = (
- de: (
- work: "Berufserfahrung",
- education: "Ausbildung",
- skills: "Kenntnisse",
- languages: "Sprachen",
- publications: "Veröffentlichungen",
- ),
- en: (
- work: "Work Experience",
- education: "Education",
- skills: "Skills",
- languages: "Languages",
- publications: "Publications",
- ),
- )
- #let t = sections.at(lang)
- // Replace LaTeX-isms in JSON strings
- #let clean(s) = {
- s.replace("\\LaTeX", "LaTeX")
- .replace("\\-", "\u{00AD}")
- .replace("--", "\u{2013}")
- }
- // Convert "YYYY-MM-DD" → "MM/YYYY", pass through anything else (e.g. "heute", "present")
- #let simpledate(s) = {
- let parts = s.split("-")
- if parts.len() == 3 {
- parts.at(1) + "/" + parts.at(0)
- } else {
- s
- }
- }
- #let cvsection(title, body) = {
- line(length: 100%, stroke: 0.4pt)
- text(font: light, size: 10pt, tracking: 0.06em, upper(title))
- v(0.5em)
- body
- }
- #let cvperiod(dates, body) = {
- grid(
- columns: (70%, 30%),
- body,
- align(right, dates),
- )
- }
- #let cvhighlights(entry, fmt: h => [#h]) = {
- if "highlights" in entry and entry.highlights.len() > 0 {
- v(-0.2em)
- pad(left: 0.8em,
- list(spacing: 0.8em, ..entry.highlights.map(fmt))
- )
- v(0.3em)
- }
- }
- // ── Header ──
- #align(center)[
- #text(font: light, size: 16pt, tracking: 0.18em, upper[#data.basics.title~#data.basics.name])
- #v(1em)
- #text(font: light, size: 10pt, tracking: 0.12em, upper[
- #data.basics.location.address
- #h(0.5em) • #h(0.5em)
- #data.basics.location.postalCode #data.basics.location.city
- #h(0.5em) • #h(0.5em)
- #data.basics.phone
- ])
- #v(0.4em)
- #text(font: light, size: 10pt, tracking: 0.12em)[
- #link("mailto:" + data.basics.email)[#upper[#data.basics.email]]
- #h(0.5em) • #h(0.5em)
- #link("https://github.com/matze")[#upper[github.com/matze]]
- #h(0.5em) • #h(0.5em)
- #link("https://bloerg.net")[#upper[bloerg.net]]
- ]
- ]
- #v(1em)
- // ── Work experience ──
- #cvsection(t.work)[
- #v(-0.4em)
- #for work in data.work {
- cvperiod(
- [#simpledate(work.startDate)–#simpledate(work.endDate)],
- [#work.company],
- )
- v(-0.2em)
- emph[#work.position]
- cvhighlights(work)
- v(0.2em)
- }
- #v(0.4em)
- ]
- // ── Education ──
- #cvsection(t.education)[
- #v(-0.4em)
- #for stage in data.education {
- let degree = if stage.area != "" {
- stage.studyType + " " + stage.area
- } else {
- stage.studyType
- }
- cvperiod(
- [#simpledate(stage.startDate)–#simpledate(stage.endDate)],
- [#stage.institution],
- )
- emph[#degree]
- cvhighlights(stage)
- v(0.6em)
- }
- #v(0.4em)
- ]
- // ── Skills ──
- #pagebreak(weak: true)
- #cvsection(t.skills)[
- #v(-0.4em)
- #for skill in data.skills {
- grid(
- columns: (6.0em, 1fr),
- [#skill.name],
- clean(skill.keywords.join(", ")),
- )
- }
- #v(0.4em)
- ]
- // ── Languages ──
- #cvsection(t.languages)[
- #v(-0.4em)
- #for l in data.languages {
- grid(
- columns: (6.0em, 1fr),
- [#l.language],
- [#l.fluency],
- )
- }
- ]
- #v(4em)
- // #v(1fr)
- // ── Signature ──
- #image("signature.png", width: 2cm)
- #{
- let today = datetime.today()
- [#data.basics.location.city, #today.day(). #months.at(lang).at(today.month() - 1) #today.year()]
- }
- // ── Publications ──
- #pagebreak()
- #line(length: 100%, stroke: 0.4pt)
- #v(-0.2em)
- #text(font: light, size: 12pt, tracking: 0.12em, upper[#t.publications])
- #v(1em)
- #bibliography("publications.bib", full: true, title: none, style: "ieee")
|