Loading...
Loading...
Compare original and translation side by side
/paper-writing/paper-writingNeurIPSNeurIPSICMLICLRAAAIACLEMNLPCVPRECCVGENERIC/paper-poster "— venue: ICML"A0A0A1landscapelandscapeportraitpaper/poster/gpt-5.4truelatexmkpdflatexxelatex💡 Override:/paper-poster "paper/" — venue: CVPR, size: A1, orientation: portrait, columns: 3
NeurIPSNeurIPSICMLICLRAAAIACLEMNLPCVPRECCVGENERIC/paper-poster "— venue: ICML"A0A0A1landscapelandscapeportraitpaper/poster/gpt-5.4truelatexmkpdflatexxelatex💡 覆盖配置示例:/paper-poster "paper/" — venue: CVPR, size: A1, orientation: portrait, columns: 3
| 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
poster/POSTER_STATE.json{
"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"
}POSTER_STATE.json"status": "in_progress"poster/POSTER_STATE.json{
"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"
}POSTER_STATE.json"status": "in_progress"⚠️ 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
\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
\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
⚠️ 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
rows=20rows=20rows=20| Section | Rows | Height | Row range |
|---|---|---|---|
| Title bar | 3 | ~126mm | |
| Stat banner | 2 | ~84mm | |
| Body content | 14 | ~588mm | |
between=rowN and rowMbelow=namebelow=rows=20| 章节 | 行数 | 高度 | 行范围 |
|---|---|---|---|
| 标题栏 | 3 | ~126mm | |
| 统计横幅 | 2 | ~84mm | |
| 主体内容 | 14 | ~588mm | |
between=rowN and rowMbelow=namebelow=| 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 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.
| 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 |
┌─────────────────────────────────────┐
│ 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列。
| 章节 | 行数 | 行范围 | 内容 |
|---|---|---|---|
| 标题栏 | 4 | | 标题 + 作者 + 会议(跨3列) |
| 统计横幅 | 2 | | 3个核心统计标注框(跨3列) |
| 区块A | 5 | | 背景与动机、方法(核心图表)、关键结果(图表) |
| 区块B | 5 | | 贡献、公式与消融实验、结果2(图表+表格) |
| 区块C | 4 | | 参考文献+二维码、实验设置与基准、核心结论 |
┌─────────────────────────────────────┐
│ 标题栏(跨3列) │
├─────────────────────────────────────┤
│ 统计1 │ 统计2 │ 统计3 │
├────────────┼────────────┼──────────┤
│ 背景与动机 │ 方法 │ 结果1 │
│ │(核心图表)│(图表)│
├────────────┼────────────┼──────────┤
│ 研究贡献 │ 公式与消融 │ 结果2 │
│ │ │(图+表)│
├────────────┼────────────┼──────────┤
│ 参考文献 │ 实验设置与 │ 核心 │
│ + 二维码 │ 基准测试 │ 结论 │
└────────────┴────────────┴──────────┘⚠️ 每个行区块中的所有3列必须共享相同的行边界。 这样可确保跨列对齐。绝不要在一列中使用,而在另一列中使用row6 to row11——这会导致视觉错位。row6 to row10
⚠️ 使用实现紧凑布局。卡片分隔通过卡片样式(左侧强调条纹、投影)实现,而非网格间距。网格间距大于2mm会在行与行之间产生明显间隙。spacing=0mm
% 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 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.
% 卡片背景色(非纯白色——增加温暖感)
\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,
...
},
}⚠️ 卡片背景绝对不能是纯白色(#FFFFFF)。 使用与卡片色系匹配的淡色调。纯白色卡片在带色调的海报背景上会显得脱节。色调应几乎不可见,但能增强整体协调性。
\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
\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
\colorbox{color!N}N% 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}{...}}\rowcolor\rowcolor{primary!15}\colorbox{color!N}N% 太淡(打印后看不见):
\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}{...}}\rowcolor\rowcolor{primary!15}⚠️ 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是海报展示距离下舒适阅读的最小尺寸。
⚠️ 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 |
$\Rightarrow$$\to$⚠️ 最大的内容错误是文本过多。 海报不是论文摘要——它是视觉指南。每个项目符号应是关键短语(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个短条目 + 代码链接 |
$\Rightarrow$$\to$┌──────────────────────────────────────────────────────────┐
│ 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 │ 消融实验 │ │
│参考文献 │+ 公式 │ + 图表 │──────────│ │
│ + 二维码 │ │ + 表格 │结论与未来│ │
│ │ │ + 项目符号│ 研究方向 │ │
└──────────┴──────────┴──────────┴──────────┘which pdflatex && which latexmk# 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"tlmgr 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
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# 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
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.
xelatexposter/POSTER_STATE.jsonwhich pdflatex && which latexmk# 选项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"tlmgr 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
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# 重要:使用cp,不要用ln -sf(符号链接)
# pdflatex通常无法跨目录解析符号链接
cp paper/figures/selected_figure.pdf poster/figures/⚠️ 绝不要为海报图表使用符号链接。无法可靠地跨目录跟随符号链接。始终pdflatex实际文件。cp
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副本。
xelatexposter/POSTER_STATE.jsonpaper/sections/*.tex| 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 |
⚠️ 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.
poster/POSTER_CONTENT_PLAN.md📋 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?POSTER_STATE.jsonphase: 1paper/sections/*.tex| 论文章节 | 海报提取内容 | 目标长度 |
|---|---|---|
| 摘要 | 跳过 — 替换为2-4个跨列的大数字统计标注框 | 0词(仅数字) |
| 引言 | 动机:2-3个项目符号 + 编号贡献列表(4项) | 120-160词 |
| 方法 | 1个核心架构图 + 关键公式 + 3-5个项目符号 | 80-120词 |
| 实验 | 数据集详情 + 主要结果图 + 数值统计表 + 消融实验 | 150-200词 |
| 结论 | 3-4个核心发现 + 2-3个未来研究方向 | 60-80词 |
| 相关工作 | 完全跳过 — 海报上没有空间 | 0 |
⚠️ 海报上不要放摘要段落。 替换为统计横幅:3-4个大数字标注框展示核心结果。这是60秒内让观众理解内容的最高效改动。
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: 1paper/figures/ls -la paper/figures/*.{pdf,png,jpg,svg} 2>/dev/nullpaper/figures/ls -la paper/figures/*.{pdf,png,jpg,svg} 2>/dev/nullposter/main.tex\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}fonttitle\fontsize{34}{44}\selectfont\posterfig{0.96}{figures/name.png}{Caption}\renewcommand{\arraystretch}{1.6}\rowcolor{primary!15}$\displaystyle ...$\[...\]\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
🖼️ 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?POSTER_STATE.jsonphase: 3poster/main.tex\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}fonttitle\fontsize{34}{44}\selectfont\posterfig{0.96}{figures/name.png}{标题}\renewcommand{\arraystretch}{1.6}\rowcolor{primary!15}$\displaystyle ...$\[...\]\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: 3cd poster && latexmk -pdf -interaction=nonstopmode main.tex⚠️ If using user-directory TeX Live, prepend PATH:export PATH="$HOME/texlive/YYYY/bin/universal-darwin:$PATH"
grouping levels=255tlmgr install <package>File not found: adjustbox.sty\usepackage{adjustbox}max heightposter/figures/tlmgr install type1cm pdfcol tikzfillpdfinfo poster/main.pdfcd poster && latexmk -pdf -interaction=nonstopmode main.tex⚠️ 如果使用用户目录TeX Live,需要先设置PATH:export PATH="$HOME/texlive/YYYY/bin/universal-darwin:$PATH"
grouping levels=255tlmgr install <包名>File not found: adjustbox.sty\usepackage{adjustbox}max heightposter/figures/tlmgr install type1cm pdfcol tikzfillpdfinfo poster/main.pdf
**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尺寸)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
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()poster/poster_review.pngMAX_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.
mcp__illustrator__runmcp__illustrator__runposter/figures/poster/POSTER_VISUAL_REVIEW.mdundefined此阶段使用Claude视觉评估对渲染后的海报图片进行迭代优化,改进布局、可读性和视觉层次 — 类似于技能的审核循环。paper-illustration
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()poster/poster_review.pngMAX_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 — 小而集中的修改可防止回归。
mcp__illustrator__runmcp__illustrator__runposter/figures/poster/POSTER_VISUAL_REVIEW.mdundefinedundefinedundefinedmcp__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)poster/main.texposter/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.
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.texposter/POSTER_REVIEW.md⚠️ 重要:应用审核修复后,仅当海报最终确定后再进入阶段6。PPTX和SVG必须从最终LaTeX/PDF生成 — 绝不要从中间版本生成。
⚠️ 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。此阶段最后运行(审核修复后),确保所有格式内容一致。
python-pptxpython3 -c "import pptx" 2>/dev/null || pip install python-pptxposter/generate_pptx.pymain.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.
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_mmcd poster && python3 generate_pptx.pypython-pptxpython3 -c "import pptx" 2>/dev/null || pip install python-pptxposter/generate_pptx.pymain.tex⚠️ PPTX字体大小也必须大。常见错误是PPTX使用小字体(17-24pt),而PDF使用34pt+。PPTX是A0尺寸,需要相同的大字体。
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_mmcd poster && python3 generate_pptx.pyundefinedundefinedundefinedundefined
```bash
```bash
> ⚠️ **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')
> ```
> ⚠️ **SVG会继承PDF的所有布局问题**。如果PDF有空白或裁剪,SVG也会有。始终先修复PDF。
> 💡 **PyMuPDF额外功能**:还可生成PNG预览图用于快速视觉检查:
> ```python
> pix = page.get_pixmap(dpi=150)
> pix.save('poster/poster_preview.png')
> ```⚠️ 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.
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)无法单独操作。此方法兼顾两者的优点。
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# 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))
> ⚠️ **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.# 毫米单位的位置
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))
> ⚠️ **`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`中编辑文本,在卡片图片上方添加文本框,输入替换文本。可保留或删除下方的图片作为参考。poster/POSTER_SPEECH.mdundefinedposter/POSTER_SPEECH.mdundefinedundefinedundefined📋 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)grouping levels=255\includegraphics[width=...]\usepackage[most]{tcolorbox}listingsutf8.sty\tcbuselibrary{poster,skins,fitting}[table]{xcolor}{xcolor}\rowcolorgrouping levels=255\includegraphics[width=...]\usepackage[most]{tcolorbox}listingsutf8.sty\tcbuselibrary{poster,skins,fitting}[table]{xcolor}{xcolor}\rowcolorrows=20spacing=0mmbetween=rowN and rowMbelow=namerow6-row11row6-row10valign=toprows=20spacing=0mmbetween=rowN and rowMbelow=namerow6 to row11row6 to row10valign=toppaper/sections/*.tex\posterfigpaper/sections/*.tex\posterfig#FFF5F3#F0F4FF#EDD5D5borderline west={5pt}{0pt}{color}#FFF5F3#F0F4FF#EDD5D5borderline west={5pt}{0pt}{color}$\displaystyle ...$\[...\]\centering\parbox{0.92\linewidth}$\displaystyle ...$\[...\]\centering\parbox{0.92\linewidth}cpln -sfpdf2imagefitz.Page.get_svg_image()cat << 'EOF' > filecpln -sfpdf2imagefitz.Page.get_svg_image()cat << 'EOF' > file~/.claude/feishu.json~/.claude/feishu.json—/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 | 跳过检查点 |