career-ops latex-tex 模式:对自有 LaTeX 简历做 JD 定向改写而不破坏模板

发布时间:2026/9/7 15:42:05

career-ops latex-tex 模式:对自有 LaTeX 简历做 JD 定向改写而不破坏模板
career-ops latex-tex 模式对自有 LaTeX 简历做 JD 定向改写而不破坏模板【免费下载链接】career-opsOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)项目地址: https://gitcode.com/GitHub_Trending/ca/career-opscareer-ops 的latex-tex模式面向已经维护一份手写.tex简历的求职者它在不改变全局事实源cv.md仍用于评估、投递和自动流水线的前提下通过「提取可编辑文案槽位 → 按 JD 改写 → 精确回填 → 编译 PDF」的脚本化管线只改写简历中的项目符号与技能文案完整保留 preamble、宏定义、配色和版式。读完本文你将掌握该模式的支持布局与检测规则、源文件解析顺序、extract-latex-content.mjs/patch-latex-content.mjs/generate-latex.mjs三个脚本的完整调用链、补丁 JSON 的格式约定以及底层槽位提取与 LaTeX 转义的实现细节。模式定位与适用场景latex-tex是一个显式调用的 opt-in 模式通过/career-ops latex-tex触发。它不会出现在自动流水线或评估流程中也不会替代cv.md作为系统事实源。适用前提是用户已有一份resume.tex或在config/profile.yml的latex.source中指定了文件且布局属于 v1 支持范围用户希望为某个 JD 定制 bullets/skills但想保留自己的 preamble、宏定义、颜色和间距。它与latex模式的分工见 modes/latex.md 与 modes/latex-tex.md 的对照——latex以cv.md为输入套用 career-ops 自己的 templates/cv-template.tex 生成完整.tex PDFlatex-tex以用户自己的resume.tex为输入输出「同形模板结构、仅定制文案」的.tex PDF。模式输入输出latexcv.mdcareer-opstemplates/cv-template.tex→.tex PDFlatex-tex用户的resume.tex同模板形状仅定制文案 →.tex PDFv1 支持的布局与检测规则v1 只支持两个布局家族检测逻辑完全由 lib/latex-content.mjs 中的detectFamily()实现家族检测条件可编辑文案resumeSubheading文本中同时出现\resumeSubheading与\resumeItem/\resumeItemWithoutTitle/\resumeSubItem\resumeItem{...}与\resumeItemWithoutTitle{}{...}的项目符号\textbf{Category}{: items}和\resumeSubItem{Category}{items}的技能值tabularx-itemize出现tabularx\usepackage{...tabularx...}或\begin{tabularx}与\begin{itemize}且没有resumeSubheading宏文档正文中\item的文本对照源码可以确认两个判定细节tabularx-itemize的判定是「有 tabularx 有 itemize 无 resume 宏」即两种布局的识别互斥且按序优先匹配resumeSubheading而任何不满足上述任一条的布局会返回nullbuildManifest()随即返回supported: false并附带UNSUPPORTED_HINT——此时应按文档要求停止向用户建议改用/career-ops latex走cv.md→ career-ops 模板路线。仓库提供了两个可直接运行的示例夹具见 examples/latex-tex/README.mdnode extract-latex-content.mjs examples/latex-tex/resume-subheading.tex其中resume-subheading.tex对应resumeSubheading家族tabularx-itemize.tex对应tabularx-itemize家族另有一个resume-subheading-withouttitle.tex覆盖无标题宏的变体。源文件解析顺序源.tex按以下优先级解析见 modes/latex-tex.md 的 Source file resolution 一节若config/profile.yml中设置了latex.source使用它# config/profile.yml (optional, user layer) latex: source: resume.tex否则取项目根目录下的resume.tex否则取项目根目录下的cv.tex。三者都不存在时应停止并请用户放入.tex文件或设置latex.source——buildManifest()在supported: false分支返回的hint字段正是这条提示Place resume.tex in the project root or set latex.source in config/profile.yml.完整管线从提取到编译的九步latex-tex管线的九步如下每一步都有对应的脚本或明确的人工动作解析源.tex路径上述顺序。提取槽位node extract-latex-content.mjs source.tex --out /tmp/cv-slots-{company}.json。脚本把清单manifest写入指定 JSON同时打印到 stdout并在supported为false时以退出码 1 结束见 extract-latex-content.mjs。若supported: false→ 向用户展示error与hint不继续。读取 JD来自上下文、既有报告或询问用户。只改写slots[].text的值以贴合 JD伦理规则与 modes/latex.md / modes/pdf.md 相同提取 15–20 个 JD 关键词按相关性重排 bullets必要时重排补丁列表顺序补丁 id 保持稳定把关键词注入既有成就——绝不虚构技能若cv.md存在以其交叉核对声明凡无在范围内来源支撑的内容一律省略。写补丁文件格式见下节。应用补丁node patch-latex-content.mjs source.tex /tmp/cv-patches-{company}.json output/cv-{candidate}-{company}-{YYYY-MM-DD}.tex。编译node generate-latex.mjs output/cv-{candidate}-{company}-{YYYY-MM-DD}.tex output/cv-{candidate}-{company}-{YYYY-MM-DD}.pdf --compile-only。报告布局家族、槽位数、补丁数、.tex路径、.pdf路径或编译错误。前置要求PATH 上有tectonic或pdflatex与latex模式一致。提取清单manifest结构extract-latex-content.mjs调用的buildManifest()lib/latex-content.mjs输出如下形状{ supported: true, family: resumeSubheading, source: resume.tex, slots: [ { id: bullet-0, kind: bullet, text: 原始文案…, span: { start: 1234, end: 1301 } }, { id: skill-0, kind: skill, text: Python, Go, span: { start: 2210, end: 2222 } } ] }不支持时则为{ supported: false, family: null, error: ..., hint: ... }。槽位提取有几条关键的底层规则直接决定「哪些文字可以被改写」只读文档正文。bodyStart()以\begin{document}为起点preamble 中的宏定义例如\newcommand{\resumeSubItem}[2]{...}不会被误捕为可编辑槽位——否则#1占位符会污染清单。忽略注释行。isCommentedAt()会检查宏调用所在行是否在该位置之前出现未转义的%\%视为字面量因此被%注释掉的旧 bullets 永远不会变成可编辑槽位——这正是文档中「旧 bullet 保留为注释也不会被改写」的源码保证。嵌套花括号配对。findMatchingBrace()用深度计数 反斜杠转义状态机定位成对括号所以\resumeItem{Led **X** and \{Y\}}这类含嵌套/转义括号的内容也能正确定界。空首组回退。\resumeItemWithoutTitle{}{Text}是「空第一组 纯文案第二组」的常见写法useNextGroupIfEmpty选项让提取器跳过空组、把槽位指到紧随其后的花括号组上。技能槽位只取第二组。\resumeSubItem{Category}{Items}中类别第一组保持原样只有第二组技能列表可编辑\textbf{Category}{: items}则要求值组以冒号开头冒号后的内容成为槽位文本。id 稳定。resumeSubheading家族的 bullets 按出现位置排序后统一重编号为bullet-0..nskills 为skill-0..ntabularx-itemize家族的\item文本无论花括号形式还是行内文本编号为item-0..n。重排 bullets 时应重排补丁数组顺序而不是改 id。补丁文件与应用逻辑补丁 JSON 的格式文档原文约定{ slots: [ ... 从 extract 清单复制 ... ], patches: [ { id: bullet-0, text: Tailored plain-text bullet (no LaTeX escaping — the script escapes) } ] }patch-latex-content.mjs 的校验行为值得注意slots数组必填必须原样携带 extract 清单的 slots脚本靠它做 id 校验与 span 定位缺失直接报错退出patches中出现任何不在 slots 里的 id会以Unknown patch ids: ...硬失败杜绝把文案写错位置应用时applyPatches()把所有补丁按 span 起点从后往前排序再依次做字符串替换——从后往前改保证前面的 span 偏移不会因后面的插入/删除而错位这是该脚本能在单遍扫描内安全多补丁替换的关键。成功后写出新的.tex自动创建输出目录并打印{ source, output, patched, valid }报告。转义责任在脚本侧。补丁里的text应写纯文本不需要也不应该自己转义 LaTeX 特殊字符——applyPatches()默认对每条text调用escapeLatex()lib/latex-escape.mjs后再回填。这与latex模式「builder 负责转义」的约定一致转义映射为字符转义\\textbackslash{}{/}\{/\}^/~\textasciicircum{}/\textasciitilde{}_//%/$/#\_/\/\%/\$/\#//\|\textless{}/\textgreater{}/\textbar{}±/→$\pm$/$\rightarrow$其中、、|的转义是 pdflatex 默认 OT1 编码下的坑——不处理时p99 100ms会渲染成p99 ¡100mstests/latex-escape.test.mjs中有对应的回归用例锁定该行为。编译步骤--compile-only的区别generate-latex.mjs 默认会校验 career-ops 模板结构至少 4 个\section{}、必需的resumeSubheading/resumeItem/resumeProjectHeading命令、\pdfgentounicode1等——这套校验是给latex模式生成的文件用的。latex-tex模式编译的是用户自有模板因此管线第 8 步必须加--compile-only跳过模板结构校验只保留\begin{document}/\end{document}的基本检查然后直接编译。引擎解析逻辑resolveLatexEngine()依次探测tectonic、pdflatex的--version优先使用 tectonicXeTeX 后端可配合 fontspec/xeCJK 渲染 CJK。编译细节tectonic 路径会先生成临时.tex剔除\pdfgentounicode与\input{glyphtounicode}等 tectonic 不兼容行再编译成功后把 PDF 拷贝到目标路径并清理临时/辅助文件.aux、.log、.out、.fls、.fdb_latexmk、.synctex.gzpdflatex 路径以-no-shell-escape -interactionnonstopmode -halt-on-error连跑两遍解析交叉引用编译失败时脚本会读取.log中!开头的错误行作为compileError写入 JSON 报告——管线第 9 步「报告.pdf路径或编译错误」即消费该字段。伦理规则强制与 modes/latex.md 和 modes/pdf.md 相同四条不可妥协关键词只做改写重组绝不虚构不得添加源.tex或cv.md中不存在的工具、技能或指标尽量保留 bullets 内的行内 LaTeX 标记改写时在补丁 JSON 中输出纯文本补丁脚本负责转义不改写 preamble、宏定义、章节标题、日期、公司名或职位名——除非用户明确要求。该模式明确不做的事不取代cv.md作为系统事实源不解析任意 LaTeX 模板超出两个 v1 家族即停止并指路不在 auto-pipeline 或评估流程中自动运行不提交申请。小结latex-tex模式把「给自有 LaTeX 简历做 JD 定向改写」收敛为一条可验证的脚本链extract-latex-content.mjs产出带稳定 id 和绝对偏移 span 的槽位清单人工/Agent 只负责改slots[].text的文案并遵守不虚构规则patch-latex-content.mjs完成转义与自后向前的安全回填generate-latex.mjs --compile-only负责引擎无关的编译与错误上报。想动手验证可以直接对 examples/latex-tex/resume-subheading.tex 跑一遍 extract → patch → compile或用 tests/latex-escape.test.mjs 里的回归用例核对转义契约。【免费下载链接】career-opsOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)项目地址: https://gitcode.com/GitHub_Trending/ca/career-ops创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Agent开发工具链核心拼图:从模型调用到稳定执行循环的工程实践

