mcpField
P
present-paper

present-paper

github.com/aperivue文档处理353125 次安装1 天前更新
代码仓库

关于 present-paper

present-paper 是用于制作研究论文演示的 Claude 技能,面向有明确受众和场合的报告准备。它涵盖论文分析、提纲确认、参考资料核验、讲稿撰写,以及可编辑幻灯片制作或演讲备注添加。

主要功能

  1. 01分析论文并制定限时提纲
  2. 02按受众和场合调整内容
  3. 03核验补充参考文献
  4. 04撰写带时间标记的讲稿
  5. 05制作可编辑幻灯片或添加备注

适用场景

  1. 01根据论文准备学术会议报告
  2. 02制作期刊俱乐部评议幻灯片
  3. 03为现有演示文稿添加演讲备注

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aperivue/medsci-skills --skill present-paper

安装后在 Claude Code 中输入/present-paper确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
ai_slide_tells.md
generate_pptx_templates.py
generated_illustrations.md
medical_presentation_templates.md
presentation_archetypes.md
presentation_design_guidelines.md
slide_design_principles.md
spoken_notes_and_bilingual.md
workflow-checklist.md
references/critic_rubrics/
slide.md
references/slide_visual_styles/
CATALOG.md
clinical_blue.md
dark_modern.md
editorial_mono.md
institutional_brand.md
nature_lancet.md
scripts/
check_deck_budget.py
check_diagram_edges.py
check_font_portability.py
check_slide_tells.py
scripts/check_deck_budget_challenge/
make_fixtures.py
verify.sh
scripts/check_diagram_edges_challenge/
make_fixtures.py
verify.sh
scripts/check_font_portability_challenge/
make_fixtures.py
verify.sh
scripts/check_slide_tells_challenge/
make_fixtures.py
verify.sh
scripts/check_text_overflow_challenge/
make_fixtures.py
verify.sh

详细介绍

Present-Paper Skill

阶段 0:初始化与大纲

步骤 0a — 加载设计参考资料(起草大纲前阅读)

现在完整阅读三个文件。只有当 Q0/Q2 的答案告诉你需要哪个文件时,才阅读其余文件——一次演讲只有一个场合和一种风格,阅读其他文件并无用处。

现在阅读(始终如此):

A. references/ai_slide_tells.md — 生成式幻灯片会留下的痕迹。首先完整阅读。以此为依据制作,幻灯片就无需事后补救;scripts/check_slide_tells.py 会检查遗漏之处(步骤 3.6)。如果其他参考资料与之冲突,以此文件为准。每张幻灯片上的眉题标签和品牌页脚,是最常被指出的视觉痕迹。

B. references/presentation_archetypes.md — 骨架,根据演讲者所处的场合选择:会议口头报告、期刊俱乐部评论、以病例为核心的大查房、教学讲座、答辩、主题演讲(Duarte 的火花线、Jobs 的 STAR 时刻、Takahashi/Lessig)、面向普通听众的演讲、决策简报(Minto 的金字塔、行动型标题、Kawasaki 的 10/20/30)。演讲类型(演讲需要完成什么)与视觉风格(演讲看起来如何)是相互独立的选择。**外观是偏好;骨架则不可随意改变。**其机制部分见 scripts/check_deck_budget.py。

C. references/presentation_design_guidelines.md — 可执行的规则(论断式标题、字号不小于 24 pt、留白、≤3 种颜色、色盲友好型调色板、重新绘制而非截图、动画规范),以及供第 3.5 阶段的评审者评分使用的 G1–G10 自查表。

按需阅读——在 Q0/Q2 告知你需要哪个文件后:

文件阅读时机
references/medical_presentation_templates.md场合属于五种医学场合之一时——只阅读对应章节
references/slide_visual_styles/CATALOG.md → 一个风格文件Q2 已选定风格时
references/slide_design_principles.md不确定幻灯片为何没有效果时——了解 C 中规则背后的 Reynolds / Duarte / Knaflic / Tufte 理论
references/generated_illustrations.md准备为幻灯片生成任何图像时,或纯文字幻灯片持续无法通过评审时;其第一条规则(绝不生成医学图像)不可违背
references/spoken_notes_and_bilingual.md起草演讲者备注时,或幻灯片不是单语时
必需输入

开始前收集以下信息。确定目标受众前不要起草。

输入原因
论文PDF 路径、DOI 或 PMID
演讲时长决定内容深度和幻灯片数量
目标受众专业构成、知识水平——决定术语深度
背景课程名称、会议、期刊俱乐部形式、此前的会议主题
模板 / 视觉风格要填充的机构模板(.pptx/.potx),或用于生成的视觉风格。默认:询问(步骤 0b)
扩展部分可选主题,例如 AI 方向、临床意义。默认:无
步骤 0b — 模板与视觉风格选择

起草大纲前,先确定演示文稿的外观。提问(使用 AskUserQuestion;如果用户已在请求中回答过某个问题,则跳过该问题):

