YAMLResume

YAMLResume 与 LaTeX 对比

数十年来,LaTeX 一直是工程师、研究人员和学者制作 专业排版简历的事实标准。编写 .tex 文件,编译后即可获得 Word 无法比拟的 PDF 排版 效果。围绕这一工作流形成了丰富的模板生态系统—— Awesome-CV(GitHub 20,000+ 星标)、 moderncv、 Jake's Resume、 Deedy-Resume、 AltaCV——而 Overleaf 则托管了数百个可在浏 览器中编译的 CV 模板。

以下引自 LaTeX 项目官方网站:

LaTeX is a document preparation system for high-quality typesetting. It is
most often used for medium-to-large technical or scientific documents but it
can be used for almost any form of publishing.

不过有一点需要说明:YAMLResume 并非 LaTeX 的替代品,而是构建于 LaTeX 之上。 YAMLResume 的 LaTeX 引擎 会根据你的 YAML 生成 .tex 源码,并使用 XeLaTeX 编译——这与手写 LaTeX 简历使用的引擎相同。真正的对比在于两种 创作工作流:直接在 TeX 标记中编写简历,还是以结构化 YAML 编写并让编译器为你生成 TeX。

以下是两种工作流的对比:

功能对比

功能YAMLResume手写 LaTeX
方式YAML 源码编译为 LaTeX直接在 TeX 中编写文档
创作语言YAML(纯文本,无标记)TeX/LaTeX 标记
TeX 知识无需掌握自定义时需要熟练使用
排版引擎XeLaTeX自行选择:pdfLaTeX、XeLaTeX、LuaLaTeX
输出格式DOCX、HTML、Markdown、LaTeX/PDFPDF(可通过 pandoc 转换,但会损失质量)
生成源码会输出干净的 .tex 文件,与 PDF 一并提供,可供检查或微调不适用(手写源码即全部)
Schema 验证严格的 Zod 验证,配合 JSON Schema IDE 集成无——只有编译时的 TeX 错误
错误报告clang 风格的诊断信息,包含行号、列号和源码片段TeX 日志:通常出现含义不明、远离真正原因的级联错误
环境配置npm install -g yamlresume、Homebrew 或预装 XeTeX 的 Docker;yamlresume doctor 会检查字体安装数 GB 的 TeX Live/MacTeX/MiKTeX,寻找缺失宏包,手动配置字体——或使用云端的 Overleaf
模板精选的官方 LaTeX、HTML 和 DOCX 模板数千个社区模板与文档类(Awesome-CV、moderncv、AltaCV、Jake's Resume,……)
设计自定义页面、排版 和章节参数——主题封装无限——任何 TeX 能排版的内容
章节自定义别名与重新排序任意宏包与环境
国际化10 种语言、12 个语言区域,自动配置 babel 与 CJK 宏包手动配置:babel/polyglossia、fontspec、ctex/xeCJK/luatexja/kotex
富文本在 summary 字段中支持精选的 Markdown 语法任何位置均可使用任意 TeX 标记
数据模型固定、结构化的 Schema;兼容 JSON Resume自由格式文档
AI 工作流内置生成与翻译;Markdown 输出便于 LLM 处理自行设计 LLM 提示词
开发模式yamlresume dev 每次保存自动重建latexmk -pvc 或 Overleaf 自动编译
版本控制干净的内容 diff——只显示有意义的变更diff 中混杂着标记变更
CI/CD官方 GitHub Action + Docker 镜像社区 action(如 latex-action);Overleaf 的 GitHub 同步为付费功能
协作在纯 YAML 上通过 Git 拉取请求协作Overleaf 实时协作(付费套餐)或在 .tex 上使用 Git
确定性输出是是,前提是指定工具链和宏包版本
成本免费(开源)自托管免费;Overleaf 为免费增值模式

关键差异详解

创作:内容 vs. 标记

最直观的区别在于你每天面对的是什么。以下是同一份工作经历的两种写法。

手写 Awesome-CV 风格简历:

\cventry{Jan 2020 -- Present}
  {Senior Software Engineer}
  {ACME Inc.}
  {San Francisco, CA}
  {
    \begin{itemize}
      \item Led a team of 5 engineers building payments infrastructure
      \item Reduced p95 latency by 40\% via query optimization
    \end{itemize}
  }

在 YAMLResume 中:

work:
  - name: ACME Inc.
    position: Senior Software Engineer
    startDate: Jan 2020
    summary: |
      - Led a team of 5 engineers building payments infrastructure
      - Reduced p95 latency by 40% via query optimization

两者都能生成专业排版的条目。但在 LaTeX 版本中,你的内容被宏包、花括号和环境包裹;在 YAML 版本中,你的内容就是文件本身。任何人——包括非程序员同事、招聘人员,或未来在手 机上查看的你——都能阅读并编辑 YAML。而且由于标记是编译器的工作,你可以一行内容都不 改,就改变文档中每个日期的渲染方式。

验证与调试

这是两种工作流分歧最大的地方。

手写 LaTeX 时,你唯一的安全网就是编译器。TeX 错误以含义不明且级联著称:职位标题里一 个 stray & 可能在某个类文件深处表现为 Misplaced \omit,需要仔细阅读日志才能追 踪。内容错误——格式错误的日期、拼错的字段——对 TeX 来说只是普通文本;它会愉快地把 startDtae 排版出来。

YAMLResume 在输出任何 TeX 之前就对你的数据进行验证。编译器 会根据严格的 Zod schema 检查简历,并输出 clang 风格的诊断信息, 包含行号、列号和问题源码:

$ yamlresume validate my-resume.yml
my-resume.yml:9:12: warning: email is invalid.
    email: hi@pp
           ^
my-resume.yml:38:10: error: city is too short.
    city: S
          ^

等到 XeLaTeX 运行时,数据已经是已验证正确的,编译失败变得非常罕见——通常是 doctor 已经标记过的字体或宏包问题。

内容与表现分离

手写 LaTeX 会把内容和表现纠缠在一起。每个条目都被包裹在模板特定的宏包中,这意味着 切换模板等于重写简历。从 moderncv 迁移到 AwesomeCV 不是换主题,而是把每个 \cventry 转换成另一种宏包(或新文档类要求的任何格式),并重新调整参数顺序。

YAMLResume 将关注点分离作为设计原则:

  • content:简历说了什么
  • locale:用哪种语言和区域来说
  • layouts:长什么样——引擎、模板、页面、排版、章节别名与顺序

想从 moderncv-banking 风格换 成 jake 风格?只需修改 layouts 中的一 行,内容文件完全不动。这也让按申请岗位定制简历变得轻而易举:保留一份权威内容文件, 再维护几个重新排序或别名章节的小型布局变体。

一份源文件,四种引擎

.tex 文件编译成 PDF。这就是整条流水线,对很多人来说也足够了——直到招聘人员要 Word 版本,或者你想把简历作为个人网站的一个页面,又或者需要纯文本版本粘贴到 ATS 表 单中。Pandoc 可以把 LaTeX 转成 DOCX 或 HTML,但结果在排版上远逊于专用引擎,因为转换 过程必须从标记中猜测意图。

YAMLResume 提供四种一流引擎——DOCX、 HTML、Markdown 和 LaTeX——一条 yamlresume build 命令就能从同一份源文件 生成全部四种输出。其中 Markdown 引擎 在 2026 年特别 实用:它能从同一份已验证数据中提取出干净、结构化的文本,供 LLM 和 ATS 解析器使用。

国际化

手写德语或中文 LaTeX 简历本身就是一项工程。德语需要 babel + ngerman、德语日期字 符串和正确的引号。中文需要在 ctex、xeCJK、luatexja 之间做选择,安装 CJK 字体并配置字 体回退——对 TeX 老手来说是熟门熟路,但第一次做往往要耗费数天。每增加一种语言,工作 量都会成倍增长,因为文档之间无法共享配置。

在 YAMLResume 中,你只需设置 locale 键。编译器会自动翻译 章节标题、国家名称、学位、技能等级和熟练度等级;以符合语言区域习惯的方式格式化日期 和地址;应用适合该语言区域的标点规则(包括 CJK 的全角标点和法语高标点前的不断行空 格);并自动为 XeLaTeX 配置 babel 和正确的 CJK 宏包。此外,yamlresume ai translate 可以将整份简 历结构保持不变地翻译成任意支持的语言区域——把原本需要数天的排版工程变成一条命令。

自定义天花板

公平地说:手写 LaTeX 在控制度上胜出,而且差距不小。任何 TeX 能排版的内容,你都可以 放进手写简历——TikZ 图表、自定义宏包、精确的微排版调整、学术 CV 的 biblatex 文献列 表、多页布局、共用同一文档类的求职信。如果你是享受这一切的 TeX 专家,YAMLResume 可 能会让你觉得像是护栏。

但这个天花板是有代价的:一切都是你的责任,永远如此。每一个宏包冲突、每一次宏包升级、 每一个字体边界情况都需要你自己解决。YAMLResume 用无限天花板换取了更高的底线:精选模 板将专业排版决策封装起来,让你不会做出糟糕选择,同时仍然开放关键参数——纸张尺寸、 边距和页码、字体族、字号和行距, 以及章节别名与顺序。

如果你确实撞到了天花板,还有一个逃生口:生成的 .tex 源码会随 PDF 一起输出。你可 以阅读它来学习,也可以 fork 后接手继续定制。YAMLResume 并不向你隐藏 LaTeX;它只是不 强制你使用。

生态系统

模板

手写 LaTeX 生态系统最大的优势在于规模:GitHub、Overleaf 模板库、 CTAN 以及各类精选网站上拥有数千个简历模板,涵盖你能想象到的每一种视觉风格。代价是 质量参差不齐——模板从精心维护的文档类到一次性导出文件应有尽有,后者可能包含硬编码 数值、过时的宏包用法且没有任何验证。

YAMLResume 采取精选路线:少量官方 LaTeX 模板 (moderncv-classic、moderncv-casual、moderncv-banking、jake 等),每个都针对全部 12 个语言区域进行测试,因此切换模板不会悄悄破坏一份本地化简历。

Overleaf

Overleaf 是 LaTeX 世界中最接近 YAMLResume 体验的产品: 零安装、模板库、每次按键自动编译,以及真正出色的实时协作。如果你想继续留在 LaTeX 工 作流中,它是最简单的方式。

代价是结构性的:你的项目存放在云服务中;版本历史、修订追踪和 GitHub 同步等功能都位 于付费计划之后;而且你仍然只有一份 .tex 文档——没有结构化数据、没有多格式导出、没 有 schema 验证、没有 CLI。YAMLResume 通过 yamlresume dev 在 本地提供媲美 Overleaf 的迭代速度,并以 Git 作为版本历史。

CI/CD

两种工作流都可以自动化。LaTeX 世界有社区解决方案,例如 GitHub Actions 的 latex-action,Overleaf 的 GitHub 同步则 是付费功能。YAMLResume 提供官方 GitHub Action, 一步完成简历验证并构建全部四种格式:

- uses: yamlresume/action@v0.16.1
  with:
    resumes: |
      resume-en.yml
      resume-zh.yml
      resume-fr.yml

由于输入是结构化 YAML,CI 还能做到 .tex 流水线做不到的事情:让引入 schema 错误的 拉取请求失败、在无标记噪音的情况下 diff 内容变更,或从一次编辑重新生成所有语言区域 变体。

总结

手写 LaTeX 适合如果你需要:

  • 完全的排版控制——自定义宏包、TikZ 图形、biblatex 文献、精确间距、你能想象的任何 布局
  • 访问数千种社区模板和文档类,涵盖每一种风格
  • 与论文、学位论文、幻灯片使用相同的工具链
  • 如果 TeX 是你乐于维护的技能,它本身就是一种有趣的工艺
  • 通过 Overleaf 获得云端便利与协作

YAMLResume 适合如果你需要:

  • 通过 XeLaTeX 实现 LaTeX 级别的 PDF 排版,而无需编写或调试 TeX
  • 结构化、已验证的数据,以及 clang 风格的错误信息,而非编译日志
  • 从一份源文件输出多种格式(DOCX、HTML、Markdown、LaTeX/PDF)
  • 深度国际化,覆盖 10 种语言、12 个语言区域,包括自动 CJK 配 置和 AI 辅助翻译
  • 无需重写内容即可切换模板,这得益于内容、语言区域和布局的严格分离
  • 开发者工具链:监听模式、环境诊断、Docker、Homebrew 和用于 CI/CD 的 GitHub Action

如果你已经熟悉 TeX、需要超出任何结构化 Schema 能表达的布局,或把排版视为工艺的一部 分,请选择手写 LaTeX。

如果你想要 LaTeX 闻名的输出效果,但更希望简历读起来像数据而非程序,请选择 YAMLResume。

Edit on GitHub

Last updated on

On this page