PHP 空间也做 LaTeX 公式显示

原来一直以为只有自己的机子安装了 LaTeX、dvips 等等这些软件才能显示 LaTeX 公式。

今天上网查找了一下,发现不是这样的,原来比较基本的 LAMP 空间也可以这样了,这完全得益于一个叫做 mimeTeX 的开源软件。虽然这个软件生成的没有 LaTeX 生成的漂亮,不过还是比 Word 的公式编辑器生成的漂亮,最重要的是可以在网站上使用!

要安装这个,有一个比较必要的前提,就是你的网站必须不能运行在 PHP 的安全模式下,还有就是网站必须允许是用 .htaccess 配置文件,否则可能不行……不是……是肯定不行……另外权限设置比较严格的服务器上注意把相应权限设置妥当。

如果服务器是 Linux 平台下的,首先,我们要下载这个软件,源代码可以点击这里下载:mimetex.zip。这里推荐解压后直接上传整个文件夹的代码上去,因为最好可以在服务器端编译,而非客户端编译好,否则平台可能不兼容。在解压出来的文件目录中新建一个 complie.php 文件,其中输入

<?php
    echo `cc -DAA mimetex.c gifsave.c -lm -o mimetex.cgi > cc1 2> cc2`;
?>

然后通过浏览器访问这个 PHP,再查看 cc1 和 cc2 文件。如果不出意外,cc1 和 cc2 应该都是没有内容的空文件。 接下来,把这个 mimetex.cgi 移动到你想要的文件夹,并给它加上执行权限(不然可能出现 500 错误)。

如果服务器是 Windows 的,因为 Windows 似乎对兼容做得比较不错,因此可以直接编译好放上去。

下面,在你安放 mimetex.cgi 的文件夹下新建一个 .htaccess 文件,并设置如下内容:

Options +ExecCGI
AddHandler cgi-script cgi

如果你不想让别人借你的服务器生成图片的话,还可以输入以下内容:

Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128

当然,这样你就只能在 PHP 中用 curl 访问了~虽然我也推荐这样做。

上面这样就可以了,然后如果要生成某个 LaTeX 的图片,只要访问 mimetex.cgi?你的公式 就可以了,如

mimetex.cgi?\sqrt{2}^2=2

这样,漂亮的 gif 图片就出来了。

最后再说说,我个人觉得,直接让客户端访问这个并不好,所以推荐加上权限控制,然后在 PHP 中是用 curl 获取,并做一次缓存。毕竟不管怎样,生成这个是要花费不少的 CPU,如果遇到大量公式的时候,应该会相当可怕……所以这种时候做一个缓存应该是很好的选择,毕竟那些 gif 都不大。这段代码就不写了,我想应该是很简单的~

说回来,如果认真看这个程序的 README 还会发现,如果加上编译参数 -DCACHEPATH=地址 就可以在 cgi 级别使用 MD5 Hash 的文件缓存。不过再想想,其实没什么必要,一个是用 PHP 控制缓存文件要更方便,同时考虑到文件系统在一个目录下文件多于 10000 个时会出现严重性能问题,最好使用多级目录来做缓存,不过看代码似乎没有多级缓存。除此之外,我想还有一些不错的方法可以做一些初级判重,这些用 PHP 实现会比改 cgi 要简单的多了~建议大家可以自己再多看看编译说明,似乎有不少有趣的编译参数~

Comments !

social