agentleFS
70asunflower70asunflower/70asunflower-skills/paper-figures/SKILL.md

paper-figures

Skill1 starsChanged 14 days agoMITView on GitHub

学术论文图表与视觉摘要生产中枢:顶刊版面预设(Nature/Science/Cell/IEEE/Elsevier)、色盲与灰度质检、多子图马赛克拼版、Graphical Abstract 双轨、0 度水平文字铁律、OpenXML 原生矢量、中文标点避头尾。按用途路由五条管线:投稿级矢量数据图 / PPT 示意图转矢量 / Origin 直通 OPJU / 视觉摘要 / 学术海报易拉宝。Triggers: 画论文图, 绘制图表, 论文插图, 科研画图, figure for paper, IEEE figure, Origin 画图, OPJU, 导师要 Origin 格式, 转成矢量图, 子图拼版, 视觉摘要, graphical abstract, 色盲检测, 顶刊插图, 学术海报, 易拉宝, 展板设计, poster pptx, 导出pptx. 版面体检与微调交给 layoutfix 技能。

8 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Files
SKILL.md

paper-figures — 学术论文图表与海报生产(统一入口)

本技能提炼自 Nature/Science/Cell 顶刊标准、IEEE 旗舰期刊实战、Origin 直通管线,以及会议易拉宝(60cm × 160cm)双轨高保真排版全流程经验。 第 0 步永远是路由;本技能下沉了全流程共享的底层标准(0 度水平文字、PPTX 原生矢量引擎、色盲安全质检、标点避头尾禁则、数据诚信契约),向上赋能五大专业业务管线。


零、管线选择(第 0 步)

需求场景走哪条管线核心交付物
投稿级矢量数据图 / 3D 爆炸图§二·1 matplotlib 顶刊管线fig<N>_<slug>.pdf + .png + _notes.txt
论文示意图(架构/装置/流程),要在 PPT 里手调§二·2 PPT 原生图 + 转矢量原生可编辑 .pptx + 实测包围盒裁剪矢量 PDF
导师/合作者要 Origin 风格、可编辑 OPJU§二·3 Origin 直通管线result.opju + pdf/png/tif + 审计报告
Graphical Abstract(视觉摘要)投稿§二·4 视觉摘要双轨管线1:1 或 2.5:1 矢量 PDF + 对应可编辑 .pptx
学术海报 / 易拉宝 / 会议展板§二·5 海报双轨交付管线300 DPI CMYK poster.pdf + 1:2 可编辑 poster.pptx
  • 拿不准时不要反问:
    • 给了数据文件、没说用途 → 默认按投稿向 matplotlib 做,交付时提一句“要给导师改,可再出 Origin 版”;
    • 明确提到视觉摘要 / Graphical Abstract → 走 §二·4;
    • 明确提到海报/易拉宝/展板/Poster → 走 §二·5 双轨交付(严禁仅给单向位图)。

〇·五、本机固定运行环境

