fix: small misc issues with build (#118)
Auto formatted all typst code and fixed CI issue due to using upload artifacts v4 (actions/upload-artifact@v4/docs/MIGRATION.md)
This commit is contained in:
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@@ -65,7 +65,7 @@ jobs:
|
|||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
name: diffs
|
name: diffs-typst-${{ matrix.typst-version }}
|
||||||
path: |
|
path: |
|
||||||
tests/**/diff/*.png
|
tests/**/diff/*.png
|
||||||
tests/**/out/*.png
|
tests/**/out/*.png
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
#import "../lib.typ"
|
#import "../lib.typ"
|
||||||
#import "@preview/tidy:0.4.1"
|
#import "@preview/tidy:0.4.1"
|
||||||
|
|
||||||
#let docs = tidy.parse-module(
|
#let docs = tidy.parse-module(read("../lib.typ"), name: "Modern CV", scope: (
|
||||||
read("../lib.typ"),
|
resume: lib,
|
||||||
name: "Modern CV",
|
))
|
||||||
scope: (resume: lib),
|
|
||||||
)
|
|
||||||
#tidy.show-module(docs, style: tidy.styles.minimal)
|
#tidy.show-module(docs, style: tidy.styles.minimal)
|
||||||
|
|||||||
259
lib.typ
259
lib.typ
@@ -9,27 +9,13 @@
|
|||||||
#let default-location-color = rgb("#333333")
|
#let default-location-color = rgb("#333333")
|
||||||
|
|
||||||
// const icons
|
// const icons
|
||||||
#let linkedin-icon = box(
|
#let linkedin-icon = box(fa-icon("linkedin", fill: color-darknight))
|
||||||
fa-icon("linkedin", fill: color-darknight),
|
#let github-icon = box(fa-icon("github", fill: color-darknight))
|
||||||
)
|
#let gitlab-icon = box(fa-icon("gitlab", fill: color-darknight))
|
||||||
#let github-icon = box(
|
#let bitbucket-icon = box(fa-icon("bitbucket", fill: color-darknight))
|
||||||
fa-icon("github", fill: color-darknight),
|
#let twitter-icon = box(fa-icon("twitter", fill: color-darknight))
|
||||||
)
|
#let google-scholar-icon = box(fa-icon("google-scholar", fill: color-darknight))
|
||||||
#let gitlab-icon = box(
|
#let orcid-icon = box(fa-icon("orcid", fill: color-darknight))
|
||||||
fa-icon("gitlab", fill: color-darknight),
|
|
||||||
)
|
|
||||||
#let bitbucket-icon = box(
|
|
||||||
fa-icon("bitbucket", fill: color-darknight),
|
|
||||||
)
|
|
||||||
#let twitter-icon = box(
|
|
||||||
fa-icon("twitter", fill: color-darknight),
|
|
||||||
)
|
|
||||||
#let google-scholar-icon = box(
|
|
||||||
fa-icon("google-scholar", fill: color-darknight),
|
|
||||||
)
|
|
||||||
#let orcid-icon = box(
|
|
||||||
fa-icon("orcid", fill: color-darknight),
|
|
||||||
)
|
|
||||||
#let phone-icon = box(fa-icon("square-phone", fill: color-darknight))
|
#let phone-icon = box(fa-icon("square-phone", fill: color-darknight))
|
||||||
#let email-icon = box(fa-icon("envelope", fill: color-darknight))
|
#let email-icon = box(fa-icon("envelope", fill: color-darknight))
|
||||||
#let birth-icon = box(fa-icon("cake", fill: color-darknight))
|
#let birth-icon = box(fa-icon("cake", fill: color-darknight))
|
||||||
@@ -87,11 +73,14 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
#let __coverletter_footer(author, language, date, lang_data, use-smallcaps: true) = {
|
#let __coverletter_footer(
|
||||||
set text(
|
author,
|
||||||
fill: gray,
|
language,
|
||||||
size: 8pt,
|
date,
|
||||||
)
|
lang_data,
|
||||||
|
use-smallcaps: true,
|
||||||
|
) = {
|
||||||
|
set text(fill: gray, size: 8pt)
|
||||||
__justify_align_3[
|
__justify_align_3[
|
||||||
#__apply_smallcaps(date, use-smallcaps)
|
#__apply_smallcaps(date, use-smallcaps)
|
||||||
][
|
][
|
||||||
@@ -100,7 +89,7 @@
|
|||||||
let name = __format_author_name(author, language)
|
let name = __format_author_name(author, language)
|
||||||
name + " · " + linguify("cover-letter", from: lang_data)
|
name + " · " + linguify("cover-letter", from: lang_data)
|
||||||
},
|
},
|
||||||
use-smallcaps
|
use-smallcaps,
|
||||||
)
|
)
|
||||||
][
|
][
|
||||||
#context {
|
#context {
|
||||||
@@ -110,10 +99,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#let __resume_footer(author, language, lang_data, date, use-smallcaps: true) = {
|
#let __resume_footer(author, language, lang_data, date, use-smallcaps: true) = {
|
||||||
set text(
|
set text(fill: gray, size: 8pt)
|
||||||
fill: gray,
|
|
||||||
size: 8pt,
|
|
||||||
)
|
|
||||||
__justify_align_3[
|
__justify_align_3[
|
||||||
#__apply_smallcaps(date, use-smallcaps)
|
#__apply_smallcaps(date, use-smallcaps)
|
||||||
][
|
][
|
||||||
@@ -122,7 +108,7 @@
|
|||||||
let name = __format_author_name(author, language)
|
let name = __format_author_name(author, language)
|
||||||
name + " · " + linguify("resume", from: lang_data)
|
name + " · " + linguify("resume", from: lang_data)
|
||||||
},
|
},
|
||||||
use-smallcaps
|
use-smallcaps,
|
||||||
)
|
)
|
||||||
][
|
][
|
||||||
#context {
|
#context {
|
||||||
@@ -150,20 +136,14 @@
|
|||||||
/// Right section for the justified headers
|
/// Right section for the justified headers
|
||||||
/// - body (content): The body of the right header
|
/// - body (content): The body of the right header
|
||||||
#let secondary-right-header(body) = {
|
#let secondary-right-header(body) = {
|
||||||
set text(
|
set text(size: 11pt, weight: "medium")
|
||||||
size: 11pt,
|
|
||||||
weight: "medium",
|
|
||||||
)
|
|
||||||
body
|
body
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Right section of a tertiaty headers.
|
/// Right section of a tertiaty headers.
|
||||||
/// - body (content): The body of the right header
|
/// - body (content): The body of the right header
|
||||||
#let tertiary-right-header(body) = {
|
#let tertiary-right-header(body) = {
|
||||||
set text(
|
set text(weight: "light", size: 9pt)
|
||||||
weight: "light",
|
|
||||||
size: 9pt,
|
|
||||||
)
|
|
||||||
body
|
body
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,10 +151,7 @@
|
|||||||
/// - primary (content): The primary section of the header
|
/// - primary (content): The primary section of the header
|
||||||
/// - secondary (content): The secondary section of the header
|
/// - secondary (content): The secondary section of the header
|
||||||
#let justified-header(primary, secondary) = {
|
#let justified-header(primary, secondary) = {
|
||||||
set block(
|
set block(above: 0.7em, below: 0.7em)
|
||||||
above: 0.7em,
|
|
||||||
below: 0.7em,
|
|
||||||
)
|
|
||||||
pad[
|
pad[
|
||||||
#__justify_align[
|
#__justify_align[
|
||||||
== #primary
|
== #primary
|
||||||
@@ -220,7 +197,7 @@
|
|||||||
show-footer: true,
|
show-footer: true,
|
||||||
language: "en",
|
language: "en",
|
||||||
font: ("Source Sans Pro", "Source Sans 3"),
|
font: ("Source Sans Pro", "Source Sans 3"),
|
||||||
header-font: ("Roboto"),
|
header-font: "Roboto",
|
||||||
paper-size: "a4",
|
paper-size: "a4",
|
||||||
use-smallcaps: true,
|
use-smallcaps: true,
|
||||||
body,
|
body,
|
||||||
@@ -261,21 +238,12 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
// set paragraph spacing
|
// set paragraph spacing
|
||||||
set par(
|
set par(spacing: 0.75em, justify: true)
|
||||||
spacing: 0.75em,
|
|
||||||
justify: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
set heading(
|
set heading(numbering: none, outlined: false)
|
||||||
numbering: none,
|
|
||||||
outlined: false,
|
|
||||||
)
|
|
||||||
|
|
||||||
show heading.where(level: 1): it => [
|
show heading.where(level: 1): it => [
|
||||||
#set text(
|
#set text(size: 16pt, weight: "regular")
|
||||||
size: 16pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
#set align(left)
|
#set align(left)
|
||||||
#set block(above: 1em)
|
#set block(above: 1em)
|
||||||
#let color = if colored-headers {
|
#let color = if colored-headers {
|
||||||
@@ -288,20 +256,12 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
show heading.where(level: 2): it => {
|
show heading.where(level: 2): it => {
|
||||||
set text(
|
set text(color-darkgray, size: 12pt, style: "normal", weight: "bold")
|
||||||
color-darkgray,
|
|
||||||
size: 12pt,
|
|
||||||
style: "normal",
|
|
||||||
weight: "bold",
|
|
||||||
)
|
|
||||||
it.body
|
it.body
|
||||||
}
|
}
|
||||||
|
|
||||||
show heading.where(level: 3): it => {
|
show heading.where(level: 3): it => {
|
||||||
set text(
|
set text(size: 10pt, weight: "regular")
|
||||||
size: 10pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
__apply_smallcaps(it.body, use-smallcaps)
|
__apply_smallcaps(it.body, use-smallcaps)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,16 +269,11 @@
|
|||||||
align(center)[
|
align(center)[
|
||||||
#pad(bottom: 5pt)[
|
#pad(bottom: 5pt)[
|
||||||
#block[
|
#block[
|
||||||
#set text(
|
#set text(size: 32pt, style: "normal", font: header-font)
|
||||||
size: 32pt,
|
|
||||||
style: "normal",
|
|
||||||
font: header-font,
|
|
||||||
)
|
|
||||||
#if language == "zh" or language == "ja" [
|
#if language == "zh" or language == "ja" [
|
||||||
#text(
|
#text(accent-color, weight: "thin")[#author.firstname]#text(
|
||||||
accent-color,
|
weight: "bold",
|
||||||
weight: "thin",
|
)[#author.lastname]
|
||||||
)[#author.firstname]#text(weight: "bold")[#author.lastname]
|
|
||||||
] else [
|
] else [
|
||||||
#text(accent-color, weight: "thin")[#author.firstname]
|
#text(accent-color, weight: "thin")[#author.firstname]
|
||||||
#text(weight: "bold")[#author.lastname]
|
#text(weight: "bold")[#author.lastname]
|
||||||
@@ -329,26 +284,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
let positions = {
|
let positions = {
|
||||||
set text(
|
set text(accent-color, size: 9pt, weight: "regular")
|
||||||
accent-color,
|
|
||||||
size: 9pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
align(center)[
|
align(center)[
|
||||||
#__apply_smallcaps(
|
#__apply_smallcaps(
|
||||||
author.positions.join(
|
author.positions.join(text[#" "#sym.dot.c#" "]),
|
||||||
text[#" "#sym.dot.c#" "],
|
use-smallcaps,
|
||||||
),
|
|
||||||
use-smallcaps
|
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
let address = {
|
let address = {
|
||||||
set text(
|
set text(size: 9pt, weight: "regular")
|
||||||
size: 9pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
align(center)[
|
align(center)[
|
||||||
#if ("address" in author) [
|
#if ("address" in author) [
|
||||||
#author.address
|
#author.address
|
||||||
@@ -362,11 +308,7 @@
|
|||||||
let separator = box(width: 5pt)
|
let separator = box(width: 5pt)
|
||||||
|
|
||||||
align(center)[
|
align(center)[
|
||||||
#set text(
|
#set text(size: 9pt, weight: "regular", style: "normal")
|
||||||
size: 9pt,
|
|
||||||
weight: "regular",
|
|
||||||
style: "normal",
|
|
||||||
)
|
|
||||||
#block[
|
#block[
|
||||||
#align(horizon)[
|
#align(horizon)[
|
||||||
#if ("birth" in author) [
|
#if ("birth" in author) [
|
||||||
@@ -401,25 +343,33 @@
|
|||||||
#if ("bitbucket" in author) [
|
#if ("bitbucket" in author) [
|
||||||
#separator
|
#separator
|
||||||
#bitbucket-icon
|
#bitbucket-icon
|
||||||
#box[#link("https://bitbucket.org/" + author.bitbucket)[#author.bitbucket]]
|
#box[#link(
|
||||||
|
"https://bitbucket.org/" + author.bitbucket,
|
||||||
|
)[#author.bitbucket]]
|
||||||
]
|
]
|
||||||
#if ("linkedin" in author) [
|
#if ("linkedin" in author) [
|
||||||
#separator
|
#separator
|
||||||
#linkedin-icon
|
#linkedin-icon
|
||||||
#box[
|
#box[
|
||||||
#link("https://www.linkedin.com/in/" + author.linkedin)[#author.firstname #author.lastname]
|
#link(
|
||||||
|
"https://www.linkedin.com/in/" + author.linkedin,
|
||||||
|
)[#author.firstname #author.lastname]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
#if ("twitter" in author) [
|
#if ("twitter" in author) [
|
||||||
#separator
|
#separator
|
||||||
#twitter-icon
|
#twitter-icon
|
||||||
#box[#link("https://twitter.com/" + author.twitter)[\@#author.twitter]]
|
#box[#link(
|
||||||
|
"https://twitter.com/" + author.twitter,
|
||||||
|
)[\@#author.twitter]]
|
||||||
]
|
]
|
||||||
#if ("scholar" in author) [
|
#if ("scholar" in author) [
|
||||||
#let fullname = str(author.firstname + " " + author.lastname)
|
#let fullname = str(author.firstname + " " + author.lastname)
|
||||||
#separator
|
#separator
|
||||||
#google-scholar-icon
|
#google-scholar-icon
|
||||||
#box[#link("https://scholar.google.com/citations?user=" + author.scholar)[#fullname]]
|
#box[#link(
|
||||||
|
"https://scholar.google.com/citations?user=" + author.scholar,
|
||||||
|
)[#fullname]]
|
||||||
]
|
]
|
||||||
#if ("orcid" in author) [
|
#if ("orcid" in author) [
|
||||||
#separator
|
#separator
|
||||||
@@ -439,7 +389,7 @@
|
|||||||
if profile-picture != none {
|
if profile-picture != none {
|
||||||
grid(
|
grid(
|
||||||
columns: (100% - 4cm, 4cm),
|
columns: (100% - 4cm, 4cm),
|
||||||
rows: (100pt),
|
rows: 100pt,
|
||||||
gutter: 10pt,
|
gutter: 10pt,
|
||||||
[
|
[
|
||||||
#name
|
#name
|
||||||
@@ -472,16 +422,8 @@
|
|||||||
/// This formats the item for the resume entries. Typically your body would be a bullet list of items. Could be your responsibilities at a company or your academic achievements in an educational background section.
|
/// This formats the item for the resume entries. Typically your body would be a bullet list of items. Could be your responsibilities at a company or your academic achievements in an educational background section.
|
||||||
/// - body (content): The body of the resume entry
|
/// - body (content): The body of the resume entry
|
||||||
#let resume-item(body) = {
|
#let resume-item(body) = {
|
||||||
set text(
|
set text(size: 10pt, style: "normal", weight: "light", fill: color-darknight)
|
||||||
size: 10pt,
|
set block(above: 0.75em, below: 1.25em)
|
||||||
style: "normal",
|
|
||||||
weight: "light",
|
|
||||||
fill: color-darknight,
|
|
||||||
)
|
|
||||||
set block(
|
|
||||||
above: 0.75em,
|
|
||||||
below: 1.25em,
|
|
||||||
)
|
|
||||||
set par(leading: 0.65em)
|
set par(leading: 0.65em)
|
||||||
block(above: 0.5em)[
|
block(above: 0.5em)[
|
||||||
#body
|
#body
|
||||||
@@ -525,11 +467,7 @@
|
|||||||
/// *Example:*
|
/// *Example:*
|
||||||
/// #example(`resume.resume-gpa("3.5", "4.0")`)
|
/// #example(`resume.resume-gpa("3.5", "4.0")`)
|
||||||
#let resume-gpa(numerator, denominator) = {
|
#let resume-gpa(numerator, denominator) = {
|
||||||
set text(
|
set text(size: 12pt, style: "italic", weight: "light")
|
||||||
size: 12pt,
|
|
||||||
style: "italic",
|
|
||||||
weight: "light",
|
|
||||||
)
|
|
||||||
text[Cumulative GPA: #box[#strong[#numerator] / #denominator]]
|
text[Cumulative GPA: #box[#strong[#numerator] / #denominator]]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -558,11 +496,7 @@
|
|||||||
== #category
|
== #category
|
||||||
],
|
],
|
||||||
align(left)[
|
align(left)[
|
||||||
#set text(
|
#set text(size: 11pt, style: "normal", weight: "light")
|
||||||
size: 11pt,
|
|
||||||
style: "normal",
|
|
||||||
weight: "light",
|
|
||||||
)
|
|
||||||
#items.join(", ")
|
#items.join(", ")
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -575,10 +509,11 @@
|
|||||||
|
|
||||||
#let default-closing(lang_data) = {
|
#let default-closing(lang_data) = {
|
||||||
align(bottom)[
|
align(bottom)[
|
||||||
#text(weight: "light", style: "italic")[ #linguify(
|
#text(weight: "light", style: "italic")[
|
||||||
"attached",
|
#linguify("attached", from: lang_data)#sym.colon #linguify(
|
||||||
|
"curriculum-vitae",
|
||||||
from: lang_data,
|
from: lang_data,
|
||||||
)#sym.colon #linguify("curriculum-vitae", from: lang_data)]
|
)]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -602,7 +537,7 @@
|
|||||||
accent-color: default-accent-color,
|
accent-color: default-accent-color,
|
||||||
language: "en",
|
language: "en",
|
||||||
font: ("Source Sans Pro", "Source Sans 3"),
|
font: ("Source Sans Pro", "Source Sans 3"),
|
||||||
header-font: ("Roboto"),
|
header-font: "Roboto",
|
||||||
show-footer: true,
|
show-footer: true,
|
||||||
closing: none,
|
closing: none,
|
||||||
paper-size: "a4",
|
paper-size: "a4",
|
||||||
@@ -623,11 +558,9 @@
|
|||||||
show: body => context {
|
show: body => context {
|
||||||
set document(
|
set document(
|
||||||
author: author.firstname + " " + author.lastname,
|
author: author.firstname + " " + author.lastname,
|
||||||
title: lflib._linguify(
|
title: lflib
|
||||||
"cover-letter",
|
._linguify("cover-letter", lang: language, from: lang_data)
|
||||||
lang: language,
|
.ok,
|
||||||
from: lang_data,
|
|
||||||
).ok,
|
|
||||||
)
|
)
|
||||||
body
|
body
|
||||||
}
|
}
|
||||||
@@ -654,25 +587,13 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
// set paragraph spacing
|
// set paragraph spacing
|
||||||
set par(
|
set par(spacing: 0.75em, justify: true)
|
||||||
spacing: 0.75em,
|
|
||||||
justify: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
set heading(
|
set heading(numbering: none, outlined: false)
|
||||||
numbering: none,
|
|
||||||
outlined: false,
|
|
||||||
)
|
|
||||||
|
|
||||||
show heading: it => [
|
show heading: it => [
|
||||||
#set block(
|
#set block(above: 1em, below: 1em)
|
||||||
above: 1em,
|
#set text(size: 16pt, weight: "regular")
|
||||||
below: 1em,
|
|
||||||
)
|
|
||||||
#set text(
|
|
||||||
size: 16pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
|
|
||||||
#align(left)[
|
#align(left)[
|
||||||
#text[#strong[#text(accent-color)[#it.body]]]
|
#text[#strong[#text(accent-color)[#it.body]]]
|
||||||
@@ -684,16 +605,11 @@
|
|||||||
align(right)[
|
align(right)[
|
||||||
#pad(bottom: 5pt)[
|
#pad(bottom: 5pt)[
|
||||||
#block[
|
#block[
|
||||||
#set text(
|
#set text(size: 32pt, style: "normal", font: header-font)
|
||||||
size: 32pt,
|
|
||||||
style: "normal",
|
|
||||||
font: header-font,
|
|
||||||
)
|
|
||||||
#if language == "zh" or language == "ja" [
|
#if language == "zh" or language == "ja" [
|
||||||
#text(
|
#text(accent-color, weight: "thin")[#author.firstname]#text(
|
||||||
accent-color,
|
weight: "bold",
|
||||||
weight: "thin",
|
)[#author.lastname]
|
||||||
)[#author.firstname]#text(weight: "bold")[#author.lastname]
|
|
||||||
] else [
|
] else [
|
||||||
#text(accent-color, weight: "thin")[#author.firstname]
|
#text(accent-color, weight: "thin")[#author.firstname]
|
||||||
#text(weight: "bold")[#author.lastname]
|
#text(weight: "bold")[#author.lastname]
|
||||||
@@ -705,27 +621,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
let positions = {
|
let positions = {
|
||||||
set text(
|
set text(accent-color, size: 9pt, weight: "regular")
|
||||||
accent-color,
|
|
||||||
size: 9pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
align(right)[
|
align(right)[
|
||||||
#__apply_smallcaps(
|
#__apply_smallcaps(
|
||||||
author.positions.join(
|
author.positions.join(text[#" "#sym.dot.c#" "]),
|
||||||
text[#" "#sym.dot.c#" "],
|
use-smallcaps,
|
||||||
),
|
|
||||||
use-smallcaps
|
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
let address = {
|
let address = {
|
||||||
set text(
|
set text(size: 9pt, weight: "bold", fill: color-gray)
|
||||||
size: 9pt,
|
|
||||||
weight: "bold",
|
|
||||||
fill: color-gray,
|
|
||||||
)
|
|
||||||
align(right)[
|
align(right)[
|
||||||
#if ("address" in author) [
|
#if ("address" in author) [
|
||||||
#author.address
|
#author.address
|
||||||
@@ -761,7 +667,9 @@
|
|||||||
author_list.push[
|
author_list.push[
|
||||||
#linkedin-icon
|
#linkedin-icon
|
||||||
#box[
|
#box[
|
||||||
#link("https://www.linkedin.com/in/" + author.linkedin)[#author.firstname #author.lastname]
|
#link(
|
||||||
|
"https://www.linkedin.com/in/" + author.linkedin,
|
||||||
|
)[#author.firstname #author.lastname]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -780,11 +688,7 @@
|
|||||||
|
|
||||||
|
|
||||||
align(right)[
|
align(right)[
|
||||||
#set text(
|
#set text(size: 8pt, weight: "light", style: "normal")
|
||||||
size: 8pt,
|
|
||||||
weight: "light",
|
|
||||||
style: "normal",
|
|
||||||
)
|
|
||||||
#author_list.join(separator)
|
#author_list.join(separator)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -792,7 +696,7 @@
|
|||||||
let letter-heading = {
|
let letter-heading = {
|
||||||
grid(
|
grid(
|
||||||
columns: (1fr, 2fr),
|
columns: (1fr, 2fr),
|
||||||
rows: (100pt),
|
rows: 100pt,
|
||||||
align(left + horizon)[
|
align(left + horizon)[
|
||||||
#block(
|
#block(
|
||||||
clip: true,
|
clip: true,
|
||||||
@@ -815,10 +719,9 @@
|
|||||||
let signature = {
|
let signature = {
|
||||||
align(bottom)[
|
align(bottom)[
|
||||||
#pad(bottom: 2em)[
|
#pad(bottom: 2em)[
|
||||||
#text(weight: "light")[#linguify(
|
#text(weight: "light")[#linguify("sincerely", from: lang_data)#if (
|
||||||
"sincerely",
|
language != "de"
|
||||||
from: lang_data,
|
) [#sym.comma]] \
|
||||||
)#if language != "de" [#sym.comma]] \
|
|
||||||
#text(weight: "bold")[#author.firstname #author.lastname] \ \
|
#text(weight: "bold")[#author.firstname #author.lastname] \ \
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
find . -iname "*.typ" | xargs typstyle -i
|
find . -iname "*.typ" | xargs typstyle -i
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
// set this to `none` to show the default or remove it completely
|
// set this to `none` to show the default or remove it completely
|
||||||
closing: [],
|
closing: [],
|
||||||
// see typst "page" documentation for more options
|
// see typst "page" documentation for more options
|
||||||
paper-size: "us-gov-legal"
|
paper-size: "us-gov-legal",
|
||||||
)
|
)
|
||||||
|
|
||||||
#hiring-entity-info(entity-info: (
|
#hiring-entity-info(entity-info: (
|
||||||
@@ -36,10 +36,7 @@
|
|||||||
city: "MOUNTAIN VIEW, CA 94043",
|
city: "MOUNTAIN VIEW, CA 94043",
|
||||||
))
|
))
|
||||||
|
|
||||||
#letter-heading(
|
#letter-heading(job-position: "Software Engineer", addressee: "Sir or Madame")
|
||||||
job-position: "Software Engineer",
|
|
||||||
addressee: "Sir or Madame",
|
|
||||||
)
|
|
||||||
|
|
||||||
= About Me
|
= About Me
|
||||||
#coverletter-content[
|
#coverletter-content[
|
||||||
|
|||||||
@@ -26,10 +26,7 @@
|
|||||||
city: "MOUNTAIN VIEW, CA 94043",
|
city: "MOUNTAIN VIEW, CA 94043",
|
||||||
))
|
))
|
||||||
|
|
||||||
#letter-heading(
|
#letter-heading(job-position: "Software Engineer", addressee: "Sir or Madame")
|
||||||
job-position: "Software Engineer",
|
|
||||||
addressee: "Sir or Madame",
|
|
||||||
)
|
|
||||||
|
|
||||||
#coverletter-content[
|
#coverletter-content[
|
||||||
#lorem(100)
|
#lorem(100)
|
||||||
|
|||||||
@@ -56,10 +56,7 @@
|
|||||||
#lorem(72)
|
#lorem(72)
|
||||||
]
|
]
|
||||||
|
|
||||||
#resume-entry(
|
#resume-entry(title: "Intern", location: "Example City, EX")
|
||||||
title: "Intern",
|
|
||||||
location: "Example City, EX",
|
|
||||||
)
|
|
||||||
|
|
||||||
#resume-item[
|
#resume-item[
|
||||||
- #lorem(20)
|
- #lorem(20)
|
||||||
@@ -95,15 +92,21 @@
|
|||||||
|
|
||||||
= Skills
|
= Skills
|
||||||
|
|
||||||
#resume-skill-item(
|
#resume-skill-item("Languages", (
|
||||||
"Languages",
|
strong("C++"),
|
||||||
(strong("C++"), strong("Python"), "Java", "C#", "JavaScript", "TypeScript"),
|
strong("Python"),
|
||||||
)
|
"Java",
|
||||||
|
"C#",
|
||||||
|
"JavaScript",
|
||||||
|
"TypeScript",
|
||||||
|
))
|
||||||
#resume-skill-item("Spoken Languages", (strong("English"), "Spanish"))
|
#resume-skill-item("Spoken Languages", (strong("English"), "Spanish"))
|
||||||
#resume-skill-item(
|
#resume-skill-item("Programs", (
|
||||||
"Programs",
|
strong("Excel"),
|
||||||
(strong("Excel"), "Word", "Powerpoint", "Visual Studio"),
|
"Word",
|
||||||
)
|
"Powerpoint",
|
||||||
|
"Visual Studio",
|
||||||
|
))
|
||||||
|
|
||||||
= Education
|
= Education
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,8 @@
|
|||||||
#import "@local/modern-cv:0.8.0": *
|
#import "@local/modern-cv:0.8.0": *
|
||||||
|
|
||||||
// setup the document like we do for the resume
|
// setup the document like we do for the resume
|
||||||
#let font = ("Source Sans 3")
|
#let font = "Source Sans 3"
|
||||||
#set text(
|
#set text(font: font, size: 11pt, fill: color-darkgray, fallback: true)
|
||||||
font: font,
|
|
||||||
size: 11pt,
|
|
||||||
fill: color-darkgray,
|
|
||||||
fallback: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
#set page(
|
#set page(
|
||||||
paper: "a4",
|
paper: "a4",
|
||||||
@@ -19,21 +14,12 @@
|
|||||||
// set paragraph spacing
|
// set paragraph spacing
|
||||||
#set par(spacing: 0.75em, justify: true)
|
#set par(spacing: 0.75em, justify: true)
|
||||||
|
|
||||||
#set heading(
|
#set heading(numbering: none, outlined: false)
|
||||||
numbering: none,
|
|
||||||
outlined: false,
|
|
||||||
)
|
|
||||||
|
|
||||||
#show heading.where(level: 1): it => [
|
#show heading.where(level: 1): it => [
|
||||||
|
|
||||||
#set block(
|
#set block(above: 1em, below: 1em)
|
||||||
above: 1em,
|
#set text(size: 16pt, weight: "regular")
|
||||||
below: 1em,
|
|
||||||
)
|
|
||||||
#set text(
|
|
||||||
size: 16pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
|
|
||||||
#align(left)[
|
#align(left)[
|
||||||
#let color = if colored-headers {
|
#let color = if colored-headers {
|
||||||
@@ -48,20 +34,12 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
#show heading.where(level: 2): it => {
|
#show heading.where(level: 2): it => {
|
||||||
set text(
|
set text(color-darkgray, size: 12pt, style: "normal", weight: "bold")
|
||||||
color-darkgray,
|
|
||||||
size: 12pt,
|
|
||||||
style: "normal",
|
|
||||||
weight: "bold",
|
|
||||||
)
|
|
||||||
it.body
|
it.body
|
||||||
}
|
}
|
||||||
|
|
||||||
#show heading.where(level: 3): it => {
|
#show heading.where(level: 3): it => {
|
||||||
set text(
|
set text(size: 10pt, weight: "regular")
|
||||||
size: 10pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
smallcaps[#it.body]
|
smallcaps[#it.body]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,19 +55,10 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
// resume-entry also support omitting the date and description
|
// resume-entry also support omitting the date and description
|
||||||
#resume-entry(
|
#resume-entry(title: "Title", location: "Location")
|
||||||
title: "Title",
|
|
||||||
location: "Location",
|
|
||||||
)
|
|
||||||
|
|
||||||
#resume-certification(
|
#resume-certification("Certified Scrum Master (CSM)", "Jan 2022")
|
||||||
"Certified Scrum Master (CSM)",
|
|
||||||
"Jan 2022",
|
|
||||||
)
|
|
||||||
|
|
||||||
#resume-skill-item(
|
#resume-skill-item("Programming", (strong["C++"], "Python", "Java"))
|
||||||
"Programming",
|
|
||||||
(strong["C++"], "Python", "Java"),
|
|
||||||
)
|
|
||||||
|
|
||||||
#resume-gpa("3.5", "4.0")
|
#resume-gpa("3.5", "4.0")
|
||||||
|
|||||||
@@ -1,13 +1,8 @@
|
|||||||
#import "@local/modern-cv:0.8.0": *
|
#import "@local/modern-cv:0.8.0": *
|
||||||
|
|
||||||
// setup the document like we do for the resume
|
// setup the document like we do for the resume
|
||||||
#let font = ("Source Sans 3")
|
#let font = "Source Sans 3"
|
||||||
#set text(
|
#set text(font: font, size: 11pt, fill: color-darkgray, fallback: true)
|
||||||
font: font,
|
|
||||||
size: 11pt,
|
|
||||||
fill: color-darkgray,
|
|
||||||
fallback: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
#set page(
|
#set page(
|
||||||
paper: "a4",
|
paper: "a4",
|
||||||
@@ -19,21 +14,12 @@
|
|||||||
// set paragraph spacing
|
// set paragraph spacing
|
||||||
#set par(spacing: 0.75em, justify: true)
|
#set par(spacing: 0.75em, justify: true)
|
||||||
|
|
||||||
#set heading(
|
#set heading(numbering: none, outlined: false)
|
||||||
numbering: none,
|
|
||||||
outlined: false,
|
|
||||||
)
|
|
||||||
|
|
||||||
#show heading.where(level: 1): it => [
|
#show heading.where(level: 1): it => [
|
||||||
|
|
||||||
#set block(
|
#set block(above: 1em, below: 1em)
|
||||||
above: 1em,
|
#set text(size: 16pt, weight: "regular")
|
||||||
below: 1em,
|
|
||||||
)
|
|
||||||
#set text(
|
|
||||||
size: 16pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
|
|
||||||
#align(left)[
|
#align(left)[
|
||||||
#let color = if colored-headers {
|
#let color = if colored-headers {
|
||||||
@@ -48,20 +34,12 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
#show heading.where(level: 2): it => {
|
#show heading.where(level: 2): it => {
|
||||||
set text(
|
set text(color-darkgray, size: 12pt, style: "normal", weight: "bold")
|
||||||
color-darkgray,
|
|
||||||
size: 12pt,
|
|
||||||
style: "normal",
|
|
||||||
weight: "bold",
|
|
||||||
)
|
|
||||||
it.body
|
it.body
|
||||||
}
|
}
|
||||||
|
|
||||||
#show heading.where(level: 3): it => {
|
#show heading.where(level: 3): it => {
|
||||||
set text(
|
set text(size: 10pt, weight: "regular")
|
||||||
size: 10pt,
|
|
||||||
weight: "regular",
|
|
||||||
)
|
|
||||||
smallcaps[#it.body]
|
smallcaps[#it.body]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user