Agent开发工具链核心拼图:从模型调用到稳定执行循环的工程实践

2026/9/7 15:42:05

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 自定义 Pipeline 开发指南:继承 Pipeline 基类、注册新任务并发布到 Hub

Transformers 自定义 Pipeline 开发指南:继承 Pipeline 基类、注册新任务并发布到 Hub

2026/9/7 15:42:05

Transformers 自定义 Pipeline 开发指南:继承 Pipeline 基类、注册新任务并发布到 Hub 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mul…

Remotion web-renderer 视觉快照测试实战:为 Web 端视频渲染器新增测试用例

Remotion web-renderer 视觉快照测试实战:为 Web 端视频渲染器新增测试用例

2026/9/7 15:42:05

Remotion web-renderer 视觉快照测试实战:为 Web 端视频渲染器新增测试用例 【免费下载链接】remotion 🎥 Make videos programmatically with React 项目地址: https://gitcode.com/GitHub_Trending/re/remotion 本文围绕 Remotion 仓库中 web-r…

微信聊天记录导出教程:3步本地解析,把HTML、Word、CSV一次拿全

微信聊天记录导出教程:3步本地解析,把HTML、Word、CSV一次拿全

2026/9/7 16:52:09

微信聊天记录导出教程:3步本地解析,把HTML、Word、CSV一次拿全 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHu…