Q0 —“您将在什么场合演讲,时长多久?”(场合 + 分钟数)

在询问外观之前,先据此确定演讲类型——也就是演示文稿的骨架。根据 references/presentation_archetypes.md 中的选择表映射答案,并将 archetype + minutes 保留到第 3.6 步:该步骤会根据它们检查制作完成的演示文稿。

如果用户只给出主题,没有说明场合,请提问。不要猜测:没有针对特定场合制作的演示文稿会显得千篇一律,任何审阅者都能看出来。

Q1 —“您是否有要使用的机构或品牌模板?”

  • 有 → 用户提供 .pptx/.potx。切换到模式 C(第 3 阶段,“填充机构模板”)。不要再询问 Q2 —— 模板的主题就是风格。
  • 没有 / 无 → 询问 Q2。

Q2 —“您希望采用哪种视觉风格?” 提供 CATALOG.md 中的选项,每项附上一行预览(先列推荐选项,并标注为推荐):

选项一行预览
Nature / Lancet(推荐用于医学学术演讲)白色、海军蓝 + 珊瑚色点缀、极细分隔线、Inter/Pretendard —— 克制的编辑式学术风格
Clinical Blue白色/浅蓝色、海军蓝-蓝绿色,沉稳可信、色盲友好 —— 大查房 / CME
Editorial Mono黑白高对比、超大字号、单一强调色 —— 单一核心信息主题演讲
Dark Modern深石板色背景、米白色文字、电光色点缀 —— AI / 方法 / 技术主题演讲
其他描述配色/感觉,或指定要仿效的期刊/品牌

记录所选风格,并将对应的风格规范传递给第 3 阶段。若用户没有偏好且演讲属于医学学术类,默认采用 Nature / Lancet。风格只影响第 3 阶段的呈现,不影响大纲、讲稿或问答。

Q3 — 仅限会议演示文稿:第 1 张幻灯片是否有投稿要求? 许多学会要求标题页上的标题、作者、所属机构和国家必须与摘要投稿时填写的内容完全一致。不要为了满足密度检查而缩短内容 —— 投稿要求优先。从投稿门户复制这些字段,并在第 1 张幻灯片上记录 SLIDE_TOO_DENSE,注明这是有意覆盖该项检查及其原因。

论文分析

阅读论文并生成结构化分析:

## Paper Analysis

### Citation
[Full citation with DOI]

### Background
- What gap does this paper address?
- What was known vs. unknown before this study?

### Study Design
- Type: [RCT / cohort / case series / meta-analysis / etc.]
- Subjects: [n, inclusion/exclusion]
- Methods: [key methodological choices]
- Primary outcome: [what was measured]

### Key Results
1. [Finding 1 with effect size and CI/p-value]
2. [Finding 2]

### Patient/Case Summary Table
[If applicable — structured table of individual cases or subgroups]

### Limitations
1. [Limitation 1]

### Significance
- Why does this matter? What changes because of this paper?
幻灯片大纲

创建逐张幻灯片的大纲,并分配时间:

## Slide Outline ([N] slides, [M] minutes)

| # | Title | Time | Key Content |
|---|-------|------|-------------|
| 1 | Title slide | 0:30 | Paper citation, presenter |
| 2 | Context / Prior sessions | 1:00 | How this connects to prior knowledge |
| ... | ... | ... | ... |
| N | Take-home messages | 0:30 | 3-5 key points |

关卡:用户批准大纲后方可继续。


第 1 阶段:补充研究

补充参考资料限定为 5–8 篇,并且只搜索已获批大纲所需的类别:后续研究(是否重复验证或扩展?)、为研究结果提供背景的大型临床试验数据、为主题提供框架的综述文章,以及相互矛盾的证据(用于平衡问答)。不要总结找到的每篇论文 —— 只提取幻灯片所需的数据点(发生率、OR/HR、AUC)、支持或质疑主要论文的研究发现,以及说明其重要性的背景信息。

通过 /search-lit 核实每条参考资料(确认 DOI 或 PMID)。无法核实的资料标记为 [UNVERIFIED - NEEDS MANUAL CHECK]。

## Verified References

### Main Paper
1. [Citation] — PMID: XXXXX, DOI: XX.XXXX/XXXXX

### Supporting References
2. [Citation] — PMID: XXXXX
   → Used for: [specific data point or context]

