本文介绍:Marp是什么?

以下是摘自Marp官网(Marp)的介绍:

  • Marp (also known as the Markdown Presentation Ecosystem) provides an intuitive experience for creating beautiful slide decks. You only have to focus on writing your story in a Markdown document.
  • Marp(也称为 Markdown 演示文稿生态系统)为创建精美的幻灯片提供了直观的体验。你只需要专注于在 Markdown 文档中编写你的故事。

也就是说,Marp直接基于你的Markdown格式来编译生成PPT,它的核心思想跟Latex一样,是“内容与样式分离”。你只管用最纯粹的Markdown内容,排版、美化、对齐这些破事儿,交给预设好的theme去操心。而这样同样给予了我们充分地使用AI(LLM)来对其进行修改的空间,因为AI(LLM)产出的同样也是一份Markdown文件,而不是像NotebookLM或Nanobanana Pro那样的图片。

所以这样,它的优缺点就很明显了:

优势:

  1. 和Markdown衔接流畅,格式定义和使用方法非常简单,上手较快
  2. 在AI生成不满意的地方可以轻松介入调整
  3. 他本质是Markdown渲染,不是画图,所以不会像AI绘画一样出现渲染问题

缺点:

  1. Markdown本身介于Word和Latex中间,是一种弱格式的轻量化文本标记语言。所以他对格式的定义比较弱,美观性相对不足,Markdown本身玩不出花来
  2. 现在没有比较完善的模板网页合集,都只能在github上自己找

所以这样你们就能理解为什么我的标题写这是“糊弄组会的最好PPT生成方法”了:因为组会上很多老师对格式的要求没有那么严格,你把内容、过程、结果这些写清晰就行。而真要到了严肃使用PPT演讲,比如会议、答辩等场合,Markdown本身的弱格式极大地限制了PPT优美的上限。

本文参考:

  1. CC98 @Azaryn 大佬的帖子:都什么年代了,还在写传统PPT?
  2. Marp 官网:Marp: Markdown 演示生态系统 — Marp: Markdown Presentation Ecosystem

Slowist老师提到可以使用Typst Touying来进行格式化的PPT/PDF生成,与Marp的缺陷互补,其相较于基于Markdown的Marp有着更加优美的格式。emm,让我日后学习一下。

Marp 下载:基于VSCode

看过我前面几篇文章的都知道我包是VSCode的孝子,不过主要的原因是Marp对VSCode的适配是最好的,也是官方非常推荐的用法。另一种更加复杂的方法是使用Marp CLI,感兴趣的可以去官网看。

直接在VSCode扩展中搜索Marp和Markdown,然后下载如下两个即可:

如果你还不太会用Markdown,或者在VSCode外面用Markdown,可以看下我的这篇文章:从Word、MarkDown到Latex,打造最优雅的写作方式 | Paradox’s Website

然后可能如果你想在VSCode里面编译Marp和Markdown,并在VSCode中看到PDF编译结果,那么可以下载一个PDF查看插件,挑一个下载量高的就行,比如PDF Viewer

Marp的预设主题下载

模板不是必备的,但是没有模板确实比较丑。当然有了也未必有多好看。

比较令人遗憾的是Marp现在没有比较好的Marp主题收集网页,基本上只有官方主题和几个零散的Github,当然其中原因之一我也说了,Markdown本身玩不出花来。这里给出几个我找到的:

  1. 社区现有主题zju-academicCouesF/marp-theme-zju: a marp theme with Zhejiang University’s color and LOGO
  2. CC98 @Azaryn 大佬的zju-academic-enhancedGuaYsu/marp-theme-zju-enhanced: an enhanced marp theme with Zhejiang University’s color and LOGO
  3. Marp社区主题:Marp Community Themes
  4. Marp模板库:Themes | MARP Template Library

下载方式:

  1. 下载仓库里的.css文件,把它和你准备写的Markdown文件放在同一个文件夹下
  2. 键入Ctrl+,呼出设置(VSCode左下角的齿轮),搜索Marp theme,然后add item,将这个主题文件的路径添加进去,例如放在根目录的话就是./zju-academic.css
  1. 如果路径不知道怎么打的话,可以右键.css文件然后选择“复制相对路径”,如下图,这样就可以在Marp theme中进行快速添加了。记得在路径最前面加上.\./
  2. 可以一次性先下载很多.css模板存起来,然后要用的时候复制一下该文件就行了

