关于 resumx
resumx 是面向使用 Markdown 编写和定制简历者的渲染工具,可从单一源文件生成 PDF、HTML、PNG 或 DOCX,并提供页数适配、标签和视图功能。
主要功能
- 01将 Markdown 渲染为 PDF、HTML、PNG 或 DOCX
- 02适配指定页数
- 03通过标签和视图筛选内容
- 04验证简历结构与内容
- 05使用样式和 CSS 定制布局
适用场景
- 01从单个 Markdown 文件生成定制简历
- 02将简历导出为多种格式
- 03将简历适配到指定页数
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ resumx/ skills --skill resumx安装后在 Claude Code 中输入/resumx确认已加载。
附带文件resources/tagging-resume.mdresources/writing-resume.md
详细介绍
Resumx
Markdown → PDF/HTML/PNG/DOCX 简历渲染器。自动适配目标页数,并通过标签和视图从同一个源文件生成定制输出。
从其他渲染器或构建器迁移? 一步完成转换并快速上手:resumx.dev/#import。上传 PDF、DOCX、LaTeX、JSON Resume 或 RenderCV YAML,即可获取可编辑并使用 Resumx 渲染的 Markdown。
资源
| 资源 | 适用场景 |
|---|---|
| writing-resume.md | 以交互式分步方式创建简历 |
| tagging-resume.md | 系统化添加标签,以生成定制输出;提供分层标签体系 |
Markdown 语法
标准 Markdown + 行内分栏、方括号跨度、围栏 div。
结构: # Name → email | github | linkedin(联系方式)→ ## Section → ### Title || Date → _Subtitle_ || Location → - Bullets → 用于技能的定义列表(Term + : values)。
行内分栏: || 将内容分为左右两列。### Google || Jan 2020 - Present、_Senior SWE_ || San Francisco, CA。3 列或更多列:A || B || C。转义:\||。
格式: **Bold**、_Italic_、H~2~O(下标)、E = mc^2^(上标)、--/---(短破折号/长破折号)。
表格: 标准 Markdown 表格。
类、ID 和围栏 div
方括号跨度: [text]{.class} → <span>。示例:### Google [2022 - Present]{.right}。
元素属性: 块末尾的 {...} 会应用于整个元素:- Built dashboards {.@frontend}。
围栏 div: ::: 包裹块内容。只有一个子元素时不添加包装 div;有多个子元素时自动添加 <div>。添加标签名称前缀:::: footer {.text-center}。
::: {.grid .grid-cols-3}
- JavaScript
- TypeScript
:::
Frontmatter
YAML(---)或 TOML(+++)。CLI 标志始终具有更高优先级。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
css | string | string[] | 无 | CSS 路径或内联 CSS(后缀为 .css 时视为文件,否则视为内联内容) |
output | string | 输入文件名 | 输出路径/模板({view}、{lang}、{format}) |
pages | positive integer | 不限制页数 | 目标页数 |
sections | { hide?: string[], pin?: string[] } | 源文件顺序 | 控制章节的可见性/排序 |
bullet-order | none | tag | none | 项目符号排序策略 |
style | Record<string, string> | — | 覆盖样式选项 |
tags | Record<string, string[] | TagConfig> | — | 标签组合/标签视图配置 |
vars | Record<string, string> | — | {{ }} 的模板变量 |
icons | Record<string, string> | — | 自定义图标(SVG、URL、base64) |
extra | Record<string, unknown> | — | 任意用户数据(否则未知键会报错) |
验证(validate 键):extends(默认值为 recommended;预设:recommended、minimal、strict、none)。规则:missing-name、missing-contact、no-sections、no-entries、empty-bullet、long-bullet、single-bullet-section、unknown-fenced-div-tag、non-pt-font-size。
---
pages: 1
output: ./out/Jane_Smith-{view}
bullet-order: tag
style:
link-color: '#0ea5e9'
tags:
fullstack: [frontend, backend]
leadership: false
vars:
tagline: 'Full-stack engineer with 8 years of experience'
validate:
extends: recommended
rules:
long-bullet: warning
single-bullet-section: off
extra:
name: Jane Smith
target-role: Senior SWE
---
命令行
resumx <file> # Render (defaults to resume.md, PDF)
resumx init [filename] # Create template
⚠ 始终使用 required_permissions: ["all"] 运行。 Playwright/Chromium 需要调用 Cursor 沙箱阻止的系统调用。否则渲染会失败,并显示“Chromium not found”。
标志: --css <path>(可重复,逗号分隔)、-o/--output <value>、-f/--format <pdf|html|docx|png>(可重复,逗号分隔)、-s/--style <k=v>(可重复)、--for <name-or-glob>(标签/自定义视图名称、glob 或 default)、-v/--var <k=v>(可重复)、--hide <list>、--pin <list>、--bullet-order <none|tag>、-l/--lang <bcp47>(可重复,逗号分隔)、-p/--pages <n>、-w/--watch、--check(仅验证)、--no-check、--strict、--min-severity <level>。
标准输入: cat resume.md | resumx 或 git show HEAD~3:resume.md | resumx -o old。
输出命名: 无视图/语言时为 resume.pdf;有视图时为 resume-frontend.pdf;有语言时为 resume-en.pdf;两者都有时为 frontend/resume-en.pdf。模板变量:{view}、{lang}、{format}。
样式选项
通过 style: 或 --style 覆盖。
- 排版:
font-family、title-font-family、content-font-family、font-size(11pt)、line-height(1.4) - 颜色:
text-color、link-color、background-color - 标题:
name-size、name-caps(small-caps/all-small-caps/petite-caps/unicase/normal)、name-weight、name-italic、name-color、section-title-size、section-title-caps、section-title-weight、section-title-italic、section-title-color、section-title-border、header-align、section-title-align、entry-title-size、entry-title-weight、entry-title-italic - 链接:
link-underline(underline/none) - 间距:
gap(无单位比例)、page-margin-x、page-margin-y、section-gap、entry-gap、row-gap、col-gap、list-indent - 列表:
bullet-style(disc/circle/square/none) - 功能:
auto-icons(inline/none)
自定义 CSS
在默认样式之上层叠应用。引用方式:css: my-styles.css 或 --css。内联方式:css: | h2 { letter-spacing: 0.05em; }。在数组中混合使用:
css:
- base.css
- |
h2::after { content: ''; flex: 1; border-bottom: var(--section-title-border); }
内置的 @import 模块:common/base.css(重置、排版、布局)、common/icons.css、common/utilities.css(.small-caps、.sr-only、.max-N)。
适配页面
pages: N 会自动适配页面。缩小顺序(从最不显眼的开始):1)间距 2)行高 3)字号 4)页边距(最后手段)。对于 pages: 1,间距也会扩展以填满页面。
最小值: font-size 9pt、line-height 1.15、section-gap 4px、entry-gap 1px、page-margin-y 0.3in、page-margin-x 0.35in。设置 pages: 时,style: 的值是可能会缩小的起始值。不设置 pages: 时,则按原样应用。
图标
:icon-name:(内置)、:set/name:(Iconify,20 万多个)、表情符号简码作为后备。解析顺序:Frontmatter > 内置 > Iconify > 表情符号。
链接上的自动图标适用于:mailto:、tel:、linkedin.com、github.com、gitlab.com、bitbucket.org、stackoverflow.com、x.com/twitter.com、youtube.com/youtu.be、dribbble.com、behance.net、medium.com、dev.to、codepen.io、marketplace.visualstudio.com。禁用方式:style: { auto-icons: none }。
自定义图标: icons: { mycompany: '<svg>...</svg>', partner: 'https://example.com/logo.svg' }。
Tailwind CSS
Tailwind v4 会即时编译。通过 {.class} 应用:[React]{.bg-blue-100 .text-blue-800 .px-2 .rounded}。适用于 span、元素属性和围栏 div。任意值:.text-[#ff6600]。内置类:.small-caps、.sr-only、.max-1–.max-16。
标签
{.@name} 用于筛选面向特定受众的内容。未标记的内容始终显示。已标记的内容仅在标签匹配时显示。多个标签:{.@backend .@frontend}。渲染:--for frontend。
**层级结构:**使用 / 表示嵌套({.@backend/node})。视图包含祖先、自身、后代和未标记内容;不包含同级项。--for backend/node → @backend + @backend/node + 未标记内容(不含 @backend/jvm)。--for backend → 所有后代 + 未标记内容。深度不限。
组合在 frontmatter 中定义:fullstack: [frontend, backend]。层级结构适用于组合项,每个组合项的谱系都会展开。递归展开(startup-cto 通过 fullstack 包含 frontend/backend)。拼写错误时会报错并提供建议。
tags:
fullstack: [frontend, backend]
node-fullstack: [frontend, backend/node]
tech-lead: [backend, leadership]
startup-cto: [fullstack, leadership, architecture]
视图
标签 = 要显示的内容。视图 = 显示内容的方式。每次渲染都会使用一个视图。
| 类型 | 位置 | 性质 |
|---|---|---|
| 默认 | Frontmatter 渲染字段 | 基础配置 |
| 标签视图 | tags: 展开形式 | 按标签覆盖,隐式生成 |
| 自定义 | .view.yaml 文件 | 按应用配置 |
| 临时 | CLI 标志 | 单次使用 |
**标签视图:**每个标签都会自动生成一个视图。展开形式可添加渲染覆盖项。简写 fullstack: [frontend, backend] = fullstack: { extends: [frontend, backend] }。
tags:
frontend:
sections: { hide: [publications], pin: [skills, projects] }
pages: 1
fullstack:
extends: [frontend, backend]
sections: { pin: [work, skills] }
pages: 2
自定义视图:.view.yaml 文件,会递归自动发现。字段:selects(要包含的标签)、sections、pages、bullet-order、vars、style、css、format、output。不设置 selects = 所有内容;selects: [] = 仅未标记内容。渲染:--for stripe-swe。批量处理:--for '*'/--for 'stripe-*'。--for default = 默认视图(不筛选);可组合:--for default,frontend。不要将视图命名为 default。
# stripe.view.yaml
stripe-swe:
selects: [backend, distributed-systems, leadership]
sections: { hide: [publications], pin: [skills, work] }
vars:
tagline: 'Stream Processing, Event-Driven Architecture, Go, Kafka'
**临时视图:**通过 CLI 标志内联设置:resumx resume.md --for backend -v tagline="Stream Processing, Go" --pin skills,work -o stripe.pdf。
**级联:**内置默认值 → 默认视图 → 标签/自定义视图 → 临时视图(CLI)。
模板变量
{{ name }} 占位符。可在 vars:、自定义视图或 -v 中定义。未定义/为空 → 删除该行。值可以包含 Markdown。变量没有匹配的占位符 → 报错。
# Jane Doe
[email protected] | github.com/jane
{{ tagline }}
章节
sections: { hide: [publications, volunteer], pin: [skills, work] }。hide 会移除章节,pin 会按顺序将章节移到顶部,其余章节保持源文件顺序。取值:work、education、skills、projects、awards、certificates、publications、volunteer、languages、interests、references、basics。CLI:--hide publications --pin skills,work。
多语言
{lang=xx}(BCP 47)。未标记内容会在所有语言中显示。可与标签组合:{lang=en .@backend}。筛选:--lang en 或 --lang en,fr。维度相乘:2 种语言 × 2 个标签 = 4 个 PDF。
## [Experience]{lang=en} [Expérience]{lang=fr}
### Google
- [Reduced API latency by 60%]{lang=en}
[Réduction de la latence API de 60%]{lang=fr}
语义选择器
自动生成的 HTML 属性:页眉:[data-field='name|email|phone|profiles|location|url']、[data-network='github']。章节:section[data-section='work|education|skills|projects|awards|certificates|publications|volunteer|languages|interests|references|basics'](模糊关键字匹配)。条目:.entries(容器)、.entry(<article>)。日期:<time datetime="ISO8601">、.date-range。
Git 集成
设置别名(仅需一次):
git config alias.resumx '!f() { spec="$1"; shift; case "$spec" in *:*) ;; *) spec="$spec:resume.md";; esac; tag="${spec%%:*}"; header=$(git tag -l --format="%(refname:short)" "$tag" 2>/dev/null); subject=$(git tag -l --format="%(contents:subject)" "$tag" 2>/dev/null); [ -n "$header" ] && printf "\033[2m%s\033[0m\n\033[1m%s\033[0m\n\n" "$header" "$subject"; git show "$spec" | resumx "$@"; }; f'
标记应用:git tag -a sent/stripe-2026-02 -m "Tailored for L5 infra, emphasized Kafka + distributed systems"。渲染前会打印附注标签的名称和备注。
git resumx sent/stripe-2026-02:resume.md # from tag
git resumx HEAD~3:resume.md --css my-styles.css -o stripe # past commit
git show :resume.md | resumx -o staged # staged changes
简历模板
---
pages: 1
---
# Full Name
[email protected] | [linkedin.com/in/user](https://linkedin.com/in/user) | [github.com/user](https://github.com/user)
{{ tagline }}
## Education
### University Name || Sept 2019 - June 2024
_Degree Name_
- GPA: 3.85
## Work Experience
### Company Name || Start - End
_Job Title_
- Achievement with quantified impact using `Technology`
## Projects
### Project Name _(Individual/Group)_
- Description of what was built
## Technical Skills
Languages
: Java, Python, TypeScript
Frameworks
: React, Node.js, FastAPI