一键导入
academic-pptx-dengxian
白底等线学术 PPT 生成器。适用于开题、中期、答辩等场景的 极简学术汇报幻灯片。设计原则:白底黑字、等线字体、零装饰、 左文右图双栏布局。触发词:白底/学术PPT/等线/DengXian/ 左文右图/开题风格/白底黑字/无装饰PPT/学术汇报版/答辩白底版。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
白底等线学术 PPT 生成器。适用于开题、中期、答辩等场景的 极简学术汇报幻灯片。设计原则:白底黑字、等线字体、零装饰、 左文右图双栏布局。触发词:白底/学术PPT/等线/DengXian/ 左文右图/开题风格/白底黑字/无装饰PPT/学术汇报版/答辩白底版。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Generate production-quality Dify workflow DSL/YAML files with precise node schemas from Pydantic source models. Covers all 22+ node types for Dify v1.12+.
Build, edit, and diagnose Dify workflow DSL files. Use when creating workflows, modifying nodes/edges, validating structure, troubleshooting runtime failures (empty URL, invalid variables, branch deadlock, chat_http!=200), and designing robust LLM automation with error handling.
Simple task management using a shared TASKS.md file. Reference this when the user asks about their tasks, wants to add/complete tasks, or needs help tracking commitments.
优先检索建筑设计网站(ArchDaily、gooood、有方/Archiposition),并输出结构化结果。适用于用户提到 archdaily、gooood、有方、建筑案例网络检索、建筑设计网站检索、案例外网补充检索等场景。
Extracts full text from book PDFs (no page limit) and generates or updates the 核心概念 (core concepts) section in book _框架.md files. Use when the user asks to extract core concepts from books, to use full book text for concept extraction, or to improve or populate the 核心概念 section in books/ framework files.
PMへの完了報告やエージェント間バトンタッチ。スムーズな引き継ぎを実現。Use when user mentions '/handoff', completion report, handoff to Cursor/OpenCode, auto-fix, or reporting to PM. Do NOT load for: casual completion statements, progress chat, informal status updates.
基于 SOC 职业分类
| name | academic-pptx-dengxian |
| description | 白底等线学术 PPT 生成器。适用于开题、中期、答辩等场景的 极简学术汇报幻灯片。设计原则:白底黑字、等线字体、零装饰、 左文右图双栏布局。触发词:白底/学术PPT/等线/DengXian/ 左文右图/开题风格/白底黑字/无装饰PPT/学术汇报版/答辩白底版。 |
| user-invocable | true |
本 Skill 的核心信念只有一条:排版即论证。
在学术汇报中,审稿人和导师的注意力是有限资源。任何不传递信息的视觉元素(横线、色块、装饰图案、渐变背景)都是在消耗观众对论证本身的注意力。
具体原则:
#1E1E2E 标题 vs #666666 节标签是轻微对比,不是色彩展示C_BG = RGBColor(0xFF, 0xFF, 0xFF) # 白底
C_TITLE = RGBColor(0x1E, 0x1E, 0x2E) # 深夜蓝黑(主标题)
C_BODY = RGBColor(0x33, 0x33, 0x33) # 深灰(正文,避免纯黑刺眼)
C_LABEL = RGBColor(0x66, 0x66, 0x66) # 中灰(节标签)
C_CAPTION = RGBColor(0x88, 0x88, 0x88) # 浅灰(图注)
C_PH = RGBColor(0xEE, 0xEE, 0xEE) # 占位图底色(极浅灰)
C_PH_TXT = RGBColor(0xAA, 0xAA, 0xAA) # 占位图文字
# ❌ 严禁定义 C_LINE —— 没有颜色常量就没有"顺手"的诱惑
颜色角色对应表:
| 颜色变量 | Hex | 用途 | 禁止用于 |
|---|---|---|---|
C_BG | #FFFFFF | 幻灯片背景 | 任何文字 |
C_TITLE | #1E1E2E | 主标题、小节大字 | 正文段落 |
C_BODY | #333333 | 正文、要点 | 标题、节标签 |
C_LABEL | #666666 | 节编号+名称 | 正文主体 |
C_CAPTION | #888888 | 图注说明 | 正文 |
C_PH | #EEEEEE | 无图时占位框底 | 正文区域 |
C_PH_TXT | #AAAAAA | 占位框内提示文字 | 任何非占位场景 |
F_MAIN = "等线" # 主字体(Windows 10+ 内置,无需安装)
F_BOLD = "等线 Bold" # 粗体变体(实际建议用 font.bold=True 激活等效效果)
等线 (DengXian) 选型理由:
备用字体(等线不可用时):
思源黑体 CN(Adobe/Google 开源)微软雅黑(Windows 内置,略重)| 位置 | 字号 | 粗体 | 颜色 |
|---|---|---|---|
| 封面主标题 | 30pt | ✅ Bold | C_TITLE |
| 封面副标题(第1行) | 14pt | ❌ | C_LABEL |
| 封面副标题(其余行) | 12pt | ❌ | C_LABEL |
| 内容页节标签("01 背景") | 11pt | ❌ | C_LABEL |
| 内容页大标题(小节名) | 16pt | ✅ Bold | C_TITLE |
| 内容页次级标题 | 14pt | ✅ Bold | C_TITLE |
| 内容页正文 | 13pt | ❌ | C_BODY |
| 图注 | 10pt | ❌ | C_CAPTION |
| 致谢页单句 | 26pt | ✅ Bold | C_TITLE |
字号原则:任意两级文字之间的字号差不小于 2pt;不要靠横线分隔,靠字号差实现视觉层次。
SW = Inches(13.333) # 画布宽
SH = Inches(7.500) # 画布高
# 左文字栏(约 40% 宽度)
L_TXT = Inches(0.55)
T_TXT = Inches(0.55)
W_TXT = Inches(5.35)
H_TXT = Inches(6.20)
# 右图区(约 51% 宽度)
L_IMG = Inches(6.25)
T_IMG = Inches(0.55)
W_IMG = Inches(6.75)
H_IMG = Inches(5.65)
# 图注(图区正下方)
T_CAP = T_IMG + H_IMG + Inches(0.10)
H_CAP = Inches(0.30)
布局比例说明:
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
def new_slide(prs):
"""纯白空白幻灯片(layout[6] = 通常是 Blank)"""
return prs.slides.add_slide(prs.slide_layouts[6])
def txb(slide, left, top, width, height):
"""添加无边框透明文本框"""
b = slide.shapes.add_textbox(left, top, width, height)
b.fill.background()
b.line.fill.background()
return b
def run(para, text, size, bold=False, color=C_BODY, fname=F_MAIN):
"""添加一个 run(带格式的文本片段)"""
r = para.add_run()
r.text = text
r.font.size = Pt(size)
r.font.bold = bold
r.font.color.rgb = color
r.font.name = fname
return r
def add_para(tf, text, size, bold=False, color=C_BODY, fname=F_MAIN,
space_before=0, align=PP_ALIGN.LEFT):
"""向文本框追加一段,复用首段(避免多出空行)"""
if len(tf.paragraphs) == 1 and tf.paragraphs[0].text == "":
p = tf.paragraphs[0]
else:
p = tf.add_paragraph()
p.alignment = align
if space_before:
p.space_before = Pt(space_before)
run(p, text, size, bold=bold, color=color, fname=fname)
return p
def build_text_col(slide, section_label, body_blocks):
"""
section_label : "01 研究背景"(11pt 灰色节标签)
body_blocks : [(文字, 字号, bold, 颜色), ...]
"""
t = txb(slide, L_TXT, T_TXT, W_TXT, H_TXT)
tf = t.text_frame
tf.word_wrap = True
add_para(tf, section_label, 11, color=C_LABEL)
for text, size, bold, color in body_blocks:
add_para(tf, text, size, bold=bold, color=color, space_before=4)
from pathlib import Path
def build_image(slide, img_path, caption="", label=""):
"""
img_path 存在时插入图片,否则显示灰色占位框。
caption : 图注文字(居中,10pt 浅灰)
label : 占位框内说明(如 "图3-1 耦合机制示意图")
"""
if img_path and Path(img_path).exists():
slide.shapes.add_picture(str(img_path), L_IMG, T_IMG, W_IMG, H_IMG)
else:
ph = slide.shapes.add_shape(1, L_IMG, T_IMG, W_IMG, H_IMG)
ph.fill.solid()
ph.fill.fore_color.rgb = C_PH
ph.line.fill.background()
if label:
pt = txb(slide,
L_IMG + Inches(0.2),
T_IMG + (H_IMG - Inches(0.4)) / 2,
W_IMG - Inches(0.4), Inches(0.4))
p = pt.text_frame.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
run(p, label, 10, color=C_PH_TXT)
if caption:
cap = txb(slide, L_IMG, T_CAP, W_IMG, H_CAP)
p = cap.text_frame.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
run(p, caption, 10, color=C_CAPTION)
def build_cover(prs, title_lines, sub_lines):
"""
title_lines : ["研究题目第一行", "第二行(可选)"],30pt Bold
sub_lines : ["汇报人:XX", "导师:XX", "2026年X月"],14/12pt
零装饰:无横线,字号差即分隔。
"""
slide = new_slide(prs)
title_top = SH * 0.26
t = txb(slide, Inches(1.5), title_top,
SW - Inches(3.0), Inches(len(title_lines) * 1.0 + 0.3))
tf = t.text_frame
tf.word_wrap = True
for line in title_lines:
add_para(tf, line, 30, bold=True, color=C_TITLE,
align=PP_ALIGN.CENTER)
sub_top = title_top + Inches(len(title_lines) * 1.0 + 0.4)
for i, line in enumerate(sub_lines):
sb = txb(slide, Inches(2.0), sub_top + i * Inches(0.55),
SW - Inches(4.0), Inches(0.50))
p2 = sb.text_frame.paragraphs[0]
p2.alignment = PP_ALIGN.CENTER
run(p2, line, 14 if i == 0 else 12, color=C_LABEL)
return slide
def build_thanks(prs, text="感谢各位老师!"):
"""
整页只有一句话 + 大量留白。
26pt Bold,居中。零装饰。
"""
slide = new_slide(prs)
t = txb(slide,
Inches(1.5), (SH - Inches(1.0)) / 2,
SW - Inches(3.0), Inches(1.0))
p = t.text_frame.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
run(p, text, 26, bold=True, color=C_TITLE)
return slide
def build_content_page(prs, section_label, body_blocks,
img_path=None, caption="", img_label=""):
"""标准内容页 = 左文字栏 + 右图区"""
slide = new_slide(prs)
build_text_col(slide, section_label, body_blocks)
build_image(slide, img_path, caption=caption, label=img_label)
return slide
# body_blocks 是列表,每个元素 = (文字, 字号, bold, 颜色)
body_blocks = [
# 小节大标题:16pt Bold C_TITLE
("研究问题", 16, True, C_TITLE),
# 正文段落:13pt C_BODY,支持长文本自动换行
("现有研究对窗的通透性缺乏系统性要素分析框架。", 13, False, C_BODY),
# 次级标题:14pt Bold C_TITLE
("研究假设", 14, True, C_TITLE),
# 要点:13pt C_BODY(无需列表符号,用换行+缩进表达层次)
("· 空间要素决定通透性的方向与层次", 13, False, C_BODY),
("· 交互要素决定通透性的感知深度", 13, False, C_BODY),
("· 构造要素决定通透性的实现边界", 13, False, C_BODY),
]
正文块注意事项:
space_before=4 是各行默认间距(在 build_text_col 内自动设置)word_wrap=True),但不会自动缩小字号H_TXT=6.20" 的内容会被截断,注意控制每页文字量(建议 ≤ 200 字)#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
gen_pptx_academic.py
白底等线学术 PPT 生成脚本
"""
from pathlib import Path
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
# ─── 常量(复制上面的配色/字体/布局定义)──────────────────
# ... (省略,从第一节复制)
# ─── 基础工具(复制第五节)──────────────────────────────────
# ...
# ─── 幻灯片内容定义 ─────────────────────────────────────────
# SLIDES 列表:每项对应一张内容页
SLIDES = [
# 格式:{"label": 节标签, "blocks": body_blocks, "img": 图片路径或None, "caption": 图注}
{
"label": "01 研究背景",
"blocks": [
("研究问题", 16, True, C_TITLE),
("窗的通透性要素缺乏系统分析框架...", 13, False, C_BODY),
],
"img": None,
"caption": "图1 研究框架示意",
},
# 更多页...
]
# ─── 生成 ────────────────────────────────────────────────────
def main():
prs = Presentation()
prs.slide_width = SW
prs.slide_height = SH
# 封面
build_cover(prs,
title_lines=["窗的通透性要素研究", "中期答辩"],
sub_lines=["汇报人:邓扬", "导师:XX 教授", "2026年4月"])
# 内容页
for s in SLIDES:
build_content_page(prs,
section_label=s["label"],
body_blocks=s["blocks"],
img_path=s.get("img"),
caption=s.get("caption", ""),
img_label=s.get("label", ""))
# 致谢
build_thanks(prs, "感谢各位老师!")
OUTPUT = Path("中期答辩PPT.pptx")
prs.save(str(OUTPUT))
print(f"已生成:{OUTPUT}({OUTPUT.stat().st_size // 1024} KB)")
if __name__ == "__main__":
main()
| ❌ 反模式 | ✅ 正确做法 | 原因 |
|---|---|---|
定义 C_LINE 颜色常量 | 从配色中彻底删除 | 有常量就会被"顺手"用到 |
用 add_shape 画横线分隔 | 字号差实现层次 | 横线是信息噪音 |
| 用色块做章节背景 | 白底统一到底 | 色块抢夺对内容的注意力 |
用 导航栏 占用左/上侧空间 | 节标签嵌入内容页 | 导航栏浪费可用内容区域 |
| 渐变背景/纹理 | 纯白 C_BG | 投影机下渐变层次全失 |
| 中文字体混用雅黑+宋体 | 统一等线 | 字体混用破坏整体感 |
| 正文字号 < 12pt | ≥ 13pt | 投影距离 5m 以上 12pt 以下难辨 |
| 每页文字 > 250 字 | ≤ 200 字 + 右侧图示 | 密度过高观众无法跟上 |
| Skill | 异同 |
|---|---|
thesis-ppt-style-dengyang | 同:零装饰、白底;异:字体为微软雅黑、字号更小(10pt),适合精读版 |
jobs-presentation-style | 同:零横线,字号差=层次;异:深色背景,更强视觉冲击,适合公开演讲 |
academic-pptx-dengxian(本 Skill) | 白底等线,学术汇报最优解,导师/委员会审阅场景 |
本 Skill 提炼自:
gen_midterm_pptx_academic.py
输出:01-thesis/新版本/答辩准备/中期答辩PPT-白底等线版-20260407.pptx
规格:14 slides,49 KB,16:9
Python要求:python-pptx 1.0.x,等线字体(Windows 10+内置)
如需重新生成或修改内容,编辑 SLIDES 列表即可;布局锚点和函数无需改动。