-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathresume.typ
More file actions
79 lines (65 loc) · 1.76 KB
/
resume.typ
File metadata and controls
79 lines (65 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Generic Template for a CV, falls under the MIT License specified in the same folder as this file.
#let head(name, headlines) = {
heading(text(size: 1.5em, upper(name)), level: 1)
v(0.3cm)
par(leading: 0.8em)[
#for headline in headlines {
headline.join(" " + sym.diamond.stroked + " ")
linebreak()
}
]
}
#let section(title, body) = {
heading(upper(title), level: 2)
line(length: 100%)
pad(left: 1cm, body)
}
#let resume(doc, name, headlines: (), experiences: (), custom: (), avatar: none) = {
set page(margin: (top: 0.6in, right: 0.75in, bottom: 0.6in, left: 0.75in))
set text(font: "New Computer Modern", size: 11pt)
// show raw: set text(font: "New Computer Modern Mono")
align(center)[
#if avatar == none {
head(name, headlines)
} else {
grid(
columns: (8fr, 2fr),
align: center,
head(name, headlines), box(image(avatar, width: 3.5cm), radius: 50%, clip: true, stroke: black),
)
}
]
linebreak()
for experience in experiences {
section(experience.title)[
#for event in experience.events {
grid(
columns: (1.5fr, 1fr),
align: (left, right),
strong(event.title)
+ if (event.location != none) {
", " + event.location
},
emph(
event.date.start
+ if (event.date.end != none) {
" - " + event.date.end
},
),
)
v(-5pt)
grid(
columns: (2fr, 1fr),
align: (left, right),
event.description, event.remark,
)
v(0.5cm)
}
]
}
for custom_section in custom {
section(custom_section.title, custom_section.body)
}
// Rest of the document
doc
}