Compare commits
33 Commits
release/0.
...
release/0.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74e939cfda | ||
|
|
bfa22cf89a | ||
|
|
67e8c4ec7f | ||
|
|
d6ac41a03b | ||
|
|
07f2e2a6f6 | ||
|
|
b661a92801 | ||
|
|
f6f1e6f019 | ||
|
|
be02c50e20 | ||
|
|
23d4691994 | ||
|
|
08f72ca1e5 | ||
|
|
79a53ee9c1 | ||
|
|
8c6071a82d | ||
|
|
f26afed219 | ||
|
|
9e65c85a0d | ||
|
|
9d2dff3a5b | ||
|
|
4e71f1db53 | ||
|
|
4346e36a8d | ||
|
|
41131cbb86 | ||
|
|
d2aa55b889 | ||
|
|
a2fe9ca40a | ||
|
|
78a53befb5 | ||
|
|
3845415587 | ||
|
|
650b2b0cec | ||
|
|
4dcb8ab7fd | ||
|
|
40427ffede | ||
|
|
2567ecb808 | ||
|
|
ab79ab2790 | ||
|
|
9652a1cb90 | ||
|
|
a721c30354 | ||
|
|
207a2f37b9 | ||
|
|
aafb3b31f9 | ||
|
|
da7aec4451 | ||
|
|
9837139dad |
@@ -27,7 +27,7 @@ See `typst fonts --help` for more information on configuring fonts for `typst` t
|
|||||||
Below is a basic example for a simple resume:
|
Below is a basic example for a simple resume:
|
||||||
|
|
||||||
```typst
|
```typst
|
||||||
#import "@preview/modern-cv:0.1.0": *
|
#import "@preview/modern-cv:0.5.0": *
|
||||||
|
|
||||||
#show: resume.with(
|
#show: resume.with(
|
||||||
author: (
|
author: (
|
||||||
|
|||||||
@@ -56,3 +56,11 @@ cover-letter = "Сопроводительное письмо"
|
|||||||
attached = "Прилагается"
|
attached = "Прилагается"
|
||||||
curriculum-vitae = "Биографическая справка"
|
curriculum-vitae = "Биографическая справка"
|
||||||
sincerely = "Искренне"
|
sincerely = "Искренне"
|
||||||
|
|
||||||
|
[lang.zh]
|
||||||
|
resume = "简历"
|
||||||
|
dear = "亲爱的"
|
||||||
|
cover-letter = "求职信"
|
||||||
|
attached = "附件"
|
||||||
|
curriculum-vitae = "简历"
|
||||||
|
sincerely = "真诚的"
|
||||||
|
|||||||
158
lib.typ
158
lib.typ
@@ -6,6 +6,7 @@
|
|||||||
#let color-darkgray = rgb("#333333")
|
#let color-darkgray = rgb("#333333")
|
||||||
#let color-gray = rgb("#5d5d5d")
|
#let color-gray = rgb("#5d5d5d")
|
||||||
#let default-accent-color = rgb("#262F99")
|
#let default-accent-color = rgb("#262F99")
|
||||||
|
#let default-location-color = rgb("#333333")
|
||||||
|
|
||||||
// const icons
|
// const icons
|
||||||
#let linkedin-icon = box(
|
#let linkedin-icon = box(
|
||||||
@@ -14,8 +15,19 @@
|
|||||||
#let github-icon = box(
|
#let github-icon = box(
|
||||||
fa-icon("github", 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 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 homepage-icon = box(fa-icon("home", fill: color-darknight))
|
||||||
|
|
||||||
/// Helpers
|
/// Helpers
|
||||||
|
|
||||||
@@ -51,6 +63,50 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#let __coverletter_footer(author, language, date, lang_data) = {
|
||||||
|
set text(
|
||||||
|
fill: gray,
|
||||||
|
size: 8pt,
|
||||||
|
)
|
||||||
|
__justify_align_3[
|
||||||
|
#smallcaps[#date]
|
||||||
|
][
|
||||||
|
#smallcaps[
|
||||||
|
#if language == "zh" or language == "ja" [
|
||||||
|
#author.firstname#author.lastname
|
||||||
|
] else [
|
||||||
|
#author.firstname#sym.space#author.lastname
|
||||||
|
]
|
||||||
|
#sym.dot.c
|
||||||
|
#linguify("cover-letter", from: lang_data)
|
||||||
|
]
|
||||||
|
][
|
||||||
|
#counter(page).display()
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
#let __resume_footer(author, language, lang_data, date) = {
|
||||||
|
set text(
|
||||||
|
fill: gray,
|
||||||
|
size: 8pt,
|
||||||
|
)
|
||||||
|
__justify_align_3[
|
||||||
|
#smallcaps[#date]
|
||||||
|
][
|
||||||
|
#smallcaps[
|
||||||
|
#if language == "zh" or language == "ja" [
|
||||||
|
#author.firstname#author.lastname
|
||||||
|
] else [
|
||||||
|
#author.firstname#sym.space#author.lastname
|
||||||
|
]
|
||||||
|
#sym.dot.c
|
||||||
|
#linguify("resume", from: lang_data)
|
||||||
|
]
|
||||||
|
][
|
||||||
|
#counter(page).display()
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
/// Show a link with an icon, specifically for Github projects
|
/// Show a link with an icon, specifically for Github projects
|
||||||
/// *Example*
|
/// *Example*
|
||||||
/// #example(`resume.github-link("DeveloperPaul123/awesome-resume")`)
|
/// #example(`resume.github-link("DeveloperPaul123/awesome-resume")`)
|
||||||
@@ -134,7 +190,9 @@
|
|||||||
date: datetime.today().display("[month repr:long] [day], [year]"),
|
date: datetime.today().display("[month repr:long] [day], [year]"),
|
||||||
accent-color: default-accent-color,
|
accent-color: default-accent-color,
|
||||||
colored-headers: true,
|
colored-headers: true,
|
||||||
|
show-footer: true,
|
||||||
language: "en",
|
language: "en",
|
||||||
|
font: ("Source Sans Pro", "Source Sans 3"),
|
||||||
body,
|
body,
|
||||||
) = {
|
) = {
|
||||||
if type(accent-color) == "string" {
|
if type(accent-color) == "string" {
|
||||||
@@ -149,7 +207,7 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
set text(
|
set text(
|
||||||
font: ("Source Sans Pro", "Source Sans 3"),
|
font: font,
|
||||||
lang: language,
|
lang: language,
|
||||||
size: 11pt,
|
size: 11pt,
|
||||||
fill: color-darkgray,
|
fill: color-darkgray,
|
||||||
@@ -159,27 +217,7 @@
|
|||||||
set page(
|
set page(
|
||||||
paper: "a4",
|
paper: "a4",
|
||||||
margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm),
|
margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm),
|
||||||
footer: [
|
footer: if show-footer [#__resume_footer(author, language, lang_data, date)] else [],
|
||||||
#set text(
|
|
||||||
fill: gray,
|
|
||||||
size: 8pt,
|
|
||||||
)
|
|
||||||
#__justify_align_3[
|
|
||||||
#smallcaps[#date]
|
|
||||||
][
|
|
||||||
#smallcaps[
|
|
||||||
#if language == "zh" or language == "ja" [
|
|
||||||
#author.firstname#author.lastname
|
|
||||||
] else [
|
|
||||||
#author.firstname#sym.space#author.lastname
|
|
||||||
]
|
|
||||||
#sym.dot.c
|
|
||||||
#linguify("resume", from: lang_data)
|
|
||||||
]
|
|
||||||
][
|
|
||||||
#counter(page).display()
|
|
||||||
]
|
|
||||||
],
|
|
||||||
footer-descent: 0pt,
|
footer-descent: 0pt,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -196,6 +234,7 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
show heading.where(level: 1): it => [
|
show heading.where(level: 1): it => [
|
||||||
|
|
||||||
#set block(
|
#set block(
|
||||||
above: 1em,
|
above: 1em,
|
||||||
below: 1em,
|
below: 1em,
|
||||||
@@ -214,6 +253,7 @@
|
|||||||
#text[#strong[#text(color)[#it.body.text]]]
|
#text[#strong[#text(color)[#it.body.text]]]
|
||||||
#box(width: 1fr, line(length: 100%))
|
#box(width: 1fr, line(length: 100%))
|
||||||
]
|
]
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
show heading.where(level: 2): it => {
|
show heading.where(level: 2): it => {
|
||||||
@@ -275,7 +315,7 @@
|
|||||||
let address = {
|
let address = {
|
||||||
set text(
|
set text(
|
||||||
size: 9pt,
|
size: 9pt,
|
||||||
weight: "bold",
|
weight: "regular",
|
||||||
)
|
)
|
||||||
align(center)[
|
align(center)[
|
||||||
#if ("address" in author) [
|
#if ("address" in author) [
|
||||||
@@ -297,6 +337,11 @@
|
|||||||
)
|
)
|
||||||
#block[
|
#block[
|
||||||
#align(horizon)[
|
#align(horizon)[
|
||||||
|
#if ("birth" in author) [
|
||||||
|
#birth-icon
|
||||||
|
#box[#text(author.birth)]
|
||||||
|
#separator
|
||||||
|
]
|
||||||
#if ("phone" in author) [
|
#if ("phone" in author) [
|
||||||
#phone-icon
|
#phone-icon
|
||||||
#box[#text(author.phone)]
|
#box[#text(author.phone)]
|
||||||
@@ -306,6 +351,11 @@
|
|||||||
#email-icon
|
#email-icon
|
||||||
#box[#link("mailto:" + author.email)[#author.email]]
|
#box[#link("mailto:" + author.email)[#author.email]]
|
||||||
]
|
]
|
||||||
|
#if ("homepage" in author) [
|
||||||
|
#separator
|
||||||
|
#homepage-icon
|
||||||
|
#box[#link(author.homepage)[#author.homepage]]
|
||||||
|
]
|
||||||
#if ("github" in author) [
|
#if ("github" in author) [
|
||||||
#separator
|
#separator
|
||||||
#github-icon
|
#github-icon
|
||||||
@@ -315,9 +365,25 @@
|
|||||||
#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.linkedin]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
#if ("twitter" in author) [
|
||||||
|
#separator
|
||||||
|
#twitter-icon
|
||||||
|
#box[#link("https://twitter.com/" + author.twitter)[\@#author.twitter]]
|
||||||
|
]
|
||||||
|
#if ("scholar" in author) [
|
||||||
|
#let fullname = str(author.firstname + " " + author.lastname)
|
||||||
|
#separator
|
||||||
|
#google-scholar-icon
|
||||||
|
#box[#link("https://scholar.google.com/citations?user=" + author.scholar)[#fullname]]
|
||||||
|
]
|
||||||
|
#if ("orcid" in author) [
|
||||||
|
#separator
|
||||||
|
#orcid-icon
|
||||||
|
#box[#link("https://orcid.org/" + author.orcid)[#author.orcid]]
|
||||||
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@@ -349,16 +415,30 @@
|
|||||||
/// - location (string): The location of the resume entry
|
/// - location (string): The location of the resume entry
|
||||||
/// - date (string): The date of the resume entry, this can be a range (e.g. "Jan 2020 - Dec 2020")
|
/// - date (string): The date of the resume entry, this can be a range (e.g. "Jan 2020 - Dec 2020")
|
||||||
/// - description (content): The body of the resume entry
|
/// - description (content): The body of the resume entry
|
||||||
|
/// - title-link (string): The link to use for the title (can be none)
|
||||||
|
/// - accent-color (color): Override the accent color of the resume-entry
|
||||||
|
/// - location-color (color): Override the default color of the "location" for a resume entry.
|
||||||
#let resume-entry(
|
#let resume-entry(
|
||||||
title: none,
|
title: none,
|
||||||
location: "",
|
location: "",
|
||||||
date: "",
|
date: "",
|
||||||
description: "",
|
description: "",
|
||||||
|
title-link: none,
|
||||||
accent-color: default-accent-color,
|
accent-color: default-accent-color,
|
||||||
|
location-color: default-location-color,
|
||||||
) = {
|
) = {
|
||||||
|
let title-content
|
||||||
|
if type(title-link) == "string" {
|
||||||
|
title-content = link(title-link)[#title]
|
||||||
|
} else {
|
||||||
|
title-content = title
|
||||||
|
}
|
||||||
|
|
||||||
pad[
|
pad[
|
||||||
#justified-header(title, location)
|
#justified-header(title-content, location)
|
||||||
#secondary-justified-header(description, date)
|
#if description != "" or date != "" [
|
||||||
|
#secondary-justified-header(description, date)
|
||||||
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,6 +507,8 @@
|
|||||||
date: datetime.today().display("[month repr:long] [day], [year]"),
|
date: datetime.today().display("[month repr:long] [day], [year]"),
|
||||||
accent-color: default-accent-color,
|
accent-color: default-accent-color,
|
||||||
language: "en",
|
language: "en",
|
||||||
|
font: ("Source Sans Pro", "Source Sans 3"),
|
||||||
|
show-footer: true,
|
||||||
body,
|
body,
|
||||||
) = {
|
) = {
|
||||||
if type(accent-color) == "string" {
|
if type(accent-color) == "string" {
|
||||||
@@ -442,7 +524,7 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
set text(
|
set text(
|
||||||
font: ("Source Sans Pro", "Source Sans 3"),
|
font: font,
|
||||||
lang: language,
|
lang: language,
|
||||||
size: 11pt,
|
size: 11pt,
|
||||||
fill: color-darkgray,
|
fill: color-darkgray,
|
||||||
@@ -452,27 +534,7 @@
|
|||||||
set page(
|
set page(
|
||||||
paper: "a4",
|
paper: "a4",
|
||||||
margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm),
|
margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm),
|
||||||
footer: [
|
footer: if show-footer [#__coverletter_footer(author, language, date, lang_data)] else [],
|
||||||
#set text(
|
|
||||||
fill: gray,
|
|
||||||
size: 8pt,
|
|
||||||
)
|
|
||||||
#__justify_align_3[
|
|
||||||
#smallcaps[#date]
|
|
||||||
][
|
|
||||||
#smallcaps[
|
|
||||||
#if language == "zh" or language == "ja" [
|
|
||||||
#author.firstname#author.lastname
|
|
||||||
] else [
|
|
||||||
#author.firstname#sym.space#author.lastname
|
|
||||||
]
|
|
||||||
#sym.dot.c
|
|
||||||
#linguify("cover-letter", from: lang_data)
|
|
||||||
]
|
|
||||||
][
|
|
||||||
#counter(page).display()
|
|
||||||
]
|
|
||||||
],
|
|
||||||
footer-descent: 0pt,
|
footer-descent: 0pt,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#import "lib.typ"
|
#import "lib.typ"
|
||||||
#import "@preview/tidy:0.2.0"
|
#import "@preview/tidy:0.3.0"
|
||||||
|
|
||||||
#let docs = tidy.parse-module(
|
#let docs = tidy.parse-module(
|
||||||
read("lib.typ"),
|
read("lib.typ"),
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
#import "@preview/modern-cv:0.4.0": *
|
#import "@preview/modern-cv:0.6.0": *
|
||||||
|
|
||||||
#show: coverletter.with(
|
#show: coverletter.with(
|
||||||
author: (
|
author: (
|
||||||
firstname: "John",
|
firstname: "John",
|
||||||
lastname: "Smith",
|
lastname: "Smith",
|
||||||
email: "js@gmail.com",
|
email: "js@gmail.com",
|
||||||
|
homepage: "https://example.com",
|
||||||
phone: "(+1) 111-111-1111",
|
phone: "(+1) 111-111-1111",
|
||||||
github: "DeveloperPaul123",
|
github: "DeveloperPaul123",
|
||||||
linkedin: "John Smith",
|
linkedin: "John Smith",
|
||||||
@@ -16,6 +17,8 @@
|
|||||||
),
|
),
|
||||||
profile-picture: image("./profile.png"),
|
profile-picture: image("./profile.png"),
|
||||||
language: "en",
|
language: "en",
|
||||||
|
font: "Times New Roman",
|
||||||
|
// show-footer: false, // Uncomment to hide footer
|
||||||
)
|
)
|
||||||
|
|
||||||
#hiring-entity-info(entity-info: (
|
#hiring-entity-info(entity-info: (
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
#import "@preview/modern-cv:0.4.0": *
|
#import "@preview/modern-cv:0.6.0": *
|
||||||
|
|
||||||
#show: coverletter.with(
|
#show: coverletter.with(
|
||||||
author: (
|
author: (
|
||||||
firstname: "John",
|
firstname: "John",
|
||||||
lastname: "Smith",
|
lastname: "Smith",
|
||||||
email: "js@gmail.com",
|
email: "js@gmail.com",
|
||||||
|
homepage: "https://example.com",
|
||||||
phone: "(+1) 111-111-1111",
|
phone: "(+1) 111-111-1111",
|
||||||
github: "DeveloperPaul123",
|
github: "DeveloperPaul123",
|
||||||
linkedin: "John Smith",
|
linkedin: "John Smith",
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
#import "@preview/modern-cv:0.4.0": *
|
#import "@preview/modern-cv:0.6.0": *
|
||||||
|
|
||||||
#show: resume.with(
|
#show: resume.with(
|
||||||
author: (
|
author: (
|
||||||
firstname: "John",
|
firstname: "John",
|
||||||
lastname: "Smith",
|
lastname: "Smith",
|
||||||
email: "js@example.com",
|
email: "js@example.com",
|
||||||
|
homepage: "https://example.com",
|
||||||
phone: "(+1) 111-111-1111",
|
phone: "(+1) 111-111-1111",
|
||||||
github: "DeveloperPaul123",
|
github: "DeveloperPaul123",
|
||||||
|
twitter: "typstapp",
|
||||||
|
scholar: "",
|
||||||
|
orcid: "0000-0000-0000-000X",
|
||||||
|
birth: "January 1, 1990",
|
||||||
linkedin: "Example",
|
linkedin: "Example",
|
||||||
address: "111 Example St. Example City, EX 11111",
|
address: "111 Example St. Example City, EX 11111",
|
||||||
positions: (
|
positions: (
|
||||||
@@ -18,6 +23,7 @@
|
|||||||
date: datetime.today().display(),
|
date: datetime.today().display(),
|
||||||
language: "en",
|
language: "en",
|
||||||
colored-headers: true,
|
colored-headers: true,
|
||||||
|
show-footer: false,
|
||||||
)
|
)
|
||||||
|
|
||||||
= Experience
|
= Experience
|
||||||
@@ -27,6 +33,7 @@
|
|||||||
location: "Example City, EX",
|
location: "Example City, EX",
|
||||||
date: "2019 - Present",
|
date: "2019 - Present",
|
||||||
description: "Example, Inc.",
|
description: "Example, Inc.",
|
||||||
|
title-link: "https://github.com/DeveloperPaul123",
|
||||||
)
|
)
|
||||||
|
|
||||||
#resume-item[
|
#resume-item[
|
||||||
@@ -48,6 +55,17 @@
|
|||||||
- #lorem(25)
|
- #lorem(25)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#resume-entry(
|
||||||
|
title: "Intern",
|
||||||
|
location: "Example City, EX",
|
||||||
|
)
|
||||||
|
|
||||||
|
#resume-item[
|
||||||
|
- #lorem(20)
|
||||||
|
- #lorem(15)
|
||||||
|
- #lorem(25)
|
||||||
|
]
|
||||||
|
|
||||||
= Projects
|
= Projects
|
||||||
|
|
||||||
#resume-entry(
|
#resume-entry(
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "modern-cv"
|
name = "modern-cv"
|
||||||
version = "0.4.0"
|
version = "0.6.0"
|
||||||
compiler = "0.11.0"
|
compiler = "0.11.0"
|
||||||
entrypoint = "lib.typ"
|
entrypoint = "lib.typ"
|
||||||
authors = ["Paul Tsouchlos <https://github.com/DeveloperPaul123>"]
|
authors = ["Paul Tsouchlos <https://github.com/DeveloperPaul123>"]
|
||||||
|
|||||||
Reference in New Issue
Block a user