latex2svgAPI
一个简单的Python脚本,允许用户通过API编译LaTeX并获取SVG输出。
github仓库:https://github.com/Lucas2011wastaken/latex2svgAPI
给我个star吧求你啦(。・ω・。)
有什么问题欢迎到github上提交issues,也欢迎PR!
推荐服务器平台:Linux
注意: 因其快速的LaTeX编译速度
使用的包:chemfig, mhchem, ctex, tikz(可根据需求添加)
功能
使用原生LaTeX环境编译
通过调用预先安装的LaTeX环境(默认使用XeLaTeX),将返回最"正宗"的LaTeX输出,支持tikz
、chemfig
等宏包。
同时会提供详细的错误输出,方便用户修正拼写错误。
中文支持
支持中文字符,只需正确放置在LaTeX环境中。例如:$\text{中文}$
精准可调的自适应边缘裁剪
通过使用Standalone文档类,自动去除白边。您也可以通过border=
参数自定义边距。
宏定义支持
当引入某些宏定义时,可能需要二次编译。您可以通过设置twicecompile=true
实现。
高级缓存
为特定用户提供专属缓存区。通过指定superiorcacheid
不能包括非法字符(i.e. ),系统会自动保存最近一次成功的编译结果。当用户再次请求完全相同的编译内容(即相同的superiorcacheid
)时,将直接返回缓存结果。
高级缓存支持便捷的管理功能(列表查看、删除等)。
superiorcacheid
不能包括非法字符(i.e. /?.\@#$&()|:*;<>"
)
你可以在不泄露token的前提下通过每个superiorcache的UID来访问它们,另见"/superiorcache" 接口
用户控制
通过在user.json
中配置,可以为特定用户开启API访问,并限制使用次数。
若用户在user.json
中被配置为高级用户,该用户将拥有专属缓存区,SVG输出会被特别缓存。当用户使用相同superiorcacheid
再次调用时,API将直接返回缓存结果以优化延迟。
API调用说明
端口:443
"/"
:
请求方法:GET
参数 | 类型 | 说明 |
---|---|---|
token |
str | 用户标识字符串,需在user.json 中配置 |
latex |
str | (可选)需要编译的代码,注意检查是否需要使用$ 包裹(如\LaTeX 无需包裹),默认值为\LaTeX |
border |
float | (可选)控制输出边距,默认0。例如border=5.0 |
twicecompile |
bool | (可选)需要二次编译时使用(如宏定义、聚合物等情况),默认False |
superiorcacheid |
str | (可选)用于指定高级缓存的唯一标识名(下方有详细说明) |
成功:
latexout.svg
失败:
{"error": "Unauthorised"}
: 无效token,请检查user.json
配置{"error": "InsufficientUsage"}
: 使用次数已耗尽,请修改user.json
中的maxusage
{"error": "LaTeXCompileFault"}
: LaTeX语法错误,下方附具体错误信息{"error": "File not found"}
: 找不到SVG文件,请检查pdf2svg安装
示例
https://latex2svg.api.lucas2011.top/?token=gzgz&twicecompile=true&latex=$ \ce{Z }\left[\chemfig{[,0.6] W(-[:120]M)(-[4]M)(-[:-120]M)-[@{left,0.5}:-30,0.8]W(-[2]M)(-[6]M)-[@{right,0.5}:30,0.8]X-[2]Y(=[0]X)(=[4]X)-[2]X}\right]^- \polymerdelim[delimiters={()},height=2pt, depth=5pt, indice=n]{left}{right} $
结果:
https://latex2svg.api.lucas2011.top/?token=gzgz
结果:
https://latex2svg.api.lucas2011.top/?token=gzgz&superiorcacheid=benzene
结果:
除非你知道自己在做什么,否则不建议使用此类方式。 服务器将返回ID为"benzene"的高级缓存(若存在),否则返回默认编译结果:
"/superiorcache"
接口
用查询参数调用以管理高级缓存,用路径参数可以通过UID方式来访问高级缓存。
查询参数
请求方法:GET
参数 | 类型 | 说明 |
---|---|---|
token |
str | 用户标识字符串 |
action |
str | 操作类型:list (列出)或delete (删除) |
成功响应:action=list
以网页形式列出所有高级缓存
成功响应:action=delete
删除指定缓存并返回:{"success": "FileDeleted example.svg"}
失败响应:
{"error": "Unauthorised"}
: 无效令牌{"error": "InsufficientUsage"}
: 使用次数已耗尽{"error": "InvalidAction"}
: 不支持的操作类型{"error": "DeletionFailed"}
: 删除失败(可能因权限问题){"error": "FileNotFound"}
: 指定缓存不存在
路径参数
通过传入UID来访问你的高级缓存,举个例子:
https://www.example.com:4000/superiorcache/d2b521cdad6799c342414a76eb1f06eb.svg
其中,d2b521cdad6799c342414a76eb1f06eb
是该SVG的UID,你可以在SVG列表中很轻松的找到(请把gzgz替换成你自己的token):
https://www.example.com:4000/superiorcache?token=gzgz&action=list
部署指南
配置user.json文件,示例:
{
"gzgz": {
"currentusage": 49,
"maxusage": -1,
"superior": true
}
}
("gzgz"为token)
运行服务:
python3 main.py
尝试一下吧
测试用token:gzgz
(有限额,别老玩儿)
用于演示的gzgz
的superiorcache会被定期删除。
下面我简单喵两句:
这次的演示服务器是ipv6 only(问就是便宜),所以支持ipv6的人直接用 https://latex2svg.api.lucas2011.top/ 就可以了;
而对于不支持ipv6的人,我把流量走cloudflare过了一遍(相当于反向代理)使其支持了ipv4/ipv6双栈:https://32767.xyz/ 。很明显,这种迂回的方法就会慢一些,所以推荐有ipv6的推荐直接用第一种。
以下是一个延迟测试:
![延迟测试]()
查看图片