这篇博客围绕一个很具体的观察展开:科学论文里的图,修改起来往往比生成还麻烦。审稿人让你把柱状图里的某一组标签改掉,把子图位置调换,把误差线风格统一——听起来是小改动,在 PowerPoint 里可能一分钟搞定,但如果你面对的是 LaTeX/TikZ 写的图,这些改动就要落在源代码上。假如我们让大模型来改图,它到底有没有能力改得好?这就需要一套能衡量“改图”能力的标准。Edit2TikZ这个名字,指向的关键词非常集中:用 TikZ 做科学图形的编辑基准。
我把它理解成一个值得关注的方向,不只是又一个 benchmark。它真正在推的问题不是“模型能不能从零画图”,而是:“模型能不能在不破坏整体科学表达的前提下,精准修改已有图里的部分内容”。下面我会从任务难点、基准设计逻辑、评估方法与适用边界几个角度展开,尽量讲清楚为什么图的局部修改比“图生成”更难,也更接近科研工作者的真实需求。
1. 为什么“改图”比“画图”更容易暴露问题
1.1 画图可以从头写,改图必须尊重“已经存在的事实”
文本生成模型做“从零绘图”时,有个比较大的自由度:整体布局、坐标范围、颜色主题,用户可以接受多种合理输出。但“编辑”不是这样。编辑任务的输入是:
- 一张已经存在的图。
- 一段描述修改意图的文本。
- 一个隐含约束:除了修改对象,其它内容不能乱动。
比如一张对比两种催化剂效率的条形图,原有图里的数据点本身就来自实验结果。用户给出的编辑指令是“把标题里的‘催化效率’改成‘转化率’,并把第二个子图的纵轴单位从小时改成分钟”。
对模型来说,这个任务的核心难点不在语言理解,而在于两个要求同时成立:
- 知道要改哪里。
- 其它部分的坐标、数值、配色、线宽、上下文都不能改变。
这不像让模型“画一只猫”。画猫错了顶多是“不像”,改图错了可能直接把图里的科学关系改扭曲,这是比“不美观”严重得多的问题。
1.2 像素级编辑不适合科学图,TikZ 给了一个结构化入口
如果只在常见位图里做编辑,常见的思路是先生成掩码,再用某种 inpainting 方法填内容。可是科学图里最核心的信息不是像素颜色,而是“哪根线代表哪组实验”“哪个误差棒范围是多大”“两张子图在逻辑上如何衔接”。
这些信息在 PDF 或 PNG 里已经丢失了,只在更上层的描述里。TikZ 刚好提供了一种相对理想的中间表达:它本身是一段结构化的代码,一个坐标轴节点、一条曲线、一个图例条目都有自己的语言结构。
也就是说,如果把“科学图编辑”建模成“对 TikZ 代码的编辑”,模型处理的不再是视觉像素,而是带结构可定位的代码。这样做更接近人类在写论文时的实际操作方式。Edit2TikZ这类任务的价值,正是在推动模型学会读这种结构化的矢量图“源码”。
1.3 为什么这件事过去很难
以前并不缺“指令编辑图片”的方法,缺的是科学场景下可以自动验证的图。
普通图片编辑有没有成功,人眼看一下就行,但视觉感受很难量化。而科学图的好处在于,它的最终载体有明确约束:能用 LaTeX 重新编译、能渲染成一幅图、图里的坐标和文字必须和源数据对应。
TikZ 让“编辑成功与否”从主观视觉判断,部分转换成可以被程序检查的过程。代码能够编译、结构是否保留、组件是否被独立修改,这比原来只能让人“看一眼好不好”要可靠得多。这也是为什么 TikZ 会被选作一个基准落脚点:它能提供底层逻辑,又能在渲染后做视觉解释。
2. 从名字里读出的任务框架:Edit、2TikZ、Benchmark
2.1 Edit:不只是“改一段话”,而是“改图里多个细粒度属性”
把“Edit”拆开看,这个任务并不只是简单地执行文本替换。科学图里的编辑,常见类型至少可以分为四层:
- 文本级编辑:改标题、改坐标轴标签、改图例文字、改注释。
- 结构级编辑:增加或删除子图、改变子图的排列方式、把单栏图改成双栏图。
- 样式级编辑:统一线宽、改变配色主题、调整误差棒样式、调整字体大小。
- 内容级编辑:调整数据点筛选方式、突出显示某条曲线、去掉某个异常数据点。
不同类型意味着模型需要在代码里定位到不同的位置。文本编辑通常只需要找到字符串;风格编辑需要识别视觉元素与代码组的对应;内容编辑往往最危险,因为模型需要判断哪些数据必须保留,哪些数据是异常或冲突。
一个成熟的基准如果要称得上“comprehensive”,就应该把维度拆到这些细粒度,而不是只考察一种“改颜色”或“改字符串”的能力。
2.2 2TikZ:为什么选择 TikZ 而不是 SVG、PDF 或 Matplotlib
2TikZ在名字里已经写明了输出目标。为什么不直接用 Matplotlib 生成的 Python 代码?为什么不直接用 SVG?我认为有几个真实原因:
第一,TikZ 是科研出版环境里的一种常用描述语言,尤其期刊论文、学位论文、Beamer 幻灯片里,TikZ 的占有率很高。它和 LaTeX 排版天然兼容。
第二,TikZ 是“带逻辑”的矢量语言。一段 TikZ 通常由\begin{axis}、\addplot、坐标列表等组成。模型有机会通过代码里的语义结构区分不同元素,这是像素编辑很难做到的。
第三,TikZ 既有有限的对象集合,又有无限的自由度。坐标、单位、文字、循环、变量,它能表达的范围足够当测试面;而 SVG 标签更偏向底层图形属性,复用性没有 TikZ 高,生成风格也和科学论文写作的距离较远。
如果任务定义成“输入已有 TikZ 源文件 + 编辑指令,输出修改后的 TikZ 源文件”,这个 Edit2TikZ 就像一套直接依赖科研写作习惯的测试命题。
2.3 Benchmark:最难的不是题目,而是“怎么算答对”
把词尾落在 Benchmark,相当于承认一件事:图编辑如果只是拿来演示,很难证明模型真的有能力。只有写成有固定样本、固定描述、可重复验证的测试集,不同模型才拉得开差距。
但这里有个容易被忽略的坑:改 TikZ 代码的“标准答案”往往不唯一。
同一个“把标题改成 X”,有人可能用title={X}实现,有人可能用一个变量重新赋值。两种改法在最终渲染图里看起来一样。如果评估只看代码字符串是否相同,就会把“语义正确但写法不同”的答案误判为错误;如果只看渲染出来的像素是否一致,又容易忽略线性宽度、字体渲染差异等噪声。
所以在真正使用或参与这类基准时,大概率要接受一个现实:评估需要分层。先看代码能不能编译,再看渲染结果与参考图在结构上是否同义,再看目标区域是否改对了,最后才谈得上是否存在局部过改或科学含义的偏差。
3. 一个反复出现的难题:模型总是“改得多”或“改得少”
3.1 局部性:最容易失守的边界
我在尝试类“指令 + 代码”编辑实践时,最常观察到的模型行为不是不会改,而是会为了完成任务顺手重写很多东西。
比如用户想调节“曲线 B 的颜色”,模型直接把曲线 A、B、C 的样式都换成了新的色板,理由是“这样风格更统一”。在这个例子里,模型确实理解了指令,但没有守住局部性约束。
为什么局部性问题很难靠提示词解决?因为很多时候它不是理解问题,而是模型在计算输出时会倾向于生成一个“看似更完整”的版本。这不是“不会点改”,而是整体输出分布偏向重写。
要对付这个问题,任务设计上就得把“只改必要最小范围”放到评估标准里,并且用测试样本反复暴露这种漂移。实际使用中也可以做一些提示限制,比如明确写“不要重写未提及的部分”或“只输出发生变化的代码片段”,但即便这样仍然要人工复核。
3.2 从源码定位到目标代码,本质上是“代码检索+局部重写”
如果把人去改 TikZ 图的过程拆开,大约是这样几个动作:
- 看编辑指令,理解要改的视觉元素。
- 在 TikZ 源码里找到这个视觉元素对应的代码块。
- 判断这个代码块是独立节点,还是坐标轴的一部分,还是带数据文件的外部绘图。
- 只修改目标代码,尽量不碰其它段落。
- 编译检查,确认渲染结果和图里其它部分没有冲突。
大模型如果做这类任务,本质上做的也是同一件事:先做代码检索,再做局部重写。缺少的部分是“定位准确度”和“范围控制”。
所以在做小规模实验时,建议不要只看模型输出的 TikZ 能不能编译成功,而是先做一件事:把输出代码和输入代码做行级diff,看看改动到底发生在哪些行,是不是集中在预期区域内。如果改动行散布在整个文件,说明模型并没有真正理解指令边界。
3.3 细节差异,往往隐藏在编译和渲染层
还有一个在实际操作中更容易踩的坑:TikZ 图能不能编译成功,高度依赖宏包和编译选项。
一段 TikZ 可能使用了pgfplots,可能加载了arrows.meta、calc、positioning,甚至可能依赖中文字体配置。同一个输出代码,在你的环境里能编译,不代表在另一个环境里也能编译。
这意味着,如果我们要肉眼评估模型改得好不好,不能只看代码,一定要搭建一个稳定的编译流程。至少保证同一份 TikZ 代码能在同一个容器化环境里反复编译,这样才能把渲染结果拿来对照。否则会出现“看起来改了,但编译过不了”或者“我这能编译提交到期刊过不了”的局面。
4. 一个最小可跑的思路:先手动构造一对“原始图-编辑需求-期望结果”
4.1 在缺少官方数据时,可以用“自建小集”验证模型
从很多公开讨论和项目演进规律看,真正能推动我理解一个基准任务的方法,不是干等现成脚本,而是自己先构造 20 到 50 个极简样本。因为一个基准的难点通常躲在样本定义和评估定义里,不亲手做一批,不容易体会到。
这里的实操步骤可以是:
- 用 TikZ/pgfplots 画一张简单折线图,只包含一个坐标轴、两条曲线、一个图例。
- 为这张图写 5 条编辑需求:改标题、改变某条曲线的颜色、交换图例顺序、把曲线图改成柱状图、在图上增加一条水平参考线。
- 人工写出期望结果,尽量保证每次只动源码里的相关代码块。
- 把原始 TikZ 和编辑需求拼成提示,交给大模型生成结果。
- 对比模型输出和人工期望,记录三件事:能否编译、改动范围、渲染后是否符合需求。
这种小规模样本不需要官方评估脚本,也能很快暴露模型的典型错误模式。
4.2 一套更适合初步验证的提示结构
虽然不能为Edit2TikZ项目写出完整统一的提示模板,但按常见实践,可以给模型一个非常明确的上下文框。一个建议结构是这样:
你是一名科研插图编辑助手。 你需要修改下面这段 TikZ 代码,实现用户提出的编辑要求。 要求: - 不要改变未提及的图元、坐标、数据标签、图例和样式。 - 只返回修改后的完整 TikZ 代码,不输出额外解释。 - 输出代码必须能在 LaTeX 中正常编译。 【原始 TikZ 代码】 <这里是原始 TikZ 代码> 【编辑要求】 <这里是用户对图的具体修改>这个结构不是为了追求一句提示词解决所有问题,而是要告诉模型几件事:输入是什么、输出格式是什么、约束边界是什么、验证条件是什么。
实践里我还会多加一句:“如果编辑要求与 TikZ 代码中的结构不匹配,请说明无法定位的位置。”这句话能减少模型强行胡改的概率,虽然并不能完全防止,但至少让失败模式更容易被发现。
4.3 编译和渲染验证的链路
拿到模型输出后,千万不能只看格式化后的代码块,而是要走一遍下面的运行链路:
- 把生成的 TikZ 代码片段放回一个最小 LaTeX 文档里。
- 用
pdflatex或xelatex编译,确认没有报错。 - 如果编译失败,观察报错所在的宏包名和行号。
- 编译成功后,把 PDF 转成 PNG,和原始图放在同一张画布里,人眼对比。
- 用像素差异或边距信息做粗筛,但不要用它作为唯一判断。
这个链路里有几个很容易踩的坑:
- 模型输出的 TikZ 片段里可能带 Markdown 的代码框标记,需要先清理。
- 模型可能把
axis环境整个重写,导致编译成功但图明显变化。 - 外部编译环境缺少 TikZ 库,比如
pgfplots版本过低,会误判成“代码有问题”。
如果要做批量实验,我还建议自动记录三条日志:是否编译成功、改动行数、渲染后图片尺寸是否有变化。尺寸变化常常意味着模型改了图的比例或边界,但这未必是用户想要的。
4.4 一个较实用的三层检查表
为了避免评估过于主观,可以在人工比对时使用一套固定问题:
- 语义是否保留:原始图的核心数据点、坐标轴范围、单位是否还在。
- 指令是否完成:用户要改的目标确实发生改变,而不是只出现在文字描述里。
- 副作用是否失控:未提及区域的样式、顺序、标签有没有被修改。
把这三列放到一个表格里,标记“是 / 否 / 不确定”,比写一大段文字更方便对比不同模型。对工作范围推进而言,发现“这个模型改对了但副作用很大”和“这个模型没改但输出很完整”,其实是两种完全不同的能力缺失。
5. 这条基准为什么会带来认知变化
5.1 从“生成评测”到“编辑评测”,更接近科研真实状态
早前比较常见的文字到图生成任务,是把文本指令直接映射成一张图,模型是主要创造者。但科研场景中,绝大多数图不是从零画出来的,而是反复迭代出来的:先有一版草图,再根据实验数据、审稿意见、课题讨论不断微调。
如果把模型能力评测长期停留在“从零生成科学图”,容易给研究者造成一种错觉:好像一张图只要生成得好看就是好用。但实际上,在一篇论文中真正消耗时间的是版本迭代:把某条线的颜色改掉、把子图挪到另一个位置、把图例里的缩写写全、把坐标轴标签从“时间/s”改成“时间/min”。这种“编辑式”修改对模型提出的要求完全不同。
因此Edit2TikZ这类名字背后其实是想让大模型评测更靠近真实科研工作流。它量的是“工具是否在人的工作流里帮上忙”,而不是“模型能否自主创作一件新东西”。
5.2 对个人知识生产的启示:图版本管理会越来越重要
如果底层的图源是 TikZ,那科研图的“版本管理”可以像代码一样被跟踪。传统工作里,图改乱了只能重新画;但如果你的图本身就是一段 TikZ 代码,那你可以把每次编辑看成一个 commit,随时知道上一个版本在哪里,改动在哪里,发生了什么冲突。
这也是我认为这类基准长期价值所在:它培养的不是“模型能写 TikZ”,而是“模型能在已有代码上安全有序地做改动”。一旦这个能力被验证,它可以直接嵌入论文写作、实验记录、自动报告生成的工作流。开发者和研究者可能会从“重复打开画图工具反复摆弄”变成“把指令发给一个懂图代码的编辑器,再自己做最终审查”。
5.3 但它改变不了人的最终判断
需要明确边界:即使模型能把改图能力做到很高,最终对科学图负责的仍然是人类研究者。因为很多“修改”牵扯到不同实验条件下的数值表达、数据可信范围、图片对审稿结果的影响。这不是模型从指令表面能学到的。
也就是说,Edit2TikZ这类基准帮助解决的是“服从指令 + 局部修改 + 保证代码可编译”,但它不会替你判断哪些修改符合科学逻辑。工具能把执行效率提高,把人为错误减少,却不能替代人对科学表达的负责任判断。
6. 想在这个方向持续投入,我的几个判断
6.1 适合研究与不适合研究的地方
这个方向首先适合在如下场景中参与:
- 你长期使用 LaTeX/TikZ 编辑论文和报告。
- 你在做大模型的代码生成微调,需要更有结构性和语义性的测试集。
- 你关注代码能力评测,想把视觉编辑和代码生成连接起来。
- 你想做一个能直接服务科研写作的小工具,比如“用自然语言修改论文中的 TikZ 图”。
同样也要承认它不适合做什么:
- 想对高噪声位图做自由风格修复,这类需求更适合像素级模型。
- 如果用户没有 TikZ 原始源码,只有渲染好的图片或 PDF,任务会退化,因为需要先从视觉反推代码结构。
- 如果图的数据来源是外部 CSV 文件里的几千个点,TikZ 源码也只引用了文件路径,那修改时就还要先解决数据绑定问题。
6.2 如果去做,建议从“窄而深”开始
不要一开始就追求模型能改任意复杂“子图排列”或“配色系统”的任务。先从单轴单图、只改文字标签开始,把局部性约束测到稳定,再扩展到多曲线、多图、多语义组合。我给的最小路径是:
- 先跑通 10 个简单文本编辑样本。
- 记录编译失败率和人为过改率。
- 再增加 10 个样式编辑样本,观察模型是否能识别到
\addplot下的属性段。 - 最后才是内容级编辑,比如隐藏某条线段、改变图例对应文字。
- 每轮都回到人工比对,不要只依赖自动指标。
这套路径更像“工程试错”,但也是我认为真正理解一个 benchmark 的唯一方式。你不亲手试,很难知道模型到底是在“理解图结构”还是在“用上下文里的字符串猜答案”。
6.3 长期看,图与代码会走得更近
当你习惯了把每一张科研图都理解成一段可以编译、可以改写的 TikZ 源码,你就很难再回去用“对着 PDF 一帧帧改像素”的老办法。
这也是Edit2TikZ给我的最大启发:它表面上是一个自然语言编辑代码的基准,可能的实际问题却是“科研图形如何进入可编程、可追踪、可自动修改的工作流”。
一旦图的生成、编辑、版本管理都能以代码形式融入写作系统,科研插图的效率会提升得不是一点点。真正麻烦的也不再是“工具会不会写 TikZ”,而是“工具能不能在人的约束下只做该做的事”。一个编辑基准的核心价值,正在于持续测出后一个问题的短板。对想尝试这个方向的人来说,现在最值得做的不是马上寻找某个官方榜单,而是拿起一段你自己的 TikZ 图代码,写下一条真实修改需求,然后看看你会不会信任那个帮你改图的模型。