Add resume-career template and migrate resume to resume-bp.
Introduce one-page career resume alongside the full BP resume, unify brand color across templates, and update monorepo docs and gitignore. Co-authored-by: Cursor <cursoragent@cursor.com>
11
.gitignore
vendored
@ -1,17 +1,22 @@
|
|||||||
# Typst 编译产物(示例 PDF 除外)
|
# Typst 编译产物(示例 PDF 除外)
|
||||||
*.pdf
|
*.pdf
|
||||||
!resume/sample.pdf
|
!resume-bp/sample.pdf
|
||||||
|
!resume-career/sample.pdf
|
||||||
!feasibility/sample.pdf
|
!feasibility/sample.pdf
|
||||||
|
|
||||||
# 本地定制简历(个人内容、照片、PDF,不提交)
|
# 本地定制简历(个人内容、照片、PDF,不提交)
|
||||||
resume/local/
|
resume-bp/local/*
|
||||||
|
!resume-bp/local/README.md
|
||||||
|
resume-career/local/*
|
||||||
|
!resume-career/local/README.md
|
||||||
|
|
||||||
# IDE / 编辑器本地配置
|
# IDE / 编辑器本地配置
|
||||||
.cursor/
|
.cursor/
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
# 本地照片(可选提交)
|
# 本地照片(可选提交)
|
||||||
# resume/assets/profile.jpeg
|
# resume-bp/assets/profile.jpeg
|
||||||
|
# resume-career/assets/profile.jpeg
|
||||||
|
|
||||||
# 系统文件
|
# 系统文件
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|||||||
@ -4,7 +4,8 @@ GreLin 内部 Typst 模板库,按文档类型分目录维护。目录结构如
|
|||||||
|
|
||||||
| 文件夹 | 说明 | 入口文件 |
|
| 文件夹 | 说明 | 入口文件 |
|
||||||
|--------|------|----------|
|
|--------|------|----------|
|
||||||
| [`resume/`](resume/) | 团队简历 | `cv.typ` |
|
| [`resume-bp/`](resume-bp/) | 融资 BP 团队简历(完整版,含证件照) | `cv.typ` |
|
||||||
|
| [`resume-career/`](resume-career/) | 求职 / 个人主页简历(精简一页) | `cv.typ`(内容 `data/config.typ`) |
|
||||||
| [`feasibility/`](feasibility/) | 可行性研究报告 | `report.typ`(正文编辑 `feasibility/content/report.md`) |
|
| [`feasibility/`](feasibility/) | 可行性研究报告 | `report.typ`(正文编辑 `feasibility/content/report.md`) |
|
||||||
|
|
||||||
## 环境要求
|
## 环境要求
|
||||||
@ -14,9 +15,9 @@ GreLin 内部 Typst 模板库,按文档类型分目录维护。目录结构如
|
|||||||
|
|
||||||
## 快速开始
|
## 快速开始
|
||||||
|
|
||||||
1. 用 VS Code / Cursor 打开本仓库,打开要编辑的入口文件,例如 `resume/cv.typ` 或 `feasibility/report.typ`
|
1. 用 VS Code / Cursor 打开本仓库,打开要编辑的入口文件,例如 `resume-bp/cv.typ`、`resume-career/cv.typ` 或 `feasibility/report.typ`
|
||||||
2. 可行性报告正文在 `feasibility/content/report.md` 用 Markdown 编写,无需改 Typst 代码
|
2. 可行性报告正文在 `feasibility/content/report.md` 用 Markdown 编写,无需改 Typst 代码
|
||||||
3. 看效果(预览):`Ctrl+Shift+P` → 输入 `Typst Preview` → 回车;侧边会实时显示排版效果
|
3. 看效果(预览):`Ctrl+Shift+P` → 输入 `Typst Preview` → 回车;侧边会实时显示排版效果
|
||||||
4. 导出 PDF:`Ctrl+Shift+P` → 输入 `Typst Export PDF` → 回车;PDF 默认生成在同目录(如 `resume/sample.pdf`)
|
4. 导出 PDF:`Ctrl+Shift+P` → 输入 `Typst Export PDF` → 回车;PDF 默认生成在同目录
|
||||||
|
|
||||||
> 不熟悉 Typst?可参考社区维护的 [小蓝书(Typst 中文教程)](https://tutorial.typst.dev/);英文版见 [官方入门教程](https://typst.app/docs/tutorial/)。
|
> 不熟悉 Typst?可参考社区维护的 [小蓝书(Typst 中文教程)](https://tutorial.typst.dev/);英文版见 [官方入门教程](https://typst.app/docs/tutorial/)。
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
// GreLin 品牌色板 — 全文档统一(resume / feasibility 等均 import 此文件)
|
// GreLin 品牌色板 — 全文档统一(resume-bp / resume-career / feasibility 等均 import 此文件)
|
||||||
// 来源 HyperLabel foundationPalette + labelPalette
|
|
||||||
|
|
||||||
#let color-ink = rgb("#08090B")
|
#let color-ink = rgb("#08090B")
|
||||||
#let color-body = rgb("#2D3135")
|
#let color-body = rgb("#2D3135")
|
||||||
@ -7,8 +6,15 @@
|
|||||||
#let color-bar-bg = rgb("#EFF0F2")
|
#let color-bar-bg = rgb("#EFF0F2")
|
||||||
#let color-page = rgb("#FDFDFD")
|
#let color-page = rgb("#FDFDFD")
|
||||||
|
|
||||||
// 品牌主色(全项目绿色统一)
|
// 品牌主色(文档统一蓝色)
|
||||||
#let color-brand = rgb(200, 216, 98)
|
#let color-brand = rgb("#2850d0")
|
||||||
#let color-lime = color-brand.lighten(10%)
|
#let color-brand-light = color-brand.lighten(12%)
|
||||||
#let color-lime-mid = color-brand
|
#let color-brand-mid = color-brand
|
||||||
#let color-lime-deep = color-brand.darken(22%)
|
#let color-brand-deep = color-brand.darken(20%)
|
||||||
|
#let color-brand-tint = rgb("#eef2fc")
|
||||||
|
#let color-brand-surface = color-brand.lighten(88%)
|
||||||
|
|
||||||
|
// 兼容旧别名(lime → brand 蓝色系)
|
||||||
|
#let color-lime = color-brand-light
|
||||||
|
#let color-lime-mid = color-brand-mid
|
||||||
|
#let color-lime-deep = color-brand-deep
|
||||||
|
|||||||
@ -45,7 +45,7 @@
|
|||||||
} else {
|
} else {
|
||||||
str(n.at(0)) + "." + str(n.at(1)) + "." + str(n.at(2))
|
str(n.at(0)) + "." + str(n.at(1)) + "." + str(n.at(2))
|
||||||
}
|
}
|
||||||
box(fill: color-neon, inset: (x: 5pt, y: 2pt))[
|
box(fill: color-accent-surface, inset: (x: 5pt, y: 2pt))[
|
||||||
#text(font: mono-font, size: 7pt, weight: "bold", fill: color-ink)[#id]
|
#text(font: mono-font, size: 7pt, weight: "bold", fill: color-ink)[#id]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,7 +34,7 @@
|
|||||||
#let print-glossary-block() = {
|
#let print-glossary-block() = {
|
||||||
pagebreak(weak: true)
|
pagebreak(weak: true)
|
||||||
block(width: 100%, above: space-chapter)[
|
block(width: 100%, above: space-chapter)[
|
||||||
#box(width: 100%, fill: color-neon, inset: (x: 10pt, y: 6pt))[
|
#box(width: 100%, fill: color-accent-surface, inset: (x: 10pt, y: 6pt))[
|
||||||
#text(font: heading-font, size: size-h1, weight: "black", fill: color-ink)[术语与缩写]
|
#text(font: heading-font, size: size-h1, weight: "black", fill: color-ink)[术语与缩写]
|
||||||
]
|
]
|
||||||
#v(space-block)
|
#v(space-block)
|
||||||
|
|||||||
@ -20,12 +20,12 @@
|
|||||||
columns: (1fr, auto, 1fr, auto, 1fr),
|
columns: (1fr, auto, 1fr, auto, 1fr),
|
||||||
column-gutter: 12pt,
|
column-gutter: 12pt,
|
||||||
align: horizon,
|
align: horizon,
|
||||||
tech-label("VERSION", fill: color-neon, size: 6.5pt),
|
tech-label("VERSION", fill: color-accent, size: 6.5pt),
|
||||||
text(font: mono-font, size: 8pt, fill: white)[#meta.version],
|
text(font: mono-font, size: 8pt, fill: white)[#meta.version],
|
||||||
tech-label("DATE", fill: color-neon, size: 6.5pt),
|
tech-label("DATE", fill: color-accent, size: 6.5pt),
|
||||||
text(font: mono-font, size: 8pt, fill: white)[#format-cover-date(meta.date)],
|
text(font: mono-font, size: 8pt, fill: white)[#format-cover-date(meta.date)],
|
||||||
align(right)[
|
align(right)[
|
||||||
tech-label("STATUS · DRAFT", fill: color-neon, size: 6.5pt)
|
tech-label("STATUS · DRAFT", fill: color-accent, size: 6.5pt)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
@ -49,7 +49,7 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
#place(left + top, dx: 24pt, dy: 168pt)[
|
#place(left + top, dx: 24pt, dy: 168pt)[
|
||||||
#box(width: 92%, fill: color-neon, inset: (x: 16pt, y: 18pt))[
|
#box(width: 92%, fill: color-accent-surface, inset: (x: 16pt, y: 18pt))[
|
||||||
#text(
|
#text(
|
||||||
font: heading-font,
|
font: heading-font,
|
||||||
size: size-cover-title,
|
size: size-cover-title,
|
||||||
@ -83,7 +83,7 @@
|
|||||||
stroke: 1.5pt + color-ink,
|
stroke: 1.5pt + color-ink,
|
||||||
inset: summary-inset,
|
inset: summary-inset,
|
||||||
)[
|
)[
|
||||||
#box(width: 100%, fill: color-neon, inset: (x: 10pt, y: 5pt))[
|
#box(width: 100%, fill: color-accent-surface, inset: (x: 10pt, y: 5pt))[
|
||||||
#tech-label("ABSTRACT", fill: color-ink, size: 7pt)
|
#tech-label("ABSTRACT", fill: color-ink, size: 7pt)
|
||||||
]
|
]
|
||||||
#v(10pt)
|
#v(10pt)
|
||||||
@ -114,7 +114,7 @@
|
|||||||
tech-barcode(36pt, 8pt, bars: 10),
|
tech-barcode(36pt, 8pt, bars: 10),
|
||||||
box(width: 100%, height: 1pt, fill: color-ink),
|
box(width: 100%, height: 1pt, fill: color-ink),
|
||||||
box(fill: color-ink, inset: (x: 8pt, y: 3pt))[
|
box(fill: color-ink, inset: (x: 8pt, y: 3pt))[
|
||||||
#text(font: mono-font, size: 8pt, fill: color-neon)[
|
#text(font: mono-font, size: 8pt, fill: color-accent)[
|
||||||
#counter(page).display("1")
|
#counter(page).display("1")
|
||||||
#h(0.12em)
|
#h(0.12em)
|
||||||
#sym.slash
|
#sym.slash
|
||||||
@ -135,7 +135,7 @@
|
|||||||
columns: (auto, 1fr, auto),
|
columns: (auto, 1fr, auto),
|
||||||
column-gutter: 8pt,
|
column-gutter: 8pt,
|
||||||
align: horizon,
|
align: horizon,
|
||||||
box(fill: color-neon, inset: (x: 6pt, y: 2pt))[
|
box(fill: color-accent-surface, inset: (x: 6pt, y: 2pt))[
|
||||||
#text(font: mono-font, size: 7pt, weight: "bold", fill: color-ink)[#upper(meta.brand)]
|
#text(font: mono-font, size: 7pt, weight: "bold", fill: color-ink)[#upper(meta.brand)]
|
||||||
],
|
],
|
||||||
box(width: 100%, height: 1pt, fill: color-ink),
|
box(width: 100%, height: 1pt, fill: color-ink),
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#import "theme.typ": *
|
#import "theme.typ": *
|
||||||
#import "decor.typ": tech-label
|
#import "decor.typ": tech-label
|
||||||
|
|
||||||
/// Logo:霓虹绿块 + 白色折线图形 + GreLin | Tech
|
/// Logo:品牌蓝块 + 白色折线图形 + GreLin | Tech
|
||||||
#let grelin-logo(
|
#let grelin-logo(
|
||||||
primary: "GreLin",
|
primary: "GreLin",
|
||||||
secondary: "Tech",
|
secondary: "Tech",
|
||||||
@ -9,7 +9,7 @@
|
|||||||
columns: (auto, auto),
|
columns: (auto, auto),
|
||||||
column-gutter: 10pt,
|
column-gutter: 10pt,
|
||||||
align: horizon,
|
align: horizon,
|
||||||
box(width: 34pt, height: 34pt, fill: color-neon)[
|
box(width: 34pt, height: 34pt, fill: color-brand)[
|
||||||
#place(left + top, dx: 7pt, dy: 8pt, box(width: 14pt, height: 3pt, fill: white))
|
#place(left + top, dx: 7pt, dy: 8pt, box(width: 14pt, height: 3pt, fill: white))
|
||||||
#place(left + top, dx: 7pt, dy: 14pt, box(width: 3pt, height: 14pt, fill: white))
|
#place(left + top, dx: 7pt, dy: 14pt, box(width: 3pt, height: 14pt, fill: white))
|
||||||
#place(left + top, dx: 18pt, dy: 14pt, box(width: 9pt, height: 3pt, fill: white))
|
#place(left + top, dx: 18pt, dy: 14pt, box(width: 9pt, height: 3pt, fill: white))
|
||||||
|
|||||||
@ -36,7 +36,7 @@
|
|||||||
column-gutter: 8pt,
|
column-gutter: 8pt,
|
||||||
align: horizon,
|
align: horizon,
|
||||||
context section-tech-id(..counter(heading).get()),
|
context section-tech-id(..counter(heading).get()),
|
||||||
box(width: 100%, fill: color-neon, inset: (x: 8pt, y: 4pt))[
|
box(width: 100%, fill: color-accent-surface, inset: (x: 8pt, y: 4pt))[
|
||||||
#text(font: heading-font, size: size-h1, weight: "black", fill: color-ink)[
|
#text(font: heading-font, size: size-h1, weight: "black", fill: color-ink)[
|
||||||
#heading-number(it)
|
#heading-number(it)
|
||||||
#it.body
|
#it.body
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
#import "../../brand/colors.typ": *
|
#import "../../brand/colors.typ": *
|
||||||
|
|
||||||
// Brutalist / FUI 配色:霓虹绿 · 纯黑 · 冷灰(避免橄榄灰发脏)
|
// 可行性报告配色:品牌蓝 · 纯黑 · 冷灰
|
||||||
#let color-neon = rgb(210, 255, 72)
|
#let color-accent = color-brand
|
||||||
#let color-heading = color-neon
|
#let color-accent-surface = color-brand-surface
|
||||||
#let color-accent = color-neon
|
#let color-heading = color-brand
|
||||||
#let color-accent-line = color-ink
|
#let color-accent-line = color-ink
|
||||||
#let color-divider = rgb(205, 205, 205)
|
#let color-divider = rgb(205, 205, 205)
|
||||||
#let color-caption = rgb(110, 110, 110)
|
#let color-caption = rgb(110, 110, 110)
|
||||||
@ -62,7 +62,7 @@
|
|||||||
#let cover-block-height = 19.5cm
|
#let cover-block-height = 19.5cm
|
||||||
|
|
||||||
// --- 线条 / 边框 ---
|
// --- 线条 / 边框 ---
|
||||||
#let underline-stroke = 2pt + color-neon
|
#let underline-stroke = 2pt + color-accent
|
||||||
#let underline-offset = 5pt
|
#let underline-offset = 5pt
|
||||||
#let heading-number-gap = 0.35em
|
#let heading-number-gap = 0.35em
|
||||||
#let stroke-accent = 1.5pt + color-ink
|
#let stroke-accent = 1.5pt + color-ink
|
||||||
@ -81,8 +81,8 @@
|
|||||||
#let page-accent-bar-width = 10pt
|
#let page-accent-bar-width = 10pt
|
||||||
|
|
||||||
// --- 表格 ---
|
// --- 表格 ---
|
||||||
#let table-zebra-fill = rgb(245, 255, 228)
|
#let table-zebra-fill = color-brand-tint
|
||||||
#let table-header-fill = color-neon
|
#let table-header-fill = color-brand-surface
|
||||||
#let table-data-text = rgb(50, 50, 50)
|
#let table-data-text = rgb(50, 50, 50)
|
||||||
#let table-inset = (x: 10pt, y: 6pt)
|
#let table-inset = (x: 10pt, y: 6pt)
|
||||||
|
|
||||||
@ -99,4 +99,4 @@
|
|||||||
|
|
||||||
// --- 引用 ---
|
// --- 引用 ---
|
||||||
#let blockquote-inset = 10pt
|
#let blockquote-inset = 10pt
|
||||||
#let blockquote-stroke = 3pt + color-neon
|
#let blockquote-stroke = 3pt + color-accent
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
# Resume · 团队简历模板
|
# Resume BP · 融资团队简历
|
||||||
|
|
||||||
GreLin 双栏中文简历 Typst 模板,用于融资 BP data room 附录。
|
GreLin 双栏中文简历 Typst 模板,用于融资 BP data room 附录。内容偏完整,含证件照、详细经历与可选研究成果。
|
||||||
|
|
||||||
|
入口:`cv.typ` · 内容编辑:`data/config.typ`
|
||||||
|
|
||||||
## 照片
|
## 照片
|
||||||
|
|
||||||
@ -26,16 +28,7 @@ GreLin 双栏中文简历 Typst 模板,用于融资 BP data room 附录。
|
|||||||
|
|
||||||
#let skills = (
|
#let skills = (
|
||||||
tags: ("Rust", "Python"),
|
tags: ("Rust", "Python"),
|
||||||
notes: (), // 可选:侧栏技能补充列表
|
notes: (),
|
||||||
// 可选:能力进度条(有数据时自动显示「能力」子区块)
|
|
||||||
// abilities: (
|
|
||||||
// (name: "全栈开发", level: 0.9),
|
|
||||||
// ),
|
|
||||||
// language: (
|
|
||||||
// name: "英语",
|
|
||||||
// level: 0.75,
|
|
||||||
// label: "读写",
|
|
||||||
// ),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
#let education = (
|
#let education = (
|
||||||
@ -44,12 +37,10 @@ GreLin 双栏中文简历 Typst 模板,用于融资 BP data room 附录。
|
|||||||
school: "西北大学",
|
school: "西北大学",
|
||||||
period: "2022 – 2025",
|
period: "2022 – 2025",
|
||||||
location: "西安",
|
location: "西安",
|
||||||
notes: "", // 可选:GPA、主修课程等一段说明
|
notes: "",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
#let awards = () // 可选:主栏获奖经历
|
|
||||||
|
|
||||||
#let experiences = (
|
#let experiences = (
|
||||||
(
|
(
|
||||||
company: "某某科技",
|
company: "某某科技",
|
||||||
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 326 B |
|
Before Width: | Height: | Size: 318 B After Width: | Height: | Size: 318 B |
|
Before Width: | Height: | Size: 637 B After Width: | Height: | Size: 637 B |
|
Before Width: | Height: | Size: 294 B After Width: | Height: | Size: 294 B |
|
Before Width: | Height: | Size: 285 B After Width: | Height: | Size: 285 B |
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 326 B |
|
Before Width: | Height: | Size: 480 B After Width: | Height: | Size: 480 B |
|
Before Width: | Height: | Size: 394 B After Width: | Height: | Size: 394 B |
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 340 B |
|
Before Width: | Height: | Size: 256 B After Width: | Height: | Size: 256 B |
|
Before Width: | Height: | Size: 320 B After Width: | Height: | Size: 320 B |
|
Before Width: | Height: | Size: 238 B After Width: | Height: | Size: 238 B |
|
Before Width: | Height: | Size: 261 B After Width: | Height: | Size: 261 B |
|
Before Width: | Height: | Size: 841 KiB After Width: | Height: | Size: 841 KiB |
@ -1,9 +1,9 @@
|
|||||||
#import "../../brand/colors.typ": *
|
#import "../../brand/colors.typ": *
|
||||||
|
|
||||||
#let color-icon = color-muted
|
#let color-icon = color-brand-deep
|
||||||
#let color-accent-bright = color-body
|
#let color-accent-bright = color-brand
|
||||||
#let color-accent = color-muted
|
#let color-accent = color-brand
|
||||||
#let color-skill-bar = color-muted
|
#let color-skill-bar = color-brand
|
||||||
#let color-divider = color-muted.lighten(68%)
|
#let color-divider = color-muted.lighten(68%)
|
||||||
#let color-text-light = color-muted.lighten(32%)
|
#let color-text-light = color-muted.lighten(32%)
|
||||||
|
|
||||||
@ -844,24 +844,24 @@ uUL
|
|||||||
endstream
|
endstream
|
||||||
endobj
|
endobj
|
||||||
116 0 obj
|
116 0 obj
|
||||||
<</Length 4808/Filter/FlateDecode>>
|
<</Length 4816/Filter/FlateDecode>>
|
||||||
stream
|
stream
|
||||||
xœÝ]ùÇmÿ<6D>ÅöJøÌ<>VUó.¶qâ´®˜Ä‰í46Å%Ÿiâÿ¾Ÿïìùø–CQOKñCéÃy»Ø9° | |||||||