DeTikZify 是一个能把手绘草图或已有图形自动转成 TikZ 图形代码的开源工具,主要解决画高质量科学图表费时费力,以及重建没有保存语义信息的现有图表很麻烦的两个问题。

DeTikZify的核心功能

  • 根据草图或已有图形,自动生成带语义信息的 TikZ 图形程序;

  • 用基于 MCTS 的推理算法,不用额外训练就能反复优化结果;

  • 提供网页版操作界面(Web UI),也能通过编程接口调用全部功能(比如编译、渲染、保存 TikZ 图形)。

  • 模型和数据集都放在 Hugging Face Hub 上,其中 TikZero 模型有专门集合。不过 DaTikZ_v2 和 DaTikZ_v3 这两个数据集因为 arXiv 的许可限制,公开版本删了部分内容,但提供了脚本,用户可以自己重建完整版。

DeTikZify优势

  • 结果质量高:生成的 TikZ 程序能保留图表原本的语义信息,保证准确性和可读性;

  • 用起来高效:自动化生成图表,省去大量手动写和调 TikZ 代码的时间;

  • 使用灵活:支持多种输入方式(比如图片或文字描述),能适应不同场景。

DeTikZify安装和使用方法:

安装步骤:

  • 基础安装(Python 包):用 pip 装:pip install 'detikzify[legacy] @ git+链接'(如果只用 DeTikZify v2 模型,可以去掉 [legacy]);

  • 如果要运行项目里的示例,先克隆仓库,再用可编辑模式安装:git clone 链接,然后执行 pip install -e DeTikZify[examples];

  • 另外还需要安装完整的 TeX Live 2023、ghostscript 和 poppler(通过系统软件包管理器或其他方式装)。

使用方式:

可以通过命令行启动网页版界面:python -m detikzify.webui --light;

也能通过编程接口直接调用功能(比如编译、渲染、保存 TikZ 图形)。下面是具体例子:

根据图片生成 TikZ 程序:

from operator import itemgetter
from detikzify.model import load
from detikzify.infer import DetikzifyPipeline
image = "https://w.wiki/A7Cc"
pipeline = DetikzifyPipeline(*load(
    model_name_or_path="nllg/detikzify-v2-8b",
    device_map="auto",
    torch_dtype="bfloat16",
))
# generate a single TikZ program
fig = pipeline.sample(image=image)
# if it compiles, rasterize it and show it
if fig.is_rasterizable:
    fig.rasterize().show()
# run MCTS for 10 minutes and generate multiple TikZ programs
figs = set()
for score, fig in pipeline.simulate(image=image, timeout=600):
    figs.add((score, fig))
# save the best TikZ program
best = sorted(figs, key=itemgetter(0))[-1][1]
best.save("fig.tex")

根据文字描述生成 TikZ 程序:

from detikzify.model import load
from detikzify.infer import DetikzifyPipeline
caption = "A multi-layer perceptron with two hidden layers."
pipeline = DetikzifyPipeline(*load(
    model_name_or_path="nllg/tikzero-plus-10b",
    device_map="auto",
    torch_dtype="bfloat16",
))
# generate a single TikZ program
fig = pipeline.sample(text=caption)
# if it compiles, rasterize it and show it
if fig.is_rasterizable:
    fig.rasterize().show()

DeTikZify适合哪些人用?

  • 做研究的人:需要快速画出高质量科学图表;

  • 学生:需要绘制科学相关的图表;

  • 用 LaTeX 的人:想在 LaTeX 文档里插入高质量的图表。

相关链接

GitHub 仓库:https://github.com/potamides/DeTikZify

Hugging Face 模型页面:https://huggingface.co/nllg/detikzify-v2-8b

Hugging Face 数据集页面:https://huggingface.co/collections/nllg/detikzify-664460c521aa7c2880095a8b

体验试用:https://nllg-detikzify.hf.space/