|
| 1 | +# Typst-CV-Resume |
| 2 | + |
| 3 | +This Typst CV template is inspired by the Latex template [Deedy-Resume](https://github.com/deedy/Deedy-Resume). You can use it for both industry and academia. |
| 4 | + |
| 5 | +If you want to find a cover letter template, you can check out [modernpro-coverletter](https://github.com/jxpeng98/typst-coverletter). |
| 6 | + |
| 7 | +## How to start |
| 8 | + |
| 9 | +### Use Typst CLI |
| 10 | + |
| 11 | +If you use Typst CLI, you can use the following command to create a new project: |
| 12 | + |
| 13 | +```bash |
| 14 | +typst init @preview/modernpro-cv |
| 15 | +``` |
| 16 | + |
| 17 | +>If you use the typst version `<0.13.0`, you need to use the following code to initial your project. |
| 18 | +> `typst init @preview/modernpro-cv:1.0.2` |
| 19 | +
|
| 20 | +It will create a folder named `modernpro-cv` with the following structure: |
| 21 | + |
| 22 | +```plain |
| 23 | +modernpro-cv |
| 24 | +├── bib.bib |
| 25 | +├── cv_double.typ |
| 26 | +└── cv_single.typ |
| 27 | +``` |
| 28 | + |
| 29 | +If you want to use the single-column version, you can modify the template `cv-single.typ`. If you prefer the two-column version, you can use the `cv-double.typ`. |
| 30 | + |
| 31 | +**Note:** The `bib.bib` is the bibliography file. You can modify it to add your publications. |
| 32 | + |
| 33 | +### Manual Download |
| 34 | + |
| 35 | +If you want to manually download the template, you can download `modernpro-cv-{version}.zip` from the [release page](https://github.com/jxpeng98/Typst-CV-Resume/releases) |
| 36 | + |
| 37 | +### Typst website |
| 38 | + |
| 39 | +If you want to use the template via [Typst](https://typst.app), You can `start from template` and search for `modernpro-cv`. |
| 40 | + |
| 41 | +## How to use the template |
| 42 | + |
| 43 | +### The arguments |
| 44 | + |
| 45 | +The template has the following arguments: |
| 46 | +| Argument | Description | Default | |
| 47 | +| --- | --- | --- | |
| 48 | +| `font-type` | The font type. You can choose any supported font in your system. | `Times New Roman` | |
| 49 | +| `continue-header` | Whether to continue the header on the follwing pages. | `false` | |
| 50 | +| `margin` | Override the page margin. When omitted, the template falls back to the built-in layout (1.25 cm sides with layout-specific top/bottom). | `none` | |
| 51 | +| `name` | Your name. | `""` | |
| 52 | +| `address` | Your address. | `""` | |
| 53 | +| `lastupdated` | Whether to show the last updated date. | `true` | |
| 54 | +| `pagecount` | Whether to show the page count. | `true` | |
| 55 | +| `date` | The date of the CV. | `today` | |
| 56 | +| `contacts` | contact details, e.g phone number, email, etc. | `(text: "", link: "")` | |
| 57 | + |
| 58 | +### Start single column version |
| 59 | + |
| 60 | +If you want to use the single column version, pick the starter that matches how much customization you need. |
| 61 | + |
| 62 | +#### Option 1 – Quick template (fixed order) |
| 63 | + |
| 64 | +Use this when you are happy with the default section sequence. |
| 65 | + |
| 66 | +```Typst |
| 67 | +#import "@preview/modernpro-cv:1.3.0": * |
| 68 | +#import "@preview/fontawesome:0.6.0": * |
| 69 | +
|
| 70 | +#show: cv-single.with( |
| 71 | + font-type: "PT Serif", |
| 72 | + continue-header: "false", |
| 73 | + margin: (left: 1.75cm, right: 1.75cm, top: 2cm, bottom: 2cm), |
| 74 | + name: [], |
| 75 | + address: [], |
| 76 | + lastupdated: "true", |
| 77 | + pagecount: "true", |
| 78 | + date: "2024-07-03", |
| 79 | + contacts: ( |
| 80 | + (text: [#fa-icon("location-dot") UK]), |
| 81 | + (text: [#fa-icon("mobile") 123-456-789], link: "tel:123-456-789"), |
| 82 | + (text: [#fa-icon("link") example.com], link: "https://www.example.com"), |
| 83 | + ) |
| 84 | +) |
| 85 | +
|
| 86 | +#section("About") |
| 87 | +#descript[#lorem(40)] |
| 88 | +#sectionsep |
| 89 | +
|
| 90 | +#section("Experience") |
| 91 | +#job( |
| 92 | + position: "Software Engineer", |
| 93 | + institution: [#lorem(3)], |
| 94 | + location: "UK", |
| 95 | + date: "2022-now", |
| 96 | +) |
| 97 | +#sectionsep |
| 98 | +
|
| 99 | +#section("Education") |
| 100 | +#education( |
| 101 | + institution: [University of Typst], |
| 102 | + major: [Computer Science], |
| 103 | + date: "2015-2019", |
| 104 | + location: "UK", |
| 105 | +) |
| 106 | +``` |
| 107 | + |
| 108 | +#### Option 2 – Flexible template (custom order or hidden sections) |
| 109 | + |
| 110 | +Choose this when you want to reorder, remove, or conditionally render sections without editing them in multiple places. |
| 111 | + |
| 112 | +```Typst |
| 113 | +#import "@preview/modernpro-cv:1.3.0": * |
| 114 | +#import "@preview/fontawesome:0.6.0": * |
| 115 | +
|
| 116 | +#show: cv-single.with( |
| 117 | + font-type: "PT Serif", |
| 118 | + continue-header: "false", |
| 119 | + margin: (left: 1.75cm, right: 1.75cm, top: 2cm, bottom: 2cm), |
| 120 | + name: [], |
| 121 | + address: [], |
| 122 | + lastupdated: "true", |
| 123 | + pagecount: "true", |
| 124 | + date: "2024-07-03", |
| 125 | + contacts: ( |
| 126 | + (text: [#fa-icon("location-dot") UK]), |
| 127 | + (text: [#fa-icon("mobile") 123-456-789], link: "tel:123-456-789"), |
| 128 | + (text: [#fa-icon("link") example.com], link: "https://www.example.com"), |
| 129 | + ) |
| 130 | +) |
| 131 | +
|
| 132 | +#let sections = ( |
| 133 | + section-block("about", title: "About")[ |
| 134 | + #descript[#lorem(40)] |
| 135 | + ], |
| 136 | + section-block("experience", title: "Experience")[ |
| 137 | + #job( |
| 138 | + position: "Software Engineer", |
| 139 | + institution: [#lorem(3)], |
| 140 | + location: "UK", |
| 141 | + date: "2022-now", |
| 142 | + ) |
| 143 | + ], |
| 144 | + section-block("education", title: "Education")[ |
| 145 | + #education( |
| 146 | + institution: [University of Typst], |
| 147 | + major: [Computer Science], |
| 148 | + date: "2015-2019", |
| 149 | + location: "UK", |
| 150 | + ) |
| 151 | + ], |
| 152 | +) |
| 153 | +
|
| 154 | +#let section-order = ("about", "experience", "education") |
| 155 | +
|
| 156 | +#render-sections(sections: sections, order: section-order) |
| 157 | +``` |
| 158 | + |
| 159 | +Define each section once with `section-block`, then control the sequence by reordering `section-order`. Any sections not mentioned in `section-order` are rendered afterward by default (set `include-remaining: false` to skip them). |
| 160 | + |
| 161 | +### Start double column version |
| 162 | + |
| 163 | +The double column version is similar to the single column version. Pick the pattern you prefer for each column. |
| 164 | + |
| 165 | +#### Option 1 – Quick template (fixed order in each column) |
| 166 | + |
| 167 | +```Typst |
| 168 | +#import "@preview/modernpro-cv:1.3.0": * |
| 169 | +#import "@preview/fontawesome:0.6.0": * |
| 170 | +
|
| 171 | +#show: cv-double( |
| 172 | + font-type: "PT Sans", |
| 173 | + continue-header: "true", |
| 174 | + margin: (left: 1.5cm, right: 1.5cm, top: 2.2cm, bottom: 1.8cm), |
| 175 | + name: [#lorem(2)], |
| 176 | + address: [#lorem(4)], |
| 177 | + lastupdated: "true", |
| 178 | + pagecount: "true", |
| 179 | + date: "2024-07-03", |
| 180 | + contacts: ( |
| 181 | + (text: [#fa-icon("location-dot") UK]), |
| 182 | + (text: [#fa-icon("mobile") 123-456-789], link: "tel:123-456-789"), |
| 183 | + (text: [#fa-icon("link") example.com], link: "https://www.example.com"), |
| 184 | + ), |
| 185 | + left: [ |
| 186 | + #section("Profile") |
| 187 | + #descript[#lorem(30)] |
| 188 | + #sectionsep |
| 189 | +
|
| 190 | + #section("Skills") |
| 191 | + #oneline-title-item(title: "Languages", content: [Python, Typst]) |
| 192 | + #sectionsep |
| 193 | + ], |
| 194 | + right: [ |
| 195 | + #section("Experience") |
| 196 | + #job( |
| 197 | + position: "Software Engineer", |
| 198 | + institution: [#lorem(4)], |
| 199 | + location: "UK", |
| 200 | + date: "2022-now", |
| 201 | + ) |
| 202 | + #sectionsep |
| 203 | +
|
| 204 | + #section("Education") |
| 205 | + #education( |
| 206 | + institution: [University of Typst], |
| 207 | + major: [Computer Science], |
| 208 | + date: "2015-2019", |
| 209 | + location: "UK", |
| 210 | + ) |
| 211 | + ], |
| 212 | +) |
| 213 | +``` |
| 214 | + |
| 215 | +#### Option 2 – Flexible template (custom order or hidden sections) |
| 216 | + |
| 217 | +```Typst |
| 218 | +#import "@preview/modernpro-cv:1.3.0": * |
| 219 | +#import "@preview/fontawesome:0.6.0": * |
| 220 | +
|
| 221 | +#show: cv-double( |
| 222 | + font-type: "PT Sans", |
| 223 | + continue-header: "true", |
| 224 | + margin: (left: 1.5cm, right: 1.5cm, top: 2.2cm, bottom: 1.8cm), |
| 225 | + name: [#lorem(2)], |
| 226 | + address: [#lorem(4)], |
| 227 | + lastupdated: "true", |
| 228 | + pagecount: "true", |
| 229 | + date: "2024-07-03", |
| 230 | + contacts: ( |
| 231 | + (text: [#fa-icon("location-dot") UK]), |
| 232 | + (text: [#fa-icon("mobile") 123-456-789], link: "tel:123-456-789"), |
| 233 | + (text: [#fa-icon("link") example.com], link: "https://www.example.com"), |
| 234 | + ), |
| 235 | + left: [ |
| 236 | + #let left-sections = ( |
| 237 | + section-block("profile", title: "Profile")[ |
| 238 | + #descript[#lorem(30)] |
| 239 | + ], |
| 240 | + section-block("skills", title: "Skills")[ |
| 241 | + #oneline-title-item(title: "Languages", content: [Python, Typst]) |
| 242 | + ], |
| 243 | + ) |
| 244 | + #render-sections(sections: left-sections, order: ("profile", "skills")) |
| 245 | + ], |
| 246 | + right: [ |
| 247 | + #let right-sections = ( |
| 248 | + section-block("experience", title: "Experience")[ |
| 249 | + #job( |
| 250 | + position: "Software Engineer", |
| 251 | + institution: [#lorem(4)], |
| 252 | + location: "UK", |
| 253 | + date: "2022-now", |
| 254 | + ) |
| 255 | + ], |
| 256 | + section-block("education", title: "Education")[ |
| 257 | + #education( |
| 258 | + institution: [University of Typst], |
| 259 | + major: [Computer Science], |
| 260 | + date: "2015-2019", |
| 261 | + location: "UK", |
| 262 | + ) |
| 263 | + ], |
| 264 | + ) |
| 265 | +#render-sections(sections: right-sections, order: ("experience", "education")) |
| 266 | + ], |
| 267 | +) |
| 268 | +``` |
| 269 | + |
| 270 | +Adjust the `left-order` and `right-order` lists to change what appears first. Omit an id (and set `include-remaining: false` on `render-sections`) to hide the matching block entirely. |
| 271 | + |
| 272 | +### Start the CV |
| 273 | + |
| 274 | +Once you set up the arguments, you can start to add details to your CV / Resume. |
| 275 | + |
| 276 | +I preset the following functions for you to create different parts: |
| 277 | +| Function | Description | |
| 278 | +| --- | --- | |
| 279 | +| `#section("Section Name")` | Start a new section | |
| 280 | +| `#sectionsep` | End the section | |
| 281 | +|`#oneline-title-item(title: "", content: "")`| Add a one-line item (**Title:** content)| |
| 282 | +|`#oneline-two(entry1: "", entry2: "")`| Add a one-line item with two entries, aligned left and right| |
| 283 | +|`#descript("descriptions")`| Add a description for self-introduction| |
| 284 | +|`#award(award: "", date: "", institution: "")`| Add an award (**award**, *institution* *date*)| |
| 285 | +|`#education(institution: "", major: "", date: "", institution: "", core-modules: "")`| Add an education experience| |
| 286 | +|`#job(position: "", institution: "", location: "", date: "", description: [])`| Add a job experience (description is optional)| |
| 287 | +|`#twoline-item(entry1: "", entry2: "", entry3: "", entry4: "")`| Two line items, similar to education and job experiences| |
| 288 | +|`#references(references:())`| Add a reference list. In the `()`, you can add multi reference entries with the following format `(name: "", position: "", department: "", institution: "", address: "", email: "",),`| |
| 289 | +|`#show bibliography: none #bibliography("bib.bib")`| Add a bibliography. You can modify the `bib.bib` file to add your publications. **Note:** Keep this at the end of your CV| |
| 290 | +|`#section-block(id, title: none, separator: true)[…]`| Wrap a section body once, optionally supplying its heading and whether to add a trailing separator| |
| 291 | +|`#render-sections(sections: (), order: (), include-remaining: true)`| Render the prepared section blocks in the order you choose; any blocks not listed in `order` appear afterward when `include-remaining` is `true`| |
| 292 | + |
| 293 | +**Note:** Use `+ @ref` to display your publications. For example, |
| 294 | + |
| 295 | +```Typst |
| 296 | +#section("Publications") |
| 297 | +
|
| 298 | +// numbering list |
| 299 | ++ @quenouille1949approximate |
| 300 | ++ @quenouille1949approximate |
| 301 | +
|
| 302 | +// Keep this at the end |
| 303 | +#show bibliography: none |
| 304 | +#bibliography("bib.bib") |
| 305 | +``` |
| 306 | + |
| 307 | +## Preview |
| 308 | + |
| 309 | +### Single Column |
| 310 | + |
| 311 | + |
| 312 | + |
| 313 | +### Double Column |
| 314 | + |
| 315 | + |
| 316 | + |
| 317 | +## Legacy Version |
| 318 | + |
| 319 | +I redesigned the template and submitted the new version to Typst Universe. However, you can find the legacy version in the `legacy` folder if you prefer to use the multi-font setting. You can also download the `modernpro-cv-legacy.zip` from the [release page](https://github.com/jxpeng98/Typst-CV-Resume/releases). |
| 320 | + |
| 321 | +**Note:** The legacy version also has a cover letter template. You can use it with the CV template. |
| 322 | + |
| 323 | +## Cover Letter |
| 324 | + |
| 325 | +If you used the previous version of this template, you might know that I also provided a cover letter template. |
| 326 | + |
| 327 | +If you want to use a consistent cover letter with the new version of the CV template, you can find it from another repository [typst-coverletter](https://github.com/jxpeng98/typst-coverletter). |
| 328 | + |
| 329 | +you can also use the following code in the command line: |
| 330 | + |
| 331 | +```bash |
| 332 | +typst init modernpro-coverletter |
| 333 | +``` |
| 334 | + |
| 335 | +## License |
| 336 | + |
| 337 | +The template is released under the MIT License. For more information, please refer to the [LICENSE](https://github.com/jxpeng98/Typst-CV-Resume/blob/main/LICENSE) file. |
0 commit comments