乳胶数学渲染服务器。

texoid的Python项目详细描述


纹理

python服务器,用于将乳胶数学渲染为svg和png。 它非常轻巧,非常适合将乳胶文档嵌入到网页中,而无需亲自渲染文档。

安装

texoid的设置和使用非常简单。

$ pip install texoid

texoid使用^{},这是一个Docker图像,用于将LaTex文档安全地转换为SVG和PNG,而不会使系统暴露于恶意的LaTex代码中。与texboxinstall Docker一起使用texoid。

或者,texoid可以直接使用latex将文档呈现为dvi格式,dvisvgm转换为svg,imagemagick将svg转换为png。在一个典型的debian或ubuntu机器上,您可以使用:

$ apt-get install texlive-latex-base texlive-binaries imagemagick

运行texoid

有Docker

要使用docker运行texoid,只需对docker组中的用户运行以下命令:

$ texoid --port=<port> --docker

这将自动提取最新的texbox图像并开始使用它。

没有docker

要在不使用Docker的情况下启动Texoid,请使用:

$ LATEX_BIN=<path to latex> DVISVGM_BIN=<path to dvisvgm> CONVERT_BIN=<path to convert> texoid --port=<port>

如果这三个可执行文件都存在于/usr/bin中,则不需要环境变量。这里,convert指的是imagemagick的convert工具。

使用texoid

texoid希望post body包含要呈现的乳胶文档。您应该使用适当的Content-Type发送请求,例如text/plainapplication/x-tex,或text/x-tex。不要使用application/x-www-form-urlencoded

texoid还有一个遗留api。这个api使用application/x-www-form-urlencoded作为Content-Type,并发送在q字段中编码的乳胶代码表单。

响应

响应将始终包含一个布尔字段success

如果successtrue

  • svg将包含呈现文档的svg源
  • png将包含base64编码的二进制png文件
  • meta将是包含两个条目的dict:
    • width,呈现文档的宽度(像素)
    • height,呈现文档的高度,同样以像素为单位
    • 这些参数是生成的svg/png的大小,以便在网页中正确显示

如果successfalse,则响应将包含一个带乳胶错误输出的error字段。

示例

在这些示例中,假设texoid服务器在端口8888的localhost上运行。我们将呈现一个简单的乳胶文档:

\documentclass{standalone}\begin{document}$E=mc^2$\end{document}

渲染成功
$ curl -H 'Content-Type: text/plain' --data-raw '\documentclass{standalone}\begin{document}$E=mc^2$\end{document}' localhost:8888
{"success": true, "svg": "<?xml version='1.0'?><svg....</svg>", "png": "iVBORw0KGgoA....RK5CYII=", "meta": {"width": "48", "height": "10"}}

格式错误的请求
$ curl -H 'Content-Type: text/plain' --data 'malformed' localhost:8888
{"success": false, "error": "This is pdfTeX, Version 3.14159265-2.6-1.40.15...LaTeX Error: Missing \\begin{document}..."}

就这样!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java MenuInflater究竟是如何工作的?   用Java为每个循环查找一个元素   从1.3.2版开始,central maven中缺少java Springldap jar   多维java数组问题   java如何在StringProperty和组合框SelectedItemProperty之间进行双向绑定   java复制DynaBean的有效方法   ios Firestore分页数据+快照侦听器   java边界布局。该中心不与JPanel合作   C#和Java中的加密/解密   java List<String>List=newlinkedlist<>()与List List=newlinkedlist<String>()有什么区别?   java Android应用程序,包含传统和SL4A部分   java无法调用PowerMockito。@BeforeTest中的mockStatic   java My list viw未显示(Android Studio)   如何建立网络。基于java的xml在spring网页上的应用   java为Android设置按钮   如何在java中使用hashmap删除重复的数组元素   ssl Soundcloud JAVA api包装器:SSLPeerUnverifiedException