PHP空间也做LaTeX公式显示

4

Comments

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

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

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

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

1
2
3
<?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 似乎对兼容做得比较不错,因此可以直接用我编译的这个cgi (编译器 mingw gcc 3.1.1):mimetex.cgi (924KB)

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

1
2
Options +ExecCGI
AddHandler cgi-script cgi

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

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

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

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

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

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

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

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

4 Responses to “PHP空间也做LaTeX公式显示”

  1. 2009年4月22日 23:36 回复

    请教一下:我是在 WinXP 个人电脑上用 XAMPP 搭建了 apache 服务器,运行您提到的 complie.php 文件之后,没有生成 mimetex.cgi 文件。

    请问:在 Win 平台上如何编译生成这个 cgi 文件?

    谢谢!

  2. seatop· Says:
    2009年7月17日 13:28 回复

    编译时出现这个Warning: shell_exec() has been disabled for security reasons in /www/users/seatop.com.cn/mimetex/complie.php on line 2
    请问怎样解决啊!

    • upsuper Says:
      2009年7月17日 13:40 回复

      你的空间商不允许执行命令……而且可能禁止使用cgi……具体情况请咨询你的空间商。

  3. seatop· Says:
    2009年7月17日 13:30 回复

    直接在官方网站下载的cgi上传到网站上怎么用不起来?

Leave a Reply