演示文稿
本技能定义的演示文稿是一个小型React项目,用于渲染1920x1080的幻灯片,并附带一个流水线,将其转换为原生PowerPoint(可编辑文本、演讲者备注)、PDF和演讲脚本。starter/目录是一个完整的、可工作的演示文稿(12张越南语示例幻灯片,蓝色主题,每种布局各一个示例)。复制它,替换内容,保留系统。
在开始任何其他工作之前,先阅读需求文档中的三件事:听众是谁(除非另有说明,否则假设无先验知识)、演讲时长是多少、以及演讲者自己的大纲内容。演讲者的大纲决定顺序和内容。你的职责是清晰和美观,而非提出新的主张。
1. 开始
cp -R "<本技能文件夹>/starter" "<项目>/<演示文稿名称>"
cd "<项目>/<演示文稿名称>/deck" && npm install && npx playwright install chromium
npx vite # 开发服务器,端口在vite.config.ts中
然后设置名称:tools/deck-name.txt(PPTX和PDF的文件名)、deck/index.html标题、deck/script-doc.mjs的标题、deck/src/deck/types.ts中的章节名称(ACTS),以及Chrome中的页脚文本和Logo(deck/src/deck/Deck.tsx)。如果另一个演示文稿正在运行,请在deck/vite.config.ts中选择一个空闲端口。
项目结构:
deck/src/slides/*.tsx:每个幻灯片或组的文件,顺序在index.ts中定义。每个文件导出一个SlideDef(id、title、act、minutes、notes、Component)。deck/src/ui/atoms.tsx:共享组件:Bg、Header、HaloArt/Art、Feature(高亮面板)、IconTile、Stat、Source、LogoTile、AppIcon。Links.tsx绘制带有缓慢移动点的连接线。World.tsx是由真实国家形状组成的虚线世界地图。deck/src/index.css:存放颜色令牌。通过更改--accent、--accent-ink、背景值以及rgba色调来重新设置主题,而不是添加第二个主题。tools/:艺术生成、构建、发布。
2. 内容规则(按修改频率排序)
- 遵循演讲者的文档。 章节顺序、定义措辞和每个数字都来自文档。如果大纲只有标题,则从主要来源添加最少内容,在
Source中链接,并告知所有者你填充了哪些幻灯片。切勿呈现列表不支持的计数(例如,列表宣布有30个名称但实际只有28个:显示列表,省略该数字,并报告差异)。 - 标题要极其简单。 标题使用受众已经使用的词语命名幻灯片:"5 cách thu thập dữ liệu xuyên biên giới","Yêu cầu trong tình huống khẩn cấp"。聪明或压缩的句子会被拒绝。一行,最多约40个字符,字号66 px;后半部分使用强调色。
- 最少文本,使用平实的语言。 每个卡片一个想法,几行短文本。常见的英语术语放在方括号中或作为小的第二行("service provider")。使用数字,而非数字单词。标题上方无小标签,无冒号或中点作为装饰,无促销性措辞。
- 翻译所有内容,从源演示文稿翻译成受众的语言;保留专有名称和官员会遇到的英语术语。
- 演讲者备注承载完整文本。 幻灯片保持简短形式;备注中包含演讲者大纲中的完整句子,确保内容完整。将
minutes与演讲时长进行核对,并报告超时情况。 - 真实组织的真实Logo(官方文件,绝不使用生成的仿制品);在
assets/logos-src/SOURCES.md中记录每个Logo的来源。所有者要求的组织Logo放在每张幻灯片的Chrome中,标题页和结束页中放大显示。 - 后台进行事实核查。 派出一个研究Agent核查你添加的事实(日期、文章编号、法律编号、计数),并将结果写入
docs/facts.md,每项附带一个URL。如果演讲者自己的数字与公开来源不同,则保留她的数字并报告差异。
3. 图形
每一张内容幻灯片都有插图。仅使用图标的幻灯片被认为很无聊。只有当幻灯片同时有艺术作品时,才允许使用小的lucide图标作为行标记。
- 单色系: 由纯色平面组成的紧凑伪3D对象,无渐变或发光,单色系加上一个小的黄色标记。风格参考表是
assets/ref/blue-indicators.png和green-indicators.png。表中的每个图块本身必须是平面的:一个发光的图块会将新图像引向渐变。对于另一种颜色,重新给表着色(tools/blue_ref.py),更改tools/art.mjs中的调色板行,生成第一批,然后从16个你自己最好的结果中重建表,并从那时起使用它(蓝色表就是如此制作的)。 - 每张图像在
tools/art-list.tsv中添加一行(名称<TAB>概念)。概念是一个清晰的对象,最多有两个辅助细节,且无文本:"一个有挂锁封口和小眼睛交叉徽章的密封信封"。 P=4 bash tools/art-batch.sh使用Codex CLI的图像工具生成缺失的内容(每张约80秒;需要安装并登录codex,模型在tools/art.mjs中设置)。在后台运行它,并继续编写幻灯片。某些运行会静默失败:完成后,检查每个名称是否存在,并针对缺失的名称再次运行。docker build -q -t deck-pack -f tools/Dockerfile tools && docker run --rm -v "$PWD":/w -w /w deck-pack python tools/art_finish.py将其裁剪为deck/public/art/*.webp。使用<HaloArt name="..." size={...} />。- 敏感主题(对儿童的伤害、自杀、恐怖主义)使用保护性符号:雨伞、盾牌、救生圈、警告标志。
- 地图来自
World.tsx(真实形状),绝不来自图像模型。图表(韦恩图、流程图、中心辐射图)是幻灯片中的SVG。
4. 布局:相邻两张不同
每个幻灯片布局都不同的演示文稿曾被退回("每张幻灯片布局极其相似")。给每张幻灯片与其内容相匹配的形状。starter中有每种布局的一个工作示例:
| 内容 | 布局 | Starter中的幻灯片 |
|---|---|---|
| 按顺序的几个部分 | 沿一条路径上升的步骤,大而淡的数字 | s02-agenda.tsx |
| 一个总体概念加上其他几个 | Bento:一个高亮的大图块和一个2x2网格 | Terms in s03-terms.tsx |
| 一个流程 | 流水线:一条线上的编号工位,流入一个结果面板 | s05-preserve.tsx |
| 达到同一目标的多种方式 | 中心辐射图 | s06-channels.tsx |
| 具有相同属性的并行类型 | 全宽行:图片、问题、名称、内容 | DataTypes in s03-terms.tsx |
| 带一个警告的选项 | 图块网格加一个Feature面板 | Emergency in s08-requests.tsx |
| 交接链 | 带箭头的节点流(Link from ui/Links.tsx) | starter中无 |
| 两种选择 | 两个宽面板 | starter中无 |
| 具有共享核心的重叠区域 | 韦恩图,带引线的标签 | Directorate in s11-venn.tsx |
| 地点 | 带图钉或高亮国家的虚线地图,旁边是列表 | s17b-map-list.tsx |
| 中心带有四个功能 | 中间的圆盘,角落中有项目 | AspDesk in s14-corners-bridge.tsx |
| 两侧及中间通过的物品 | 桥:两个河岸,中间有车道 | Gateway in s14-corners-bridge.tsx |
| 证明论点的数字 | 带有Stat的Feature面板 | starter中无 |
当演讲者自己的幻灯片有图表创意(如韦恩图、地图旁边的列表)时,保留意图和内容并重新绘制;不要保留她的样式。
5. 文字排版(以下每条都曾是拒绝的截图原因)
- 没有任何内容跳跃。 在一组卡片中,同一元素在每张卡片中从相同高度开始。使标题具有相同的行数(重新措辞,或给每个标题两行),然后将其余内容直接堆叠在下方。无空槽,标题及其文本之间无
margin-top: auto间隙。 - 按意义分行。
.slide是white-space: pre-line;在每个短语末尾写\n:"Chuỗi bảo quản\nchứng cứ",绝不写作"Chuỗi bảo\nquản chứng cứ"。保持每个手动换行足够短,浏览器不会再次换行;如果换行了,缩短该行或加宽框。名称列表也手动换行(不间断空格会破坏PowerPoint)。 - 每行一个字号。 大数字及其单位是两个块(
Stat);引导描述的强调词自成一行。 - 边距。 内容保持在左侧和右侧120像素内,并避开Logo条(顶部30到98像素)。检查地图和图表上的标签是否与右边缘对齐。
- 幻灯片完全打开。 无入场动画;最多允许一次点击展开,且仅当展开是要点时。环境动画(流动的点、标题背景)是可以的。
- 除非要求,否则幻灯片上无进度或章节编号小部件;页脚导轨就足够了。
6. 构建和检查
zsh tools/release.sh # 约5分钟:release/ 目录获取 Deck/(网页)、.pptx、.pdf、Kich-ban-trinh-bay.pdf
发布版会通过Microsoft PowerPoint重新保存文件以嵌入字体。它首先会退出PowerPoint:检查没有未保存的内容处于打开状态,并在/tmp中占用一个锁定文件夹,因此两个会话不会同时重新保存。如果在Mac上没有PowerPoint,在tools/release.sh中跳过该步骤;演示文稿仍可打开,但字体必须安装在演示机器上。
检查是工作的必要部分,每次迭代都要进行:
cd deck && npx vite build && node export.mjs ../tmp/export将每张幻灯片渲染到tmp/export/sNN.png。- 全尺寸查看每张幻灯片,一次一张(缩小到宽1600像素)。联系表会隐藏换行、接触边界的文本以及未对齐的行。查找:你未手动断开却自动换行的行、靠近或超出边缘的文本、接触Logo的标题、卡片间不均匀的起始位置、缺失的图像(一个空描边方块)、重叠的标签。
- 发布后,查看
tmp/lo/p-NN.png(LibreOffice布局的PowerPoint)中你更改的幻灯片。这是文本框溢出显示的地方。LibreOffice渲染的字型比PowerPoint略宽,因此那里的近似失误是真正的风险。 - 修复、重新构建、再次查看。清晰陈述你查看了什么以及未查看什么。
然后,将release/复制到桌面上一个命名的文件夹中,在 localhost 上服务release/Deck(docker run -d -p 127.0.0.1:<端口>:80 -v "$PWD/release/Deck":/usr/share/nginx/html:ro nginx:alpine),并在被要求时打开该文件夹。
7. 报告
首先说明哪些内容已准备就绪及其位置。然后列出需要所有者或演讲者决定的事项:你超出大纲添加的任何内容、你保留的与来源矛盾的数字、任何对不上的计数、实际演讲时间与时长对比。使用平实的语言,不提及文件名或函数名。