Marp基本格式

关于Marp的基本使用方法,官方的网页(Marpit Markdown)中也有比较详细的介绍,整体内容也不多,我们**只需要了解最最基本的表头怎么写就行了,因为其他格式我们就是要让AI来帮你写!**这才是本文的目的。

  • 我们表头只要认识/写上这几行(不认识也行,AI会帮你写的,我这里简单提一下):
1
2
3
4
5
6
---
marp: true
theme: zju-enhanced
paginate: true
math: latex
---
  • 开头的这个表是“全局命令”,默认应用于后面每一页中。如果后面某一页不需要了,可以另行关闭。
  • 第一行和最后一行很简单,就是打开了Marp和使用Latex来编译数学公式
  • 第二行的theme是你要选用的主题名称,注意主题名称不是.css的文件名,而是该.css文件第一行的命名。比如第一行的内容是/* @theme zju */,那么就代表主题名称是zju。这个名字可以你随便改,无所谓
  • 第三行的paginate是页码的意思,默认开启全部页码脚注。某些页码不需要脚注的可以在该页把他Stop掉就行。

哦对,还需要知道一件事,就是Marp使用---(前后各空一行)进行分页。好了,Marp的格式教程就结束了。

Marp的编译也很方便,在Markdown文件的右上角可以看到一个两个三角形叠在一起的图标,叫Show Quick Pick of Marp Commands,点击以后会跳出来一个弹窗,点击Export Slide Deck 就可以保存了。如果导出之后有报错不用理他,文件有正常出现即可。

Marp+LLM的PPT生成工作流

  1. 第一步,在VSCode中打开你的工作区文件夹,记得添加.css模板并设置路径

  2. 第二步,把你用于生成PPT的源文本丢给AI

  3. 第三步,告诉它你的PPT生成需求,让他使用Marp来生成PPT,比如:

    1
    根据“text.md”中的内容生成一份8-10页的PPT,使用Marp,使用zju-enhanced主题
  4. 等待并调整你不满意的地方。

一个PPT格式规范Skill

这里进入到了本人100%原创的内容,LLM生成的PPT肯定不如你意,所以我写了一个规范它生成格式的Skill.md,你可以把他加入到你的Agent Skills中。

Q. 这个Skill的格式规定?

本Skill要求作者使用Markdown编写源文本,其中的H1(一级标题)为PPT大标题,H2(二级标题)为章节标题。至于该Skill对PPT的要求,有比如页眉、页码、尾页Thanks、防溢出等等,感兴趣的可以点开来看看,并根据你的个人喜好来自定义。

Q. 如何使用Skill?

把他放到你所使用的Agent对应的Skills文件夹里面,一般Agent的CLI设置里面都有说明。如果你不会的话可以直接把这个md文件丢给Agent,让他帮你加入到你的Skill列表。

Q. 下载方式?

下载链接:PPT格式规范SKILL

下面有全文。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
---
name: marp-ppt-format
description: "全局 Marp PPT 排版规范。用户提到 Marp slides、PPT、presentation、幻灯片、课件、汇报PPT、marp markdown 的生成或修改时使用。强制执行:按来源 H2 设置页眉、逐页防溢出、扁长图左右分栏、首页/尾页分页规则、尾页 Thanks 样式。"

---

# Marp PPT 全局排版规范

当任务是“根据 Markdown 生成或修改 Marp 幻灯片”时,应用本技能。

## 目标

在不损失技术内容的前提下,生成视觉稳定、不会超出单页边界的幻灯片。

## 格式要求

### 0. 冲突处理优先级

当规则冲突时,按以下优先级执行(高到低):

1. 用户本轮明确要求。
2. 本技能中的 MUST 规则。
3. 本技能中的 SHOULD 建议。

### 1. 页面类型定义

