科研图表投稿规范检查与修正(paper-figure-kit)
这个 Skill 解决什么
投稿被退回的图片问题,九成不是"图不够清晰",而是三件很具体的事:
- DPI 元数据缺失——排版软件默认按 72 dpi 解释,一张 1000 px 的图被印成 353 mm 宽,糊得没法看。
- 物理宽度与栏宽不匹配——期刊单栏 90 mm,你的图却按 150 mm 出,排版时被强行缩小,字号掉到 5 pt。
- 靠"重采样调高 dpi"自我安慰——把 600 px 的图重采样到 300 dpi 只是改了标签,细节一点没多,印刷照样糊。
本 Skill 用一条确定性公式把这件事算清楚:
目标栏宽下的有效分辨率 = 25.4 × 像素宽度 ÷ 目标栏宽(mm)
有效分辨率够,图就能用(只改元数据即可);不够,必须回绘图脚本重新出图,任何重采样都是自欺欺人。工具会如实区分这两种情况,不会给你一个"看起来修好了"的文件。
何时触发
- "这张图能投稿吗 / 符合 xx 期刊要求吗"
- "dpi 不够 / 图糊 / 投稿系统说图片分辨率低"
- "帮我批量检查 figures 目录"
- "转成 300 dpi / 转 TIFF / 按双栏出图"
- 论文写作、返修(revision)、图表排版相关请求
快速开始
# 0) 看内置期刊预设
python scripts/figcheck.py presets
# 1) 检查(只读,不改文件)
python scripts/figcheck.py check fig1.png fig2.tiff \
--preset elsevier --column single --kind halftone \
--md report.md --json report.json
# 2) 修正(写入 DPI 元数据 / 转 TIFF / 裁白边,像素不变)
python scripts/figcheck.py fix fig1.png \
--preset elsevier --column single --out fixed/ --format tiff --trim 6
参数含义:
| 参数 | 取值 | 说明 |
| --- | --- | --- |
| --preset | elsevier ieee nature springer generic | 目标期刊版式预设 |
| --column | single 1.5 double | 单栏 / 1.5 栏 / 双栏 |
| --kind | halftone combination lineart | 照片 / 图文混排 / 线条图,决定 dpi 门槛 |
| --out --format | 目录 / png tiff | 输出目录与格式(TIFF 用 LZW 无损压缩) |
| --trim | 像素 | 裁掉四周白边,保留的边距像素数 |
check 有 FAIL 时退出码为 1,方便接进 CI 或批量脚本。
输出长什么样
下面是本 Skill examples/example_bad.png 的真实输出(600 px、无 DPI 元数据、白边 42%):
## example_bad.png —— FAIL
| 检查项 | 结论 | 说明 |
| --- | --- | --- |
| 文件格式 | PASS | PNG(600x360) |
| 色彩模式 | PASS | RGB |
| DPI 元数据 | FAIL | 缺失 DPI 元数据,排版软件会按 72dpi 解释导致图变小 |
| 缩放到目标栏宽后的有效分辨率 | FAIL | 169 dpi < 要求 300 dpi;目标栏宽下至少需要 1062 px 宽,当前仅 600 px,必须从源头重新出图,重采样无法补救 |
| 缩放方向 | WARN | 元数据宽度是目标栏宽的 235%,需缩小 57% |
| 白边 | WARN | 四周白边占画面 41.8%,建议裁掉以免排版时图被缩小 |
修正同一张图后重检:
| DPI 元数据 | PASS | 132 dpi |
| 物理宽度 | PASS | 按元数据为 90.0 mm(目标栏宽 90.0 mm) |
| 缩放到目标栏宽后的有效分辨率 | FAIL | 132 dpi < 要求 300 dpi …… 必须从源头重新出图 |
| 白边 | PASS | 四周白边 6.63% |
也就是说:白边和元数据能修,像素不够修不了——工具会直说,并把"回到绘图脚本、把 figsize 设成 (90/25.4, ...) 英寸、dpi=300"这条唯一正确的路指给你。
判定规则
| 等级 | 含义 | 处理 |
| --- | --- | --- |
| PASS | 满足印刷要求 | 直接用 |
| WARN | 可用但有风险(白边过大、需缩放、索引色) | 建议按提示修 |
| FAIL | 投稿会被退(缺元数据、有效分辨率不足、文件过大、打不开) | 必须处理 |
有效分辨率判定:25.4 × 像素宽 ÷ 目标栏宽 ≥ 该图类型的 dpi 门槛。这个量与元数据里的 dpi 无关,只取决于像素数和栏宽——这正是很多人搞错的地方。
内置期刊预设
| preset | 单栏 | 1.5 栏 | 双栏 | halftone | combination | lineart |
| --- | --- | --- | --- | --- | --- | --- |
| elsevier | 90 mm | 140 mm | 190 mm | 300 | 500 | 1000 |
| ieee | 88.9 mm | 136 mm | 181 mm | 300 | 600 | 1200 |
| nature | 89 mm | 120 mm | 183 mm | 300 | 600 | 1200 |
| springer | 84 mm | 129 mm | 174 mm | 300 | 600 | 1200 |
| generic | 90 mm | 140 mm | 190 mm | 300 | 600 | 1200 |
这些是业界通用值,细节见 references/journal-specs.md。投稿前一定以目标期刊最新 Guide for Authors 为准;对不上时用 generic 并把 --column 换成实测栏宽(可以先量一下期刊 PDF 的正文栏宽)。
使用示例
场景 A:一批图要交稿,先摸底
python scripts/figcheck.py check figures/*.png --preset ieee --column single --md qa.md
# 打开 qa.md,只看 FAIL 那几行,其余可以直接过
场景 B:图没问题,只是 Word 里显小
python scripts/figcheck.py fix figures/fig3.png --preset elsevier --column single --out fixed/
有效分辨率本来就够时,这一步只写一个正确的 DPI 元数据(像素零损失),图在 Word 里就会以 90 mm 呈现。
场景 C:投稿系统只收 TIFF,且要求双栏
python scripts/figcheck.py fix figures/*.png --preset elsevier --column double \
--out submit/ --format tiff --trim 4
场景 D:出图前就对齐(推荐做法)
在绘图脚本里直接按栏宽出图,从源头避免返工:
FIG_W_MM = 90.0 # Elsevier 单栏
plt.figure(figsize=(FIG_W_MM / 25.4, 60 / 25.4))
plt.savefig("fig1.png", dpi=300, bbox_inches="tight", pad_inches=0.02)
设计取舍(为什么不"自动帮你调高 dpi")
工具只在物理语义正确的前提下写元数据:写入的 dpi 使图像宽度恰好等于目标栏宽。像素数不变、不插值、不锐化——因为投稿评审看的正是细节,插值出来的"清晰"在印刷环节会被放大成伪影。
唯一的补救路径写在 FAIL 的说明里:回到源头,用更大的 dpi 或更宽的 figsize 重新出图。
文件结构
paper-figure-kit/
├── SKILL.md # 本文件(zip 根目录只能有这一个文件)
├── scripts/figcheck.py # 唯一入口,仅依赖 Pillow
├── references/
│ ├── journal-specs.md # 栏宽/dpi 数值来源与取用说明
│ └── LICENSE # MIT(Copyright (c) 2026 韩雨欣)
└── examples/
├── make_sample.py # 生成两张示例图(不需要 matplotlib)
├── example_bad.png # 反面样例:600 px、无 dpi、42% 白边
├── example_good.png # 正面样例:1063 px、300 dpi
└── report-example.md # 对上面两张图的真实检查报告
依赖
- Python 3.8+
- Pillow(
pip install pillow) - 不需要 matplotlib、不需要 LaTeX、不需要联网
局限
- 只查位图。PDF/EPS 是矢量或复合格式,本工具只提示"请用出版社预检工具",不做解析。
- 不判断图的内容质量(坐标轴是否标注、字号是否可读、配色是否色盲友好)。字号可读性建议按"最终栏宽下不小于 7 pt"自行核对。
- 不做 CMYK 转换。印刷制版所需的分色由出版社流程处理;RGB 是当前主流投稿要求。
- 期刊数值可能调整,预设值仅供快速比对。
微信扫一扫