用途
Marp Export 用于将已存在的 Marp 幻灯片 Markdown 文件导出为 PDF(默认)、HTML、PPTX 或 PNG。它不负责编写幻灯片内容,而是专注于导出流程中的主题加载、浏览器检测与批量转换。
主要能力
- 多格式导出:PDF(默认)、HTML、PPTX、PNG 序列。
- 主题加载:通过 --theme-set 加载自定义 CSS 主题。
- 浏览器检测:PDF/PPTX 导出需要 Chrome/Chromium,必要时可设置 CHROME_PATH。
- 批量转换:可对目录中的多个 .md 文件循环导出。
- 可编辑 PPTX:使用 --pptx-editable 输出可编辑 PPTX(需要 LibreOffice)。
需要先了解的两个静默失败
- 主题目录错误 → 静默回退。如果文件 frontmatter 中 theme: 指定的主题不在 --theme-set 目录中,marp-cli 不会报错,而是用默认主题渲染,品牌配色、页眉页脚都会丢失。务必根据 frontmatter 中的主题名解析主题目录。
- 沙箱内导出 PDF/PPTX → CJK 字形丢失。当 Bash 工具在沙箱中运行时,Chrome 的 printToPDF 无法访问系统中日韩字体:PDF 会“成功”导出,但所有中文/日文/韩文文本都缺失(只剩 ASCII,文件体积明显减小)。PDF 与 PPTX 导出需以 dangerouslyDisableSandbox: true 运行。HTML 与 PNG 导出不受影响。
这两种失败都不会在日志中显现,只有实际渲染产出的 PDF 才能发现。
使用方式
先解析 THEME_DIR,然后执行:
- PDF(默认,需要 Chrome/Chromium,非沙箱运行): npx @marp-team/marp-cli INPUT.md -o OUTPUT.pdf --theme-set "$THEME_DIR" --allow-local-files --html
- HTML: npx @marp-team/marp-cli INPUT.md -o OUTPUT.html --theme-set "$THEME_DIR" --html
- PPTX(可编辑,需要 LibreOffice,非沙箱运行): npx @marp-team/marp-cli INPUT.md -o OUTPUT.pptx --pptx-editable --theme-set "$THEME_DIR" --allow-local-files
- PNG 序列: npx @marp-team/marp-cli INPUT.md --images png -o OUTPUT_DIR/ --theme-set "$THEME_DIR"
工作流分为五步:
- 定位输入文件,确认 frontmatter 含 marp: true。
- 解析主题目录(不要硬编码):读取 theme: 名称,在已知主题位置中查找对应 CSS:
- ~/.claude/skills/marp-slides-creator/themes/:academic、academic-lightblue、beam、border、gradient、jobs、simple、zju 等
- ~/.claude/skills/marp-slides-lingnan/themes/:lingnan(中山大学岭南学院:深红配色、院徽页脚) 解析命令示例: THEME_NAME=$(sed -n 's/^theme:[[:space:]]//p' INPUT.md | head -1) THEME_DIR=$(grep -rl "@theme $THEME_NAME\b" ~/.claude/skills//themes/.css 2>/dev/null | head -1 | xargs dirname) [ -z "$THEME_DIR" ] && THEME_DIR=$(ls ~/.claude/skills/*/themes/"$THEME_NAME".css 2>/dev/null | head -1 | xargs dirname) 如果 THEME_DIR 为空且主题不是 marp 内置主题(default/gaia/uncover),应停止并定位 CSS。
- 检测 Chrome/Chromium(用于 PDF/PPTX)。macOS 可按顺序检查 Google Chrome、Chromium、Microsoft Edge,必要时设置 CHROME_PATH。若没有浏览器,则回退到 HTML 导出并告知用户。
- 导出:默认 PDF,输出与输入同目录、同主文件名、不同扩展名(如 presentation.md → presentation.pdf)。PDF 导出需 dangerouslyDisableSandbox: true,HTML 导出沙箱内可运行,PPTX 同样需非沙箱。
- 验证与报告:ls -lh 不足以验证,需实际渲染 PDF 页面查看。可用: sips -s format png -z 720 1280 OUTPUT.pdf --out /tmp/pdf_p1.png 或 pdftoppm -png -f N -l N -scale-to-x 1280 -scale-to-y 720 OUTPUT.pdf /tmp/pdf_pN 然后查看 PNG,确认主题样式(品牌配色、页眉页脚)与所有文本(尤其是 CJK)均已渲染。不要用 --images png 输出做验证,因为截图路径在 PDF 缺字形时也能正常渲染。
危险信号:
- PDF 体积远低于此前正常导出(如同一份幻灯片 1.6M vs 2.7M)→ 缺少嵌入的 CJK 字体。
- 标题页只剩 ASCII 片段 → 沙箱内导出,需非沙箱重跑。
- 看起来是默认主题(无品牌配色)→ --theme-set 目录错误,marp 静默回退。
报告内容:输出文件路径、体积、格式;已目视验证的页面;marp-cli 的任何警告。
关键参数
- --theme-set DIR/:加载自定义主题,存在自定义 .css 主题时使用。
- --allow-local-files:允许本地图片,PDF/PPTX 含本地资源时使用。
- --html:允许 markdown 中的 HTML 标签,建议始终添加。
- --pptx-editable:输出可编辑 PPTX,PPTX 格式使用(需要 LibreOffice)。
- --images png:导出 PNG 序列,PNG 格式使用。
- --pdf-notes:在 PDF 中包含演讲者备注,有备注时使用。
- --pdf-outlines:为 PDF 添加书签,长演示文稿使用。
错误处理
- Chrome/Chromium not found:PDF 无可用浏览器 → 设置 CHROME_PATH 或回退 HTML。
- theme not found:缺少主题 CSS → 检查 --theme-set 路径或使用内置主题。
- Could not find an input:文件路径错误 → 核对路径与 marp: true frontmatter。
- 空白 PDF:HTML 标签未加 --html → 添加 --html 参数。
- PDF 缺少全部 CJK 文本(无报错):沙箱 Chrome 无法读取系统字体 → 以 dangerouslyDisableSandbox: true 重跑。
- 输出使用默认主题(无报错):--theme-set 目录中找不到 theme: 名称 → 从 frontmatter 解析 THEME_DIR;例如 lingnan 位于 marp-slides-lingnan,而非 marp-slides-creator。
适用场景
适合将已有 Marp Markdown 幻灯片批量或单份导出为 PDF/HTML/PPTX/PNG,尤其需要自定义主题、本地图片、CJK 文本与可编辑 PPTX 的场景。
限制
- PDF 与 PPTX 导出依赖 Chrome/Chromium,PPTX 可编辑输出还依赖 LibreOffice。
- 在沙箱 Bash 环境中导出 PDF/PPTX 会静默丢失 CJK 字体,必须非沙箱运行。
- 主题名不在 --theme-set 目录时会静默回退默认主题,不报错。
- 关于收费、价格、平台等信息暂未提供。