下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/aicx--handdrawn-card-ppt.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @aicx/handdrawn-card-ppt。把培训课件(PDF/PPT/Word 等)重制为「知识卡片」风格的本地 PPTX,可选同时导出 PDF。 全程离线,不依赖任何在线服务;字体自动校验并回落到本机常规字体(楷体/微软雅黑),确保本地 PowerPoint、WPS 打开即正常渲染。当用户要求把培训材料、课件、手册转成知识卡片风 PPT、手绘风培训 PPT 时使用。
上传资料后直接产出完整 PPT,无需逐页确认。一页对应一页,忠于原文要点但不照抄全文,关键词加粗划重点。
阅读全文 (展开查看完整说明)
概述
知识卡片风格PPT课件制作(本地 PPTX 版)
把培训课件重制为活泼、可编辑、知识卡片风的本地 PPTX 文件。
输出目标为本地 .pptx(可选同时导出 .pdf),全程离线,不依赖任何在线服务。字体强制校验并回落本机常规字体。
排版纪律(强制):
- 字号一律用偶数整数(8/10/12/14/16/18/20/22/24/28/32/34/36/40/44/48/54/60/72),
不写奇数、不写小数;脚本与 lint 都会自动规整/报错。
- 行距只用标准档位:
1.0(单倍)/1.2/1.5/2.0,不要自定义倍数(如 1.35、1.6、1.7)。
核心原则
- 上传资料后直接产出完整 PPT:不要求用户逐页确认样稿。读完源材料、理清结构后
一次性完成全部页面,最后统一交付。
- PDF 一页对应 PPT 一页,不合并不拆分(除非一页 PDF 天然含两个独立模块,可拆成两页)。
- 忠于原文要点,关键词加粗划重点,但不把原文整段搬上来;提炼为卡片、流程、对比、表格。
- 全部用 PPT 原生元素(形状/表格/连接线图标/文本框),不截图不贴图,保证可编辑。
- 字体必须本机可用:只用楷体、微软雅黑、黑体、宋体、等线这类 Windows/Office/WPS 常规字体,
绝不使用第三方字体。生成脚本自带字体校验与回落。
- 字号偶数、行距标准档:字号只用偶数整数,行距只用 1.0/1.2/1.5/2.0,不自定义倍数。
- 每页写完必须 lint(error_count=0)再合成,合成后必须导出 PDF 截图肉眼验收。
输出产物
| 产物 | 说明 |
|---|---|
<名称>.pptx | 主交付物,本地可编辑 |
<名称>.pdf | 可选,用本机 PowerPoint/WPS 导出 |
<名称>_preview/pXX.png | 验收用逐页截图(不交付,仅供自检) |
设计系统(必须严格遵守)
| 项 | 值 |
|---|---|
| 画布 | 960 × 540(16:9) |
| 背景 | rgba(252, 250, 246, 1) 米白 |
| 标题色 | rgba(15, 35, 75, 1) 深藏青 |
| 主色 | rgba(30, 60, 114, 1) 深蓝 |
| 中蓝 | rgba(91, 141, 196, 1) |
| 浅蓝填充 | rgba(232, 240, 248, 1) |
| 正文色 | rgba(40, 55, 80, 1) |
| 弱化色(—/说明) | rgba(120, 135, 160, 1) |
| 字体 | 楷体 / 微软雅黑 / 黑体 三选一,按层级灵活分配(见下) |
| 卡片 | 白底 + 2px 蓝色 dashArray="dash" 虚线边 + 圆角 |
| 禁止色 | 橙色/红色/绿色/紫色等跳出色,一律用蓝色单色阶 |
字体分配(灵活使用)
字体不是「大标题楷体、其余雅黑」的死规矩,而是按视觉层级灵活分配。三个可用字体族:楷体(人文、有笔意)、微软雅黑(现代、清晰)、黑体(厚重、有力)。
| 层级 | 推荐字体 | 说明 |
|---|---|---|
| 封面主标题 / 页面大标题 | 楷体(默认) | 保留手绘笔意的主视觉 |
| 章节大编号、篇名 | 楷体 | 与封面同族,强化章节感 |
| 子标题 / 卡片大标题 / 小标题 | 楷体 或 黑体 | 二者皆可,按版面气质选 |
| 表格表头 | 黑体 或 微软雅黑 | 黑体更醒目;密集表格用雅黑更清爽 |
| 正文要点 / 说明 / 注释 | 微软雅黑 | 小字号下最清晰 |
| 页眉胶囊 / 右上小字 / 落款 | 微软雅黑 | 小字求稳 |
选择规则:
- 楷体用于需要「手写温度」的地方:大标题、章节编号、卡片主标题。
- 黑体用于需要「分量感」的地方:强调型子标题、数据/结论标签、表格表头。
- 微软雅黑用于需要「清晰度」的地方:正文、说明、小字号标签。
- 同一页内字体不要超过 2 种,避免花乱;跨页保持一致即可。
- 三种字体都是 Windows 自带、Office/WPS 常规字体,无需回落也能渲染。
- 写法:在
<content>上加fontFamily="楷体"/fontFamily="黑体"即可,缺省跟随--font-mode。
详细色板、字号、间距规范见 [references/design-system.md](references/design-system.md)。
标准页面骨架
每页(封面/章节扉页/结束页除外)统一骨架:
- 左上胶囊章节标签:
topLeftX=56 topLeftY=36,type="slides-full-round-rect"深蓝底白字,
文字必须与目录/章节名完全一致(如「保密合规」,不要漏字)。
- 右上小字:
topLeftX=700 topLeftY=40,caption 12px 浅灰,写「新员工入司培训 · 法务合规篇」。 - 主标题:
topLeftX=56 topLeftY=82,34px 楷体 bold,wrap="false"。 - 子标题:楷体或黑体皆可(20~24px bold),与主标题同页时字号至少差两档。
- 标题右侧不要放装饰图标。
- 右下角落款:
topLeftX=700 topLeftY=510,12px 浅灰右对齐,只放部门名(如「法务合规部」)。
版式库(避免每页都是卡片堆叠)
详见 [references/layouts.md](references/layouts.md):
- 封面:左上标题区 + 左下主标题副标题 + 右侧图标组,不放目录卡片。
- 章节扉页:右侧大编号(如「05」)+ 篇名 + 部门。
- 左右分栏:左深蓝块放定义/结论,右白卡/浅蓝卡放要点。
- 左右对比:左白底卡(A)右深蓝块(B),底部可加浅蓝提示条。
- 横向三步流程:三张色块卡 + 「→」连接。
- 图标矩阵:4+3 或 3×2 小卡片,每张一个图标+标题+一句话。
- 原生表格:结构化数据(如密级表)必须用
<table>,不要用 shape 拼格子。 - 结束页:米白底居中「谢谢聆听」,不要深色底。
XML 语法(slides SML 子集,本地实现)
<slide xmlns="https://www.larkoffice.com/sml/2.0">
<style>
<fill><fillColor color="rgba(252, 250, 246, 1)"/></fill>
</style>
<data>
<!-- 形状:text / rect / round-rect / slides-full-round-rect / ellipse ... -->
<shape type="slides-full-round-rect" topLeftX="56" topLeftY="36" width="150" height="30" presetHandlers="15">
<fill><fillColor color="rgba(30, 60, 114, 1)"/></fill>
<content textType="body" fontSize="14" color="rgba(255,255,255,1)"
textAlign="center" verticalAlign="middle" lineSpacing="1.2">
<p>保密合规</p>
</content>
</shape>
<!-- 文本:局部变色加粗用 span,不要用 strong color -->
<!-- 字号偶数整数,行距只用 1.0 / 1.2 / 1.5 / 2.0 -->
<shape type="text" topLeftX="56" topLeftY="82" width="600" height="46">
<content textType="title" fontSize="34" fontFamily="楷体" bold="true"
color="rgba(15,35,75,1)" wrap="false" lineSpacing="1.2">
<p>商业秘密的概念</p>
</content>
</shape>
<!-- 卡片:白底 + 蓝色虚线边(边框必须用 <border/>,不是 <line>!) -->
<shape type="round-rect" topLeftX="56" topLeftY="160" width="398" height="180" presetHandlers="14">
<fill><fillColor color="rgba(255,255,255,1)"/></fill>
<border color="rgba(91,141,196,1)" width="2" dashArray="dash"/>
</shape>
<!-- 子标题:楷体或黑体都可以,按版面气质灵活选 -->
<shape type="text" topLeftX="76" topLeftY="176" width="360" height="28">
<content textType="body" fontSize="20" fontFamily="楷体" bold="true"
color="rgba(15,35,75,1)" lineSpacing="1.0">
<p>不构成商业秘密的情形</p>
</content>
</shape>
<!-- 图标:iconType 沿用 iconpark 路径,本地按语义名映射内置矢量图标 -->
<icon iconType="iconpark/Safe/protect.svg" topLeftX="500" topLeftY="180" width="36" height="36">
<fill><fillColor color="rgba(30,60,114,1)"/></fill>
</icon>
<!-- 表格:table height 必须等于各 tr height 之和 -->
<table topLeftX="56" topLeftY="160" width="848" height="300">
<colgroup><col width="160"/><col width="230"/><col/></colgroup>
<tr height="44">
<td><fill><fillColor color="rgba(30,60,114,1)"/></fill>
<content textType="body" fontSize="12" bold="true" color="rgba(255,255,255,1)"
textAlign="center"><p>密级</p></content></td>
<!-- ... -->
</tr>
</table>
</data>
</slide>执行流程
- 读源材料:用 pymupdf 提取 PDF 每页文字并渲染截图,理清每页逻辑结构。
- 在 CWD 下建工作目录:
<work>/pages/放每页 XML,<work>/shots/放验收截图。 - 逐页写 XML 并一次性产出全篇:读完资料即直接做完所有页,不要停下来等用户逐页确认。
命名 page_01.xml、page_02.xml…(序号即页序)。
- lint:
python3 <skill>/scripts/xml_lint.py --input <work>/pages --fix-suggesterror_count 必须为 0。
- 合成 PPTX:
python3 <skill>/scripts/render_pptx.py --slides-dir <work>/pages
--output "<输出>.pptx" --font-mode office脚本会自动校验字体可用性并打印实际使用字体。
- (可选)导出 PDF + 逐页截图验收:
python3 <skill>/scripts/export_check.py --input "<输出>.pptx" --outdir <work>/shots然后用 Read 看截图,检查溢出、重叠、表格换行、字体是否正常。
- 质量检验:对照原 PDF 逐页核对——结构忠于原文、无重复无逻辑错乱、
所有页 lint error=0、数据/数字与原文一致。
- 字号落盘复核(可选但推荐):解包输出的 pptx 检查
ppt/slides/slideN.xml,
确认所有 sz="..." 都是偶数整数 pt(脚本已自动规整,此步用于兜底验证):
import zipfile, re
z = zipfile.ZipFile("<输出>.pptx")
for n in z.namelist():
if re.match(r"ppt/slides/slided+.xml$", n):
for v in set(re.findall(r'sz="(d+)"', z.read(n).decode("utf-8"))):
pt = int(v) / 100
assert pt == int(pt) and int(pt) % 2 == 0, f"字号 {pt}pt 不合规"Windows 环境注意事项、已知技术坑见 [references/pitfalls.md](references/pitfalls.md)。
字体规范(硬要求)
只用本机常规字体,确保任何 Windows + Office/WPS 环境都能正常渲染。
| 用途 | 首选 | 回落链 |
|---|---|---|
| 大标题 | 楷体(KaiTi,Win 中文版自带) | 黑体 → 宋体 |
| 子标题(灵活) | 楷体 或 黑体 | 微软雅黑 → 宋体 |
| 正文 | 微软雅黑(Microsoft YaHei) | 黑体 → 宋体 → 等线 |
- 禁止使用寒蝉正楷体、思源黑体、站酷、汉仪等第三方字体——目标机器上大概率没有。
--font-mode可选office(默认,楷体+微软雅黑)/modern(华文楷体+等线)/
classic(楷体+黑体,最保守)。
- 单页内用到的字体族不超过 2 种,三族混排会显乱。
render_pptx.py会扫描本机已装字体,逐字校验;请求字体缺失时按回落链替换并打印告警。- 正文/标题的中西文字体都要显式设置(
a:latin+a:ea),否则中文会回落到默认字体导致字形不一致。
排版规范(硬要求)
字号:只用偶数整数
| 用途 | 字号 |
|---|---|
| 章节大编号(扉页「05」) | 72 |
| 封面主标题 / 页面大标题 | 34 |
| 卡片大标题 | 20 ~ 24 |
| 卡片小标题 / 小标签 | 16 |
| 正文要点 | 12 ~ 14 |
| 说明、注释、脚注 | 10 ~ 12 |
| 页眉胶囊文字 | 14 |
| 右上小字 / 右下落款 | 12 |
- 取值集合:
8 10 12 14 16 18 20 22 24 28 32 34 36 40 44 48 54 60 72。 - 不写奇数(13/15/11…),不写小数(12.5)。留白不够时改版式或删字,不要靠奇数微调。
render_pptx.py的normalize_font_size()会自动把奇数向上取偶、小数四舍五入;
xml_lint.py 会对奇数/小数字号直接报 error。
行距:只用标准档位
| 档位 | 适用场景 |
|---|---|
1.0 | 单行大标题、胶囊标签、表格单元格 |
1.2 | 密集列表、表格、卡片要点(默认档) |
1.5 | 常规正文、段落说明(正文默认档) |
2.0 | 需要呼吸感的封面/扉页大标题、极短文案 |
- 不要自定义倍数(
1.35、1.6、1.7…一律不允许)。 render_pptx.py的normalize_line_spacing()会就近吸附到上述四档;
xml_lint.py 对非标准档位报 error。
- 兼容写法:
lineSpacing="1.5"或lineSpacing="multiple:1.5"均可,两者等价。
常见返工点
- 标题右侧小图标 → 去掉,不要在主标题旁放装饰 icon。
- 章节胶囊名必须与章节名完全一致,不能漏字。
- 结束页/深色底上文字看不清 → 结束页改米白底。
- 橙色等跳出色 → 一律深蓝/中蓝,不引入其他色相。
- 内容太少 → 对照 PDF 补全要点,不要只放标题。
- 版式单一 → 相邻页交替用不同版式(分栏/流程/矩阵/表格)。
- 表格数据必须与 PDF 完全一致,不要简化合并列。
- 图标变成实心圆点 → 说明图标语义名没命中内置库,去
icon_lib.py补ALIASES映射。 - 卡片虚线边不显示 → 边框元素写成了
<line>。必须写<border color="..." width="2" dashArray="dash"/>,
写成 <line> 会被静默忽略(不报错、不警告,只是没边框)。
- 形状内短标签折行(如圆形里的「与陌生人」「合作机构」)→
wrap="false"对形状自带文字无效。
把形状加宽(4 字标签 ≥96px),或把文字拆成独立 text 形状叠放。
- 局部加粗没生效 → 用了
<b>标签。内联只认span/strong/em/u/del,
<b> 会被静默丢弃。改用 <span bold="true">。
- 导出 PDF 只得到 1 页 → WPS 把每页导出成独立文件,且常是 JPEG 冒充 .pdf。
见 references/pitfalls.md,export_check.py 已内置魔数嗅探与合并。
- 字号出现奇数或小数 → lint 直接报错;改成最近的偶数(如 13→14、12.5→12)。
- 行距写了 1.6/1.7/1.35 等自定义倍数 → 改成 1.5(常规)或 1.2(密集列表)。
- 全页只有一个字体 → 除大标题用楷体外,子标题可换用黑体制造层次;正文保持微软雅黑。
单页字体族 不超过 2 种,跨页同一层级保持一致。
- 校验脚本「该报错却不报」 → 很可能是 ElementTree 命名空间陷阱:
带 xmlns 默认命名空间时 el.iter("p") / el.findall("tr") 会静默返回空列表。一律改用 if e.tag.lower() == "p" 判断。详见 references/pitfalls.md。
- 正文一大段一个重点都没加粗 → lint 会给
no_bold_highlight提示,
挑 2-4 个关键词用 <span bold="true"> 划重点。