paper-poster
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePaper Poster: From Paper to Conference Poster
论文海报:从论文到会议海报
Generate a conference poster from: $ARGUMENTS
从以下内容生成会议海报:$ARGUMENTS
Context
背景说明
This skill runs after Workflow 3 (). It takes a compiled paper and generates a print-ready poster for conference poster sessions. The poster extracts key content from the paper — it does not dump the full paper text onto a poster.
/paper-writingUnlike papers (dense prose, 8-15 pages), posters are visual-first: one page, 4 columns, bullet points only, figures dominant. A good poster tells the story in 60 seconds.
该技能需在工作流3()之后运行。它会读取已编译的论文,生成可直接用于会议海报展示的印刷级海报。海报会提取论文中的关键内容——不会将论文全文直接复制到海报上。
/paper-writing与论文(内容密集的 prose,8-15页)不同,海报以视觉呈现优先:单页、4列布局、仅用项目符号、图表占主导地位。优秀的海报能在60秒内讲清核心内容。
Constants
常量配置
- VENUE = — Target venue, determines color scheme. Supported:
NeurIPS,NeurIPS,ICML,ICLR,AAAI,ACL,EMNLP,CVPR,ECCV. Override via argument (e.g.,GENERIC)./paper-poster "— venue: ICML" - POSTER_SIZE = — Paper size. Options:
A0(841x1189mm, default),A0(594x841mm).A1 - ORIENTATION = — Orientation. Options:
landscape(default),landscape.portrait - COLUMNS = 4 — Number of content columns. Typical: 4 for landscape A0 (IMRAD), 3 for portrait A0 (research consensus), 2 for portrait A1. Portrait A0 should NEVER use 4 columns — text becomes too narrow and unreadable.
- PAPER_DIR = — Directory containing the compiled paper (main.tex + figures/).
paper/ - OUTPUT_DIR = — Output directory for all poster files.
poster/ - REVIEWER_MODEL = — Model used via Codex MCP for poster review.
gpt-5.4 - AUTO_PROCEED = false — At each checkpoint, always wait for explicit user confirmation. Set only if user explicitly requests fully autonomous mode.
true - COMPILER = — LaTeX build tool.
latexmk - ENGINE = — LaTeX engine. Use
pdflatexfor CJK text.xelatex
💡 Override:/paper-poster "paper/" — venue: CVPR, size: A1, orientation: portrait, columns: 3
- VENUE = — 目标会议,决定配色方案。支持的会议:
NeurIPS、NeurIPS、ICML、ICLR、AAAI、ACL、EMNLP、CVPR、ECCV。可通过参数覆盖(例如:GENERIC)。/paper-poster "— venue: ICML" - POSTER_SIZE = — 纸张尺寸。可选:
A0(841x1189mm,默认)、A0(594x841mm)。A1 - ORIENTATION = — 排版方向。可选:
landscape(横向,默认)、landscape(纵向)。portrait - COLUMNS = 4 — 内容列数。典型配置:横向A0用4列(IMRAD结构),纵向A0用3列(学术共识),纵向A1用2列。纵向A0绝对不能用4列——文本会过窄,无法阅读。
- PAPER_DIR = — 存放已编译论文的目录(包含main.tex + figures/)。
paper/ - OUTPUT_DIR = — 所有海报文件的输出目录。
poster/ - REVIEWER_MODEL = — 通过Codex MCP用于海报审核的模型。
gpt-5.4 - AUTO_PROCEED = false — 在每个检查点,始终等待用户明确确认。仅当用户明确要求完全自主模式时,设置为。
true - COMPILER = — LaTeX构建工具。
latexmk - ENGINE = — LaTeX引擎。处理中日韩文本时使用
pdflatex。xelatex
💡 覆盖配置示例:/paper-poster "paper/" — venue: CVPR, size: A1, orientation: portrait, columns: 3
Venue Color Schemes
会议配色方案
Use deep, saturated colors for primary — pastel/light colors wash out on large posters viewed from distance. Each venue uses a 3-color system: primary (dark, for title bar), secondary (medium, for section headers), accent (contrast, for highlights).
| Venue | Primary | Secondary | Accent | Background | Text |
|---|---|---|---|---|---|
| NeurIPS | | | | | |
| ICML | | | | | |
| ICLR | | | | | |
| CVPR | | | | | |
| AAAI | | | | | |
| ACL | | | | | |
| EMNLP | | | | | |
| ECCV | | | | | |
| GENERIC | | | | | |
⚠️ Color lesson: Never use light/pastel colors (e.g.,) as primary — they look washed out on A0 posters. Always use the darkest shade as primary for the title bar.#8B5CF6
主色调使用深邃、饱和度高的颜色——浅色调/淡色在大尺寸海报上从远处看会显得模糊。每个会议采用三色系统:主色(深色,用于标题栏)、辅助色(中等色调,用于章节标题)、强调色(对比色,用于高亮内容)。
| 会议 | 主色 | 辅助色 | 强调色 | 背景色 | 文本色 |
|---|---|---|---|---|---|
| NeurIPS | | | | | |
| ICML | | | | | |
| ICLR | | | | | |
| CVPR | | | | | |
| AAAI | | | | | |
| ACL | | | | | |
| EMNLP | | | | | |
| ECCV | | | | | |
| GENERIC | | | | | |
⚠️ 配色注意事项:绝不要用浅色调/淡色(例如)作为主色——在A0尺寸的海报上会显得模糊。标题栏始终使用最深的色调作为主色。#8B5CF6
State Persistence (Compact Recovery)
状态持久化(断点恢复)
Poster generation can be long. Persist state to after each phase:
poster/POSTER_STATE.jsonjson
{
"phase": 3,
"venue": "NeurIPS",
"poster_size": "A0",
"orientation": "landscape",
"columns": 4,
"figures_selected": ["architecture.pdf", "results.pdf"],
"codex_thread_id": "019cfcf4-...",
"status": "in_progress",
"timestamp": "2026-03-18T15:00:00"
}On startup: if exists with and within 24h → resume from saved phase. Otherwise → fresh start.
POSTER_STATE.json"status": "in_progress"海报生成过程可能较长。在每个阶段后,将状态保存到:
poster/POSTER_STATE.jsonjson
{
"phase": 3,
"venue": "NeurIPS",
"poster_size": "A0",
"orientation": "landscape",
"columns": 4,
"figures_selected": ["architecture.pdf", "results.pdf"],
"codex_thread_id": "019cfcf4-...",
"status": "in_progress",
"timestamp": "2026-03-18T15:00:00"
}启动时:如果存在且,且时间在24小时内,则从保存的阶段恢复。否则,从头开始。
POSTER_STATE.json"status": "in_progress"Critical LaTeX Architecture Decisions
关键LaTeX架构决策
⚠️ MUST useclass, NEVERarticleclass. The beamer class consumes too many TeX grouping levels for its overlay/mode system. Combined with tcbposter'sbeamerstyle on 8+ posterboxes, this triggersenhanced. The article class + geometry package for custom page size is the correct approach. This was validated through 5 failed compilation attempts with beamer before switching to article.! TeX capacity exceeded, sorry [grouping levels=255]
⚠️ NEVER usepackage. It may not be installed in minimal TeX distributions. Use plainadjustboxinstead. Do NOT use\includegraphics[width=0.96\linewidth]{file}option (requires adjustbox).max height
⚠️ 必须使用类,绝对不能用article类。 beamer类的叠加/模式系统会占用过多TeX分组层级。结合tcbposter的beamer样式和8个以上的海报框,会触发enhanced错误。正确的做法是使用article类 + geometry包来设置自定义页面尺寸。这是经过5次beamer编译失败后验证的方案。! TeX capacity exceeded, sorry [grouping levels=255]
⚠️ 绝对不要使用包。 它可能未在精简版TeX发行版中安装。改用纯adjustbox。不要使用\includegraphics[width=0.96\linewidth]{file}选项(需要adjustbox)。max height
Template Foundation
模板基础
latex
\documentclass{article}
% A0 landscape: paperwidth=1189mm,paperheight=841mm
% A0 portrait: paperwidth=841mm,paperheight=1189mm
\usepackage[paperwidth=1189mm,paperheight=841mm,margin=0mm]{geometry}
\usepackage{tcolorbox}
\tcbuselibrary{poster,skins,fitting}
\usepackage{graphicx}
\usepackage{amsmath,amssymb}
\usepackage{enumitem}
\usepackage[table]{xcolor} % MUST use [table] option for \rowcolor in tables
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\pagestyle{empty}⚠️ NEVER use— it pulls in\usepackage[most]{tcolorbox}which may not be installed. Always uselistingsutf8.styexplicitly.\tcbuselibrary{poster,skins,fitting}
⚠️ Usenot plain[table]{xcolor}— needed for{xcolor}in benchmark tables. The\rowcolorpackage is loaded automatically by this option.colortbl
latex
\documentclass{article}
% A0 landscape: paperwidth=1189mm,paperheight=841mm
% A0 portrait: paperwidth=841mm,paperheight=1189mm
\usepackage[paperwidth=1189mm,paperheight=841mm,margin=0mm]{geometry}
\usepackage{tcolorbox}
\tcbuselibrary{poster,skins,fitting}
\usepackage{graphicx}
\usepackage{amsmath,amssymb}
\usepackage{enumitem}
\usepackage[table]{xcolor} % MUST use [table] option for \rowcolor in tables
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\pagestyle{empty}⚠️ 绝对不要使用— 它会引入\usepackage[most]{tcolorbox},该文件可能未安装。始终显式使用listingsutf8.sty。\tcbuselibrary{poster,skins,fitting}
⚠️ 使用而非纯[table]{xcolor}— 表格中使用{xcolor}需要该配置。此选项会自动加载\rowcolor包。colortbl
tcbposter Layout Rules (Critical)
tcbposter布局规则(关键)
⚠️ The #1 cause of poster failures is content overflow. tcbposter uses a fixed grid — content that exceeds the box is silently clipped with no compilation error. You will NOT see any warning; the poster will simply be cut off.
⚠️ The #2 cause is large whitespace gaps. Using too few rows (e.g.,) creates ~168mm per row on A0 landscape. If title text only needs 120mm, the remaining 48mm is wasted whitespace. Solution: userows=5for fine-grained control (~42mm per row).rows=20
⚠️ 海报制作失败的头号原因是内容溢出。 tcbposter使用固定网格——超出框的内容会被静默裁剪,且无编译错误。你不会看到任何警告,海报内容会直接被截断。
⚠️ 第二大原因是大空白间隙。 使用过少的行(例如)会在横向A0海报上每行产生约168mm的高度。如果标题文本仅需120mm,剩余的48mm会被浪费为空白。解决方案:使用rows=5进行精细控制(每行约42mm)。rows=20
Grid System: rows=20
(Critical)
rows=20网格系统:rows=20
(关键)
rows=20Use for A0 landscape. Each row ≈ 42mm, giving precise control over section heights.
rows=20Recommended row allocation for 4-column A0 landscape:
| Section | Rows | Height | Row range |
|---|---|---|---|
| Title bar | 3 | ~126mm | |
| Stat banner | 2 | ~84mm | |
| Body content | 14 | ~588mm | |
Key principle: Always use syntax (not ) for precise vertical placement. The syntax lets tcolorbox auto-place, which often leaves unwanted gaps.
between=rowN and rowMbelow=namebelow=横向A0海报使用。每行约42mm,可精确控制章节高度。
rows=204列横向A0海报推荐行分配:
| 章节 | 行数 | 高度 | 行范围 |
|---|---|---|---|
| 标题栏 | 3 | ~126mm | |
| 统计横幅 | 2 | ~84mm | |
| 主体内容 | 14 | ~588mm | |
核心原则:始终使用语法(而非)进行精确垂直定位。语法会让tcolorbox自动布局,通常会留下不必要的空白。
between=rowN and rowMbelow=namebelow=Row Count Guidance
行数指导
| Poster Size | Orientation | Recommended rows | Columns | Row height |
|---|---|---|---|---|
| A0 | landscape | 20 | 4 | ~42mm |
| A0 | portrait | 20 | 3 | ~59mm |
| A1 | landscape | 16 | 3 | ~37mm |
| A1 | portrait | 20 | 2 | ~30mm |
| 海报尺寸 | 排版方向 | 推荐行数 | 列数 | 行高度 |
|---|---|---|---|---|
| A0 | 横向 | 20 | 4 | ~42mm |
| A0 | 纵向 | 20 | 3 | ~59mm |
| A1 | 横向 | 16 | 3 | ~37mm |
| A1 | 纵向 | 20 | 2 | ~30mm |
Portrait A0 Layout (3 columns, rows=20)
纵向A0布局(3列,rows=20)
⚠️ Portrait A0 posters use 2-3 columns, NEVER 4. Research consensus: "Two columns is typical for a poster with a portrait orientation" (Colin Purrington, NYU poster guides). At 841mm width, 4 columns give only ~195mm per column — too narrow for readable text at poster-session distance. 3 columns (~260mm each) is the recommended default for content-rich papers. Use 2 columns for simpler posters or when figures need more horizontal space.
For portrait posters (841x1189mm), use a 3-column, 3-row-band layout:
| Section | Rows | Row range | Content |
|---|---|---|---|
| Title bar | 4 | | Title + authors + venue (span=3) |
| Stat banner | 2 | | 3 headline stat callouts (span=3) |
| Row A | 5 | | Background+Motivation, Method (hero fig), Key Results (fig) |
| Row B | 5 | | Contributions, Equations+Ablation, Result 2 (fig+table) |
| Row C | 4 | | References+QR, Setup+Benchmarks, Key Takeaways |
3-column portrait layout diagram:
┌─────────────────────────────────────┐
│ TITLE BAR (span=3) │
├─────────────────────────────────────┤
│ Stat 1 │ Stat 2 │ Stat 3 │
├────────────┼────────────┼──────────┤
│ Background │ Method │ Result 1 │
│ & Motiv. │ (hero fig) │ (figure) │
├────────────┼────────────┼──────────┤
│ Contribu- │ Equations │ Result 2 │
│ tions │ & Ablation │ (fig+tbl)│
├────────────┼────────────┼──────────┤
│ References │ Setup & │ Key │
│ + QR Code │ Benchmarks │Takeaways │
└────────────┴────────────┴──────────┘⚠️ All 3 columns in each row band share the same row boundaries. This ensures cross-column alignment. Never mixin one column withrow6 to row11in another — it creates visual misalignment.row6 to row10
⚠️ Usefor tight layouts. Card separation is handled by card styles (left accent stripe, drop shadow), not grid spacing. Grid spacing > 2mm creates visible gaps between rows.spacing=0mm
⚠️ 纵向A0海报使用2-3列,绝对不能用4列。 学术共识:“纵向海报通常使用2列”(纽约大学Colin Purrington海报指南)。在841mm宽度下,4列每列仅约195mm——在海报展示距离下文本过窄,无法阅读。内容丰富的论文推荐默认用3列(每列约260mm)。内容简单的海报或图表需要更多横向空间时,使用2列。
纵向海报(841x1189mm)采用3列、3行区块布局:
| 章节 | 行数 | 行范围 | 内容 |
|---|---|---|---|
| 标题栏 | 4 | | 标题 + 作者 + 会议(跨3列) |
| 统计横幅 | 2 | | 3个核心统计标注框(跨3列) |
| 区块A | 5 | | 背景与动机、方法(核心图表)、关键结果(图表) |
| 区块B | 5 | | 贡献、公式与消融实验、结果2(图表+表格) |
| 区块C | 4 | | 参考文献+二维码、实验设置与基准、核心结论 |
3列纵向布局示意图:
┌─────────────────────────────────────┐
│ 标题栏(跨3列) │
├─────────────────────────────────────┤
│ 统计1 │ 统计2 │ 统计3 │
├────────────┼────────────┼──────────┤
│ 背景与动机 │ 方法 │ 结果1 │
│ │(核心图表)│(图表)│
├────────────┼────────────┼──────────┤
│ 研究贡献 │ 公式与消融 │ 结果2 │
│ │ │(图+表)│
├────────────┼────────────┼──────────┤
│ 参考文献 │ 实验设置与 │ 核心 │
│ + 二维码 │ 基准测试 │ 结论 │
└────────────┴────────────┴──────────┘⚠️ 每个行区块中的所有3列必须共享相同的行边界。 这样可确保跨列对齐。绝不要在一列中使用,而在另一列中使用row6 to row11——这会导致视觉错位。row6 to row10
⚠️ 使用实现紧凑布局。卡片分隔通过卡片样式(左侧强调条纹、投影)实现,而非网格间距。网格间距大于2mm会在行与行之间产生明显间隙。spacing=0mm
Modern Card Design System (Left Accent Stripe)
现代卡片设计系统(左侧强调条纹)
Instead of rounded boxes with colored headers, use a left accent stripe design. This is cleaner, more modern, and avoids the "PowerPoint box" look.
Define 4 card styles using the venue's 3-color system:
latex
% Tinted card backgrounds (NOT pure white — adds warmth)
\definecolor{redbg}{HTML}{FFF5F3} % warm pink tint for redcard
\definecolor{bluebg}{HTML}{F0F4FF} % cool blue tint for bluecard
\definecolor{darkbg}{HTML}{FDF6F3} % warm cream tint for darkcard
\definecolor{redtitlebg}{HTML}{FDEAE8} % title bar tint
\definecolor{bluetitlebg}{HTML}{E4ECFF}
\definecolor{darktitlebg}{HTML}{F5E8E2}
\tcbset{
redcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=redbg,
borderline west={5pt}{0pt}{secondary},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{secondary},
coltitle=secondary, colbacktitle=redtitlebg,
toptitle=6pt, bottomtitle=6pt,
titlerule=2pt, titlerule style={secondary!50},
valign=top, drop shadow={opacity=0.18},
},
bluecard/.style={...same pattern with accent color and bluebg...},
darkcard/.style={...same pattern with primary color and darkbg...},
highlightcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=primary!18!white,
borderline west={6pt}{0pt}{primary},
fonttitle=...\color{white}, colbacktitle=primary,
...
},
}Card assignment pattern (creates visual rhythm):
- redcard (secondary stripe): Background, Key Idea, Ablation, References, Setup
- bluecard (accent stripe): Result 1, Result 2, Benchmarks, Analysis
- darkcard (primary stripe): Contributions, Method
- highlightcard (primary fill): Key Takeaways / Conclusion
⚠️ Card backgrounds must NOT be pure white (#FFFFFF). Use subtle tints matching the card's color family. Pure white cards on a tinted poster background look disconnected. The tint should be barely visible but adds cohesion.
替代带彩色标题栏的圆角框,使用左侧强调条纹设计。这种设计更简洁、现代,避免“PowerPoint框”的观感。
使用会议的三色系统定义4种卡片样式:
latex
% 卡片背景色(非纯白色——增加温暖感)
\definecolor{redbg}{HTML}{FFF5F3} % 红色卡片的暖粉色调
\definecolor{bluebg}{HTML}{F0F4FF} % 蓝色卡片的冷蓝色调
\definecolor{darkbg}{HTML}{FDF6F3} % 深色卡片的暖奶油色调
\definecolor{redtitlebg}{HTML}{FDEAE8} % 标题栏色调
\definecolor{bluetitlebg}{HTML}{E4ECFF}
\definecolor{darktitlebg}{HTML}{F5E8E2}
\tcbset{
redcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=redbg,
borderline west={5pt}{0pt}{secondary},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{secondary},
coltitle=secondary, colbacktitle=redtitlebg,
toptitle=6pt, bottomtitle=6pt,
titlerule=2pt, titlerule style={secondary!50},
valign=top, drop shadow={opacity=0.18},
},
bluecard/.style={...same pattern with accent color and bluebg...},
darkcard/.style={...same pattern with primary color and darkbg...},
highlightcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=primary!18!white,
borderline west={6pt}{0pt}{primary},
fonttitle=...\color{white}, colbacktitle=primary,
...
},
}卡片分配模式(营造视觉节奏):
- redcard(辅助色条纹):背景、核心观点、消融实验、参考文献、实验设置
- bluecard(强调色条纹):结果1、结果2、基准测试、分析
- darkcard(主色条纹):研究贡献、方法
- highlightcard(主色填充):核心结论/总结
⚠️ 卡片背景绝对不能是纯白色(#FFFFFF)。 使用与卡片色系匹配的淡色调。纯白色卡片在带色调的海报背景上会显得脱节。色调应几乎不可见,但能增强整体协调性。
Figure + Caption Macro
图表+标题宏
Define a consistent macro for all figures to ensure uniform spacing:
latex
\newcommand{\posterfig}[3]{%
\centering\includegraphics[width=#1\linewidth]{#2}\\[3mm]
{\fontsize{26}{32}\selectfont\color{textgray}\textit{#3}}\vspace{2mm}%
}
% Usage: \posterfig{0.96}{figures/results.png}{Caption text here.}⚠️ Inconsistent figure-text spacing is the #1 visual flaw in generated posters. Themacro enforces uniform 3mm gap + 2mm bottom padding across all figures.\posterfig
定义统一的宏用于所有图表,确保间距一致:
latex
\newcommand{\posterfig}[3]{%
\centering\includegraphics[width=#1\linewidth]{#2}\\[3mm]
{\fontsize{26}{32}\selectfont\color{textgray}\textit{#3}}\vspace{2mm}%
}
% 使用示例:\posterfig{0.96}{figures/results.png}{标题文本。}⚠️ 图表与文本间距不一致是生成海报的头号视觉缺陷。宏确保所有图表的间距统一为3mm间隙 + 2mm底部内边距。\posterfig
Content Colorbox Intensity
内容色块强度
Inside cards, use for highlighted blocks. The intensity must be 18-25% (not 8-12% which is too faint):
\colorbox{color!N}Nlatex
% TOO FAINT (invisible on print):
\colorbox{primary!8}{\parbox{...}{...}}
% CORRECT (visible, distinct):
\colorbox{primary!20}{\parbox{0.94\linewidth}{...}}
\colorbox{accent!20}{\parbox{0.94\linewidth}{...}}
\colorbox{secondary!20}{\parbox{0.94\linewidth}{...}}Similarly, in tables should use 15% intensity: .
\rowcolor\rowcolor{primary!15}在卡片内,使用高亮区块。强度必须为18-25%(8-12%太淡,几乎看不见):
\colorbox{color!N}Nlatex
% 太淡(打印后看不见):
\colorbox{primary!8}{\parbox{...}{...}}
% 正确(可见、清晰):
\colorbox{primary!20}{\parbox{0.94\linewidth}{...}}
\colorbox{accent!20}{\parbox{0.94\linewidth}{...}}
\colorbox{secondary!20}{\parbox{0.94\linewidth}{...}}同样,表格中的应使用15%的强度:。
\rowcolor\rowcolor{primary!15}Font Size Rules (A0 at article class — NO scale factor)
字体大小规则(article类A0海报——无缩放因子)
⚠️ Critical: When usingclass (not beamerposter), there is NO automatic scale factor. All font sizes are literal. A poster viewed from 1.5m needs much larger fonts than you think.article
| Element | Font size | Leading | Example |
|---|---|---|---|
| Title | 90pt | 108pt | |
| Author line | 42pt | 50pt | |
| Section headers | 42pt | 50pt | via |
| Sub-headers | 38pt | 46pt | |
| Body text | 34pt | 44pt | |
| Stat callout numbers | 72pt | 86pt | |
| Stat callout labels | 30pt | 36pt | |
| Equations | 32pt | 40pt | |
| Table cells | 30pt | 38pt | |
| Figure captions | 28pt | 34pt | |
| References | 30pt | 40pt | |
⚠️ Lesson learned from testing: Body text at 20pt on A0 is unreadable from more than 0.5m. 34pt is the minimum for comfortable reading at poster-session distance.
⚠️ 关键:使用类(而非beamerposter)时,没有自动缩放因子。所有字体大小都是实际尺寸。从1.5米外观看的海报,字体需要比你想象的大得多。article
| 元素 | 字体大小 | 行高 | 示例 |
|---|---|---|---|
| 标题 | 90pt | 108pt | |
| 作者行 | 42pt | 50pt | |
| 章节标题 | 42pt | 50pt | 通过 |
| 子标题 | 38pt | 46pt | |
| 正文 | 34pt | 44pt | |
| 统计标注数字 | 72pt | 86pt | |
| 统计标注标签 | 30pt | 36pt | |
| 公式 | 32pt | 40pt | |
| 表格单元格 | 30pt | 38pt | |
| 图表标题 | 28pt | 34pt | |
| 参考文献 | 30pt | 40pt | |
⚠️ 测试经验:A0海报上20pt的正文在0.5米外无法阅读。34pt是海报展示距离下舒适阅读的最小尺寸。
Content Budget
内容预算
Total target: 300-500 words (excluding figure captions and stat callout numbers).
⚠️ The #1 content mistake is too much text. A poster is NOT a paper summary — it's a visual guide. Each bullet should be a key phrase (5-8 words), not a sentence. If you find yourself writing full sentences, you're putting too much text.
⚠️ Content density calibration: When in doubt, use LESS text. It's much easier to add a few words than to trim dense paragraphs. Target ~70% fill per card (some breathing room), NOT 100%.
| Box type | Max bullets | Max words | Figure? | Style |
|---|---|---|---|---|
| Background | 3 | 40-60 | No | Short bullets + 1 key insight colorbox |
| Key Idea / Architecture | 0-1 | 20-30 | Yes (hero fig) | Figure dominant + 2 one-liner colorboxes |
| Contributions | 3-4 | 60-80 | No | Numbered, 1 line each |
| Method | 2-3 | 40-60 | No | 2 equation colorboxes + 3 short bullets |
| Results (each) | 2-3 | 30-50 | Yes (figure) | Figure + 2-3 one-line colorboxes |
| Ablation | 3 | 30-40 | No | 3 colorboxes, 2 lines each max |
| Analysis | 3 | 30-50 | Yes (figure) | Figure + 3 one-line colorboxes |
| References | 4-5 | 30-40 | No | Author (year). Short title. Venue |
| Setup | 4-5 | 30-40 | No | 5 one-liner colorboxes |
| Benchmarks | 0 | 20 | No | Table + 1-line caption |
| Key Takeaways | 3 | 30-40 | No | 3 short items + code link |
Bullet point rules:
- Maximum 8 words per bullet when possible
- Use and
$\Rightarrow$for causal arrows instead of words$\to$ - Numbers > words: "42% less memory" not "reduces memory usage by 42 percent"
- Colorbox labels: "vs. Depth: 4L CoE ≈ 12L MoE, 42% less memory" (one line)
总目标:300-500词(不含图表标题和统计标注数字)。
⚠️ 最大的内容错误是文本过多。 海报不是论文摘要——它是视觉指南。每个项目符号应是关键短语(5-8词),而非完整句子。如果你在写完整句子,说明文本太多了。
⚠️ 内容密度校准:拿不准时,少用文本。添加几个词比删减密集段落容易得多。目标是每个卡片填充约70%(留一些呼吸空间),而非100%。
| 框类型 | 最大项目符号数 | 最大词数 | 是否含图表 | 样式 |
|---|---|---|---|---|
| 背景 | 3 | 40-60 | 否 | 短项目符号 + 1个核心观点色块 |
| 核心观点/架构 | 0-1 | 20-30 | 是(核心图表) | 图表主导 + 2个单行色块 |
| 研究贡献 | 3-4 | 60-80 | 否 | 编号,每行1条 |
| 方法 | 2-3 | 40-60 | 否 | 2个公式色块 + 3个短项目符号 |
| 结果(每个) | 2-3 | 30-50 | 是(图表) | 图表 + 2-3个单行色块 |
| 消融实验 | 3 | 30-40 | 否 | 3个色块,每个最多2行 |
| 分析 | 3 | 30-50 | 是(图表) | 图表 + 3个单行色块 |
| 参考文献 | 4-5 | 30-40 | 否 | 作者(年份)。短标题。会议 |
| 实验设置 | 4-5 | 30-40 | 否 | 5个单行色块 |
| 基准测试 | 0 | 20 | 否 | 表格 + 1行标题 |
| 核心结论 | 3 | 30-40 | 否 | 3个短条目 + 代码链接 |
项目符号规则:
- 尽可能每个项目符号最多8词
- 使用和
$\Rightarrow$表示因果箭头,而非文字$\to$ - 用数字代替文字:“内存减少42%”而非“将内存使用量减少42%”
- 色块标签:“与深度对比:4L CoE ≈ 12L MoE,内存减少42%”(单行)
Recommended 4-Column IMRAD Layout
推荐4列IMRAD布局
┌──────────────────────────────────────────────────────────┐
│ TITLE BAR (span=4) │
│ Title (90pt) + Authors (42pt) + Venue + GitHub │
├──────────────────────────────────────────────────────────┤
│ Stat 1 │ Stat 2 │ Stat 3 │ Stat 4 │ STAT BANNER│
├──────────┼──────────┼──────────┼──────────┤ │
│Background│ Dataset │Architectu│ Result 2 │ │
│ & │ & │ re │ + Table │ │
│Motivation│Paradigms │ Overview │ + Stats │ │
│ + │ + Fig │ + Fig │ + Fig │ │
│Contributi│ │──────────│──────────│ │
│ ons │──────────│ Result 1 │ Ablation │ │
│──────────│Computat. │ + Fig │──────────│ │
│References│ Models │ + Table │Conclusion│ │
│ + QR Code│+ Equations│ + Bullets│ + Future │ │
└──────────┴──────────┴──────────┴──────────┘┌──────────────────────────────────────────────────────────┐
│ 标题栏(跨4列) │
│ 标题(90pt) + 作者(42pt) + 会议 + GitHub │
├──────────────────────────────────────────────────────────┤
│ 统计1 │ 统计2 │ 统计3 │ 统计4 │ 统计横幅│
├──────────┼──────────┼──────────┼──────────┤ │
│背景与动机│ 数据集与 │架构概述 │ 结果2 │ │
│ │ 范式 │ + 图表 │ + 表格 │ │
│ + 研究贡献│ │──────────│──────────│ │
│──────────│计算模型 │ 结果1 │ 消融实验 │ │
│参考文献 │+ 公式 │ + 图表 │──────────│ │
│ + 二维码 │ │ + 表格 │结论与未来│ │
│ │ │ + 项目符号│ 研究方向 │ │
└──────────┴──────────┴──────────┴──────────┘Workflow
工作流
Phase 0: Input Validation & Setup
阶段0:输入验证与设置
-
Check prerequisites:bash
which pdflatex && which latexmkIf LaTeX is NOT installed, try in order:bash# Option 1: brew cask (requires sudo — may fail in non-interactive shells) brew install --cask mactex-no-gui # Option 2: BasicTeX (smaller, may still need sudo) brew install --cask basictex # Option 3: User-directory install (NO sudo needed — always works) curl -L https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz | tar xz cd install-tl-* cat > texlive.profile << 'PROF' selected_scheme scheme-basic TEXDIR ~/texlive/YYYY TEXMFLOCAL ~/texlive/texmf-local TEXMFSYSCONFIG ~/texlive/YYYY/texmf-config TEXMFSYSVAR ~/texlive/YYYY/texmf-var TEXMFHOME ~/texmf binary_x86_64-darwin 1 instopt_adjustpath 0 instopt_adjustrepo 1 instopt_write18_restricted 1 tlpdbopt_autobackup 1 tlpdbopt_install_docfiles 0 tlpdbopt_install_srcfiles 0 PROF ./install-tl --profile=texlive.profile export PATH="$HOME/texlive/YYYY/bin/universal-darwin:$PATH"After installation, install required packages:bashtlmgr install tcolorbox pgf etoolbox environ trimspaces \ type1cm pdfcol tikzfill latexmk lm enumitem geometry⚠️ Lesson learned:often fails in non-interactive shells because the macOS installer requires sudo password. The user-directory TeX Live install (Option 3) always works without sudo.brew install --cask mactex-no-gui⚠️ Do NOT install or use. The article class approach does not need it.beamerposter -
Verify paper exists:bash
ls $PAPER_DIR/main.tex || ls $PAPER_DIR/main.pdf ls $PAPER_DIR/sections/*.tex ls $PAPER_DIR/figures/ -
Backup existing poster: ifexists, copy to
poster/poster-backup-{timestamp}/ -
Create output directory:
mkdir -p poster/figures -
Copy figures to poster directory:bash
# IMPORTANT: Use cp, NOT ln -sf (symlinks) # pdflatex often fails to resolve symlinks across directories cp paper/figures/selected_figure.pdf poster/figures/⚠️ Never use symlinks for poster figures.cannot reliably follow symlinks across directories. Alwayspdflatexthe actual files.cp -
Convert PDF figures to PNG for PPTX embedding:bash
python3 -c "import pdf2image" 2>/dev/null || pip install pdf2image # For each figure: python3 -c " from pdf2image import convert_from_path for name in ['paradigm', 'architecture', 'results', 'hallucination']: imgs = convert_from_path(f'poster/figures/{name}.pdf', dpi=300) imgs[0].save(f'poster/figures/{name}.png', 'PNG') "⚠️ python-pptx CANNOT embed PDF images. You MUST convert to PNG first. This is a hard limitation of the OOXML format. Always generate PNG copies at 300 DPI during setup. -
Detect CJK: if paper contains Chinese/Japanese/Korean text, set ENGINE to
xelatex -
Check for resume: readif it exists
poster/POSTER_STATE.json
-
检查前置条件:bash
which pdflatex && which latexmk如果未安装LaTeX,按以下顺序尝试:bash# 选项1:brew cask(需要sudo——非交互shell中可能失败) brew install --cask mactex-no-gui # 选项2:BasicTeX(体积更小,仍可能需要sudo) brew install --cask basictex # 选项3:用户目录安装(无需sudo——始终有效) curl -L https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz | tar xz cd install-tl-* cat > texlive.profile << 'PROF' selected_scheme scheme-basic TEXDIR ~/texlive/YYYY TEXMFLOCAL ~/texlive/texmf-local TEXMFSYSCONFIG ~/texlive/YYYY/texmf-config TEXMFSYSVAR ~/texlive/YYYY/texmf-var TEXMFHOME ~/texmf binary_x86_64-darwin 1 instopt_adjustpath 0 instopt_adjustrepo 1 instopt_write18_restricted 1 tlpdbopt_autobackup 1 tlpdbopt_install_docfiles 0 tlpdbopt_install_srcfiles 0 PROF ./install-tl --profile=texlive.profile export PATH="$HOME/texlive/YYYY/bin/universal-darwin:$PATH"安装完成后,安装所需包:bashtlmgr install tcolorbox pgf etoolbox environ trimspaces \ type1cm pdfcol tikzfill latexmk lm enumitem geometry⚠️ 经验总结:在非交互shell中经常失败,因为macOS安装程序需要sudo密码。用户目录TeX Live安装(选项3)无需sudo,始终有效。brew install --cask mactex-no-gui⚠️ 不要安装或使用。article类方案不需要它。beamerposter -
验证论文是否存在:bash
ls $PAPER_DIR/main.tex || ls $PAPER_DIR/main.pdf ls $PAPER_DIR/sections/*.tex ls $PAPER_DIR/figures/ -
备份现有海报:如果目录存在,复制到
poster/poster-backup-{timestamp}/ -
创建输出目录:
mkdir -p poster/figures -
复制图表到海报目录:bash
# 重要:使用cp,不要用ln -sf(符号链接) # pdflatex通常无法跨目录解析符号链接 cp paper/figures/selected_figure.pdf poster/figures/⚠️ 绝不要为海报图表使用符号链接。无法可靠地跨目录跟随符号链接。始终pdflatex实际文件。cp -
将PDF图表转换为PNG用于PPTX嵌入:bash
python3 -c "import pdf2image" 2>/dev/null || pip install pdf2image # 对每个图表执行: python3 -c " from pdf2image import convert_from_path for name in ['paradigm', 'architecture', 'results', 'hallucination']: imgs = convert_from_path(f'poster/figures/{name}.pdf', dpi=300) imgs[0].save(f'poster/figures/{name}.png', 'PNG') "⚠️ python-pptx无法嵌入PDF图片。必须先转换为PNG。这是OOXML格式的硬限制。设置阶段始终生成300 DPI的PNG副本。 -
检测中日韩文本:如果论文包含中文/日文/韩文,将ENGINE设置为
xelatex -
检查是否可恢复:如果存在,读取该文件
poster/POSTER_STATE.json
Phase 1: Content Extraction
阶段1:内容提取
Read each section from and extract poster-appropriate content:
paper/sections/*.texExtraction rules — a poster shows ~30-40% of the paper's content:
| Paper Section | Poster Extraction | Target Length |
|---|---|---|
| Abstract | Skip — replace with 2-4 big-number stat callout boxes spanning all columns | 0 words (numbers only) |
| Introduction | Motivation: 2-3 bullet points + numbered contribution list (4 items) | 120-160 words |
| Method | 1 hero architecture figure + key equations + 3-5 bullet points | 80-120 words |
| Experiments | Dataset details + main result figures + numeric stat tables + ablation | 150-200 words |
| Conclusion | 3-4 key findings + 2-3 next steps | 60-80 words |
| Related Work | Skip entirely — no space on poster | 0 |
Total target: 400-700 words (excluding figure captions and stat callout numbers).
⚠️ No abstract paragraph on poster. Replace with a stat banner: 3-4 large-number callout boxes showing headline results. This is the single highest-impact change for 60-second comprehension.
Output: — structured markdown showing exactly what goes where, with word counts per box.
poster/POSTER_CONTENT_PLAN.md🚦 Checkpoint:
📋 Poster content plan ready:
- Title: [paper title]
- Venue: [VENUE] ([POSTER_SIZE] [ORIENTATION])
- Layout: [COLUMNS] columns, rows=20
- Figures selected: [N] figures
- Boxes per column: Col1=[N], Col2=[N], Col3=[N], Col4=[N]
- Estimated word count: [N] words
Proceed with this layout? Or adjust content selection?⛔ STOP HERE and wait for user response.
State: Write with .
POSTER_STATE.jsonphase: 1读取中的每个章节,提取适合海报的内容:
paper/sections/*.tex提取规则 — 海报展示约30-40%的论文内容:
| 论文章节 | 海报提取内容 | 目标长度 |
|---|---|---|
| 摘要 | 跳过 — 替换为2-4个跨列的大数字统计标注框 | 0词(仅数字) |
| 引言 | 动机:2-3个项目符号 + 编号贡献列表(4项) | 120-160词 |
| 方法 | 1个核心架构图 + 关键公式 + 3-5个项目符号 | 80-120词 |
| 实验 | 数据集详情 + 主要结果图 + 数值统计表 + 消融实验 | 150-200词 |
| 结论 | 3-4个核心发现 + 2-3个未来研究方向 | 60-80词 |
| 相关工作 | 完全跳过 — 海报上没有空间 | 0 |
总目标:400-700词(不含图表标题和统计标注数字)。
⚠️ 海报上不要放摘要段落。 替换为统计横幅:3-4个大数字标注框展示核心结果。这是60秒内让观众理解内容的最高效改动。
输出: — 结构化Markdown文件,明确展示每个位置的内容,以及每个框的词数。
poster/POSTER_CONTENT_PLAN.md🚦 检查点:
📋 海报内容规划已准备好:
- 标题:[论文标题]
- 会议:[VENUE] ([POSTER_SIZE] [ORIENTATION])
- 布局:[COLUMNS]列,rows=20
- 选中的图表:[N]个
- 每列的框数:第1列=[N],第2列=[N],第3列=[N],第4列=[N]
- 预估词数:[N]词
是否继续使用此布局?或者调整内容选择?⛔ 在此处停止,等待用户回复。
状态:将写入文件,设置。
POSTER_STATE.jsonphase: 1Phase 2: Figure Selection & Layout
阶段2:图表选择与布局
-
Inventory all figures in:
paper/figures/bashls -la paper/figures/*.{pdf,png,jpg,svg} 2>/dev/null -
Rank by poster importance:
- Tier 1 (must include): Architecture/method overview diagram, main results plot
- Tier 2 (include if space): Ablation bar chart, qualitative examples, experimental paradigm
- Tier 3 (skip): Appendix figures, supplementary plots, tables-as-figures
-
Select top 3-5 figures that fit the 4-column layout
-
Copy figures to poster directory (NOT symlinks) + convert PDF→PNG for PPTX
-
Design column layout — 4-column IMRAD:
- Col 1: Background & Motivation + Contributions + References & QR
- Col 2: Dataset & Paradigms (fig) + Computational Models (equations)
- Col 3: Architecture (fig) + Result 1 (fig + stat table)
- Col 4: Result 2 (fig + stat table) + Ablation + Conclusion
-
盘点中的所有图表:
paper/figures/bashls -la paper/figures/*.{pdf,png,jpg,svg} 2>/dev/null -
按海报重要性排序:
- 第1层(必须包含):架构/方法概述图、主要结果图
- 第2层(有空间则包含):消融实验柱状图、定性示例、实验范式图
- 第3层(跳过):附录图表、补充图、表格转图表
-
选择前3-5个适合4列布局的图表
-
复制图表到海报目录(不要用符号链接) + 将PDF转换为PNG用于PPTX
-
设计列布局 — 4列IMRAD:
- 第1列:背景与动机 + 研究贡献 + 参考文献与二维码
- 第2列:数据集与范式(图表) + 计算模型(公式)
- 第3列:架构(图表) + 结果1(图表 + 统计表)
- 第4列:结果2(图表 + 统计表) + 消融实验 + 结论
Phase 3: Generate Poster LaTeX
阶段3:生成海报LaTeX
Create using article class + geometry + tcbposter.
poster/main.texTemplate structure (validated through testing):
latex
\documentclass{article}
\usepackage[paperwidth=1189mm,paperheight=841mm,margin=0mm]{geometry}
\usepackage{tcolorbox}
\tcbuselibrary{poster,skins,fitting}
\usepackage{graphicx}
\usepackage{amsmath,amssymb}
\usepackage{enumitem}
\usepackage[table]{xcolor}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\pagestyle{empty}
% ── Venue Color Theme ──
\definecolor{primary}{HTML}{VENUE_PRIMARY} % deep, saturated
\definecolor{secondary}{HTML}{VENUE_SECONDARY} % medium
\definecolor{accent}{HTML}{VENUE_ACCENT} % contrast
\definecolor{bgposter}{HTML}{VENUE_BG_DEEP} % poster background (NOT white, use tinted)
\definecolor{redbg}{HTML}{FFF5F3} % card backgrounds (tinted, NOT white)
\definecolor{bluebg}{HTML}{F0F4FF}
\definecolor{darkbg}{HTML}{FDF6F3}
\definecolor{redtitlebg}{HTML}{FDEAE8} % card title bar backgrounds
\definecolor{bluetitlebg}{HTML}{E4ECFF}
\definecolor{darktitlebg}{HTML}{F5E8E2}
\definecolor{textdark}{HTML}{111827}
\definecolor{textgray}{HTML}{4B5563}
\definecolor{stathighlight}{HTML}{FEE8E8}
\pagecolor{bgposter}
\color{textdark}
% ── List styling ──
\setlist[itemize]{leftmargin=24pt, itemsep=6pt, parsep=2pt, topsep=2pt,
label={\color{secondary}$\blacktriangleright$}}
\setlist[enumerate]{leftmargin=24pt, itemsep=6pt, parsep=2pt, topsep=2pt,
label={\color{primary}\bfseries\arabic*.}}
% ── Figure+caption macro (ensures uniform spacing) ──
\newcommand{\posterfig}[3]{%
\centering\includegraphics[width=#1\linewidth]{#2}\\[3mm]
{\fontsize{26}{32}\selectfont\color{textgray}\textit{#3}}\vspace{2mm}%
}
% ── Card styles (left accent stripe design) ──
\tcbset{
redcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=redbg,
borderline west={5pt}{0pt}{secondary},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{secondary},
coltitle=secondary, colbacktitle=redtitlebg,
toptitle=6pt, bottomtitle=6pt,
titlerule=2pt, titlerule style={secondary!50},
valign=top, drop shadow={opacity=0.18},
},
bluecard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=bluebg,
borderline west={5pt}{0pt}{accent},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{accent},
coltitle=accent, colbacktitle=bluetitlebg,
toptitle=6pt, bottomtitle=6pt,
titlerule=2pt, titlerule style={accent!50},
valign=top, drop shadow={opacity=0.18},
},
darkcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=darkbg,
borderline west={5pt}{0pt}{primary},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{primary},
coltitle=primary, colbacktitle=darktitlebg,
toptitle=6pt, bottomtitle=6pt,
titlerule=2pt, titlerule style={primary!50},
valign=top, drop shadow={opacity=0.18},
},
highlightcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=primary!18!white,
borderline west={6pt}{0pt}{primary},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{white},
coltitle=white, colbacktitle=primary,
toptitle=6pt, bottomtitle=6pt,
valign=top, drop shadow={opacity=0.22},
},
}
\begin{document}
\begin{tcbposter}[
coverage={spread},
poster={columns=4, rows=20, spacing=0mm}, % Use columns=3 for portrait A0
]
% ══ TITLE BAR ══
\posterbox[
enhanced, colback=primary, colframe=primary, colupper=white,
arc=0pt, boxrule=0pt,
left=40pt, right=40pt, top=12pt, bottom=8pt,
halign=center, valign=center,
drop shadow={opacity=0.3}
]{name=title, column=1, span=4, between=top and row4}{
{\fontsize{84}{100}\selectfont\bfseries PAPER TITLE}\\[12pt]
{\fontsize{36}{44}\selectfont Authors}\\[8pt]
{\fontsize{30}{38}\selectfont\color{white!70} Affiliations | VENUE YEAR | github.com/...}
}
% ══ STATS BANNER ══
\posterbox[
enhanced, colback=primary!15!white, boxrule=0pt, arc=0pt,
left=12pt, right=12pt, top=6pt, bottom=6pt,
valign=center, borderline south={3pt}{0pt}{primary!35},
]{name=stats, column=1, span=4, between=row4 and row6}{
\centering
\begin{minipage}[c]{0.235\linewidth}\centering
\fcolorbox{primary!40}{stathighlight}{\parbox{0.88\linewidth}{%
\centering\vspace{6pt}%
{\fontsize{66}{80}\selectfont\bfseries\color{primary} STAT1}\\[4pt]
{\fontsize{26}{32}\selectfont\color{textdark} Label 1}\vspace{6pt}%
}}
\end{minipage}\hfill
% ... 3 more stat callouts in same pattern
}
% ══ CONTENT CARDS ══
% Use card styles: \posterbox[redcard, title={...}]{...}{...}
% Body text: \fontsize{34}{44}\selectfont
% Figures: \posterfig{0.96}{figures/name.png}{Caption.}
% Colorboxes: \colorbox{primary!20}{\parbox{0.94\linewidth}{...}}
\end{tcbposter}
\end{document}Key formatting rules:
- Title: 84pt, bold, primary background, white text
- Author line: 36pt, white text
- Section headers: 40pt via — colored text on tinted title background
fonttitle - Body text: 34pt with 44pt leading —
\fontsize{34}{44}\selectfont - Figures: via macro
\posterfig{0.96}{figures/name.png}{Caption} - Stat callout numbers: 66pt in primary color on stathighlight background
- Tables: with
\renewcommand{\arraystretch}{1.6}zebra striping\rowcolor{primary!15} - Equations in colorboxes: use (inline), NOT
$\displaystyle ...$(display math adds margins that cause overfull hbox)\[...\]
Posterbox pattern (using card styles):
latex
\posterbox[redcard, title={Section Title}
]{name=uniquename, column=N, between=rowA and rowB}{
\fontsize{34}{44}\selectfont
\begin{itemize}[itemsep=12pt]
\item Key point one
\item Key point two
\end{itemize}
}⚠️ Equations in narrow colorboxes: Display mathadds horizontal margins that cause overfull hbox errors inside\[...\]. Always use\colorbox{\parbox{}}with$\displaystyle ...$instead. Reduce equation font to 26-28pt inside colorboxes.\centering
🚦 Checkpoint:
🖼️ Poster LaTeX generated:
- Template: article + tcbposter (rows=20)
- Layout: [COLUMNS] columns, [ORIENTATION] [POSTER_SIZE]
- Colors: [VENUE] theme (primary: [HEX] / secondary: [HEX] / accent: [HEX])
- Figures: [N] embedded
- Font sizes: title=90pt, body=34pt, headers=42pt
- Word count: ~[N] words
Compile now?⛔ STOP HERE and wait for user response.
State: Write with .
POSTER_STATE.jsonphase: 3使用article类 + geometry + tcbposter创建。
poster/main.tex模板结构(已测试验证):
latex
\documentclass{article}
\usepackage[paperwidth=1189mm,paperheight=841mm,margin=0mm]{geometry}
\usepackage{tcolorbox}
\tcbuselibrary{poster,skins,fitting}
\usepackage{graphicx}
\usepackage{amsmath,amssymb}
\usepackage{enumitem}
\usepackage[table]{xcolor}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\pagestyle{empty}
% ── 会议配色主题 ──
\definecolor{primary}{HTML}{VENUE_PRIMARY} % 深邃、高饱和度
\definecolor{secondary}{HTML}{VENUE_SECONDARY} % 中等色调
\definecolor{accent}{HTML}{VENUE_ACCENT} % 对比色
\definecolor{bgposter}{HTML}{VENUE_BG_DEEP} % 海报背景色(非白色,使用淡色调)
\definecolor{redbg}{HTML}{FFF5F3} % 卡片背景色(淡色调,非白色)
\definecolor{bluebg}{HTML}{F0F4FF}
\definecolor{darkbg}{HTML}{FDF6F3}
\definecolor{redtitlebg}{HTML}{FDEAE8} % 卡片标题栏背景色
\definecolor{bluetitlebg}{HTML}{E4ECFF}
\definecolor{darktitlebg}{HTML}{F5E8E2}
\definecolor{textdark}{HTML}{111827}
\definecolor{textgray}{HTML}{4B5563}
\definecolor{stathighlight}{HTML}{FEE8E8}
\pagecolor{bgposter}
\color{textdark}
% ── 列表样式 ──
\setlist[itemize]{leftmargin=24pt, itemsep=6pt, parsep=2pt, topsep=2pt,
label={\color{secondary}$\blacktriangleright$}}
\setlist[enumerate]{leftmargin=24pt, itemsep=6pt, parsep=2pt, topsep=2pt,
label={\color{primary}\bfseries\arabic*.}}
% ── 图表+标题宏(确保间距一致) ──
\newcommand{\posterfig}[3]{%
\centering\includegraphics[width=#1\linewidth]{#2}\\[3mm]
{\fontsize{26}{32}\selectfont\color{textgray}\textit{#3}}\vspace{2mm}%
}
% ── 卡片样式(左侧强调条纹设计) ──
\tcbset{
redcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=redbg,
borderline west={5pt}{0pt}{secondary},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{secondary},
coltitle=secondary, colbacktitle=redtitlebg,
toptitle=6pt, bottomtitle=6pt,
titlerule=2pt, titlerule style={secondary!50},
valign=top, drop shadow={opacity=0.18},
},
bluecard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=bluebg,
borderline west={5pt}{0pt}{accent},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{accent},
coltitle=accent, colbacktitle=bluetitlebg,
toptitle=6pt, bottomtitle=6pt,
titlerule=2pt, titlerule style={accent!50},
valign=top, drop shadow={opacity=0.18},
},
darkcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=darkbg,
borderline west={5pt}{0pt}{primary},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{primary},
coltitle=primary, colbacktitle=darktitlebg,
toptitle=6pt, bottomtitle=6pt,
titlerule=2pt, titlerule style={primary!50},
valign=top, drop shadow={opacity=0.18},
},
highlightcard/.style={
enhanced, arc=0pt, boxrule=0pt, colback=primary!18!white,
borderline west={6pt}{0pt}{primary},
left=16pt, right=14pt, top=4pt, bottom=4pt,
fonttitle=\fontsize{40}{48}\selectfont\bfseries\color{white},
coltitle=white, colbacktitle=primary,
toptitle=6pt, bottomtitle=6pt,
titlerule=2pt, titlerule style={white!50},
valign=top, drop shadow={opacity=0.22},
},
}
\begin{document}
\begin{tcbposter}[
coverage={spread},
poster={columns=4, rows=20, spacing=0mm}, % 纵向A0使用columns=3
]
% ══ 标题栏 ══
\posterbox[
enhanced, colback=primary, colframe=primary, colupper=white,
arc=0pt, boxrule=0pt,
left=40pt, right=40pt, top=12pt, bottom=8pt,
halign=center, valign=center,
drop shadow={opacity=0.3}
]{name=title, column=1, span=4, between=top and row4}{
{\fontsize{84}{100}\selectfont\bfseries 论文标题}\\[12pt]
{\fontsize{36}{44}\selectfont 作者}\\[8pt]
{\fontsize{30}{38}\selectfont\color{white!70} 机构 | VENUE 年份 | github.com/...}
}
% ══ 统计横幅 ══
\posterbox[
enhanced, colback=primary!15!white, boxrule=0pt, arc=0pt,
left=12pt, right=12pt, top=6pt, bottom=6pt,
valign=center, borderline south={3pt}{0pt}{primary!35},
]{name=stats, column=1, span=4, between=row4 and row6}{
\centering
\begin{minipage}[c]{0.235\linewidth}\centering
\fcolorbox{primary!40}{stathighlight}{\parbox{0.88\linewidth}{%
\centering\vspace{6pt}%
{\fontsize{66}{80}\selectfont\bfseries\color{primary} 统计1}\\[4pt]
{\fontsize{26}{32}\selectfont\color{textdark} 标签1}\vspace{6pt}%
}}
\end{minipage}\hfill
% ... 另外3个统计标注,格式相同
}
% ══ 内容卡片 ══
% 使用卡片样式:\posterbox[redcard, title={...}]{...}{...}
% 正文:\fontsize{34}{44}\selectfont
% 图表:\posterfig{0.96}{figures/name.png}{标题。}
% 色块:\colorbox{primary!20}{\parbox{0.94\linewidth}{...}}
\end{tcbposter}
\end{document}关键格式规则:
- 标题:84pt,粗体,主色背景,白色文本
- 作者行:36pt,白色文本
- 章节标题:通过设置为40pt — 彩色文本,淡色标题背景
fonttitle - 正文:34pt,行高44pt —
\fontsize{34}{44}\selectfont - 图表:通过宏插入
\posterfig{0.96}{figures/name.png}{标题} - 统计标注数字:66pt,主色,stathighlight背景
- 表格:,使用
\renewcommand{\arraystretch}{1.6}斑马纹\rowcolor{primary!15} - 色块中的公式:使用(行内),不要用
$\displaystyle ...$(显示公式会增加边距,导致hbox溢出)\[...\]
海报框模式(使用卡片样式):
latex
\posterbox[redcard, title={章节标题}
]{name=唯一名称, column=N, between=rowA and rowB}{
\fontsize{34}{44}\selectfont
\begin{itemize}[itemsep=12pt]
\item 关键点1
\item 关键点2
\end{itemize}
}⚠️ 窄色块中的公式:显示公式会增加水平边距,导致\[...\]内出现hbox溢出错误。始终使用\colorbox{\parbox{}}并配合$\displaystyle ...$。色块内的公式字体缩小到26-28pt。\centering
🚦 检查点:
🖼️ 海报LaTeX已生成:
- 模板:article + tcbposter(rows=20)
- 布局:[COLUMNS]列,[ORIENTATION] [POSTER_SIZE]
- 配色:[VENUE]主题(主色:[HEX] / 辅助色:[HEX] / 强调色:[HEX])
- 嵌入的图表:[N]个
- 字体大小:标题=90pt,正文=34pt,章节标题=42pt
- 词数:约[N]词
是否现在编译?⛔ 在此处停止,等待用户回复。
状态:将写入文件,设置。
POSTER_STATE.jsonphase: 3Phase 4: Compile Poster
阶段4:编译海报
bash
cd poster && latexmk -pdf -interaction=nonstopmode main.tex⚠️ If using user-directory TeX Live, prepend PATH:export PATH="$HOME/texlive/YYYY/bin/universal-darwin:$PATH"
Error handling loop (max 3 attempts):
- Parse error log for the first error
- Fix the most likely cause:
- → STOP. Switch from beamer to article class. This is not fixable by removing styles.
grouping levels=255 - Missing package →
tlmgr install <package> - → Remove
File not found: adjustbox.styand any\usepackage{adjustbox}optionsmax height - File not found → verify has the file (not a broken symlink)
poster/figures/ - Overfull boxes → reduce text or figure size
- Recompile
Common missing packages (install proactively if not present):
bash
tlmgr install type1cm pdfcol tikzfillVerification:
bash
pdfinfo poster/main.pdfbash
cd poster && latexmk -pdf -interaction=nonstopmode main.tex⚠️ 如果使用用户目录TeX Live,需要先设置PATH:export PATH="$HOME/texlive/YYYY/bin/universal-darwin:$PATH"
错误处理循环(最多3次尝试):
- 解析错误日志,找到第一个错误
- 修复最可能的原因:
- → 停止。将beamer改为article类。 这无法通过修改样式修复。
grouping levels=255 - 缺少包 →
tlmgr install <包名> - → 删除
File not found: adjustbox.sty和所有\usepackage{adjustbox}选项max height - 文件未找到 → 验证中是否有该文件(不是损坏的符号链接)
poster/figures/ - hbox溢出 → 减少文本或图表尺寸
- 重新编译
常见缺失包(主动安装,如果未存在):
bash
tlmgr install type1cm pdfcol tikzfill验证:
bash
pdfinfo poster/main.pdfCheck: Pages: 1, Page size: ~3370.39 x 2383.94 pts (A0 landscape)
检查:Pages: 1, Page size: ~3370.39 x 2383.94 pts(横向A0)
**Visual inspection** after compilation:
1. All 4 columns have content visible to the bottom — no silent clipping
2. No large whitespace gaps between title/stats and body content
3. Figures are fully visible, not cut off
4. Text is readable (zoom to 100% = actual A0 size)
**编译后视觉检查**:
1. 所有4列的内容都显示到底部 — 没有静默裁剪
2. 标题/统计横幅与主体内容之间没有大空白
3. 图表完全可见,没有被截断
4. 文本可读(放大到100% = 实际A0尺寸)Phase 5: Visual Review via Claude + Gemini (Iterative Refinement)
阶段5:通过Claude + Gemini进行视觉审核(迭代优化)
This phase uses Claude visual assessment on rendered poster images to iteratively refine layout, readability, and visual hierarchy — similar to theskill's review loop.paper-illustration
Step 1: Render poster to PNG preview
python
import fitz
doc = fitz.open('poster/main.pdf')
page = doc[0]
pix = page.get_pixmap(dpi=200) # 200 DPI for visual review (higher than 150 preview)
pix.save('poster/poster_review.png')
doc.close()Step 2: Claude visual assessment
Read the rendered and perform a STRICT visual review with the following rubric (score 1-10):
poster/poster_review.pngCritical checks (must all pass, any failure = score ≤ 5):
- Content accuracy — No fabricated data, all numbers match paper
- Text readability — All text readable at simulated 1.5m distance (no text too small)
- No clipping — All content visible, no cut-off figures or text
- Column alignment — Row bands align across all columns
Secondary checks (affect score 6-10):
5. Visual hierarchy — Title → stat banner → body flow is immediately clear
6. Figure prominence — Figures occupy 40-50% of content area
7. Color coherence — Card tints, accent stripes, and venue colors work harmoniously
8. Whitespace balance — No large empty gaps, no overly cramped sections
9. Information density — Can understand the contribution in 60 seconds
10. Overall aesthetics — Would you be proud to present this at a top venue?
Scoring:
- 9-10: Print-ready, no changes needed
- 7-8: Minor tweaks (spacing, font size adjustments)
- 5-6: Needs revision (layout issues, readability problems)
- 1-4: Major issues (clipping, fabricated data, broken layout)
Step 3: Iterative refinement loop
MAX_ITERATIONS = 5
SCORE_THRESHOLD = 9
for iteration in 1..MAX_ITERATIONS:
1. Render poster to poster/poster_v{iteration}.png (200 DPI)
2. Claude reads the PNG and performs STRICT visual review
3. Score the poster (1-10) with detailed feedback
4. If score >= SCORE_THRESHOLD → PASS, proceed to Phase 6
5. If score < SCORE_THRESHOLD:
a. Identify top 3 issues (ranked by visual impact)
b. Generate targeted LaTeX fixes for each issue
c. Apply fixes to main.tex
d. Recompile (Phase 4 error loop)
e. Continue to next iteration
6. Save all versions: poster/poster_v{iteration}.png⚠️ All versions are preserved. Never overwrite previous renders. Save as,poster_v1.png, etc. This allows comparison and rollback.poster_v2.png
⚠️ Targeted fixes only. Each iteration should fix at most 3 specific issues. Do NOT rewrite the entire LaTeX — small, focused edits prevent regression.
Optional: Gemini visual generation (if is available):
mcp__illustrator__runFor poster elements that need custom illustrations (e.g., hero architecture diagram, method workflow), use the Gemini illustration pipeline:
- Write a detailed specification for the illustration
- Call with the specification
mcp__illustrator__run - Claude reviews the generated image for accuracy
- Iterate until score ≥ 9 or max 3 attempts
- Save final illustration to and embed in LaTeX
poster/figures/
Step 4: Save visual review log
Append all iteration scores and feedback to :
poster/POSTER_VISUAL_REVIEW.mdmarkdown
undefined此阶段使用Claude视觉评估对渲染后的海报图片进行迭代优化,改进布局、可读性和视觉层次 — 类似于技能的审核循环。paper-illustration
步骤1:将海报渲染为PNG预览图
python
import fitz
doc = fitz.open('poster/main.pdf')
page = doc[0]
pix = page.get_pixmap(dpi=200) # 200 DPI用于视觉审核(高于150 DPI预览)
pix.save('poster/poster_review.png')
doc.close()步骤2:Claude视觉评估
读取渲染后的,按照以下评分标准进行严格视觉审核(评分1-10):
poster/poster_review.png关键检查(必须全部通过,任何失败=评分≤5):
- 内容准确性 — 没有虚构数据,所有数字与论文一致
- 文本可读性 — 模拟1.5米距离下所有文本可读(没有文本过小)
- 无裁剪 — 所有内容可见,没有图表或文本被截断
- 列对齐 — 所有列的行区块对齐
次要检查(影响评分6-10):
5. 视觉层次 — 标题 → 统计横幅 → 主体内容的流程清晰可见
6. 图表突出性 — 图表占内容区域的40-50%
7. 配色协调性 — 卡片色调、强调条纹和会议配色和谐统一
8. 空白平衡 — 没有大空白,内容不过于拥挤
9. 信息密度 — 能在60秒内理解研究贡献
10. 整体美观度 — 你是否愿意在顶级会议上展示此海报?
评分标准:
- 9-10:可直接印刷,无需修改
- 7-8:小调整(间距、字体大小)
- 5-6:需要修订(布局问题、可读性问题)
- 1-4:严重问题(裁剪、虚构数据、布局损坏)
步骤3:迭代优化循环
MAX_ITERATIONS = 5
SCORE_THRESHOLD = 9
for iteration in 1..MAX_ITERATIONS:
1. 将海报渲染为poster/poster_v{iteration}.png(200 DPI)
2. Claude读取PNG并进行严格视觉审核
3. 为海报评分(1-10)并提供详细反馈
4. 如果评分≥SCORE_THRESHOLD → 通过,进入阶段6
5. 如果评分<SCORE_THRESHOLD:
a. 找出前3个问题(按视觉影响排序)
b. 生成每个问题的针对性LaTeX修复方案
c. 将修复应用到main.tex
d. 重新编译(阶段4错误处理循环)
e. 继续下一次迭代
6. 保存所有版本:poster/poster_v{iteration}.png⚠️ 保留所有版本。不要覆盖之前的渲染图。保存为、poster_v1.png等。这样可以对比和回滚。poster_v2.png
⚠️ 仅进行针对性修复。每次迭代最多修复3个具体问题。不要重写整个LaTeX — 小而集中的修改可防止回归。
可选:Gemini插图生成(如果可用):
mcp__illustrator__run对于需要自定义插图的海报元素(例如核心架构图、方法工作流),使用Gemini插图流程:
- 编写插图的详细规格
- 使用规格调用
mcp__illustrator__run - Claude审核生成的图片准确性
- 迭代直到评分≥9或最多3次尝试
- 将最终插图保存到并嵌入LaTeX
poster/figures/
步骤4:保存视觉审核日志
将所有迭代评分和反馈追加到:
poster/POSTER_VISUAL_REVIEW.mdmarkdown
undefinedVisual Review Log
视觉审核日志
Iteration 1 — Score: 7/10
迭代1 — 评分:7/10
- Issue 1: Title font too small (72pt → should be 84pt+)
- Issue 2: Results figure clipped at bottom
- Issue 3: Stat banner numbers not prominent enough
- Fixes applied: [list of changes]
- 问题1:标题字体过小(72pt → 应≥84pt)
- 问题2:结果图底部被裁剪
- 问题3:统计横幅数字不够突出
- 应用的修复:[修改列表]
Iteration 2 — Score: 9/10
迭代2 — 评分:9/10
- All critical checks pass
- Minor: References column slightly shorter than others
- Decision: PASS — print-ready
undefined- 所有关键检查通过
- 次要问题:参考文献列比其他列稍短
- 决策:通过 — 可直接印刷
undefinedPhase 6: Codex MCP Review
阶段6:Codex MCP审核
Send the poster content plan + key LaTeX sections to GPT-5.4 xhigh for review.
mcp__codex__codex:
config: {"model_reasoning_effort": "xhigh"}
prompt: |
Review this academic conference poster for [VENUE].
Evaluate using these criteria (score 1-5 each):
1. **Information hierarchy** — Can someone understand the contribution in 60 seconds?
2. **Text density** — Is it concise enough? (Target: 400-700 words total, bullet points only, NO abstract paragraph)
3. **Figure prominence** — Are key results visually dominant? (Target: figures occupy 40-50% of area)
4. **Column balance** — Are columns roughly equal height?
5. **Readability** — Font sizes appropriate for 1.5m distance? (Title ≥90pt, body ≥34pt)
6. **Narrative flow** — Does the poster tell a left-to-right story?
7. **Whitespace** — Is content filling the space well? No large empty gaps?
Poster content:
[PASTE POSTER_CONTENT_PLAN.md]
LaTeX source:
[PASTE key sections of main.tex]
Provide:
- Score for each criterion
- Top 3 actionable fixes (ranked by impact)
- Overall: Ready to print? (Yes / Needs revision / Major issues)Apply CRITICAL and MAJOR fixes to . Recompile if changes were made.
poster/main.texSave review to .
poster/POSTER_REVIEW.md⚠️ Important: After applying review fixes, proceed to Phase 6 only when the poster is finalized. PPTX and SVG must be generated from the final LaTeX/PDF — never from an intermediate version.
将海报内容规划 + 关键LaTeX部分发送给GPT-5.4 xhigh进行审核。
mcp__codex__codex:
config: {"model_reasoning_effort": "xhigh"}
prompt: |
审核此[VENUE]学术会议海报。
使用以下标准评估(每项评分1-5):
1. **信息层次** — 能否在60秒内理解研究贡献?
2. **文本密度** — 是否足够简洁?(目标:总词数400-700,仅项目符号,无摘要段落)
3. **图表突出性** — 关键结果是否视觉突出?(目标:图表占40-50%的区域)
4. **列平衡** — 各列高度是否大致相等?
5. **可读性** — 字体大小是否适合1.5米距离?(标题≥90pt,正文≥34pt)
6. **叙事流程** — 海报是否从左到右讲述完整故事?
7. **空白** — 内容是否充分利用空间?没有大空白?
海报内容:
[粘贴POSTER_CONTENT_PLAN.md]
LaTeX源码:
[粘贴main.tex的关键部分]
提供:
- 每项标准的评分
- 前3个可操作的修复方案(按影响排序)
- 整体结论:是否可印刷?(是 / 需要修订 / 严重问题)将关键和主要修复应用到。如果进行了修改,重新编译。
poster/main.tex将审核结果保存到。
poster/POSTER_REVIEW.md⚠️ 重要:应用审核修复后,仅当海报最终确定后再进入阶段6。PPTX和SVG必须从最终LaTeX/PDF生成 — 绝不要从中间版本生成。
Phase 7: Editable Format Export
阶段7:可编辑格式导出
⚠️ Generate PPTX and SVG only AFTER all revisions are complete. This phase runs last (after review fixes) to ensure all formats contain identical content.
⚠️ 仅在所有修订完成后生成PPTX和SVG。此阶段最后运行(审核修复后),确保所有格式内容一致。
6.1 PowerPoint (.pptx)
7.1 PowerPoint (.pptx)
Generate a native PPTX using (not pandoc — pandoc conversion is lossy):
python-pptxbash
python3 -c "import pptx" 2>/dev/null || pip install python-pptxWrite a Python script that:
poster/generate_pptx.py- Creates a single-slide PPTX with poster dimensions (A0 landscape: 1189mm x 841mm)
- Replicates the 4-column layout using positioned text boxes
- Embeds PNG figures (from poster/figures/*.png — NOT PDFs, python-pptx cannot embed PDFs)
- Applies venue color scheme (primary/secondary/accent) to title bar and section headers
- Keeps all text editable (not images of text)
- Uses large font sizes matching the PDF (title 86pt, body 34pt, headers 42pt, stats 68pt)
- Reads content from the FINAL — do NOT hardcode content separately
main.tex
⚠️ PPTX font sizes must also be large. A common mistake is using small fonts (17-24pt) in the PPTX while the PDF has 34pt+. The PPTX is A0-sized so needs identical large fonts.
PPTX helper pattern:
python
def add_image(left, top, w, filename):
"""Add PNG image, auto-calculate height from aspect ratio."""
path = os.path.join(FIG_DIR, filename)
if not os.path.exists(path):
txt(left, top, w, 60, f"[Image: {filename}]", ...)
return top + 60
pic = slide.shapes.add_picture(path, Mm(left), Mm(top), Mm(w))
h_mm = pic.height / Mm(1)
return top + h_mmbash
cd poster && python3 generate_pptx.py使用生成原生PPTX(不要用pandoc — pandoc转换会丢失信息):
python-pptxbash
python3 -c "import pptx" 2>/dev/null || pip install python-pptx编写Python脚本,实现:
poster/generate_pptx.py- 创建单页PPTX,尺寸与海报一致(横向A0:1189mm x 841mm)
- 使用定位文本框复制4列布局
- 嵌入PNG图表(来自poster/figures/*.png — 不要用PDF,python-pptx无法嵌入PDF)
- 将会议配色(主色/辅助色/强调色)应用到标题栏和章节标题
- 所有文本保持可编辑(不是文本图片)
- 使用与PDF匹配的大字体(标题86pt,正文34pt,章节标题42pt,统计68pt)
- 从最终的读取内容 — 不要单独硬编码内容
main.tex
⚠️ PPTX字体大小也必须大。常见错误是PPTX使用小字体(17-24pt),而PDF使用34pt+。PPTX是A0尺寸,需要相同的大字体。
PPTX辅助代码模式:
python
def add_image(left, top, w, filename):
"""添加PNG图片,根据宽高比自动计算高度。"""
path = os.path.join(FIG_DIR, filename)
if not os.path.exists(path):
txt(left, top, w, 60, f"[图片:{filename}]", ...)
return top + 60
pic = slide.shapes.add_picture(path, Mm(left), Mm(top), Mm(w))
h_mm = pic.height / Mm(1)
return top + h_mmbash
cd poster && python3 generate_pptx.pyOutput: poster/poster.pptx
输出:poster/poster.pptx
undefinedundefined6.2 SVG (for Adobe Illustrator)
7.2 SVG(用于Adobe Illustrator)
Convert the compiled PDF to editable SVG. Preferred method: PyMuPDF (always available via pip, no brew/system install needed):
python
undefined将编译后的PDF转换为可编辑SVG。推荐方法:PyMuPDF(可通过pip安装,无需brew/系统安装):
python
undefinedPreferred: PyMuPDF (pip install pymupdf) — always works, no system deps
推荐:PyMuPDF(pip install pymupdf)— 始终可用,无系统依赖
python3 -c "import fitz" 2>/dev/null || pip install pymupdf
python3 -c "
import fitz
doc = fitz.open('poster/main.pdf')
page = doc[0]
svg = page.get_svg_image()
with open('poster/poster.svg', 'w') as f:
f.write(svg)
doc.close()
print('SVG saved')
"
```bashpython3 -c "import fitz" 2>/dev/null || pip install pymupdf
python3 -c "
import fitz
doc = fitz.open('poster/main.pdf')
page = doc[0]
svg = page.get_svg_image()
with open('poster/poster.svg', 'w') as f:
f.write(svg)
doc.close()
print('SVG已保存')
"
```bashFallback 1: pdf2svg (if installed)
备选1:pdf2svg(如果已安装)
which pdf2svg && pdf2svg poster/main.pdf poster/poster.svg
which pdf2svg && pdf2svg poster/main.pdf poster/poster.svg
Fallback 2: inkscape
备选2:inkscape
which inkscape && inkscape poster/main.pdf --export-type=svg --export-filename=poster/poster.svg
> ⚠️ **SVG inherits all layout issues from PDF.** If the PDF has whitespace gaps or clipped figures, the SVG will too. Always fix the PDF first.
> 💡 **PyMuPDF bonus**: Can also generate PNG previews for quick visual inspection:
> ```python
> pix = page.get_pixmap(dpi=150)
> pix.save('poster/poster_preview.png')
> ```which inkscape && inkscape poster/main.pdf --export-type=svg --export-filename=poster/poster.svg
> ⚠️ **SVG会继承PDF的所有布局问题**。如果PDF有空白或裁剪,SVG也会有。始终先修复PDF。
> 💡 **PyMuPDF额外功能**:还可生成PNG预览图用于快速视觉检查:
> ```python
> pix = page.get_pixmap(dpi=150)
> pix.save('poster/poster_preview.png')
> ```6.3 Component-based PPTX (Recommended — PDF→independent shapes)
7.3 基于组件的PPTX(推荐 — PDF→独立形状)
⚠️ This is the recommended PPTX export method. It produces pixel-perfect output (from PDF) while keeping each poster card as an independent, movable/resizable shape in PowerPoint. The python-pptx rebuild (6.1) loses card styles, shadows, and colorboxes; the full-page image (single PNG) cannot be manipulated at all. This method is the best of both worlds.
How it works: Crop each posterbox region from the compiled PDF at 300 DPI, then embed each crop as a separate picture shape in PPTX at its exact grid position. Result: 10-15 independent shapes that can be individually selected, moved, resized, or deleted in PowerPoint.
python
import fitz, os, tempfile, shutil
from pptx import Presentation
from pptx.util import Mm
from pptx.dml.color import RGBColor
doc = fitz.open('poster/main.pdf')
page = doc[0]
pw, ph = page.rect.width, page.rect.height⚠️ 这是推荐的PPTX导出方法。它从PDF生成像素级完美的输出,同时在PowerPoint中每个海报卡片都是独立的可移动/调整大小的形状。python-pptx重建(7.1)会丢失卡片样式、阴影和色块;全页图片(单PNG)无法单独操作。此方法兼顾两者的优点。
工作原理:以300 DPI裁剪已编译PDF中的每个海报框区域,然后将每个裁剪图作为独立图片形状嵌入PPTX的精确网格位置。结果:10-15个独立形状,可在PowerPoint中单独选择、移动、调整大小或删除。
python
import fitz, os, tempfile, shutil
from pptx import Presentation
from pptx.util import Mm
from pptx.dml.color import RGBColor
doc = fitz.open('poster/main.pdf')
page = doc[0]
pw, ph = page.rect.width, page.rect.heightA0 dimensions in mm (adjust for portrait/A1)
A0尺寸(毫米)(纵向/A1需调整)
W_mm, H_mm = 1189, 841 # landscape
W_mm, H_mm = 1189, 841 # 横向
W_mm, H_mm = 841, 1189 # portrait
W_mm, H_mm = 841, 1189 # 纵向
def pts_to_mm(x, y):
return x / pw * W_mm, y / ph * H_mm
def pts_to_mm(x, y):
return x / pw * W_mm, y / ph * H_mm
── Define regions from tcbposter grid ──
── 从tcbposter网格定义区域 ──
Format: name → (col_0based, row_start, col_span, row_end)
格式:名称 → (列索引(从0开始), 起始行, 跨列数, 结束行)
rows=20, columns=4 for landscape (3 for portrait)
横向使用rows=20, columns=4(纵向使用3列)
COLS = 4
row_h = ph / 20
col_w = pw / COLS
regions = {
"title": (0, 0, COLS, 4),
"stats": (0, 4, COLS, 6),
# ... add one entry per posterbox, matching between=rowN and rowM
# Example for 4-column landscape:
"background": (0, 6, 1, 11),
"contributions":(0, 11, 1, 16),
"references": (0, 16, 1, 20),
"paradigms": (1, 6, 1, 11),
"models": (1, 11, 1, 20),
"architecture": (2, 6, 1, 10),
"results1": (2, 10, 1, 20),
"hallucination":(3, 6, 1, 11),
"ablation": (3, 11, 1, 15),
"takeaways": (3, 15, 1, 20),
}
COLS = 4
row_h = ph / 20
col_w = pw / COLS
regions = {
"title": (0, 0, COLS, 4),
"stats": (0, 4, COLS, 6),
# ... 为每个海报框添加条目,匹配between=rowN and rowM
# 横向4列示例:
"background": (0, 6, 1, 11),
"contributions":(0, 11, 1, 16),
"references": (0, 16, 1, 20),
"paradigms": (1, 6, 1, 11),
"models": (1, 11, 1, 20),
"architecture": (2, 6, 1, 10),
"results1": (2, 10, 1, 20),
"hallucination":(3, 6, 1, 11),
"ablation": (3, 11, 1, 15),
"takeaways": (3, 15, 1, 20),
}
── Create PPTX ──
── 创建PPTX ──
prs = Presentation()
prs.slide_width = Mm(W_mm)
prs.slide_height = Mm(H_mm)
slide = prs.slides.add_slide(prs.slide_layouts[6])
prs = Presentation()
prs.slide_width = Mm(W_mm)
prs.slide_height = Mm(H_mm)
slide = prs.slides.add_slide(prs.slide_layouts[6])
Set background
设置背景
bg = slide.background
bg.fill.solid()
bg.fill.fore_color.rgb = RGBColor(0xF5, 0xF3, 0xFF) # venue bg color
tmpdir = tempfile.mkdtemp()
mat = fitz.Matrix(300/72, 300/72) # 300 DPI
for name, (col, r0, span, r1) in regions.items():
# Clip rectangle in PDF points
clip = fitz.Rect(col * col_w, r0 * row_h,
(col + span) * col_w, r1 * row_h)
pix = page.get_pixmap(matrix=mat, clip=clip)
img_path = os.path.join(tmpdir, f"{name}.png")
pix.save(img_path)
# Position in mm
left, top = pts_to_mm(clip.x0, clip.y0)
right, bottom = pts_to_mm(clip.x1, clip.y1)
slide.shapes.add_picture(img_path, Mm(left), Mm(top),
Mm(right - left), Mm(bottom - top))prs.save('poster/poster_components.pptx')
doc.close()
shutil.rmtree(tmpdir)
> ⚠️ **The `regions` dict must match your `main.tex` posterbox grid exactly.** Parse the `between=rowN and rowM` values from each `\posterbox` to build this dict. If you add/remove cards in LaTeX, update the regions accordingly.
**Output comparison:**
| File | Method | Components movable | Visual fidelity | Text editable | Size |
|------|--------|:--:|:--:|:--:|----:|
| `poster.pptx` | python-pptx rebuild | Yes | Approximate | Yes | ~300 KB |
| `poster_from_pdf.pptx` | PDF→single image | No | Perfect | No | ~3 MB |
| **`poster_components.pptx`** | **PDF→per-card crops** | **Yes** | **Perfect** | No | ~2.5 MB |
> 💡 **Tip**: To edit text in `poster_components.pptx`, add a text box on top of the card image and type your replacement text. The image underneath can be deleted or kept as reference.bg = slide.background
bg.fill.solid()
bg.fill.fore_color.rgb = RGBColor(0xF5, 0xF3, 0xFF) # 会议背景色
tmpdir = tempfile.mkdtemp()
mat = fitz.Matrix(300/72, 300/72) # 300 DPI
for name, (col, r0, span, r1) in regions.items():
# PDF中的裁剪矩形(点)
clip = fitz.Rect(col * col_w, r0 * row_h,
(col + span) * col_w, r1 * row_h)
pix = page.get_pixmap(matrix=mat, clip=clip)
img_path = os.path.join(tmpdir, f"{name}.png")
pix.save(img_path)
# 毫米单位的位置
left, top = pts_to_mm(clip.x0, clip.y0)
right, bottom = pts_to_mm(clip.x1, clip.y1)
slide.shapes.add_picture(img_path, Mm(left), Mm(top),
Mm(right - left), Mm(bottom - top))prs.save('poster/poster_components.pptx')
doc.close()
shutil.rmtree(tmpdir)
> ⚠️ **`regions`字典必须与`main.tex`的海报框网格完全匹配**。解析每个`\posterbox`的`between=rowN and rowM`值来构建此字典。如果在LaTeX中添加/删除卡片,相应更新regions。
**输出对比**:
| 文件 | 方法 | 组件可移动 | 视觉保真度 | 文本可编辑 | 大小 |
|------|--------|:--:|:--:|:--:|----:|
| `poster.pptx` | python-pptx重建 | 是 | 近似 | 是 | ~300 KB |
| `poster_from_pdf.pptx` | PDF→单张图片 | 否 | 完美 | 否 | ~3 MB |
| **`poster_components.pptx`** | **PDF→按卡片裁剪** | **是** | **完美** | 否 | ~2.5 MB |
> 💡 **提示**:要在`poster_components.pptx`中编辑文本,在卡片图片上方添加文本框,输入替换文本。可保留或删除下方的图片作为参考。Phase 8: Poster Speech Script
阶段8:海报演讲脚本
Generate — a complete script for presenting the poster at a poster session.
poster/POSTER_SPEECH.mdStructure:
markdown
undefined生成 — 用于会议海报展示的完整脚本。
poster/POSTER_SPEECH.md结构:
markdown
undefinedPoster Presentation Script
海报展示脚本
Paper: [title]
Venue: [VENUE] [YEAR]
Estimated time: 2-3 minutes (quick walkthrough)
论文:[标题]
会议:[VENUE] [年份]
预估时间:2-3分钟(快速讲解)
Opening (15 seconds)
开场(15秒)
"Hi, thanks for stopping by! Let me give you a quick overview of our work..."
"您好,感谢您驻足!让我快速介绍一下我们的工作..."
Motivation (30 seconds)
动机(30秒)
[2-3 sentences explaining the problem and why it matters]
[2-3句话解释问题及其重要性]
Method (45 seconds)
方法(45秒)
[3-4 sentences walking through the hero figure and key approach]
[3-4句话讲解核心图表和关键方法]
Key Results (30 seconds)
关键结果(30秒)
[2-3 sentences highlighting headline numbers from figures]
[2-3句话突出图表中的核心数据]
Takeaway (15 seconds)
结论(15秒)
[1-2 sentences summarizing the contribution]
[1-2句话总结研究贡献]
Closing
结尾
"Happy to discuss any questions! Here's a QR code for the paper and code."
"欢迎提问!这里有论文和代码的二维码。"
Anticipated Q&A
预期问答
Q1-Q5: [Most likely questions + suggested answers]
Q1-Q5:[最可能的问题 + 建议回答]
undefinedundefinedFinal Output Summary
最终输出总结
📋 Poster generation complete:
- Type: [VENUE] poster ([POSTER_SIZE] [ORIENTATION])
- Files:
poster/
├── main.tex # LaTeX source (editable)
├── main.pdf # Print-ready PDF (primary output)
├── poster_components.pptx # PPTX with per-card movable shapes (recommended)
├── poster.pptx # PPTX with editable text (approximate layout)
├── poster.svg # Editable SVG (for Illustrator)
├── POSTER_CONTENT_PLAN.md
├── POSTER_REVIEW.md
├── POSTER_VISUAL_REVIEW.md
├── POSTER_SPEECH.md
├── POSTER_STATE.json
├── generate_pptx.py
└── figures/ # PDF + PNG copies
Next steps:
1. Use poster_components.pptx for layout tweaks (move/resize cards)
2. Use poster.svg for fine vector editing in Illustrator
3. Practice with POSTER_SPEECH.md (target: 2-3 min walkthrough)
4. Print at A0 (300 DPI recommended)📋 海报生成完成:
- 类型:[VENUE]海报([POSTER_SIZE] [ORIENTATION])
- 文件:
poster/
├── main.tex # LaTeX源码(可编辑)
├── main.pdf # 可印刷PDF(主要输出)
├── poster_components.pptx # 含可移动卡片的PPTX(推荐)
├── poster.pptx # 含可编辑文本的PPTX(近似布局)
├── poster.svg # 可编辑SVG(用于Illustrator)
├── POSTER_CONTENT_PLAN.md
├── POSTER_REVIEW.md
├── POSTER_VISUAL_REVIEW.md
├── POSTER_SPEECH.md
├── POSTER_STATE.json
├── generate_pptx.py
└── figures/ # PDF + PNG副本
后续步骤:
1. 使用poster_components.pptx调整布局(移动/调整卡片大小)
2. 使用poster.svg在Illustrator中进行精细矢量编辑
3. 使用POSTER_SPEECH.md练习(目标:2-3分钟讲解)
4. 以A0尺寸印刷(推荐300 DPI)Key Rules
关键规则
Architecture
架构
- MUST use article class, NEVER beamer. Beamer + tcbposter with 8+ enhanced boxes triggers overflow. This is an architectural constraint, not fixable by style tweaks.
grouping levels=255 - NEVER use adjustbox package. Use plain only.
\includegraphics[width=...] - NEVER use . It pulls
\usepackage[most]{tcolorbox}which may not be installed. Uselistingsutf8.styexplicitly.\tcbuselibrary{poster,skins,fitting} - Use not
[table]{xcolor}— needed for{xcolor}in tables.\rowcolor
- 必须使用article类,绝对不能用beamer。 beamer + tcbposter + 8个以上enhanced框会触发溢出。这是架构限制,无法通过修改样式修复。
grouping levels=255 - 绝对不要使用adjustbox包。 仅使用纯。
\includegraphics[width=...] - 绝对不要使用。它会引入
\usepackage[most]{tcolorbox},该文件可能未安装。显式使用listingsutf8.sty。\tcbuselibrary{poster,skins,fitting} - 使用而非
[table]{xcolor}— 表格中使用{xcolor}需要此配置。\rowcolor
Layout
布局
- and
rows=20for tight layout. Card separation via left accent stripe + drop shadow, not grid spacing.spacing=0mm - Use positioning. Not
between=rowN and rowMwhich leaves auto-sized gaps.below=name - All columns in a row band share identical row boundaries. Never mix in col 1 with
row6-row11in col 2.row6-row10 - Adjust row distribution to match content density. After trimming text, reduce row allocation proportionally. Cards with show all whitespace at the bottom.
valign=top
- 和
rows=20实现紧凑布局。卡片分隔通过左侧强调条纹 + 投影实现,而非网格间距。spacing=0mm - 使用定位。不要用
between=rowN and rowM,它会让tcolorbox自动布局,通常会留下不必要的空白。below=name - 每个行区块中的所有列共享相同的行边界。绝不要在一列中使用,而在另一列中使用
row6 to row11— 这会导致视觉错位。row6 to row10 - 根据内容密度调整行分配。删减文本后,按比例减少行分配。的卡片会在底部显示空白。
valign=top
Content
内容
- Less text is more. Target 300-500 words total. Each bullet: 5-8 words max. If it reads like a sentence, it's too long.
- Do NOT fabricate data. All numbers must come from .
paper/sections/*.tex - No abstract paragraph. Replace with stat banner (3-4 big-number callout boxes).
- Figures should occupy 40-50% of poster area. Posters are visual-first.
- Use macro for all figures to ensure consistent spacing.
\posterfig - References: author (year). Short title. Venue — no full titles.
- De-AI polish: Remove watch words (delve, pivotal, underscore, noteworthy, leverage, facilitate, harness).
- 文本越少越好。总目标300-500词。每个项目符号最多5-8词。如果像句子,说明文本过多。
- 不要虚构数据。所有数字必须来自。
paper/sections/*.tex - 不要放摘要段落。替换为统计横幅:3-4个大数字标注框展示核心结果。
- 图表应占海报区域的40-50%。海报以视觉优先。
- 所有图表使用宏,确保间距一致。
\posterfig - 参考文献格式:作者(年份)。短标题。会议 — 不要用完整标题。
- 去AI化润色:删除套话(深入研究、关键、强调、值得注意、利用、促进、驾驭)。
Color & Design
配色与设计
- Card backgrounds must NOT be pure white. Use subtle tints (e.g., ,
#FFF5F3) that match each card's color family.#F0F4FF - Poster background should be tinted (e.g., for ICML red theme), not white or near-white.
#EDD5D5 - Colorbox intensity: 18-25%, not 8-12%. Faint colorboxes are invisible on print.
- Left accent stripe card design () — cleaner than rounded colored boxes.
borderline west={5pt}{0pt}{color} - 4 card styles (redcard/bluecard/darkcard/highlightcard) create visual rhythm across the poster.
- 卡片背景绝对不能是纯白色。使用与卡片色系匹配的淡色调(例如、
#FFF5F3)。#F0F4FF - 海报背景应使用淡色调(例如ICML红色主题用),不要用白色或近白色。
#EDD5D5 - 色块强度:18-25%,不要用8-12%。淡色块印刷后看不见。
- 左侧强调条纹卡片设计() — 比带颜色的圆角框更简洁。
borderline west={5pt}{0pt}{color} - 4种卡片样式(redcard/bluecard/darkcard/highlightcard)在海报上营造视觉节奏。
Equations
公式
- Use inside colorboxes, NOT
$\displaystyle ...$. Display math adds margins causing overfull hbox.\[...\] - Reduce equation font to 26-28pt inside narrow colorboxes.
- Wrap equations in +
\centeringfor proper alignment.\parbox{0.92\linewidth}
- 色块内使用,不要用
$\displaystyle ...$。显示公式会增加边距,导致hbox溢出。\[...\] - 窄色块中的公式字体缩小到26-28pt。
- 公式包裹在+
\centering中,确保对齐正确。\parbox{0.92\linewidth}
Export
导出
- Copy figures, never symlink. not
cp. pdflatex can't follow symlinks.ln -sf - Convert PDF figures to PNG for PPTX. python-pptx cannot embed PDFs. Use at 300 DPI.
pdf2image - SVG via PyMuPDF () — works everywhere, no system deps needed.
fitz.Page.get_svg_image() - PPTX/SVG last. Generate editable exports only after ALL LaTeX revisions are finalized.
- Large file handling: If the Write tool fails due to file size, use Bash () silently.
cat << 'EOF' > file
- 复制图表,不要用符号链接。用不要用
cp。pdflatex无法跟随符号链接。ln -sf - 将PDF图表转换为PNG用于PPTX。python-pptx无法嵌入PDF。使用生成300 DPI的PNG。
pdf2image - 通过PyMuPDF生成SVG() — 所有环境都可用,无系统依赖。
fitz.Page.get_svg_image() - 最后生成PPTX/SVG。仅在所有LaTeX修订完成后生成可编辑导出文件。
- 大文件处理:如果Write工具因文件大小失败,使用Bash静默写入()。
cat << 'EOF' > file
Misc
其他
- Do NOT hallucinate citations. Use only references from the paper's bibliography.
- Include QR code placeholder or code link for paper/code repository.
- Font size minimums (article class): Title ≥84pt, section headers ≥40pt, body ≥34pt, captions ≥26pt, references ≥30pt, stat numbers ≥66pt.
- Feishu notifications are optional. If exists, send notifications. Otherwise skip.
~/.claude/feishu.json
- 不要虚构引用。仅使用论文参考文献中的引用。
- 添加二维码占位符或论文/代码仓库的链接。
- 字体大小最小值(article类):标题≥84pt,章节标题≥40pt,正文≥34pt,标题≥26pt,参考文献≥30pt,统计数字≥66pt。
- 飞书通知可选。如果存在,发送通知。否则跳过。
~/.claude/feishu.json
Parameter Pass-Through
参数传递
Parameters can be passed inline with separator:
—/paper-poster "paper/" — venue: CVPR, size: A1, orientation: portrait, columns: 3| Parameter | Default | Description |
|---|---|---|
| NeurIPS | Conference for color scheme |
| A0 | Paper size (A0/A1) |
| landscape | landscape/portrait |
| 4 | Number of content columns |
| pdflatex | LaTeX engine (pdflatex/xelatex) |
| false | Skip checkpoints |
参数可通过分隔符内联传递:
—/paper-poster "paper/" — venue: CVPR, size: A1, orientation: portrait, columns: 3| 参数 | 默认值 | 描述 |
|---|---|---|
| NeurIPS | 配色方案对应的会议 |
| A0 | 纸张尺寸(A0/A1) |
| landscape | 横向/纵向 |
| 4 | 内容列数 |
| pdflatex | LaTeX引擎(pdflatex/xelatex) |
| false | 跳过检查点 |