├── README.md ├── image.png ├── main.pdf ├── main.png ├── main.typ └── template.typ /README.md: -------------------------------------------------------------------------------- 1 | # uniquecv-typst 2 | 3 | > 一个使用 [Typst](https://typst.app/) 编写的简历模板,基于 [uniquecv](https://github.com/dyinnz/uniquecv) 4 | 5 | 6 | ## 使用 7 | 8 | ### 在线 9 | 10 | Typst提供了非常好用的 [webapp](https://typst.app) 11 | - 创建 project 12 | - 复制 main.typ 和 template.typ 到项目目录 13 | - 在线编译 14 | 15 | ### 本地 16 | 17 | - 安装 Typst 18 | 19 | - macOS/Linux: `brew install typst` 20 | - Arch Linux: `pacman -S typst` 21 | 22 | - 安装图标字体 fontawesome(可参考 [install-the-fonts](https://github.com/typst/packages/tree/main/packages/preview/fontawesome/0.1.0#install-the-fonts) ) 23 | 24 | - clone 本仓库 25 | 26 | - 编译(可参考[官方 Usage ](https://github.com/typst/typst)) 27 | 28 | ``` 29 | typst compile path/to/main.typ path/to/output.pdf 30 | ``` 31 | 32 | ### 效果 33 | 34 | ![效果图](https://github.com/gaoachao/uniquecv-typst/raw/main/image.png) 35 | 36 | ## 友情链接 37 | 38 | - [uniquecv-latex](https://github.com/dyinnz/uniquecv) 39 | - [werifu: HUST-typst-template](https://github.com/werifu/HUST-typst-template) 40 | - [mgt: typst-preview-vscode](https://github.com/Enter-tainer/typst-preview-vscode) 41 | -------------------------------------------------------------------------------- /image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaoachao/uniquecv-typst/17927a9f7f671c4436e024389bb50847d14553b1/image.png -------------------------------------------------------------------------------- /main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaoachao/uniquecv-typst/17927a9f7f671c4436e024389bb50847d14553b1/main.pdf -------------------------------------------------------------------------------- /main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaoachao/uniquecv-typst/17927a9f7f671c4436e024389bb50847d14553b1/main.png -------------------------------------------------------------------------------- /main.typ: -------------------------------------------------------------------------------- 1 | #import "template.typ": * 2 | 3 | // 让标题变成cv-blue 4 | #show heading: set text(cv-blue) 5 | // 项目具体描述的item设定 6 | #set list( 7 | indent: 1em, 8 | body-indent: 0.5em, 9 | ) 10 | 11 | // 个人信息 12 | #show: project.with(name: "姓名") 13 | #info( 14 | phone: [(+86) 155-5555-5555], 15 | email: link("username@gmail.com"), 16 | github: link("github.com/username"), 17 | ) 18 | 19 | = 教育背景 20 | #education( 21 | school: [华中科技大学], 22 | major: [职业:主播], 23 | degree: [本科], 24 | date: [2021 年 -- 2025 年], 25 | grade: [成绩:年级前 *50%*], 26 | English: [英语: CET-6], 27 | )[] 28 | 29 | = 专业技能 30 | C/C++、Rust、Typst、Vue、React、JavaScript、TypeScript、CSS、Golang、Linux、Git、数据结构与算法、计算机网络 31 | 32 | = 获奖情况 33 | #prize(( 34 | ( 35 | grade: [一等奖], 36 | game: [全国大学生数学建模竞赛], 37 | date: [2021 年 10 月 -- 2021 年 12 月], 38 | ), 39 | ( 40 | grade: [一个名字很长的奖项], 41 | game: [一个名字很长的软件开发大赛], 42 | date: [2021 年 10 月 -- 2021 年 12 月], 43 | ), 44 | ( 45 | grade: [二等奖], 46 | game: [全国大学生数学建模竞赛], 47 | date: [2021 年 10 月 -- 2021 年 12 月], 48 | ), 49 | )) 50 | = 项目经历 51 | #proj-exps(( 52 | ( 53 | name: [名字巨长无比的分布式流体计算项目], 54 | type: [导师项目], 55 | tech: [性能优化、并行计算、C/C++], 56 | date: [2021 年 02 月 -- 2021 年 04 月], 57 | description: [ 58 | 将一个单机的流体计算程序移植到*多机平台* 59 | - 计算节点内部使用 OpenMP 并行化 60 | - 计算节点间使用 MPI 并行化 61 | - 单机优化性能达 2x,多机接近线性加速比 62 | ], 63 | ), 64 | ( 65 | name: [C--Compiler], 66 | type: [个人项目], 67 | tech: [性能优化、并行计算、C/C++], 68 | date: [2021 年 02 月 -- 2021 年 04 月], 69 | description: [ 70 | 实现了一个狗屁不通编译器 71 | - 支持C11标准大部分标准 72 | - 实现了类似 lex/flex 的词法解析器生成工具 73 | - 实现了类似 yacc/bison 的语法解析器生成工具 74 | ], 75 | ), 76 | ( 77 | name: [UniqueStudio--SSO], 78 | type: [团队项目], 79 | tech: [golang、React、Typescript], 80 | date: [2022 年 06 月 -- 2022 年 09 月], 81 | description: [ 82 | UniqueStudio单点登录系统和统一的权限控制系统 83 | - 按照 CAS 的标准实现 84 | - 支持手机、邮箱等多种登录方式 85 | ], 86 | ), 87 | ( 88 | name: [电棍活字印刷合成器], 89 | type: [整活项目], 90 | tech: [Python、OpenCV], 91 | date: [2022 年 06 月 -- 2022 年 09 月], 92 | description: box(height: 6em)[ 93 | #columns(2)[ 94 | - 将汉字和英文字母转换为汉语拼音,在语音库内查找比对并进行拼接。 95 | - 可以适当调整内置效果器的参数,以达到更丰富的整活效果。 96 | - 大家好啊,我是说的道理。今天来点大家想看的东西 97 | - 奥利安费!All in! 98 | ] 99 | ], 100 | ), 101 | )) 102 | = 校园经历 103 | #prize(( 104 | (grade: [], game: [华中科技大学联创团队], date: [2020 年 09 月 -- 至今]), 105 | )) 106 | -------------------------------------------------------------------------------- /template.typ: -------------------------------------------------------------------------------- 1 | #import "@preview/fontawesome:0.5.0" as fa 2 | // 小标题的蓝色 3 | #let cv-blue = rgb(56, 115, 192) 4 | // 日期的灰色 5 | #let gray = rgb(128, 128, 128) 6 | 7 | #let en-font = "New Computer Modern" 8 | #let cn-font = "Source Han Serif SC" 9 | #let cn-italic-font = "KaiTi" 10 | 11 | #let font-list = (en-font, cn-font) 12 | #let italic-font-list = (en-font, cn-italic-font) 13 | 14 | #let project( 15 | name: "", 16 | body, 17 | font-list: font-list, 18 | italic-font-list: italic-font-list, 19 | ) = { 20 | // 标题 21 | set document(title: name) 22 | // 页边距设定 23 | set page( 24 | paper: "a4", 25 | numbering: none, 26 | margin: (top: 2cm, bottom: 2.5cm, left: 2.5cm, right: 2.5cm), 27 | ) 28 | set text( 29 | font: font-list, 30 | lang: "zh", 31 | region: "cn", 32 | ) 33 | 34 | set par( 35 | justify: true, 36 | linebreaks: "optimized", 37 | leading: 0.8em 38 | ) 39 | // 行间距 40 | // show par: set block(spacing: 1em) 41 | // 段间距 42 | 43 | show emph: it => [ 44 | #set text(font: italic-font-list) 45 | #it 46 | ] 47 | show heading.where(level: 1): it => block(width: 100%)[ 48 | #it 49 | #place(dy: 0.3em, left)[#line(length: 100%, stroke: 0.7pt + cv-blue)] 50 | ] 51 | show heading: set block(spacing: 0.72em) 52 | // 设置标题(名字)字体 53 | align(center)[ 54 | #block(text(weight: 400, 2.4em, name)) 55 | ] 56 | 57 | body 58 | } 59 | 60 | // 日期 61 | #let date-style(y) = { 62 | set text(fill: gray) 63 | y 64 | } 65 | 66 | // 个人信息 67 | #let info(phone: "", email: "", github: "") = { 68 | set align(center) 69 | grid(columns: 3, column-gutter: 5pt)[ 70 | #fa.fa-phone() #phone 71 | ][ 72 | #fa.fa-envelope() #email 73 | ][ 74 | #fa.fa-github() #github 75 | ] 76 | } 77 | 78 | // 教育背景 79 | #let education( 80 | school: [], 81 | major: [], 82 | degree: [], 83 | date: [], 84 | grade: [], 85 | English: [], 86 | body, 87 | ) = { 88 | [ 89 | *#school* 90 | #h(10pt)#major 91 | #h(10pt)#degree 92 | #h(1fr) #date-style(date) 93 | 94 | #grade 95 | #h(10pt)#English 96 | ] 97 | body 98 | } 99 | 100 | #let prize(data) = { 101 | let cells = () 102 | for d in data { 103 | cells.push(strong(d.at("game", default: ""))) 104 | cells.push(strong(d.at("grade", default: ""))) 105 | cells.push(date-style(d.at("date", default: ""))) 106 | } 107 | [ 108 | #v(-0.4em) 109 | #table( 110 | columns: (1fr, 1fr, auto), 111 | inset: (x: 0pt, y: 0.4em), 112 | stroke: none, 113 | ..cells, 114 | ) 115 | #v(-0.4em) 116 | ] 117 | } 118 | 119 | // 项目经历 120 | #let proj-exps(exps) = { 121 | let cells = () 122 | for exp in exps { 123 | cells.push(strong(exp.at("name", default: []))) 124 | cells.push(strong(exp.at("type", default: []))) 125 | cells.push(date-style(exp.at("date", default: []))) 126 | cells.push( 127 | table.cell( 128 | colspan: 3, 129 | [ 130 | #if "tech" in exp [ 131 | #emph(exp.tech) 132 | #linebreak() 133 | ] 134 | #exp.at("description", default: []) 135 | ], 136 | ), 137 | ) 138 | } 139 | [ 140 | #v(-0.4em) 141 | #table( 142 | columns: (auto, 1fr, auto), 143 | column-gutter: 1em, 144 | inset: (x: 0pt, y: 0.4em), 145 | stroke: none, 146 | ..cells, 147 | ) 148 | #v(-0.4em) 149 | ] 150 | } 151 | --------------------------------------------------------------------------------