### Key Data for Slides
- [Statistic 1]: [value] — Source: [Ref #]

第 2 阶段:讲稿与内容

演讲稿

起草一份完整的演讲稿:

  1. 语言:用户偏好的讲述语言;技术术语使用英语。
  2. 受众适配:根据第 0 阶段的受众画像设定内容深度。面向混合受众时,为专业术语添加一句通俗解释(“FLAIR 序列——一种抑制液体信号以突出水肿的 MRI 技术”)。
  3. 发音指南:用用户的语言标注药物名称和缩写的发音(“lecanemab(leh-KAN-eh-mab)”)。
  4. 时间标记:为每张幻灯片标注时间。演讲稿长度必须与分配的时长相符(学术演讲约为每分钟 130–150 个单词)。
  5. 过渡语:连接各张幻灯片,串联叙述脉络。

切勿编造临床定义、诊断标准或指南建议;对不确定的内容标注 [VERIFY] 并询问用户。

关于句子的组织方式——备注应当用于口头讲述,而不是照稿朗读——以及非单语演示文稿的语言划分,请参阅 references/spoken_notes_and_bilingual.md。如果上述任一情况适用,起草前请先阅读该文件。

## Speaker Script

### Slide 1: Title (0:30)
"[Opening — introduce yourself and the paper]"

### Slide N: Take-home Messages (0:30)
"[Summarize 3-5 key points. Thank audience. Invite questions.]"
扩展部分(可选)

仅当用户在第 0 阶段提出要求时才添加,例如 AI/计算方向、临床实践或政策影响,以及与用户自身研究的联系。

关卡:用户审核演讲稿后,才能继续。


第 3 阶段:幻灯片与备注

三种模式

模式 A=按选定的视觉风格生成新演示文稿。模式 B=为现有演示文稿添加备注。模式 C=填充用户所在机构的/品牌模板(在步骤 0b 中选择)。根据步骤 0b 的回答选择模式。

模式 A:生成新的幻灯片演示文稿

使用 python-pptx,根据结构化的内联数据生成完全可编辑的 PPTX。提供两个模板库:

  • ${CLAUDE_SKILL_DIR}/references/generate_pptx_templates.py — 通用 T_lead / T_text / T_table / T_image_right / … 模板(其文档字符串列出了这些模板;build_demo_slides() 会逐一演示)。适用于期刊俱乐部、全院查房、会议演讲和短篇论文演讲。
  • ${CLAUDE_SKILL_DIR}/templates/build_pptx_nature_lancet.py — Nature/Lancet 风格(规范:references/slide_visual_styles/nature_lancet.md)。适用于多篇论文综述型学术讲座(模板 #5)。函数包括:new_presentation、add_title_slide、add_toc_slide、add_section_divider、add_transition_slide、add_content_slide、add_glossary_slide、add_closing_slide,以及 apply_fonts(prs, en=..., ko=...) 和 fix_app_xml()。

Nature/Lancet 模板的默认设置为正文、字幕和术语表条目使用 20 pt 字号。简洁的内容适用于 conference_oral、critique、case_anchored、didactic 和 defence 预算配置。keynote、lay_talk 和 decision_brief 需要使用更大的字号并调整版式;在检查器中选择配置不会自动重新设置演示文稿的样式。容量上限不保证内容密度适宜或内容能够完全放入版面——请渲染实际内容并进行检查。

对于从 PDF 提取的图表(而非 /make-figures 的输出),请使用 ${CLAUDE_SKILL_DIR}/scripts/extract_pdf_figures.py(pdftoppm + PIL 裁剪,使用归一化的 0–1 坐标框;支持单次裁剪命令行或 YAML 批量配置),然后用 trim_caption.py 去除期刊页眉、图注和周围空白,同时保留多面板图和表格行:

python3 "${CLAUDE_SKILL_DIR}/scripts/trim_caption.py" \
  --in-dir  figures/extracted \
  --out-dir figures/cropped

当版面预期只放置图表主体时(build_pptx_nature_lancet.py 的默认设置),请将 FIG_DIR 指向裁剪后的输出目录。

感知单词边界的 Markdown 解析器(HLA 丰富型演示文稿必需)

若构建脚本会解析幻灯片正文或备注中的行内 **粗体** / *斜体*,则必须使用带单词边界的环视断言;否则,包含星号的科学标记(DRB1*07:01、HLA-A*02:01、SNP ID、脚注标记)会被误当成斜体分隔符,从而导致演示文稿中的每个等位基因都被悄然破坏:

import re
pattern = re.compile(
    r"(\*\*(?:(?!\*\*).)+?\*\*"                           # bold; inner single * allowed
    r"|(?<![A-Za-z0-9])\*[^*\n]+?\*(?![A-Za-z0-9]))"      # italic (word-boundary)
)

粗体规则允许内部包含一个 *,因此 **DRB1*04:02** 会保持为一个完整的粗体片段。请将此正则表达式添加到每个 Nature/Lancet 风格构建脚本的 add_styled()(或等效函数)中。

面向非母语演讲者的发音自动补充

如果演讲者不方便读出首字母缩略词、作者姓名、药名或基因符号,请在每张幻灯片的备注中添加 [ Pronunciation ] 小节(仅在演讲者视图中显示):

python3 "${CLAUDE_SKILL_DIR}/scripts/inject_pronunciation_notes.py" \
  input.pptx output.pptx \
  --dict pron_dict.yaml \
  --header "[ 발음 ]"            # or any header you like

提供一份 YAML/JSON 字典(术语 → [读音, 全名]),根据听众使用的语言编写。匹配按词边界进行,因此较短的缩略词(AE、OR)只有在单独出现时才会匹配;等位基因标记的读音会根据其基础等位基因条目合成。已包含该标题的幻灯片会被跳过,因此可以安全地重复运行。

演讲者备注中的统计数据密度

如果幻灯片正文已显示确切的 OR / 95% CI / p 值,备注中就不要重复这些数据——否则演讲者会把统计数据读出来,听众也跟不上。备注应采用叙述形式,并用一句话说明“确切数字请见幻灯片正文”;确切数字放在正文和脚注中。超过 1,000 个字符且包含 ≥5 个统计数据标记时 → 压缩。测量片段见 references/spoken_notes_and_bilingual.md 第 D 部分 §8。

备注中的数字都是你会大声读出来的数字
  • 备注中的每个外部数字都要对照来源核查,方式与正文中的数字完全相同。 凭记忆输入的基准数据(“152 个模型中有 95% 被评为高风险”,而来源说的是 171 个中的 148 个,占 87%)即使配有正确引用的参考文献列表,也依然会保留下来——只是记错了数字。
  • 编辑生成的文本时,注入表达式的数量不得减少。 如果构建脚本从产物中提取数字(f"{N['primary']}"),压缩文字时就可能把它们压平成字面值——正文仍经过校验,而备注中的数字却会悄然与正文不一致。 修改前后:
import re
len(re.findall(r"\{N\[", src))   # must not decrease across a rewrite

对同一个正则表达式取反,找出所有未包含在注入表达式中的数字——这些是有人手动输入的字面值,需要进行核查。

可直接分享的去备注版本

演示文稿流转前,必须删除备注(例如教授索要幻灯片时),因为备注中包含仅供演讲者查看的内容——第二语言叙述、发音提示、自我提醒(“Prof. ○○ 可能会问到……”):

python3 "${CLAUDE_SKILL_DIR}/scripts/strip_notes_for_sharing.py" \
  presenter_v9.pptx share/<topic>_<initials>.pptx

该操作会清除每张备注页上所有形状的文本(不只是备注占位符),移除审阅评论,清空 docProps/core.xml 中的作者 / 最后修改者 / 评论字段,同步 docProps/app.xml 中的计数,并根据写入文件的原始 XML 验证以上所有内容(正文和图表不受影响)。如果演示文稿包含隐藏幻灯片,操作会以退出码 2 停止,直到你选择 --drop-hidden(从共享副本中移除隐藏幻灯片)或 --keep-hidden。分享 <topic>_<initials>.pptx(在封面邮件中说明该文件可用于重复使用幻灯片)、<topic>_<initials>.pdf(LibreOffice 的 --convert-to pdf 会移除已清除的备注页),以及可选的 <topic>_<initials>_references.zip(如果超过附件大小限制,则改用 Drive 链接)。

配套文档会随演示文稿一起发出——也要检查它们

_qa_prep.md、_quick_review.md 和任何讲义都根据与备注相同的材料起草, 而且会传播得更广。在发出任何一份之前:

  • 已废弃的数字。 对演示文稿的检查不等于对配套文档的检查——幻灯片曾写着 26.3%, 而演讲者用来回答问题的审阅表上仍写着 54.1%。每当演示文稿中的数字变动时,都要检查配套的 .md 文件,找出已被取代的数值。若要有意引用旧数字,请用 `` 将其括起来,而不是将该文件排除在检查之外。
  • 面向听众的文档中包含操作人员的内部材料。 一份为你准备的简报(“他们会反驳的要点”“备选立场”、按分钟安排的计划),交到它所描述的对象手中时,会显得像是在制定应对他们的策略。应将其拆成两份文档:一份内部文档,包含各种应对方案;另一份中立文档,说明调查结果以及需要对方确认的事项。
  • 仅限现场使用的内容,以及指向这些内容的文字。 重新分发的演示文稿会在办公桌前阅读:移除休息页、计时器、“正如我们刚才在练习中所见”——然后对整份演示文稿进行 grep,检查正文和备注中是否还有引用这些内容的句子。 对材料中有关上游项目的任何断言(安装命令、数量、版本),都要依据该项目自己的源文件重新核实,而不是依据你几个月前保存的副本。
架构

每张幻灯片都是一个模板函数调用,带有明确的内联数据,并生成原生、可编辑的文本框架。以下三条规则可确保幻灯片保持稳定:

  1. 不解析 markdown。 自动将 markdown 解析为幻灯片,会导致每次重新生成时版式都发生变化。
  2. 不使用 cur_top 累积位置跟踪。 使用 generate_pptx_templates.py 顶部定义的固定坐标区域——cur_top 会累积舍入误差,并在约 10 张幻灯片后破坏版式。
  3. 不使用 Marp。 Marp 会渲染成图像;这样一来,演示文稿将无法编辑,审阅者也无法复制文本或重新设置样式。
图表源格式(使用 /make-figures 输出时)
  • 首选:使用 add_picture() 插入 ≥300 dpi 的 PNG。设置 img_pct(T_image_right),使图表在 13.33 × 7.5 英寸的版式中占据 ≥40% 的幻灯片宽度。
  • 矢量源文件:插入前,将 PDF 转换为目标 DPI 的 PNG(pdftoppm -r 300 input.pdf out_prefix);在不同 PowerPoint 版本中嵌入 PDF 的可靠性不高。
  • 禁止使用:TIFF(Mac 版 PowerPoint 会静默丢弃);用于线稿的 JPEG(对角线会出现伪影);原始 SVG(Mac 版 PowerPoint 对其处理不一致)。
  • 图注:面向注意力只有 5–10 秒的听众重新撰写,不要直接使用期刊图注。
  • 把论点写在幻灯片上,而不是栅格图像里。 如果将结论或醒目的数字直接画进 PNG,那么上方的项目符号一旦编辑,它们就会与演讲内容脱节,而且文本搜索也无法找到它们。数字和结论应放在幻灯片自身的文本中。
  • 生成的插图:只能表现概念和场景,绝不能让人误以为是测量结果——不得生成 CT、MRI、组织学或 X 光片,即使标注为“插图”也不行。首次编写提示词前,请阅读 references/generated_illustrations.md。
图表和绘图应以代码绘制,再插入(而非用自动形状绘制)

硬性规则,也是这项技能中收益最高的规则。 用 PPT 工具拼装 Agent 生成的幻灯片几乎总会失败;用广为人知的工具通过代码绘制图表和绘图,再插入结果,才是可行的方法。

内容使用工具绘制绝不要
任何图表matplotlib / R(/make-figures)手动放置形状来冒充图表
流程、机制、管线、层级结构matplotlib;如果图本身就是重点,则使用 Graphviz DOTpython-pptx 自动形状
研究流程(STROBE/PRISMA)/make-figures 流程构建器逐个绘制方框

然后使用 add_picture() 插入渲染后的 PNG(≥300 dpi)。

插入前先检查渲染后的 PNG。 绘制在图边界上的描边在渲染时会被切掉一半,放到幻灯片上看起来就像是缺了一条边的方框:

python3 scripts/check_diagram_edges.py diagrams/ --json qc/diagram_edges.json

DIAGRAM_EDGE_CLIP 会报告距离图像边框仅几像素的墨迹,并忽略铺满整个画面的图像。应在 savefig 后立即运行;修复方法是在内部留出边距,并使用 bbox_inches="tight" 和填充量——PNG 一旦生成,裁剪就无法恢复被切掉的描边。

为什么要禁止。 自动形状图表会同时呈现两个 AI 痕迹:完全相同的圆角矩形(SHAPE_MONOTONY)由没有标注的箭头连接(ARROW_NO_SEMANTICS)。在 Graphviz 中,边会写明它所表达的含义:

digraph mechanism {
  rankdir=LR; node [shape=box, fontname="Inter"];
  catheter -> tract   [label="seeds along"];
  tract    -> nodule  [label="grows into"];   // an arrow that says what it means
}

箭头表达一种关系——导致、变成、流入、与……比较、预测。如果不标注,房间里的每个人都会自行补上不同的动词。参见 references/ai_slide_tells.md §4–5。

唯一的例外:将单个、精心设计且带有标注的形状用作点缀(例如说明框或高亮框)。使用一个形状是有意的选择;使用八个一模一样的形状就是生成器的产物。

字体是交付决策,而非审美决策

演示设备上缺少某款字体时,系统会悄然替换:字体度量发生变化,换行随之改变,原本适配的文本框也不再适配——在创作设备上看不出来,投影时却一目了然。

python3 scripts/check_font_portability.py output/presentation.pptx --json qc/font_portability.json

FONT_NOT_PORTABLE 会列出仅捆绑于一种操作系统、另一种操作系统上却没有的字体,并按字体统计数量。它是一份禁止清单,而非许可清单(不涉及授权品牌字体);不会将演示文稿嵌入的字体列为问题;对于主题级默认字体,在演示文稿包含该占位符对应文字脚本的文本之前,也视为不起作用。检查通过不代表已验证字体是否安装或渲染器是否进行了替换。对于 Nature/Lancet 构建器,请在添加幻灯片后、保存前调用 apply_fonts,以选择已安装的拉丁字体和东亚字体(它不会嵌入字体,也不会处理图像、表格或图表内部的字体)。除了布局之外,也要检查导出 PDF 中的字体。

确保字体可用有两种方法:

  • 嵌入字体(PowerPoint:保存 > 在文件中嵌入字体)。须遵守许可证规定。
  • 同时提供 PDF——但PDF 会丢弃嵌入的视频,因此包含视频片段的演示文稿还必须单独提供 MP4 文件。
构建脚本的职责

从零开始生成的脚本必须:

  • 通过相对于演示文稿目录的路径引用每个输入,并将生成产物所需的所有输入都保存在该目录内。 会话临时目录或临时文件夹下周就可能消失,届时也无法修正已经嵌入图表的标签。将图表生成脚本保存在演示文稿旁边。
  • 一次性设置全部四个占位符坐标(步骤 3.7)。
  • 在调用 add_picture 之前将 TIFF 图像转换为 PNG,并对 iPhone 照片执行 EXIF 转置(否则图像会旋转 90°)。
  • 插入或删除幻灯片后,将 docProps/app.xml(<Slides>、<Notes>、HeadingPairs、TitlesOfParts)同步为实际数量,否则在 Mac 上打开 PowerPoint 时会弹出恢复对话框。
  • 从另一份演示文稿中原样复制 <a:srcRect>——值的单位为百分之一百分比(上限为 100000),绝不是 EMU。此处的单位换算错误会导致图像有 99% 被裁切到幻灯片外。
  • 在最后打印幻灯片数量、备注数量、文件大小和可编辑性检查结果。
修补而非重建——编辑现有 PPTX

对于提供的演示文稿进行精细修改(文本框宽度、图像裁剪、字体替换、移除 sp3d),应使用正则表达式或 sed 修补解压后的 XML,而不是用 python-pptx 重新生成。从头重建会丢失 <a:srcRect> 裁剪、刻意保留的 <a:sp3d> / <a:scene3d>、母版/版式/主题详情,以及 app.xml / core.xml 元数据。

unzip -q original.pptx -d /tmp/work
python3 -c "
from pathlib import Path
p = Path('/tmp/work/ppt/slides/slide23.xml')
p.write_text(p.read_text().replace('cx=\"9504720\"', 'cx=\"11200000\"'))
"
cd /tmp/work && zip -rq ../patched.pptx . -x '*.DS_Store'

python-pptx 仅用于(a)通过上述模板创建全新演示文稿,以及(b)通过 slide.notes_slide.notes_text_frame.text 添加演讲者备注。scripts/inject_speaker_notes.py 是(b)的标准示例。默认情况下,它会将行内 **bold** / *italic* 解析为运行级样式(python-pptx 会原样存储文本,因此否则这些标记会在演示者视图中直接显示);对于旧版纯文本,请传入 --no-markdown。每个备注文本运行都会以 --font-pt 指定的字号写入(默认为 18);若不指定,备注将继承备注母版的 12 pt。可复现的检查位于 tests/test_speaker_notes_markdown.py。

输出

保存到 output/presentation.pptx。演讲者备注仅写入备注窗格——添加备注时切勿修改幻灯片设计。

第 3.5 步——幻灯片评审(交付演示文稿前运行)

导出 PPTX 后,按照 references/critic_rubrics/slide.md 对每张幻灯片评定为 PASS / PARTIAL / FAIL,并在将演示文稿视为可交付之前,为每个 FAIL 或 PARTIAL 项目提出具体修改。

演示文稿层面的 Mac PowerPoint 检查(评分标准 F 节:无 TIFF、无 <a:sp3d>、已同步 app.xml 计数、无大于 100000 的 srcRect 值)均为必需项;评分标准提供了每项检查的检测命令和修复方法。请同时在 PDF 导出文件和 Mac PowerPoint 中验证——单独使用任一项都无法发现全部四类问题;PDF 无法发现 sp3d 轮廓和 srcRect 损坏。

在 _quick_review.md 中记录 critic_pass: yes | partial | no 和 refine_rounds: N。

第 3.6 步 — AI 痕迹审查(确定性检查;在构建好的幻灯片上运行,而不是在构建脚本上运行)
python3 scripts/check_slide_tells.py  output/presentation.pptx --json qc/slide_tells.json
python3 scripts/check_deck_budget.py  output/presentation.pptx --json qc/deck_budget.json \
        --archetype <from Q0> --minutes <from Q0>

将 --json 写入项目自己的 qc/ 目录,而不只是输出到终端:只存在于滚动记录中的判定日后无法计数,而检查触发的频率是唯一能证明它值得保留的证据。

check_deck_budget.py 是这一原型的机械检查部分:幻灯片数量是否超出时间限制(DECK_OVER_BUDGET)、每张幻灯片的字数是否超过本次听众能接受的范围(SLIDE_TOO_DENSE),以及后排观众能否看清文字(TYPE_TOO_SMALL)。--list 会打印预算。它还会报告 ZERO_AREA_TEXT,用于判断另外三项是否有意义——参见第 3.7 步。表格文字会和其他文字一起测量;图表和 SmartArt 的文字存放在各自的部件中,不会测量。计时会在遇到第一条以 "Backup"、"Appendix"、"Q&A"、"Reserve" 或 "Supplementary" 开头的简短标题时停止,输出会指出停止计时的幻灯片;如果备份内容并非从该处开始,请传入 --backup-from N。 **已知限制:**如果某条简短发现以这些词之一开头("Appendix perforation in children"),它仍会被视为备份部分分隔页,并在此处停止计时;请检查打印出的 clock: stops at slide N 行,如果位置不对,请传入 --backup-from N。

六项幻灯片痕迹判定,每一项都是审阅者一眼就能发现的标记。每一项都必须消除,或在充分考虑后决定保留,并写下理由:

判定检查结果修复方法
CHROME_ON_EVERY_SLIDE≥60% 的幻灯片带有眉题标签/品牌页脚保留页码和分隔页。删除其余内容。
SCAFFOLD_PHRASE幻灯片(或备注)在叙述自身的构造过程——"总而言之","The key takeaway is…"删除这句话,直接表达它所指的内容。
TOPIC_TITLE内容页标题写着 "Results",而没有陈述结果改成断言式标题:"辅助消融使局部复发率减半(12% 对比 26%)。"
SHAPE_MONOTONY同一个框以相同尺寸重复八次并列观点 → 改用一个表格。非并列观点 → 改用不同形状。
DEAD_SPACE_BAND幻灯片大部分为空,且中间有一块空洞补充内容,或用大字突出一个观点。
ARROW_NO_SEMANTICS≥2 个箭头,但没有任何标注为每个箭头添加标注,或添加图例。箭头代表一项主张。

检测器仅使用标准库,可读取任意 .pptx,包括同事发给你的幻灯片。它不是风格评判,也不会检测「是否使用了 AI」:把 AI 当作助推器使用,不会留下这些痕迹;把 AI 当作按钮使用,则会留下所有这些痕迹。

第 3.7 步 — 占位符继承几何属性:要么赋值全部四个坐标,要么一个都不赋

布局占位符从布局继承位置和尺寸。只赋值其中一项——

title.width = Inches(11.5)          # ← and nothing else

——python-pptx 就会生成一个 <a:xfrm> 来保存该值,并将其余值记录为零或缺失,而不是继承。文本框会以没有高度或没有宽度的状态渲染:文本存在于文件中,却不会显示在幻灯片上。

shape.left, shape.top, shape.width, shape.height = (       # all four, together
    Inches(0.8), Inches(0.6), Inches(11.5), Inches(1.0))

此类形状也没有 <a:off>,因此幻灯片读取器会将其丢弃,其文字和字号也不会传入 check_deck_budget——曾有一张标题页带有 69 个词、字号为 11.5 pt,以这种方式通过了预算检查。ZERO_AREA_TEXT 会首先报告此问题。如果发现此问题,请修正几何属性并重新运行检查;对于首次运行中其他检查的无结果,应视为尚未读取,而非已通过。

第 3.8 步 —— 是否合适?测量渲染结果;切勿估算

python-pptx 会写入超出文本框显示容量的内容,却不会给出任何提示。导出 PDF(这也是 Mac 兼容性检查和便携式备用方案的组成部分),然后进行测量:

soffice --headless --convert-to pdf output/presentation.pptx
python3 scripts/check_text_overflow.py output/presentation.pptx --pdf output/presentation.pdf \
        --json qc/text_overflow.json

OFF_SLIDE 表示一条线的末端落在幻灯片底部的保留区域;CARD 表示一条线的底部超出了其所在填充块的底部。两者都会报告测得的距离(0.03 in 和 0.6 in 分别需要不同的修复方式)。UNRENDERED 表示某个段落(含 12 个或更多字母或数字)在所属幻灯片页面上没有显示开头——整行被推到幻灯片之外时,没有矩形可供测量。没有渲染结果时,检查会以状态码 2 退出——无法测量,而不是报告通过。

它使用 pdftotext -bbox-layout 提取行矩形,不会验证所有相交情况、顶部/右侧裁切,或被其他形状遮挡的文本——请对照幻灯片源检查渲染结果,包括较长的标题和说明文字。

不要用算术计算(字号 × 行距 × 行数)来代替测量:这种方法两个方向都不可靠。行高常数 1.42 会让 CJK 正文溢出到页脚(渲染结果测得为 1.60);将其提高到 1.62,又会拒绝约 290 段实际渲染正常的内容;而忽略 PowerPoint 添加的约 1.2 倍行距,则会把一个 21 行的列表计算为 4.1 in,实际需要 5.1 in。

模式 B:为现有幻灯片添加备注(更常见)

在修改演示文稿之前,先对收到的演示文稿运行第 3.6 步中的两项检查,并报告检查结果。“只要修正样式”并不是诊断:SLIDE_TOO_DENSE、TYPE_TOO_SMALL、SCAFFOLD_PHRASE 和 TOPIC_TITLE 能在几秒钟内回答“这是内容问题还是设计问题?”。先把答案告知用户,再让他们选择要处理的内容。设计往往本来就没有问题。

然后:

  • 阅读现有 PPTX,了解幻灯片结构和数量
  • 将演讲稿各部分映射到对应幻灯片
  • 生成针对该演示文稿定制的 inject_notes.py 脚本
备注注入脚本

参照 ${CLAUDE_SKILL_DIR}/scripts/inject_speaker_notes.py 中的模式,生成定制的 inject_notes.py。生成的脚本应仅包含为该演示文稿定制的 notes 字典,以及模板中的主注入循环。

关键规则

演讲者备注会直接注入,不会修改幻灯片的设计、布局、文字或图像。 脚本只会操作备注窗格。通过比较前后的幻灯片内容进行验证。

模式 C:填充机构/品牌模板

如果用户在步骤 0b 提供了 .pptx/.potx,请填充模板,不要重新设计。从头创建一个 Presentation() 会丢弃机构的母版、主题和徽标(参见上文的“修补优于重建”)。 代码示例、无可用正文版式时的回退方案以及验证详情,见 references/slide_visual_styles/institutional_brand.md。

  1. 检查:python3 ${CLAUDE_SKILL_DIR}/scripts/inspect_pptx_template.py <template> 会列出每个 版式(索引、名称)及其占位符(idx、类型、尺寸),还会列出主题字体/颜色。模板中已经绘制了内容:学会的版式通常带有通栏背景图,其色带就是页眉;母版上也可能已有标题框。删除占位符并自行绘制文本框,会导致标题一半落在色带上,另一半悬在外面。找到现有的设计区域——占位符矩形,或已绘制页眉的颜色变化处——并将文字放在其中。
  2. 映射:将大纲中的每张幻灯片映射到模板现有的某个版式(标题/标题+内容/章节标题/结束页)。不要自行创建版式。
  3. 填充:通过 placeholder_format.idx 填充,以继承机构的字体、字号和徽标——切勿添加自由文本框作为标题/正文。
  4. 备注:照常使用 scripts/inject_speaker_notes.py 注入备注。
  5. 验证:在 Mac PowerPoint 中打开(无修复对话框、每张幻灯片上都有徽标、字体完好);确认徽标媒体仍已嵌入;添加/删除幻灯片后同步更新 docProps/app.xml。

品牌模板内部仍须遵循内容规则(presentation_design_guidelines.md)——每张幻灯片一个要点、重新绘制表格、颜色不超过 3 种,且限于机构的配色方案。


第 4 阶段:问答准备

问题生成

从四个角度生成问题:方法学批评者(“为什么采用这种设计?为什么不……?”)、领域专家(深入的技术问题)、通才(“这对临床实践意味着什么?”)以及学生/受训人员(澄清不熟悉的概念)。

答案结构
Acknowledge → Evidence → Conclude

"That's an important limitation. [Acknowledge the concern honestly.]
However, [cite specific supporting evidence — author, year, finding].
So while [restate limitation], [conclude with the paper's contribution despite it]."
快速复习单

供最后一刻复习的一页参考资料:

## Quick Review

### Must-Know Numbers
| Metric | Value | Source |
|--------|-------|--------|
| [Key stat 1] | [value] | [Ref] |

### Common Pitfalls
- Don't confuse [X] with [Y]
- [Classification A] and [Classification B] are independent frameworks
- Slide says [rounded value], precise value is [exact value]

### Key Takeaways (memorize these)
1. [Point 1]
2. [Point 2]
3. [Point 3]

输出文件结构

所有输出均放在用户的演示文稿目录中:

{presentation_dir}/
├── _analysis.md              # Phase 0: Paper analysis + outline
├── _references.md            # Phase 1: Verified references + key data
├── _script.md                # Phase 2: Speaker script
├── _qa_prep.md               # Phase 4: Expected Q&A
├── _quick_review.md          # Phase 4: Pre-presentation review sheet + critic_pass record
├── _slide_critic.md          # Phase 3.5: Slide rubric scores per slide
├── inject_notes.py           # Phase 3: Tailored note injection script
├── figures/                  # Extracted paper figures (if needed)
└── reference/                # Supporting paper PDFs (if downloaded)

跨技能集成

何时使用原因
需要在幻灯片中加入图表(ROC、森林图、KM、流程图)先使用 /make-figures,再嵌入图表图表级与幻灯片级工具采用相同的 Reynolds/Knaflic/Tufte 基础原则
需要并行核对论文报告清单对同一篇论文使用 /check-reporting论文演示常与手稿修订同步;报告指南中的缺漏会在问答中显现
视觉摘要/中央插图使用 /make-figures 的视觉摘要模板然后查看目标期刊的 AI 图像政策(JACC 禁止,Radiology 允许披露后使用)
幻灯片中的参考文献交付前使用 /verify-refs(仅审计)与手稿参考文献采用相同的防幻觉关卡

评论

支持 Markdown