手动搭建latex公式渲染服务器

codecogs是一个latex公式渲染服务,它根据get请求返回一个svg图片。例如:codecogs,这个服务的缺点是比较慢。

本文介绍ubuntu下搭建类似codecogs的公式渲染服务。

一、安装latex

sudo apt-get install latex
sudo apt-get install latex-cjk-chinese

二、latex命令介绍

latex命令用于把tex文件转换成pdf文件或者dvi文件。dvi是一种设备无关的可打印文件格式。
输入dvi按两次tab可以找到dvisvgm,此命令将dvi文件转为svg。

三、编写服务程序

使用flask编写服务,通过命令行的方式调用latex获取svg。在返回时需要注意两点:

  • 设置好content-type,否则客户端不知道你返回的是什么格式的图片
  • 跨域访问并不需要设置,因为加载的是静态资源

使用latex命令时需要注意:

  • documentclass必须是minimal,这样能够保证生成的文件尽量小。
  • dvisvgm --no-fonts --no-styles,把dvi转为svg时取消导出字体和格式,而只是简单导出一张图片,否则客户端找不到这些字体和格式。

TODO:

  • 添加缓存功能:可能没有必要
  • 添加统计功能:统计不同网站的请求次数
import os

from flask import Flask, request, Response

app = Flask(__name__)

file_id = 0
latex_dir = os.path.join(os.path.expanduser("~"), "latex-server")
if not os.path.exists(latex_dir):
    os.mkdir(latex_dir)

def gets(formula):
    global file_id
    file_id += 1
    tex_file, dvi_file, svg_file = [os.path.join(latex_dir, "{}.{}".format(file_id, file_type)) for file_type in "tex dvi svg".split()]
    open(tex_file.format(file_id), mode='w').write(r"""
\documentclass{minimal}
\begin{document}
$%s$
\end{document}
    """ % formula)
    os.system("latex --output-directory {} {}".format(latex_dir, tex_file))
    """
    no-fonts no-styles不带字体,c2,2表示横竖都缩放两倍
    """
    os.system("dvisvgm --no-fonts --no-styles -c2,2 -o {} {}".format(svg_file, dvi_file))
    svg = open(svg_file).read()
    for i in "tex dvi log aux svg".split():
        filename = os.path.join(latex_dir, "{}.{}".format(file_id, i))
        if os.path.exists(filename):
            os.remove(filename)
    return svg

@app.route("/render")
def render():
    formula = request.args['formula']
    print(formula)
    resp = gets(formula)
    return Response(response=resp, headers={
        "Access-Control-Allow-Origin": "*",
        "Content-Type": "image/svg+xml"
    })

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9988, debug=True)

四、LaTex 的 web 替代品及其存在问题

基于 HTML(svg)+CSS LaTex 渲染只实现了 Latex 非常少的一部分功能——公式渲染。

MathJax

MathJax 出现于 2011 年,发展至今已经有 6、7 个年头了。其特点是对数学公式的渲染支持度很高。对开发者来讲,其缺点是 js API 有点奇怪,渲染比较慢,好在支持服务器端渲染。MathJax 首先有个配置文件:

MathJax.Hub.Config({
  extensions: ["tex2jax.js"],
  jax: ["input/TeX", "output/SVG"],
  tex2jax: {
    inlineMath: [
      ['$', '$'],
      ["\\(", "\\)"],
    ],
    displayMath: [
      ['$$', '$$'],
      ["\\[", "\\]"]
    ],
    processEscapes: true
  },
  "SVG": {
    availableFonts: ["TeX"]
  }
});

然后将调用渲染API,转为美观的LaTex效果,如下。由于渲染很慢,所以渲染过程是一个异步执行的队列。

MathJax.Hub.Queue(['Typeset', MathJax.Hub]);

KaTex

相对于 MathJax, KaTex 是后起之秀,是可汗学院的公式渲染方案。API 设计,对前端工程师更加友好。KaTex 的特点是渲染很快,KaTex 的 API 是一个同步调用。

katex.render("c = \\pm\\sqrt{a^2 + b^2}", element);

KaTex 由于发展比较晚,大约 2013 年,对 LaTex 语法的支持程度可能不如 MathJax,比如不支持中文。
KaTex 也支持服务器端渲染。

var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}");
//=> <span class="katex">...</span>

MathQuill

跟 MathJax、KaTex 不同,MathQuill 是一个真正意义上的公式编辑器,一边输入一边渲染,输出可以是 Tex,但是对于复杂的公式,这种输入方式还是有很大的局限性,输入过程还是需要记住一些 LaTex 命令。

使用 MathJax、KaTex方案的共同问题是用HTML、CSS来渲染公式,非常冗长,如果采用了服务器端渲染,很容易超出数据库字段的长度限制,一个简单的公式,就会产生很多 HTML 结构。

参考资料

https://cloud.tencent.com/developer/article/1015883

原文地址:https://www.cnblogs.com/weiyinfu/p/10126152.html

时间: 2024-12-31 06:00:59

手动搭建latex公式渲染服务器的相关文章

手动搭建apache james邮件服务器,实现邮件功能

