AgentSkillsCN

hfut-marp-slides

尤其适用于 HFUT 学术答辩、课程报告或论文答辩时,创建 Marp 演示文稿。可通过“PPT”、“幻灯片”、“Marp”、“演示文稿”、“答辩”、“汇报”、“演示文稿”等关键词触发。当 PPT 工作空间中存在项目代码库文件夹时,将严格依据实际源代码分析,生成以事实为依据的内容。

SKILL.md
--- frontmatter
name: hfut-marp-slides
description: Use when creating Marp presentation slides, especially for HFUT academic defense, course reports, or thesis presentations. Triggers on keywords like PPT, slides, Marp, presentation, 答辩, 汇报, 演示文稿. When a project codebase folder exists in the PPT workspace, enforces strict fact-based content generation from actual source code analysis.

HFUT Awesome Marp Slides

Overview

使用 HFUT Awesome Marp 主题快速创建专业的学术演示文稿。基于 Markdown 语法,支持多种布局、导航栏、代码高亮、数学公式等特性。

工程目录分析(Project-Aware Mode)

当用户的 PPT 工作目录中存在工程项目文件夹时,PPT 内容必须严格基于工程事实。

检测条件

生成 PPT 前,先扫描 PPT 工作目录(即用户指定的 ws_src/xxx/ 目录)下是否存在工程项目文件夹。识别标志:

标志文件语言/框架
Cargo.tomlRust
package.jsonNode.js / 前端
go.modGo
pom.xml / build.gradleJava
CMakeLists.txt / MakefileC/C++
pyproject.toml / setup.py / requirements.txtPython
*.sln / *.csprojC# / .NET

如果检测到任何一个标志文件,立即进入 Project-Aware Mode。

Project-Aware Mode 工作流

code
检测到工程文件夹
  ↓
Step 1: 深度代码分析(必须先完成,再写任何 PPT 内容)
  ↓
Step 2: 建立事实清单(Fact Sheet)
  ↓
Step 3: 基于事实清单生成 PPT 内容
  ↓
Step 4: 逐页交叉验证

Step 1: 深度代码分析(强制)