本文件里所有 python / python3 一律指下列绝对路径。WorkBuddy 托管运行时(~/.workbuddy/binaries/python/versions/*/)是隔离环境、零第三方包,不要用。

管线解释器绝对路径包含包
matplotlib / PPT 原生图 / 海报双轨 / 视觉摘要 / 质检比对 / 色盲检测C:/Users/qilin/miniconda3/python.exematplotlib, numpy, python-pptx, pywin32, reportlab, PyMuPDF (fitz), Pillow, SciPy, PyYAML
Origin 直通C:/Users/qilin/miniconda3/envs/editaplot/python.exeCPython 3.12 + origin/engine/requirements-runtime.lock

一、全管线共用底层铁律与公共中枢(Shared Core)

无论是论文单双栏插图、Graphical Abstract 还是 160cm 易拉宝,以下六大底层标准由全管线强制共享:

1.1 【0 度水平文字与无遮挡遮罩铁律】

  • 严禁文字倾斜:无论流程箭头、数据连接线是 $30^\circ$ 还是 $45^\circ$,上面的标注文字必须 100% 保持 0 度水平,严禁使用 rotation=angle 让文字倒挂或斜躺!
  • 纯白防穿帮遮罩:当连线穿过文字区域时,文字必须配置纯白/背景色遮罩(带 padding),避免线条横穿字迹(matplotlib 使用 bbox=dict(facecolor='white', pad=2.0),PPTX 使用 pptx_core.create_horizontal_callout)。
  • 垂直容器自然竖排:纵向长矩形容器内部汉字采用单字换行流自然堆叠(内\n容\n联\n动),绝不旋转文本框 90 度。

1.2 【色盲友好 (CVD) 与灰度打印安全质检】

  • 痛点:红绿色盲占男性约 8%,传统红绿对比图会被 Nature/Science/IEEE 严厉挑刺;黑白灰度打印下曲线易粘连。
  • 工具调用:运行 python scripts/check_colorblind_safety.py <fig.pdf|png> 自动生成 4 联质检图(原始图、绿色盲仿真、红色盲仿真、纯黑白灰度打印仿真)。
  • 安全色板:优先选用 scripts/color_palettes.py 中的 Okabe-Ito 配色(8 色全无障碍)或 Paul Tol 配色族。
  • 冗余编码:绝不仅依赖颜色区分数据,必须叠加点型(圆/方/三角)或线型(实线/虚线)。

1.3 【中文排版与标点避头尾禁则(CJK Kinnsoku Shori)】

  • 痛点:全角逗号 ,、句号 。、分号 ; 掉落至下一行行首,破坏学术庄严度。
  • 三大对策:
    1. 文本框按字号预留 2–3mm 标点避让缓冲区;
    2. 语法意群主动断行法:复杂长难句在多分句逗号处主动显式断行(,\n),锁定逗号在句尾;
    3. 标签悬挂对齐:使用加粗标签 【标签】 与正文在同一段落流式排布。

1.4 【python-pptx 原生矢量引擎(pptx_core.py)】

所有可编辑 PPTX 生成必须基于公共库 scripts/pptx_core.py:

  1. <a:ea> 东亚字体声明:注入 XML,确保思源宋体/黑体在 Windows Office 中生效不回退;
  2. adj=3000 微圆角控制:消除默认 adj=16667 过圆的移动端廉价感,获得端庄卡片;
  3. 彻底清除 <a:effectLst> 阴影:维持现代扁平矢量风格;
  4. 文本框四向边距清零 (margin=0):保证排版净宽完全符合设计计算。

1.5 【双轨视觉一致性(Visual Parity)质检闭环】

运行 python scripts/verify_visual_parity.py <fig.pdf> <fig.pptx>: PyMuPDF 渲染 PDF 为 300 DPI 基准图 $\to$ PowerPoint COM 无头静默导出 PPTX 为同等 PNG $\to$ 单图拼接或长图 4 视区切片比对 $\to$ 自动化检测标点孤悬、0 度文字与文字截断。

1.6 【数据诚信与统计契约(Statistical Integrity)】

  • 柱状图零基准硬铁律:表达数值量级或比例的柱状图,Y 轴绝对必须从 0 开始,严禁截断起始坐标夸大差异!若展示微小波动应改用折线图并带 // 断轴标志。
  • 原始散点叠加:样本量 $n \le 50$ 的柱状图/箱线图,上方必须叠加半透明抖动真实散点(Jittered Stripplot),展示分布真实性。
  • 误差线与星号:必须在同名 _notes.txt 中严格声明误差线定义(SD vs SEM vs 95% CI)与单调显著性口径($*p<0.05, **p<0.01, ***p<0.001$, ns)。

1.7 【版面体检与微调 → 交给 layoutfix 技能】

画完的 SVG/PDF 不要靠截图目测版面。交给 layoutfix 技能(独立技能,见 ../layoutfix/SKILL.md):

  • layoutfix.py check <图> --strict —— 查字压图 / 文字被盖 / 超画布 / 箭头悬空 / 标签偏心,有 error 即退出码 7
  • layoutfix.py tune <图> —— 起本地界面,人拖一下即吸附对齐,位移落成毫米清单
  • layoutfix.py layers <图> —— 图层结构报告:顶层对象数 / 嵌套深度 / 语义命名占比 / 文字是否被转成路径
  • 需要看图时只截违例区域:check --json 的 region 喂 scripts/preview.py --clip

SVG 生成端图层纪律(交付可编辑 SVG 必守;违反则图层树数百行、人工无法编辑——真实案例:matplotlib 图 321 个图层):

  1. svg.fonttype='none'(PDF 用 pdf.fonttype=42)——文字保持真 <text>,禁 text-as-path(matplotlib 默认恰是 path,必须显式覆盖,否则 check 对文字全盲、也无法就地编辑)
  2. 语义命名:关键 artist set_gid()——box-<名> / label-<名> / arrow-<名>。matplotlib 默认给每个 artist 输出孤立 <g id="text_69">,数百图层就是这么来的
  3. 逻辑单元归组:一个框及其全部标签/连线包进一个 <g id="unit-xxx">,顶层对象建议 ≤25
  4. 交付前 layers 自查——顶层过多 / 无语义命名 / text=0 当场报警

执行顺序:程序能断言的问题不许花截图成本。

执行顺序:程序能断言的问题不许花截图成本。

1.8 【出图后看一眼:局部渲染,不整图截图】

  • 原则:能用几何断言的问题不截图;必须看时只看违例区域。整图截图既贵又看不清 3px 的压字,200×120 的局部裁剪判断准确率高得多。
  • SVG / PDF:scripts/preview.py <图> [--dpi 200] [--clip x0,y0,x1,y1] —— PyMuPDF 直出 PNG,零额外依赖。加 --violations 会自动调 layoutfix,把每个违例区域各渲一张小图并打印对应说明。
  • HTML 海报 / 演示页:scripts/snap/snap.mjs(随附副本;真相源与同步方式见 scripts/snap/SOURCE.md),支持截图 / --audit 体检 / --diff 像素回归 / --check 基线。
  • 不要用整页截图代替局部:先 layoutfix check --json 拿 region,再 preview.py --clip 只渲那一块。

1.9 【出图路由 → visual-diagrams】

需要的是信息卡、示意图、系统架构图而非论文数据图表时,路由到 visual-diagrams 技能 (三路径:HTML 信息卡 / 手写 SVG / 架构图委托 fireworks-tech-graph,见 ../visual-diagrams/SKILL.md)。 本技能只管论文向管线:顶刊数据图、PPT 转矢量、Origin 直通、Graphical Abstract、学术海报。


二、专门业务管线实现指南

2.1 管线 A:投稿级 matplotlib 数据图与顶刊预设

  • 期刊尺寸预设:直接调用 scripts/journal_profiles.py:
    from journal_profiles import apply_journal_style, get_journal_figsize, add_panel_label
    apply_journal_style("nature")  # 或 science, cell, ieee, elsevier
    figsize = get_journal_figsize("nature", columns="double")  # 自动换算 mm 为 inch
  • 多子图统一拼版:直接调用 scripts/multipanel_mosaic.py,使用 ASCII 字符布局与自动标号:
    from multipanel_mosaic import create_multipanel_figure
    fig, axd = create_multipanel_figure("""
        AAB
        AAC
        DDD
    """, journal="nature", columns="double")
  • 3D 爆炸图 (mplot3d):层序表先行,侧视视角 (elev 14–22°),单个 Poly3DCollection 组装,严禁 computed_zorder=False。

2.2 管线 B:论文示意图 PPT 构建与 PPT $\to$ 矢量转换

用途:用户/导师要在 PPT 里调版式的装置图、拓扑图、架构图。

  1. 2× 尺寸建页:图宽 3.5 in $\to$ 幻灯片宽 7.0 in,字号线宽同步翻倍;
  2. 构建原则:引入 pptx_core,卡片用 create_card,胶囊用 create_pill_badge,连线文字用 create_horizontal_callout;
  3. 转矢量出图:运行 python scripts/pptx_to_vector.py <file.pptx> --name figN_slug: PowerPoint COM 导出整副 PDF $\to$ PyMuPDF 逐 shape 实测内容包围盒裁剪(0.05 in 细边)$\to$ 同步产出 600 dpi PNG。

2.3 管线 C:Origin 直通可编辑图表(OPJU)

用途:导师/合作者要求 Origin 格式工程图。

  • 解释器:C:/Users/qilin/miniconda3/envs/editaplot/python.exe
  • 一条命令直通(在技能目录下执行;origin/scripts/origin_fig.py 为技能内相对路径):
    C:/Users/qilin/miniconda3/envs/editaplot/python.exe \
      origin/scripts/origin_fig.py direct <data.csv> \
      --template trend --claim "科学论断" --x-title "Time (s)" --y-title "Power (W)" \
      --x t_s --y "power_W" --auto --name fig3a --output-dir <out>
  • 数据守卫全自动生效,产出 result.opju + pdf/png/tif + 冻结计划与校验报告。

2.4 管线 D:Graphical Abstract(视觉摘要)双轨生成管线

为 Elsevier、Cell Press 等期刊提供投稿用视觉摘要,双轨交付(印刷级 PDF + 原生可编辑 PPTX):

  • Square 模式 (1:1 比例):$1200 \times 1200\text{ px}$ (Cell Press / ACS / RSC 标准),模板 template_graphical_abstract.py 中的 draw_graphical_abstract_square;
  • Banner 模式 (2.5:1 比例):$1328 \times 531\text{ px}$ (Elsevier / Springer 标准),模板 draw_graphical_abstract_banner 与 template_graphical_abstract_pptx.py;
  • 视觉逻辑:三段式流向【输入/挑战】 $\to$ 【核心机制/技术干预】 $\to$ 【性能/成果】。

2.5 管线 E:学术海报与易拉宝双轨交付管线(Poster & Roll-Up Banner)

当需求为学术展板、会议易拉宝时触发:

  • 物理印刷规范:成品 60cm × 160cm(含 3mm 出血为 60.6cm × 160.6cm),安全边距 2.0cm,底部必须留白 5.5–6.2 cm 防止转轴吞字;
  • PowerPoint 1:2 缩放铁律:破除 Office 56 英寸限制,PPTX 严格设为 $30.0\text{ cm} \times 80.0\text{ cm}$,字号严格折半(正文 $\ge 15.0\text{pt}$ 硬底线);
  • 黄金四段式版面:Header 24cm $\to$ Sec1 22cm $\to$ Sec2 24cm $\to$ Sec3 56cm $\to$ Footer 24cm;
  • 模板与质检:template_poster_pdf.py + template_poster_pptx.py 出图,check_poster_preflight.py 做印前预检(画布尺寸 / 出血 / 字号下限 / 图片 DPI),最后 verify_visual_parity.py 闭环。
  • 海报专用图表:generate_poster_figures.py 按海报卡片宽度(PPTX 25–28cm、PDF 50–56cm)反算 300 DPI 像素预算,避免放大后糊。
  • 交付与协作:海报要交给别人继续改或送印时,按 references/how_to_modify_poster.md 的双轨说明走(PPTX 给人改、PDF 给厂出片)。

三、工具库速查表(scripts/)

脚本文件核心职责关键方法 / 适用场景
journal_profiles.py顶刊排版尺寸与预设apply_journal_style("nature"), get_journal_figsize, add_panel_label
color_palettes.py学术色盲安全调色板set_academic_palette("okabe_ito"), OKABE_ITO, PAUL_TOL_VIBRANT
check_colorblind_safety.py色盲 (CVD) 与灰度打印质检一键输出 4 联色觉仿真图,排查红绿混淆与黑白对比度
multipanel_mosaic.py多子图 ASCII 马赛克拼版create_multipanel_figure(mosaic, journal="nature"),自动子图标号防撞
pptx_core.py原生 PPTX 矢量控制底层库<a:ea> 字体声明、adj=3000 微圆角、清除阴影、清零边距
verify_visual_parity.pyPDF vs PPTX 双轨视觉一致性检验PyMuPDF + COM 无头导出 + 单图/长图切片比对
template_graphical_abstract.py视觉摘要矢量 PDF 生成器1:1 方版 (Cell) 与 2.5:1 横版 (Elsevier) 模板
template_graphical_abstract_pptx.py视觉摘要可编辑 PPTX 模板基于 pptx_core,原生三段式模块,双击即改
template_poster_pdf.py易拉宝印刷级 PDF 模板ReportLab 60.6x160.6cm、CMYK、出血角线、底座留白
template_poster_pptx.py易拉宝 1:2 可编辑 PPTX 模板30x80cm 规格、全原生矢量、正文字号 $\ge 15\text{pt}$
check_poster_preflight.py海报印前预检画布尺寸、出血、字号下限、图片 DPI 一次查完,交付前跑
generate_poster_figures.py海报专用图表模板matplotlib 300 DPI,按卡片实际宽度反算像素预算
ieee_matplotlib_template.pyIEEE 单图 matplotlib 模板复制成 plot_figN_xxx.py 后改数据,版面/字号已按 IEEE 调好
make_fig_pptx_template.py原生可编辑 PPTX 单图模板圆角卡片 + 药丸标签,双击即改,走 pptx_core
template_figure_diagram.py海报图表与概念机制图矢量规范matplotlib 300 DPI,海报卡片宽度下的字号与线宽
verify_poster_diff.py海报 PDF vs PPTX 像素级切片比对双轨交付后验一致性,逐片出差异图
canvas.py坐标画布协议与碰撞检测Canvas(fig),输出 *_grid.png 与 *_layout.txt 坐标清单
pptx_to_vector.pyPPT 示意图转出版级矢量 PDFCOM 导出整副 PDF + PyMuPDF 实测包围盒裁切
preview.py图渲染成 PNG 供 agent 看--clip 只渲局部;--violations 自动逐条渲违例区域;PyMuPDF 直出零依赖
snap/snap.mjsHTML 页面截图/体检/像素回归海报与演示页专用;随附副本,真相源见 snap/SOURCE.md

四、参考文档(references/)

正文只留判断规则,具体规范与案例在下面这些文件里,按需读:

文档什么时候读
print_specifications.md做海报/易拉宝,查印刷尺寸、出血、色彩模式
typography_and_cjk.md中英混排、标点避头尾、字号层级拿不准时
openxml_pptx_hacks.md改 PPTX 底层 XML(字体声明、圆角、边距)前
diagram_horizontal_discipline.md画机制图/流程图,判断元素该不该横平竖直
visual_parity_protocol.md双轨交付(PDF + PPTX)要验一致性时的判定口径
statistical_integrity_contract.md图上要标误差线、显著性、样本量之前
how_to_modify_poster.md海报要交给别人继续改或送印时

五、与用户的交互红线

  • 用户说“改好了让你翻译/导出”之前,绝不碰用户的 PPT/图文件——不覆盖、不“顺手刷新”、不恢复旧版。
  • 转换用 DispatchEx(独立进程),用户开着 PowerPoint 时永不 Quit、不附加其会话。
  • 用户对版式的手工调整优先级高于脚本;以用户文件为准,先问再覆盖。
  • 海报与视觉摘要任务严禁仅交付图片或单向 PDF,必须主动奉上可自由修改的 PPTX 源码并声明缩放比例。
  • 出图后自查六部曲:① 图内文字是否 0 度水平?② 有无孤悬标点掉落行首?③ 色盲质检是否通过?④ 柱状图 Y 轴是否从 0 起始?⑤ layoutfix check 是否 0 error(字压图/文字被盖/超画布/箭头悬空/标签偏心)?⑥ layoutfix layers 图层纪律(SVG 交付时:顶层 ≤25、关键元素带语义 id、文字非 path)——需已安装 layoutfix 技能,没装就人工看一遍。
  • 示意图交付前必须过 layoutfix check --strict(若已安装该技能);报出违例时先修再交,不要把带压字的图给用户。

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.