最近一直在搞邮件这块,本来我们邮件发送是用的腾讯免费的企业邮箱,邮件功能没有问题,但是由于邮件的限制,如下: 这些限制导致我们的部分客户是收不到邮件的,哪怕付费,这样的固定频率限制也是无法解决的,可以说我们国内的邮件厂商都是这样,而国外的却要收费. 那么问题来了,如何突破发送邮件的频率限制? 1. 成为该企业用户的白名单,也就是说有关系,让邮件厂商后台开放就行 2. 自己搭建邮件服务器,其实这个就是最实在的 周末花了两天时间搭建了邮件服务器,也走了不少弯路,那么咱们今天就来说说 我自己搭了两款,

Linux手动搭建LAMP环境

当你看到标题里的“手动搭建”,你是不是会想,难不成还有“自动搭建”?当然......不是,这里的“手动搭建”是指按部就班的搭建Apache.MySQL.PHP环境,是相对于集成软件包而言的.所以你是不是能够猜到,我后续还会整理一篇通过集成软件包搭建LAMP环境的文章呢? 其实关于LAMP环境,我到现在都没有用过,好多东西也都不懂为什么要这么做,当初只是心血来潮,想自己搭建一个wiki,所以才着手研究的.我不是搞PHP的,也不是搞后端的,额......是不是暴露的太多了,仅仅是为了搭建环境而搭建环

手动搭建HPC(高性能计算)

撰写日期:2017年6月13日 作者:翟江恒 一般情况下不会采用手动的方式安装HPC,而是采用集成自动化方案来部署hpc,但是这些集成方案都是集成了指定的操作系统发行版本,比如常见的HPC集成自动化方案rockets,到目前为止集成centos 6.6,如果需要把HPC安装其他linux发行版本环境里面,就不能使用集成自动化方案,必须使用手动安装方法,这篇博客就是叙述如何手动搭建HPC的.敬请往下看. 1.     HPC简介 2.     HPC架构 3.     ssh无密码访问 4.   

新人学PHP,认为手动搭建环境而苦恼吗?这篇文章告诉你多简单!

本教程适用于初学PHP,想了解手动搭建PHP环境的童鞋. 一键环境和高手勿喷. 本教程以下列版本软件为例: 所需软件目录 我在这里的目录结构是(个人习惯) 安装与配置 apache 双击安装Apache 这里我们选择第一个,然后点击 Next. 这里随便填一个域名,随便填一个 email 就可以了. 然后选择 默认占用 80 端口就 OK 了点击 Next. 点击 Next. 这里选择安装路径 然后点击intall 正在安装中 安装完成 右下角这里是绿色的表示成功了! 这时我们在地址栏里输入 l

php 手动搭建环境

php手动搭建环境有好多种组合,版本号不一致,会导致搭建失败. 我搭建的组合是: php5.6+MySQL5.6+Apache2.4的组合. 一.PHP语言包下载 首先从官网上下载php5.6 http://windows.php.net/download#php-5.6 选择完整版下载: 二. Apache服务器下载 首先从官网上下载Apache2.4  http://httpd.apache.org/download.cgi 进入第二个界面,选择第二个选项: 根据电脑的不同,选择相应的位数:

React 系列文章(1): npm 手动搭建React 运行实例 (新手必看)

摘 要 刚接触React 开发, 在摸索中构建react 运行环境,总会遇到各种坑:本文,将用最短时间解决webpack+react 环境搭建问题. 1.如果你还没有React基础 看这里. 2.如果不知道webpack是啥?请 看这里. 3.如果你还没有装npm 看这里. 目 录 一.webpack+react 运行实例. 二.webpack 运行环境配置分析. 三.如何手动搭建一个webpack+react 运行环境. 一.webpack+react 运行实例 1.实例代码 源代码下载地址:

[翻译]用 Puppet 搭建易管理的服务器基础架构(3)

我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第三部分. 本文由 伯乐在线 - Wing 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:Manuel Kiessling.欢迎加入翻译组. <用 Puppet 搭建易管理的服务器基础架构(1)> <用 Puppet 搭建易管理的服务器基础架构(2)> 关于 在<用 Puppet 搭建易管理的服务器基础架构(2)>中,我们在 Puppet master上编写了第一个非常简单的清单,来对puppetcl

手动搭建php环境

php手动搭建环境有好多种组合,版本号不一致,会导致搭建失败. 我搭建的组合是: php5.6+MySQL5.6+Apache2.4的组合. 一.PHP语言包下载 首先从官网上下载php5.6 http://windows.php.net/download#php-5.6 选择完整版下载: 二. Apache服务器下载 首先从官网上下载Apache2.4  http://httpd.apache.org/download.cgi 进入第二个界面,选择第二个选项: 根据电脑的不同,选择相应的位数:

手动搭建I/O网络通信框架2:BIO编程模型实现群聊

第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 在第一章中运用Socket和ServerSocket简单的实现了网络通信.这一章,利用BIO编程模型进行升级改造,实现群聊聊天室. 如图:当一个客户端请求进来时,接收器会为这个客户端分配一个工作线程,这个工作线程专职处理客户端的操作.在上一章中,服务器接收到客户端请求后就跑去专门服务这个客户端了,所以当其他请求进来时,是处理不到的. 看到这个图,很容易就会想到线程池,BIO是一个相对简单的模型,实现它