uuoov

pptx-expert-letters

从 A4 信函式 PPTX 模板 + 会议议程批量生成/更新整套专家沟通函(主席/致辞/主持/讲者/讨论,含简历简介页、渲染验收)。凡用户提到"沟通函/专家函/会议函"批量生成、按议程做某场会议的全套沟通函、更新某场沟通函、照旧会议模板做新会议函、或给出一封沟通函样例+议程要求量产——即使用户只给了一张议程截图,也应使用本技能。

uuoov 0 Updated 1w ago

Resources

5
GitHub

Install

npx skillscat add uuoov/pptx-expert-letters

Install via the SkillsCat registry.

SKILL.md

专家沟通函批量生成(A4 信函式 PPTX)

把"照上一场会议的沟通函模板,按新议程给全套专家产出一人一份 A4 信函式 PPT"这件事工程化。核心循环:

模板解剖 → 议程任务矩阵 → 简历收集 → 配置驱动生成 → 程序审计+渲染验收 → 变更联动

第 0 步:模板解剖(每次必做,先于任何内容)

拿到模板后先跑解剖脚本,产出"模板档案"——后面所有生成参数都从这里来,不要凭猜测:

python scripts/analyze_template.py <模板.pptx> > anatomy.txt

必看的解剖点(详解见 references/anatomy.md):

  • 信头来源:信函页抬头常是整页背景图。检查 p:bg 页级背景 vs 母版背景是否一致——实战中 40/41 份模板的信头是另一场会议的旧图,必须先确认用哪张,错信头是发函事故。
  • 文本框结构:称呼/开场白/时间/地点各段的位置与 run 拆分方式;段落里常有空段,定位必须用文本前缀,不能用索引。
  • 任务表:行结构(表头/篇章行/任务行/话题行)、每行 EMU 行高、内容格 run 的加粗模式。
  • 简介页版式(若主持函多页):标签/姓名/简历/主题框的位置与字号。

第 1 步:议程 → 任务矩阵

从议程(图、表、文字均可;图先放大裁剪逐行核对,勿信单次 OCR)提取每人任务,并交叉核对

  • 每个讲者的"邀请人/主持人"必须与该环节主持函互相印证(实战中曾发现讲者函的邀请人是旧议程残留的另一位教授)。
  • 主持交接链要成环:李建成→刘振华→…→末位主持;末位主持的下一项通常是"邀请主席团/大会总结"。
  • 议程图可能被截断(如最后一行"大会总结"被裁掉),务必确认看过最后一行。

产出一张人×任务表给用户过目确认,再进入生成。

第 2 步:简历收集

  • 首选串场 PPT(会务串场文件里通常有每位专家的简历页):用 scripts/extract_bios.py --deck 串场.pptx --names 名单 按姓名匹配批量抽取到 bios.json
  • 散简历支持 docx/pptx:--file 某某简介.docx --name 陈群
  • 缺简历的专家在简介页写占位符"【简历待补充】"并明确告知用户缺谁、缺在哪几页——绝不虚构头衔

第 3 步:配置驱动生成

把任务矩阵写成 JSON 配置,跑生成引擎(详见 scripts/build_letters.py --help,配置 schema 见文件头注释,真实样例见 examples/):

python scripts/build_letters.py config.json

引擎内置了全部 XML 级操作与防错(run 重建、行克隆、行高、简介页、备注行补偿、话题防截断)。内容规范默认值:

  • 称呼尊敬的 {姓名} 教授,(姓名大号加粗下划线);两字姓名是否加空格问用户或沿用用户上次的偏好
  • 开场白:会议名加粗;不要往正文里加主办会议括注——固定高度文本框会溢出一行,把"您的任务环节"压到表格上。
  • 任务表加粗规则:只加粗人名具体工作词(讲题/环节名/主持嘉宾/大会总结),连接语不加粗。整行加粗是旧版习惯,已被用户否决。
  • 主持任务行两段式(新版式):首段"由 X 教授 介绍并邀请 您 作为本环节主持嘉宾"(首个环节用"由 大会主席")+ 空行 + 任务段。
  • 主席函:开场致辞行的邀请人按议程主持列写实际主持人("由 李建成 主任 邀请您进行…";"由 画外音"仅当议程无主持时用);大会总结行写明邀请人(末位主持)。

第 4 步:验收(生成 ≠ 完成)

python scripts/qa_render.py <输出目>     # LibreOffice 转 PDF + PyMuPDF 检查

三层验收,缺一不可:

  1. 程序审计:逐份核对称呼/时间/地点/任务行/篇章/话题/页数/加粗残留(如旧的"画外音"、旧人名)。
  2. 渲染:全部转 PDF 确认能打开、无空页;LibreOffice 渲染。PowerPoint COM 在多数机器上报 E_FAIL,不要走那条路。
  3. 抽查渲染图:每类角色至少人工(视觉)看一页——表格是否压线、行高是否舒适、文字是否溢出截断。

第 5 步:变更联动(换人/改时间必查清单)

议程一变,牵一发动全身。换一位主持至少联动:他的任务函、上一环节主持函的"下一环节主持"句与简介末页下一环节主持函的交接句被介绍讲者函的邀请人、简介页简历。改完重跑全部生成 + 审计,不要手补单个文件。

踩坑速查(细节见 references/pitfalls.md)

  • XML 重建 run 必须链式 addnext,否则整段文字倒序。
  • 称呼姓名在模板里被拆成多个 run,只替换第一个会残留旧字——整段重建。
  • 克隆表格行后序号列要重编号
  • 固定高度文本框(150% 行距)加备注行会挤压表格——同时删掉"您好"后的空段补偿。
  • 简介页主题框按 24pt 两行设计,长话题会溢出截断——估算超 3 行整框降到 18pt。
  • 32 位 Python 偶发 MemoryError:捕获后 gc + 重试 3 次;模板 Presentation 做全局缓存。
  • 目标文件被用户在 PowerPoint 里打开会 PermissionError:提示关闭后重跑,不要跳过该文件。