用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/mofa-org/mofa-skills --skill mofa-poster命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | mofa-poster |
| description | 从论文源码自动生成学术会议海报。支持 Overleaf LaTeX 项目、交互式布局编辑、PDF 导出。Triggers: poster, 海报, 生成海报, make poster |
| requires_bins | git, npm, python3, sips |
| requires_env | null |
| always | false |
从论文源码(Overleaf LaTeX)和项目网站自动生成专业学术海报。输出为交互式 HTML 文件,可拖拽调整布局、导出 PDF。
# 安装 Vercel CLI(用于下载网页图片)
npm install -g vercel
# 安装 Playwright(用于截图和自动化)
pip3 install playwright
playwright install chromium
# 创建海报项目目录
mkdir my-poster && cd my-poster
# 从 Overleaf 克隆论文源码
git clone https://git.overleaf.com/YOUR_PROJECT_ID overleaf
# 可选:添加参考海报用于风格匹配
mkdir references
cp ~/some_reference_poster.pdf references/
# 在 Claude Code 中运行
/make-poster
# 或告诉 Claude
"帮我从 overleaf 目录生成一个学术海报,项目网站是 https://..."
准备素材
overleaf/ 目录references/ 目录(可选)运行生成
告诉 Claude:"生成学术海报"
交互编辑
导出 PDF
你: "从 overleaf 目录生成一个 CVPR 海报,项目网站是 https://my-project.github.io"
Claude:
好的!我来为你生成 CVPR 学术海报。
计划:
- 读取 overleaf/main.tex 提取内容
- 抓取项目网站的图片和链接
- 分析 reference/ 中的参考海报风格
- 生成 A0 横向海报
开始生成...
✓ 提取论文内容(标题、作者、摘要)
✓ 下载项目图片
✓ 转换 PDF 图表为 PNG
✓ 生成海报 HTML
✓ 优化布局(最小化空白)
✓ 导出 PDF
🎉 海报生成成功!
打开 poster/index.html 进行编辑
| 输入类型 | 来源 | 必需 |
|---|---|---|
| 论文源码 | overleaf/ 目录 | ✅ |
| 项目网站 | URL | ✅ |
| 参考海报 | references/ 目录 | 可选 |
| 作者网站 | URL | 可选(用于 Logo) |
poster/
├── index.html # 交互式海报(主文件)
├── poster-config.json # 布局配置
├── poster.pdf # 导出 PDF
├── logos/ # 机构 Logo
├── figures/ # 图表文件
├── qr.png # 项目页二维码
└── qr-posterskill.png # Posterskill 二维码
┌─────────────────────────────────────────────────────────────┐
│ MOFA-POSTER 海报生成流程 │
└─────────────────────────────────────────────────────────────┘
User Input
↓
┌─────────────────────────────────────────────────────────────┐
│ 1. 内容提取 │
│ ──────── │
│ • 读取 overleaf/*.tex(主文件 + \input{}) │
│ • 提取:标题、作者、摘要、方法、结果、结论 │
│ • WebFetch 项目网站抓图和链接 │
└─────────────────────────┬───────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 2. 资源准备 │
│ ──────── │
│ • PDF 转 PNG(sips -Z 3000) │
│ • Playwright 下载网页图片 │
│ • 测量图片宽高比(sips -g pixelWidth/Height) │
│ • 生成二维码(qrserver API) │
└─────────────────────────┬───────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 3. 布局优化 │
│ ──────── │
│ • 根据宽高比分配图片到合适列 │
│ • Playwright 自动测量空白区域 │
│ • 遍历列宽组合寻找最优布局 │
│ • 最小化 whitespace │
└─────────────────────────┬───────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 4. 生成海报 │
│ ──────── │
│ • 基于 React CDN 的交互式 HTML │
│ • CARD_REGISTRY:定义卡片内容 │
│ • DEFAULT_LAYOUT:列结构和卡片顺序 │
│ • 自适应视口缩放(translate + scale) │
│ • @media print 优化打印样式 │
└─────────────────────────┬───────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 5. 输出 │
│ ──── │
│ • poster/index.html(交互编辑器) │
│ • poster/poster.pdf(Playwright 导出) │
│ • poster/poster-config.json(布局配置) │
└─────────────────────────────────────────────────────────────┘
# PDF 转高分辨率 PNG
sips -s format png input.pdf --out output.png -Z 3000
# 测量图片尺寸
sips -g pixelWidth -g pixelHeight poster/*.png
# 生成二维码
curl -sL -o qr.png "https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=URL"
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto('file://poster/index.html')
# 测量空白
waste = page.evaluate('window.posterAPI.getWaste()')
# 优化列宽
page.evaluate('window.posterAPI.setColumnWidth("col1", 300)')
# 导出 PDF
page.pdf(path='poster.pdf', width='841mm', height='594mm',
margin={'top':'0','right':'0','bottom':'0','left':'0'},
print_background=True)
browser.close()
| 宽高比 | 类型 | 最佳列 |
|---|---|---|
| > 2:1 | 宽图(架构图) | 最宽列 |
| ~1:1 | 方图(实验结果) | 中等列 |
| < 1:1 | 竖图(示意图) | 最窄列 |
| 问题 | 解决方案 |
|---|---|
playwright not found | pip3 install playwright && playwright install |
sips: image not found | 确保输入文件存在且为 PDF/图片 |
| 图片下载失败 | 使用 Playwright 而非 curl(处理跳转) |
| 海报空白太多 | 调整列宽或交换卡片位置 |
| 打印时样式丢失 | 勾选"背景图形"选项 |
DEFAULT_FONT_SCALE(默认 1.3)object-fit: contain 而非 max-width组合使用:
mofa-poster: 生成海报
mofa-vercel-web: 部署海报到线上
组合使用:
mofa-firecrawl: 获取论文网页内容
mofa-poster: 基于内容生成海报
references/ 参考海报让 Claude 匹配风格本 Skill 基于 ethanweber/posterskill 适配为 MoFA 格式。