关于 paper-poster-html
paper-poster-html 是用于从论文生成可打印海报的技能,通过 HTML 和 Playwright 输出 PDF。它以可测量的布局门槛、真实论文图像来源校验和受限修订流程,帮助研究者制作经过验证的海报。
主要功能
- 01按场地规格设置打印画布
- 02从论文提取内容并审计主张
- 03校验论文图像来源与占比
- 04运行布局、样式和资产门槛
- 05按门槛进行视觉审查与修订
适用场景
- 01将论文内容整理为会议海报
- 02验证海报尺寸和打印布局
- 03追踪海报图像的论文来源
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wanshuiyin/ auto-claude-code-research-in-sleep --skill paper-poster-html安装后在 Claude Code 中输入/paper-poster-html确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
DESIGN_FINAL.mdIMPLEMENTATION_CONVENTIONS.mdNOTICE.mdLICENSES/posterly-MIT.txtscripts/asset_check.pyextract_pdf_figures.pyposter_check.pypreprocess_figures.pyrender_preview.pyrun_gates.pystyle_check.pyscripts/_posterly/__init__.pycanvas.pymeasure.pypolish.pypreflight.pyrender.pytextutil.pyverify_final.pytemplates/COMPONENTS.mdlandscape_4col.htmllandscape_hero.htmlportrait_2col.htmlREADME.mdtemplates/tokens/acl.jsoncvpr.jsongeneric.jsoniclr.jsonicml.jsonneurips.json详细介绍
Paper Poster(HTML):测量门控的海报生成
每次评审时段开始前,请遵循 可选择的评审者: 按顺序解析调用参数 →
.aris/reviewer.json→ Claude Code 默认设置(Codex MCP), 并通过规范的辅助解析器使用reviewer_route.py,保留本时段的层级、新鲜上下文、 源文件/图像输入和确定性门控。 下方的 Codex 示例/固定配置仅适用于backend=codex;其他路由使用各自的 首次调用/回复约定。保存路由和实际返回的身份;不可用的选择记为REVIEW_UNAVAILABLE。根据实际的模型系列/完成状态/范围分类验收。 将调用参数中的评审者/模型/推理强度覆盖值传递给包含评审者的子流程。 生成工作线程不变。
一个 HTML 文件,针对精确的打印画布设置样式(@page { size: W H }),再通过 Playwright 打印仿真渲染为 PDF。通过测量迭代,而不是凭感觉判断——屏幕预览会骗人;只有在正确视口下进行打印仿真,才能得出准确结果。核心门控机制改编自 posterly(MIT,© 2026 Ruishuo Chen——参见 NOTICE.md 和 LICENSES/posterly-MIT.txt);ARIS 增加了样式规范门控、图表来源门控、跨模型评审循环和防止陷入补丁循环的修复词汇表。
此技能的存在意义(它要避免的问题)
先前的流程生成了一张包含30 多种颜色、没有真实论文图表、画布尺寸以屏幕像素计、微小公式漂浮在过大的框中的海报,之后又进行了 12 轮以上的评审,使其变得更糟——每轮都添加一种新的徽章颜色或定制 SVG 补丁。解决办法在于结构,而非劝说:
- 先运行硬性门控,再提出任何审美意见(对齐、样式、素材必须先通过——评审者绝不会看到未经测量的海报)。
- 封闭的修复词汇表——视觉评审修复只能修改设计令牌、完整的目录组件、内容平衡、素材或画布选择。结构上禁止新增内联样式、新增十六进制颜色值或定制装饰。
- 将双主色规范设为机器检查项,而非样式建议。
- 使用带来源清单的真实论文图表,否则门控失败。
思维模型
paper (.tex / PDF) ──► content plan + claim→evidence audit (codex, fresh)
│
figures extracted ─────────┤ FIGURE_MANIFEST.json (provenance, sha256)
(real paper figures ONLY) ▼
template scaffold ──► fill ──► run_gates.py ◄─── HARD, loop here
preflight → style → asset → measure → polish
│ all hard gates PASS
▼
Claude visual review (≤3 issues × ≤3 rounds, fix-vocabulary only)
│ score ≥ 9
▼
codex final cross-model review (fresh thread, full HTML+PDF)
│ pass
▼
verify-final → poster.pdf + GATE_REPORT.json
常量
- SKILL_SCRIPTS =
${CLAUDE_SKILL_DIR}/scripts——所有辅助工具均由单一所有者维护,并随此技能一同发布(Arch C)。如果缺少该目录,说明安装有问题:中止并告知用户重新安装此技能(Policy A——门控机制就是技能本身;绝不可临时替代)。 - REVIEWER_MODEL =
gpt-6-astra,推理强度为xhigh,每次评审调用都使用全新会话(mcp__codex__codex,跨越评审边界时绝不使用codex-reply)。 - CANVAS——从场所的官方规范获取,并在 Phase 0 中实时查询。绝不自行假设。 (已知参照:根据 ICLR 2026 官方印刷服务,ICLR 2026 主会场海报尺寸为 185×90 cm,横向;ICML/NeurIPS 通常为 60×36 in,横向;研讨会海报通常为 61×91 cm,纵向。规范每年都会变化——请核实。)
- PALETTE——默认使用
templates/tokens/generic.json(石板蓝#2D5F8B强调色 + 金色#C9A24A高亮色 + 中性色),适用于所有场所。场所配色包需通过— venue-colors: true显式启用。除非用户传入— allow-purple: true,否则禁止以紫色为主的强调色(色相 250–285)。 - AUTO_PROCEED = false——每个 🚦 检查点都必须等待用户明确确认。
- OUTPUT_DIR = 工作目录中的
poster_html/。
工作流
阶段 0 — 恢复、依赖项、会场规范
- 恢复:如果存在
poster_html/POSTER_STATE.json,且其中status: in_progress(< 24 h),则从保存的阶段继续。 - 依赖项(按降级顺序):
- Playwright + 捆绑的 Chromium → 如果缺失,则运行
python3 -m playwright install chromium→ 如果安装失败,但系统中存在 Chrome,脚本将回退到channel="chrome"→ 如果全部失败:你只能生成内容计划和脚手架, 并将所有内容标注为 “not print verified”,且不得生成最终 PDF。 - 如果缺少
pdfinfo→ 使用 PyMuPDF 读取 PDF 尺寸。必须至少有 pdftoppm / PyMuPDF 之一才能生成 PNG 审阅渲染图。 - MathJax:将
tex-svg.js下载到poster_html/assets/mathjax/一次,并在 HTML 中 通过本地路径引用。仅草稿可以使用 CDN;无论哪种方式,测量关卡都会在 MathJax 未渲染时硬性失败。
- Playwright + 捆绑的 Chromium → 如果缺失,则运行
- 会场规范查询(实时):查阅会场官方海报说明页面
(搜索 + 抓取)。提取尺寸、方向、最小字号、徽标政策、
匿名规则、文件格式。将
{spec, source_url, retrieved}记录到POSTER_STATE.json中—— 规范每年都会变更;绝不可在未说明的情况下重复使用缓存的规范。
🚦 检查点:输出会场规范表(画布、方向、来源 URL)以及 所选模板。等待。
阶段 0.5 — 设计探索(一次 AskUserQuestion 批次)
只提问一次,最多 4 个问题:布局模板(从 templates/README.md 中选择)、配色方案
(默认通用套装 / 会场套装 / 在约束范围内自定义)、徽标 + 会场标志(路径或“无”——绝不可伪造;检查会场的徽标政策)、二维码目标(论文 /
代码 / 项目页面 / 无——使用 qrencode 或 python-qrcode 离线生成;
绝不可使用远程二维码服务 URL)。将回答以 design_decisions 的形式保存在 POSTER_STATE.json 中——
在之后进行任何“改进”之前重新读取,确保不会撤销用户有意作出的选择。
阶段 1 — 论文导入、内容规划、论点审核
- 阅读论文源文件(理想情况下为
.tex;否则为 PDF)。提取:标题/作者/单位、 3–5 个核心数字、核心方法(公式原文照录)、主要结果 (表格/图表及其展示内容)、要点。编写poster_html/POSTER_CONTENT_PLAN.md,说明每列放什么、每张卡片的字数预算。 目标信息密度(不含表格单元格、图注、作者行、页脚): 标准海报 550–850 词;理论与实证内容密集的海报 750–1050 词, 仅当使用 ≥2 个紧凑组件(eqn-anatomy、flow-strip、derived-col、claim-pills、keybox--4)时才允许。对于 4 列横向版式, 少于 500 词时提醒自己内容可能会显得稀疏,不如专业海报那样充实;除非模板以主视觉/视觉效果为先。 多于 1100 词时也要提醒自己,除非用户要求密集模式。项目符号尽可能 ≤ 8 词——信息密度应来自结构,而非冗长文字。优先采用紧凑结构,而不是散文:如果论文包含明确的目标函数、算法、定理机制或基线比较,至少提取以下内容中的两项:(1) 实证目标/损失项组合;(2) 逐项公式解析;(3) 基于论文变量的方法流程条;(4) 方法与基线逐行对比的派生 Δ 列;(5) 四格实现/理论要点框;(6) 面向数值密集型海报的论点/证据胶囊表。**不要编造算法。**如果论文只有目标函数,应将组件标为“目标流程”或“损失解析”,绝不能标为“算法”。 - 跨模型内容审核(新建 codex 线程,
xhigh):提供内容规划文件路径和论文源文件路径——仅提供路径,不提供摘要——并要求生成论点→证据表:| poster 上的论点 | 论文文件:行号 | 论文原文(逐字) | 匹配? |,其中匹配状态 ∈ {OK, NUMERIC-MISMATCH, OVERCLAIM, MISSING-PRECONDITION, NOT-IN-PAPER, SCOPE-NARROWED}。保存至poster_html/CLAIM_EVIDENCE.md。 - 修正每一行非 OK 项,或将其记录为用户确认接受的权衡。
🚦 检查点:内容规划 + 审核摘要。等待。
阶段 2 — 论文原图(须通过溯源检查)
来源优先级:
- 论文源文件中的
figures/(矢量 SVG/PDF → 若可用则通过inkscape/pdf2svg转为 SVG,否则按 ≥ 2× 的渲染像素尺寸栅格化)。 - 仅有 PDF:运行
extract_pdf_figures.py contact-sheet和auto列出候选区域 → 选择裁剪区域(🚦 由人工确认裁剪选择)→ 以 300–450 DPI 运行crop。 - 最后手段:由用户提供明确的
page,x0,y0,x1,y1边界框。
然后对每项素材运行 preprocess_figures.py --autocrop。每张源自论文的图片都必须在
FIGURE_MANIFEST.json 中有一条记录(source hash、页码、边界框、DPI、sha256、natural_px),并嵌入为 <img data-source="paper" data-asset-id="...">。
硬性规则:至少包含 2 张源自论文的视觉素材,否则素材检查不通过。纯理论论文可在人工检查点豁免总面积规则(--waive-total-area),但绝不能静默豁免。绝不可绘制定制的装饰性 SVG“图形”来替代。
图表面积区间(素材检查,以正文面积的比例计算):总面积目标 14–22 %
(< 12 % / > 24 % 时警告,< 10 % / > 28 % 时判定失败);每张普通图目标为 4–8 %(> 10 % 时警告,> 13 % 时判定失败);figure--duo 合计为 8–12 %。主视觉模板可传入 --hero(中心视觉可占 30–40 %)。失败情形是对称的:太小会显得像装饰,太大会挤占内容。共用坐标轴或呈现前后变化的配套图应放在同一张 figure--duo 卡片中,而不是分成两张卡片。
阶段 3 — 脚手架 + 设计令牌
cp templates/<chosen>.html poster_html/poster.html;将 @page 和 .poster 的
尺寸调整为会场画布尺寸(修改两处,填写相同数值);将选定的设计令牌包应用到
:root DESIGN TOKENS 区块;按照规划填入内容;嵌入清单中的图片。
运行 preflight + style_check——开始任何布局迭代前,两者都必须 PASS。(全新的
脚手架按预期会无法通过 measure——该检查针对的是已填充内容的海报。)
阶段 4 — 布局硬性循环
每次更改布局后:
python3 "$SKILL_SCRIPTS/run_gates.py" poster_html/poster.html \
--tokens <pack.json> --manifest poster_html/FIGURE_MANIFEST.json \
--report poster_html/GATE_REPORT.json
标准顺序:预检 → 样式 → 资源 → 测量 → 润色。目标:列底部
错位 < 5 px(目标 < 3),页脚间距 ∈ [30, 50] px,卡片间距 ∈ [12, 50] px,
画布填充率 ∈ [95, 101] %,海报边界框与页面对齐,误差在 ±2 px 以内。每种故障模式的修复指南都在门禁输出和 templates/COMPONENTS.md 中。任何硬性门禁未通过时都不得继续。不得让审阅者看到未经测量的海报。
用论文中的内容(门禁 C)平衡内容不足的列,绝不能用空白、space-between 或拉伸卡片来平衡。
阶段 5 — Claude 视觉审查(美学门禁)
自行渲染并阅读结果:
python3 "$SKILL_SCRIPTS/render_preview.py" poster_html/poster.html
pdftoppm -r 100 poster_html/poster_preview.pdf poster_html/review_full -png -f 1 -l 1
# plus 2-4 region crops at higher res (header / one column / equations) via PIL
先校准(../shared-references/taste-calibration.md):如果此技能目录下存在人工精选的 references/good/ + references/bad/(或项目提供了自己的成对参考资料),则先按以下维度给这 3+3 张参考海报评分,再评估目标海报,以此锚定评分尺度。切勿自行选择、搜索或生成锚点;如果不存在参考集,则不校准,标记为 CALIBRATION: none——切勿捏造锚点评分。
维度(权重总和为 1.0):设计 0.35 · 工艺 0.30 · 功能性 0.20 · 原创性 0.15。映射规则:SCORE = min(round(1 + 9 × COMPOSITE), lowest triggered cap)——映射后再应用上限;下方循环中的 Score ≥ 9 阈值始终依据最终受上限约束的 SCORE,绝不依据原始综合分。
严格按 1–10 分评分。关键上限(硬性下限——校准后的综合分绝不能凌驾于这些上限之上):论文真实图表少于 2 个 → ≤ 3;画布损坏/内容被裁切/数学公式无法阅读 → ≤ 4;可见色相家族 ≥ 4 个或页眉渐变过多 → ≤ 4;卡片或列大面积留白 → ≤ 5;虚构视觉主张 → ≤ 3。 检查项:海报级展示效果(与专业设计的海报并列展示时,是否不会显得像拼凑的仪表板?)、强调色使用克制、真实图表清晰且居于中心、印刷层级(标题 → 核心数据 → 图表 → 细节)、列填充率、公式突出度(不得把细小公式放在过大的框中)、正文衬线字体/展示用无衬线字体搭配、无俗艳渐变、组件风格一致、60 秒叙事。输出格式:
SCORE: N/10 (= min(round(1 + 9 × COMPOSITE), lowest cap); drives the loop)
COMPOSITE: 0.xx (weighted; list the four per-axis scores)
CALIBRATION: anchored | none
GAP: <which reference poster the target falls short of / exceeds, on which axis, and why — one paragraph; omit only when CALIBRATION: none>
CAPS_TRIGGERED: ...
TOP_ISSUES: (max 3)
ALLOWED_FIX_TYPE per issue: token | component | rebalance | asset | template/canvas
PATCH_LOOP_RISK: low | medium | high
循环:修复(使用下方的修复词汇)→ 重新运行阶段 4 的门禁 → 重新评分。**每轮最多 3 个问题,最多 3 轮。**评分 ≥ 9 → 阶段 6。3 轮后仍 < 9 → 停止打补丁;升级处理,重新选择模板/画布/内容(回到阶段 3),或交由人工决策。绝不进入第 4 轮外观修补。
修复词汇(封闭集合——防止补丁循环的核心)
允许:(a) 编辑 :root 令牌值;(b) 从 templates/COMPONENTS.md 中替换/移除/添加整个组件实例;
(c) 重新平衡内容(将卡片移至其他列,根据论文内容删减/扩充文本,在其长宽比区间内调整图表大小);(d) 重新选择模板/画布;(e) 修改现有组件的 CSS,但只能引用令牌;(f) 切换预定义变体(.eqn--large、.card--compact、.figure--wide、.nowrap 等);(g) 修复资源(重新裁切、替换为同一篇论文中更清晰的图表、重新预处理)。
禁止:新增内联样式、在任何位置添加新的十六进制值、自制装饰性 SVG、为单个元素覆盖字体大小。不得在视觉循环中创建新组件——停止操作,设置人工检查点,将其添加到 COMPONENTS.md,并从阶段 3 重新运行。
阶段 6 — Codex 最终审核(新对话线程,跨模型)
先确保所有硬性门槛均通过、润色警告为零或已豁免,且视觉评分 ≥ 9。然后由一个新的 Codex 对话线程(xhigh)审核最终产物(而非内容规划):poster.html、渲染后的 PDF/PNG、论文源文件、GATE_REPORT.json、CLAIM_EVIDENCE.md——只提供路径,不附带执行者背景。审核内容包括:(1) 在最终文本上重新核查忠实度与过度声称(润色可能引入新主张);(2) 残留内容(\ref{、TODO、数学公式中的原始 <、缺失图片、远程 URL);(3) 视觉表达(标题数字是否醒目、横幅是否能从 2 m 外读清);(4) 门槛日志是否一致。审核者只提出建议,不进行编辑。任何修复都必须重新经过阶段 4/5 的门槛审核——不得直接进入复审。
阶段 7 — 最终验证 + 报告
python3 "$SKILL_SCRIPTS/poster_check.py" verify-final poster_html/poster_preview.pdf \
--from-html poster_html/poster.html --max-size-mb 20
页数为 1,尺寸与 @page 匹配,大小 ≤ 20 MB,无 TODO 或残留内容,无远程资源。报告内容:PDF 路径、最终跨页版面像素尺寸、页脚间距范围、门槛摘要表、未解决的豁免项、Codex 判定。将 POSTER_STATE.json 更新为 done。
状态持久化
poster_html/POSTER_STATE.json:{phase, venue, canvas{w,h,orientation,source_url, retrieved}, template, token_pack, design_decisions{...}, figures_selected[], visual_rounds, codex_threads{audit, final}, status, timestamp}——每个阶段结束后写入;可用于精简恢复后续执行。
关键规则
- 测量,不要凭感觉。 没有
run_gates.py的输出,就不能声称版面达标。 - 先过门槛,再谈美观。 Claude/Codex 只会审核硬性门槛已通过的海报。这个顺序能避免陷入无休止的补丁循环。
- 绝不捏造论文数据或图表。 数字取自论文源文件;视觉素材必须带有清单来源信息。造假 = 最高评分 ≤ 3。
- 两种色调,一个系统。 强调色 + 金色 + 中性色。样式门槛会强制执行;不要和门槛讨价还价。
- 真正的图表才是海报。 没有论文自身图表的海报只是仪表板,而不是海报。
- 修复类型固定。 如果某项修复无法归入令牌 / 组件 / 重新平衡 / 资源 / 画布这几类,那就不是正确的修复。
- 跨模型判定。 Claude 驱动循环并评定视觉效果;内容忠实度是否达标,由新的 Codex 对话线程判定(循环可以驱动,但不能判无罪)。
- 保留用户决策。 在“改进”任何内容前,重新阅读
design_decisions。 - 第三方代码边界。
poster_check.py、render_preview.py、_posterly/来自 posterly 的移植代码——尽量减少差异;ARIS 侧逻辑应放入新脚本,而不是移植文件。
审核追踪
按照 shared-references/review-tracing.md,将每次 Codex 审核调用的追踪记录保存到 .aris/traces/paper-poster-html/<date>_run<NN>/(包括审核和最终线程、原始响应)。
输出约定
poster_html/
├── poster.html # single-file source of truth
├── poster_preview.pdf # print-emulated, verify-final-checked
├── poster_preview.png # thumbnail
├── POSTER_STATE.json # resume state
├── GATE_REPORT.json # canonical gate ledger (schema v1)
├── POSTER_CONTENT_PLAN.md # what-goes-where + word budgets
├── CLAIM_EVIDENCE.md # codex claim→evidence audit
├── FIGURE_MANIFEST.json # figure provenance (sha256, page, bbox, dpi)
└── assets/{paper_figures,logos,qr,mathjax}/
不适用场景
- 需要制作幻灯片而非海报 →
/paper-talk//slides-polish。 - 论文的核心主张尚未稳定——先修改论文;海报会放大所提供的任何叙事。