- 标题页:第一页(封面)。
- 正文页:除标题页、目录页、尾页之外的所有页面。
- 目录页:仅在用户明确要求“目录”时生成。
- 尾页:最后一页(Thanks 页)。

### 2. 标题页(MUST)

1. 标题页使用源文稿主标题(通常 H1)与作者信息。
2. 标题页不显示页码。
3. 标题页可不显示页眉文字(空字符串)。

### 3. 目录页(MUST)

1. 仅当用户明确要求目录时生成目录页。
2. 默认列出所有二级标题(H2)。
3. 目录页不显示页码。

### 4. 页眉(MUST)

1. 正文页页眉必须映射到当前内容所属 H2。
2. 页眉必须去除编号前缀(如“1. ”、“(2)”、“三、”、“4.2”等)。
3. 同一 H2 拆分出的多页,页眉保持一致。
4. 尾页保留页眉区域,页眉文字为一级标题(H1)。

### 5. 页内标题(MUST)

1. 正文页标题优先使用当前块内最高层可读标题:优先 H3,无 H3 则用 H2。
2. 标题页与尾页不受“必须 H2/H3”约束。
3. 页内标题必须去除编号前缀。
4. **标题字号在所有正文页面中保持一致**

### 6. 页码(MUST)

1. 标题页、目录页、尾页不显示页码。
2. 正文页默认情况下显示页码。

### 7. 图片排版(MUST)

1. 源 Markdown 图片必须出现在 PPT 中。
2. 图片若“高而窄”(横向长宽比明显小于 1),使用左右分栏:左文右图。
3. 图片若“宽而扁”,可使用上下布局或单图页。
4. 优先使用主题列类:`columns-37``columns-73``columns`

### 8. 防溢出(MUST)

1. 逐页检查内容是否超出页面边界。
2. 先做局部缩放(字体/表格/图片),再考虑拆页。
3. 若仍可能溢出,优先拆页,而不是过度缩小字号。
4. 公式密集页优先保留关键公式,说明文字精简。

### 9. 尾页(MUST)

1. 尾页单独一页,仅包含:
- H1:Thanks(水平垂直居中,除非用户指定其他文案)
- 作者名(副标题,水平垂直居中,字号大小同H4,颜色为黑色)
- 日期(水平居中,垂直方向置于页面底部,字号大小同H4,颜色为黑色)
2. 尾页不显示页码,保留页眉区域,页眉文字为一级标题(H1)。

### 10. 可选项(SHOULD)

1. 页内重要文本可加粗(参考源文本),并使用主题强调色(页眉背景色)。
2. 若用户要求显示日期,可在尾页底部增加时间行(次级字号)。

## 推荐 Marp 指令

按需使用以下指令模式:

```markdown
---
marp: true
theme: zju-enhanced
paginate: true
math: latex
---

<!-- _class: lead -->
<!-- _paginate: false -->
<!-- _header: "" -->
```

For body section pages:

```markdown
<!-- _header: "测试的问题" -->
```

For final thanks page:

```markdown
<!-- _class: lead -->
<!-- _paginate: false -->
<!-- _header: " " -->
```

## 推荐本地 CSS 模板

```markdown
<style>
section { font-size: 29px; }
section.compact { font-size: 26px; }
section.table-fit table { font-size: 0.64em; }
section.image-split { font-size: 25px; }
section.image-split img {
width: 100%;
height: auto;
max-height: 540px;
object-fit: contain;
}
</style>
```

## 扁长图分栏模板

```markdown
<!-- _class: image-split -->
<div class="columns-37">
<div>

- 要点 1
- 要点 2

</div>
<div>

![center](image.png)

</div>
</div>
```

## 导出校验清单(必须执行)

1. 导出幻灯片(PDF/HTML)。
2. 确认首页无页码。
3. 确认尾页无页码。
4. 确认尾页包含居中的 "Thanks" 与作者名。
5. 确认所有页眉不带编号前缀。
6. 确认源文稿图片均已出现在输出文件中。
7. 若发现任一页可能溢出,拆页后重新导出。

## 编辑行为约束

- 优先保证技术含义不变。
- 优先做最小改动。
- 未被要求时,不删除来源引用信息。
- 语言风格与源文稿保持一致。