转行AI产品经理的秘诀:不懂AI的产品经理正被淘汰,而AI产品经理却在“躺赚“

转行AI产品经理的秘诀:不懂AI的产品经理正被淘汰,而AI产品经理却在“躺赚“

2026/9/7 16:52:09

AI产品经理:站在技术与商业交汇点的新职业明星 当ChatGPT横空出世,当AI绘画刷屏朋友圈,当智能客服越来越"聪明"……你有没有想过,这些改变我们生活的AI产品背后,都有一群特殊的"产品经理"在默默耕…

IOPaint免费AI去水印教程:一键去掉照片水印,5分钟上手

IOPaint免费AI去水印教程:一键去掉照片水印,5分钟上手

2026/9/7 16:52:09

IOPaint免费AI去水印教程:一键去掉照片水印,5分钟上手 【免费下载链接】IOPaint Image inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion)…

新手开发者第一年:从GitHub账号到开源作品集的成长路线

新手开发者第一年:从GitHub账号到开源作品集的成长路线

2026/9/7 16:52:09

mengrennwpu,这个ID一眼扫过去,拼音好的朋友马上就能拆出来:mengren是“萌新”的拼音,nwpu是西北工业大学的缩写。合起来就是“西工大萌新”。这种ID在GitHub、博客园、校园论坛、牛客网里非常典型,大概率是刚接触编程…

SVN历史信息查看全攻略:从svn log到svn blame实战

SVN历史信息查看全攻略:从svn log到svn blame实战

2026/9/7 16:52:09

1. 先搞清楚SVN历史信息的底层逻辑1.1 全局版本号:SVN历史的核心很多人刚接触SVN时,最容易迷糊的一个点就是版本号。和Git里每个提交有独立的、乱码一样的哈希值完全不同,SVN的版本号是纯数字,而且是整个仓库统一的全局计数器。什…

剧情短视频创作指南:从剧本设计到拍摄剪辑全流程解析

剧情短视频创作指南:从剧本设计到拍摄剪辑全流程解析

2026/9/7 16:42:09

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/7 3:44:24

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/7 8:03:37

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

2026/9/7 0:01:24

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目:基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念,但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测,PyQt5 负责提供可视化的桌面交互界…

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

2026/9/7 0:01:24

简介:UL 1642是锂电池安全领域的重要规范,本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读,用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件,压缩包大小834KB,便…

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

2026/9/7 0:01:24

简介:BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本,由BSI标准出版,重点规定游乐设施和游乐设备在设计与制造环节的安全准则,与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

远程协作的工作台整理

远程协作的工作台整理

2026/9/7 3:38:07

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/6 23:21:51

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…