在写任何一行 PPT 内容之前,必须完成以下分析:

  1. 读取项目元数据Cargo.toml / package.json / go.mod 等,提取:

    • 项目名称、版本、作者、描述
    • 所有依赖及其版本号(直接依赖,非传递依赖)
    • 构建配置、feature flags
  2. 读取所有源代码文件 — 逐个读取 src/lib/app/ 等目录下的每一个源文件,提取:

    • 模块结构和文件组织
    • 核心数据结构(struct、class、interface 定义)
    • API 端点 / 路由定义
    • 关键算法和业务逻辑
    • 错误处理方式
  3. 读取配置文件config/.env*.yaml*.toml

  4. 读取测试文件tests/*_test.**.spec.*

  5. 读取文档README.mddocs/

硬性禁止:未读取的文件中的内容不得出现在 PPT 中。

Step 2: 建立事实清单

分析完成后,在生成 PPT 前必须先整理出事实清单(不写入文件,在生成过程中作为内部参照):

code
事实清单示例:
- 项目名:webserver
- 语言:Rust 2021 Edition
- 核心依赖:tokio 1.36.0, serde 1.0.197, flate2 1.0.28, brotli 3.5.0, ...
- 模块:main.rs, request.rs, response.rs, config.rs, cache.rs, param.rs, util.rs, exception.rs
- 支持的 HTTP 方法:GET, HEAD, OPTIONS(代码依据:param.rs 中 ALLOWED_METHODS)
- 压缩算法:Gzip, Deflate, Brotli(代码依据:response.rs 中 compress 逻辑)
- 缓存策略:FIFO(代码依据:cache.rs 中 FileCache 实现)
- ...

每一条事实必须标注代码依据(文件名 + 具体位置)。

Step 3: 严格事实约束规则

以下规则在 Project-Aware Mode 下为强制执行,违反任何一条都是不可接受的:

规则说明违反示例
禁止编造技术栈所有技术栈必须来自依赖文件项目没用 Redis 却写"使用 Redis 缓存"
禁止编造功能只写代码中实际实现的功能代码没有 HTTPS 却写"支持 TLS 加密"
禁止编造架构架构描述必须与代码模块结构一致代码是单体却写"微服务架构"
禁止编造性能数据性能数据必须来自项目文档/README没有 benchmark 却写"QPS 达到 10 万"
禁止美化描述不得将简单实现描述为复杂高级方案FIFO 缓存却写"智能缓存淘汰策略"
代码展示必须真实PPT 中的代码片段必须从源码中提取精简不得凭空编写"示例代码"
禁止推测设计意图只描述代码做了什么,不猜测为什么不得写"考虑到高并发场景特别设计了..."

Step 4: 代码片段引用规范

PPT 中展示代码时:

  1. 必须从实际源码中提取 — 可以精简(删除非关键行),但不能改变逻辑
  2. 标注来源 — 在代码块上方或旁边说明来自哪个文件
  3. 精简规则 — 提取核心逻辑,删除 import、日志、注释等非关键行,控制在 8 行以内(两栏)或 10 行以内(单栏)
  4. 禁止凭空编写 — 不得为了"演示效果"编写项目中不存在的代码

无工程目录时的行为

如果 PPT 工作目录下没有检测到任何工程项目文件夹,则按照用户提供的文字描述正常生成 PPT,不受上述约束。

Quick Start

1. YAML Front Matter(必须)

yaml
---
marp: true
size: 16:9
theme: am_red          # 可选: am_red, am_blue, am_green, am_purple, am_brown, am_dark
paginate: true
headingDivider: [2,3]  # 二级/三级标题自动分页
footer: \ *作者名* *班级* *日期*
---

2. 基础结构

code
封面页 (cover_e)
  ↓
目录页 (toc_b)
  ↓
[章节过渡页 (trans) → 内容页 (navbar + 布局)] × N
  ↓
结束页 (lastpage)

Page Types Reference

封面页

Class特点适用场景
cover_e左白右色三角,右上角校徽最常用,答辩/汇报
cover_a上色下白渐变,居中标题简洁风格
cover_b圆角矩形标题框突出标题
cover_c横向色带,左对齐正式场合
cover_d上色带下白简约风格

cover_e 示例(推荐):

markdown
<!-- _class: cover_e -->
<!-- _paginate: "" -->
<!-- _footer: ![](../hfut-badge/HFUT_Horizontal_name&badge_white.png) -->
<!-- _header: ![](../hfut-badge/HFUT_badge_white.png) -->

# 演示文稿标题

###### 副标题说明

汇报人:姓名
班级信息

目录页

markdown
<!-- _header: 目录<br>CONTENTS<br>![](../hfut-badge/HFUT_badge_white.png)-->
<!-- _class: toc_b -->
<!-- _footer: "" -->
<!-- _paginate: "" -->

- [第一章标题](#页码)
- [第二章标题](#页码)
- [第三章标题](#页码)

章节过渡页

markdown
## 1. 章节标题

<!-- _class: trans -->
<!-- _footer: "" -->
<!-- _paginate: "" -->

内容页(navbar + 布局)

markdown
## 1.1 小节标题
<!-- _header: \ ***文档标题*** **当前章节** *其他章节* *其他章节*-->
<!-- _class: navbar cols-2 fglass -->

<div class=ldiv>
左栏内容
</div>

<div class=rdiv>
右栏内容
</div>

导航栏语法: ***粗斜体*** 文档标题 | **粗体** 当前章节 | *斜体* 其他章节

结束页

markdown
<!-- _class: lastpage -->
<!-- _footer: "" -->
![ ](../hfut-badge/HFUT_Horizontal_name&badge.svg)
###### 感谢观看!

Layout Classes

两栏布局

Class比例div类
cols-250%-50%ldiv/rdivlimg/rimg
cols-2-6460%-40%同上
cols-2-4640%-60%同上
cols-2-7370%-30%同上
cols-2-3730%-70%同上

其他布局

Class说明div类
cols-3三栏ldiv/mdiv/rdiv
rows-2两行tdiv/bdiv
pin-3品字型tdiv + ldiv/rdiv

布局选择原则:

  • pin-3 要求三个区域都有充足内容(每区至少 3-4 行文字),否则大量留白很丑
  • 内容较少时优先用 cols-2cols2_ol_ci
  • timg 不要只放一行标题——应放实质性内容(完整段落、带详细说明的引用块)
  • 总结/展望类页面通常内容偏少,优先选 cols-2 fglass 而非 pin-3

div 后缀说明:

  • ldiv/rdiv/mdiv/tdiv/bdiv: 普通容器
  • limg/rimg/mimg/timg/bimg: 内容居中(适合图片)

Style Classes

列表样式(可叠加)

Class效果
col1_ol_sq单列有序+方形序号
col1_ol_ci单列有序+圆形序号
cols2_ol_sq两列有序+方形序号
cols2_ol_ci两列有序+圆形序号
cols2_ul_sq两列无序+方形
cols2_ul_ci两列无序+圆形

引用框颜色

Class颜色适用
bq-blue蓝色信息说明
bq-red红色警告/重要
bq-green绿色成功/正面
bq-purple紫色提示
bq-black黑色严肃内容

字体大小

Class倍率
tinytext0.8x
smalltext0.9x
largetext1.15x
hugetext1.3x

其他样式

Class效果
fglass毛玻璃效果列表框
fixedtitleA固定标题(上对齐)
fixedtitleB固定标题+底色背景
footnote脚注样式
caption图表标题

Image Syntax

markdown
![](img.png)              # 普通图片
![#c](img.png)            # 居中
![w:500](img.png)         # 宽度500px
![h:300](img.png)         # 高度300px
![#c w:500](img.png)      # 居中+宽度
![#c h:400](img.png)      # 居中+高度

图片占位符(重要)

生成 PPT 时图片往往还不存在,使用占位符模式:

markdown
## 小节标题
<!-- _class: navbar caption -->

<div class=rimg>

<!-- TODO: 替换为实际图片 img/architecture.png -->
![#c h:400](img/placeholder.png)

<div class="caption">
图1:系统架构图
</div>

</div>

占位符规范:

  • 使用 <!-- TODO: 替换为实际图片 img/xxx.png --> 注释标记
  • 图片路径使用有意义的名称(如 architecture.png
  • 必须写好 caption,说明图片内容
  • 用户后续只需替换图片文件,无需改代码

图表标题(关键):

  • 必须在 _class 中加 caption 才能渲染 <div class="caption"> 的样式
  • 例如 <!-- _class: navbar cols-2 fglass caption -->
markdown
<!-- _class: navbar caption -->

![#c h:400](img/diagram.png)

<div class="caption">
图1:系统架构图
</div>

单页内容上限(必读)

Marp 不会自动分页。内容超出页面会被裁切并覆盖脚注。必须严格控制每页内容量。

每页最大内容量

页面类型上限示例
单栏正文总计 ≤10 行1 个表格(≤5数据行) + 标题 + 引用块
两栏 (cols-2)每栏 ≤8 行标题 + 列表(≤5项) 或 标题 + 小表格
含代码(单栏)代码 ≤10 行标题 + 代码块 + 简短说明
含代码(两栏)代码 ≤8 行标题 + 代码块

行数计算:标题行 + 列表项数 + 表格行数(含表头) + 代码行数 + 引用行数 = 总行数

硬性禁止

  • 同一页面或同一栏禁止放两个表格 — 几乎 100% 溢出
  • 两栏代码禁止超过 8 行 — 超出必须精简或拆页
  • 单栏代码禁止超过 10 行 — 超出必须精简或拆页

超出时如何拆页

将一页拆为两页,保持同一小节编号,用短横线加子标题区分:

code
## 3.2 Neo4j 存储 - 数据模型    ← 第一页
## 3.2 Neo4j 存储 - 查询示例    ← 第二页

写完每页必须验证

每写完一页,立即执行以下检查:

  1. 数总行数(标题 + 列表 + 表格 + 代码 + 引用)
  2. 单栏 > 10 行 → 必须拆页
  3. 两栏任一栏 > 8 行 → 必须拆页
  4. 出现两个表格 → 必须拆页
  5. 宁可多一页留白,也不要少一页溢出

Best Practices

图片工作流(重要)

先写结构,后加图片:

  1. 生成阶段 — 使用占位符 <!-- TODO: 替换为实际图片 --> + 写好 caption
  2. 用户准备图片 — 根据 caption 说明准备对应图片
  3. 替换阶段 — 将图片放入 img/ 文件夹,删除 TODO 注释

图片数量要求:

  • 一份 20+ 页的 PPT 至少包含 5-6 张图片占位符
  • 适合放图的位置:整体架构图、数据流/流程图、实验结果图、系统截图/演示图、对比可视化图
  • 图片页通常用 cols-2-64 caption 或单栏 caption 布局,图片放在 rimg 或独立居中

为什么这样做:

  • 纯文字 PPT 信息密度高但视觉单调,图片提升表达力
  • 生成时图片通常不存在,用占位符标记
  • caption 先写好确保图片内容明确
  • 用户只需替换文件,不需要改代码

页面组织

  1. 每章开头用 trans 过渡页 — 给观众清晰的章节切换信号
  2. navbar 保持一致 — 同一章节内用相同的 header 导航
  3. 合理使用 fglass — 列表内容配合毛玻璃效果更美观

内容布局

  1. 图文并排用 cols-2-64 或 cols-2-46 — 文字多的一侧占大比例
  2. 代码展示用 cols-2 — 左边代码,右边效果图/说明
  3. 步骤说明用 col1_ol_ci + fglass — 有序列表+圆形序号
  4. 对比内容用表格 — 清晰展示差异
  5. 总结/展望页用 cols-2 fglass 或 cols2_ol_ci — 不要用 pin-3(内容通常不够填满三区域)
  6. 引用框放实质内容> 引用块应包含总结性段落或详细说明,不要只写一行标题标签
  7. 表格、列表、代码必须放 ldiv/rdiv,禁止放 limg/rimglimg/rimg 使用 flexbox 居中,会压缩表格宽度导致列被截断;limg/rimg 仅用于图片
  8. 两栏高度尽量平衡 — 若一栏内容明显少于另一栏,在较短一栏补充引用块(>)或额外说明文字,避免底部大片留白

内容密度

  1. 每个 div 区域至少 3-4 行实质内容 — 太少则留白过多,显得空洞
  2. 列表项用"粗体关键词+冒号+说明"格式 — 如 **知识蒸馏**:压缩模型体积,降低推理延迟
  3. 避免裸列表 — 只写三五个短词条的列表看起来很单薄,补充解释或加引用块充实内容
  4. 内容上限和拆页规则 — 见上方「单页内容上限」章节,每页写完必须验证行数

技术内容

  1. 代码块指定语言```verilog ```python
  2. 关键代码配合说明 — 先文字解释,再代码展示
  3. 波形/架构图配 caption — 标注图号和说明

信息密度

  1. 每页一个核心观点 — 不要堆砌信息
  2. 超过5条用两列布局 — cols2_ol_ci 或 cols2_ul_ci
  3. 文字过多用 tinytext/smalltext — 保持可读性

Template: Academic Defense

markdown
---
marp: true
size: 16:9
theme: am_red
paginate: true
headingDivider: [2,3]
footer: \ *姓名* *班级* *日期*
---

<!-- _class: cover_e -->
<!-- _paginate: "" -->
<!-- _footer: ![](../hfut-badge/HFUT_Horizontal_name&badge_white.png) -->
<!-- _header: ![](../hfut-badge/HFUT_badge_white.png) -->

# 论文/项目标题

###### 副标题(课程名称/竞赛名称)

汇报人:姓名
指导老师:老师姓名

---

<!-- _header: 目录<br>CONTENTS<br>![](../hfut-badge/HFUT_badge_white.png)-->
<!-- _class: toc_b -->
<!-- _footer: "" -->
<!-- _paginate: "" -->

- [研究背景](#3)
- [方案设计](#N)
- [实现细节](#N)
- [实验验证](#N)
- [总结展望](#N)

## 1. 研究背景

<!-- _class: trans -->
<!-- _footer: "" -->
<!-- _paginate: "" -->

## 1.1 问题描述
<!-- _header: \ ***答辩标题*** **研究背景** *方案设计* *实现细节* *实验验证* *总结*-->
<!-- _class: navbar cols-2 fglass -->

<div class=ldiv>

**背景说明**

- 要点1
- 要点2
- 要点3

</div>

<div class=rimg>

<!-- TODO: 替换为实际图片 img/background.png -->
![#c h:400](img/background.png)

<div class="caption">
图1:问题示意图
</div>

</div>

<!-- 更多内容页... -->

## N. 未来展望
<!-- _header: \ ***答辩标题*** *研究背景* *方案设计* *实现细节* *实验验证* **总结**-->
<!-- _class: navbar cols-2 fglass bq-blue -->

<div class=ldiv>

**方向一标题**

- **关键词A**:具体说明,解释做什么、为什么
- **关键词B**:具体说明
- **关键词C**:具体说明

> 小结或目标说明

</div>

<div class=rdiv>

**方向二标题**

- **关键词D**:具体说明
- **关键词E**:具体说明
- **关键词F**:具体说明

> 小结或目标说明

</div>

---

<!-- _class: lastpage -->
<!-- _footer: "" -->
![ ](../hfut-badge/HFUT_Horizontal_name&badge.svg)
###### 感谢观看!

Common Mistakes

错误正确做法
忘记 <!-- _paginate: "" --> 在封面/目录特殊页面记得隐藏页码
div 类名拼错(如 ldvi检查 ldiv/rdiv/limg/rimg
图片路径错误使用相对路径 img/xxx.png
navbar 语法错误注意 \ 开头,星号数量
class 组合顺序navbar 放前面,布局放后面
忘记 fglass列表内容加 fglass 更美观
pin-3 内容太少,大量留白pin-3 每个区域需 3-4 行以上,否则换用 cols-2
> 引用块只写一行标题引用块应包含实质段落,不要当标签用
列表项太短太裸**关键词**:说明 格式充实每一条
内容超出页面被裁切宁可拆成两页,不要硬挤。单栏 ≤12 行,每栏 ≤10 行
同一页/栏放两个表格几乎必然溢出,必须拆成两页
两栏中代码块超过 8 行两栏代码 ≤8 行,单栏 ≤10 行
<div class="caption"> 无效果必须在 _class 中加 caption 才能渲染图注样式
两栏表格放在 limg/rimglimg/rimg 是 flexbox 居中,会压缩表格列宽导致截断;表格必须用 ldiv/rdiv
两栏高度严重不平衡,底部大片留白较短一栏补充引用块或说明文字平衡高度
有工程目录却编造技术栈/功能必须先深度分析代码,所有内容基于事实清单
代码片段是凭空编写的必须从实际源码提取精简,标注来源文件
写了项目未实现的功能只描述代码中确实存在的功能,不美化不推测

File Organization

code
your-ppt/
├── hfut-awesome-marp.md    # 主文件
├── img/                     # 图片文件夹
│   ├── architecture.png
│   ├── result1.png
│   └── ...
└── your-project/            # [可选] 工程项目文件夹
    ├── Cargo.toml / package.json / ...
    ├── src/
    └── ...

图片命名建议: 使用有意义的名称如 architecture.pngworkflow.png,而非 image1.png

工程目录说明: 如果用户在 PPT 目录下放入了工程项目文件夹,自动进入 Project-Aware Mode(见上方「工程目录分析」章节)