开源,自由,平等,共享,包容,沟通

2008年12月29日星期一

mimeTeX 快速开始

 
(针对 mimeTeX 版本 1.70)





点击

  完整的 mimeTeX 手册
  下载 mimeTeX
  更多范例...

公告

  如果 LaTeX 已经安装在你的服务器上,请参阅 mathTeX,mimeTeX 是它的继承者。
  mathTeX 是基于真正的 LaTeX,并且比 mimeTeX 渲染更高清的图像。
  如果 LaTeX 在你的服务器上不可用,请继续使用 mimeTex。

目录

  (a) 介绍
  (b) 快速开始
  (c) 范例
  (d) 快速建立
  (e) GPL 许可

相关页面

  LaTeX 指南
  mimeTeX 修改日志
  mimeTeX 手册

快速开始摘要

  安装

    下载 mimetex.zip 然后输入 unzip mimetex.zip 和 cc -DAA mimetex.c gifsave.c -lm -o mimetex.cgi。
    现在只需要 mv mimetex.cgi 到你的 cgi-bin/ 目录,设置必要的权限,即可。

  用法

    想要查看图像:



    只需要写入:

<img src="/cgi-bin/mimetex.cgi?x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}">

(a) 介绍

  mimeTeX 基于 GPL 许可协议,让你很容易地嵌入 LaTeX 数学公式到你的页面。
  它解析 LaTeX 数学表达式,并立即发送出相应的 gif 图像,这要优于 TeX dvi。
  并且 mimeTeX 是一个完全分离出来的小程序,它不会以任何方式使用 TeX 及其字体。
  它仅仅是一个 cgi,你可以把它放在 cgi-bin/ 目录,并不需要其它的依靠。
  因此,mimeTeX 非常易于安装。
  并且使用同样也很简单。
  只需要放置一个 HTML <img /> 标签在你想要看见相应 LaTeX 表达式的文档中的位置上。
  例如

<img src="../cgi-bin/mimetex.cgi?f(x)=\int_{-\infty}^xe^{-t^2}dt" alt="" border=0 align=middle>

会飞一样的立即产生相应的 gif 图像,在你放置 <img /> 标签的位置上显示



图像。
  mimeTeX 并不需要中间件 dvi 到 gif 的转换,当然也不会针对每个表达式创建分开的 gif 图像。
  但是如果你需要缓存图像,请查阅 mimeTeX 的 -DCACHEPATH=\"path/\" 编译选项。

mimeTeX 插件

  这里没有固定的需要像上面插图那样去重复书写笨重的 <img /> 标签。
  你可以写上自定义的标签,或者为 mimeTeX 写上封装了的脚本来简单地进行标记。

  例如,下面的 JavaScript 代码片段(基于 mathtran 的 mathtran_img.js)让你只需要键入 <img alt="mimetex:c=\sqrt{a^2+b^2}" />,就能在你想要看到的地方显示



图片,代码如下:

<script type="text/javascript">
<!--
// Create a namespace to hold variables and functions
mimetex = new Object();
// Change this to use your server
mimetex.imgSrc = "http://www.yourdomain.com/cgi-bin/mimetex.cgi?";
// Transform the whole document: add src to each img with
// alt text starting with "mimetex:", unless img already has a src.
mimetex.init = function () {
if (! document.getElementsByTagName) return;
var objs = document.getElementsByTagName("img");
var len = objs.length;
for (i=0; i<len; i++) {
var img = objs[i];
if (img.alt.substring(0,8) == 'mimetex:')
if (!img.src) {
var tex_src = img.alt.substring(8);
img.src = mimetex.imgSrc + encodeURIComponent(tex_src);
// Append TEX to the class of the IMG.
img.className +=' tex'; }
}
mimetex.hideElementById("mimetex.error"); }
// Utility function
mimetex.hideElementById = function (id) {
var obj = document.getElementById(id);
if (obj) obj.style.display = 'none'; }
// resolve a cross-browser issue (see CBS events)
mimetex.addEvent = function (obj, evType, fn, useCapture) {
if (obj.addEventListener) { //For Mozilla.
obj.addEventListener(evType, fn, useCapture);
return true; }
else if (obj.attachEvent) { //For Internet Explorer.
var r = obj.attachEvent("on"+evType, fn);
return r; }
}
// Initialize after entire document is loaded
mimetex.addEvent(window, 'load', mimetex.init, false);
-->
</script>

  告示牌、Wiki 等,也能够通过短小的脚本合成 mimeTeX 图像。
  例如,如果你使用 phpBB2,Jameson 贡献了下面典型的单行模板,让你键入 [tex]c=\sqrt{a^2+b^2}[/tex] 以获得同上面插图一样的



图像,代码如下:

#--------[open]-----------------------------------------------------
/includes/bbcode.php
#--------[find]-----------------------------------------------------
// Remove our padding from the string..
#--------[before, add]----------------------------------------------
$text = preg_replace('/\[tex\](.*?)\[\/tex\]/ie', "'<img src=\"/cgi-bin/mimetex.cgi?'.rawurlencode('$1').'\" align=\"middle\" />'", $text);

  如果你使用 phpBB3,模式甚至是不需要的。
  仅仅从管理员控制面板上点击相应的按钮,然后添加自定义的 BBCode 代码 [tex]{TEXT}[/tex],这些代码将被 HTML 替换为 <img src="/cgi-bin/mimetex.cgi?{TEXT}" align=middle />。

  类似的,PmWiki 也有 mimeTeX 插件,它让你只输入 {$f(x)=\int_{\infty}^xe^{-t^2}dt$} 来获得与上面相同的图像。
  其它一些包也有类似的 mimeTeX 插件,包括:

PackagePlugin
PmWikimimeTeX plugin
WikimediamimeTeX alternative
PunBBmimeTeX plugin
Movable TypemimeTeX plugin
WordPressmimeTeX plugin
JoomlamimeTeX plugin
MambomimeTeX bot

  注意

    如果你为 mimeTeX 编写属于自己的插件,请在编写 PHP 代码时不要使用 system() 函数,或其它任何外壳转码机制,只需要缓存图像即可。
    使用 mimeTeX 的 -DCACHEPATH=\"path/\" 编译选项来替代。
    system() 函数会提高安全问题,无论是真的还是大意使用,或者是因为系统管理员的意识。
    总之,我已经收到了很多电子邮件,由于系统管理员的安全意识,不必要的 system() 函数调用被禁止了,所以人们无法使用 mimeTeX。
    若 mimeTeX 按照上面的插图使用,自身只会有很小的风险,但是你自己需要对围绕它编写的插件或封装的脚本负责。

竖直对齐

  一个像这样的



图像看起来没有同样的



图像好,那是与它周围的文字和垂直对齐有关。
  与一些 HTTP 头字段一起,mimeTeX 也发送一个特别的 Vertical-Align:-nn 头字段,其中 -nn 是像素值(通常是如图所示的负值),它是 <img /> 标签中 style="Vertical-Align:-nn px" 属性所必须的,被用来渲染表达式。

  但是 mimeTeX 特殊的 Vertical-Align: 头字段是不被你的浏览器承认的,浏览器会忽略它。
  你不得不获取头字段,解释它,并且写出相应的 <img /> 标签。
  要完成这一切,可能的方式是使用脚本语言。
  本页面使用如下相当幼稚的 PHP 代码:

<?php
$mimetexurl = "http://www.yourdomain.com/cgi-bin/mimetex.cgi?";
function verticalalign( $expression ) {
global $mimetexurl;
// note: curl_init() stops at the first whitespace char in $url argument
$expression = ereg_replace(" ","~",$expression); // so remove whitespace
$url = $mimetexurl . $expression;
$valign = "0";
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HEADER, true );
$gif = curl_exec( $ch );
$errno = curl_errno( $ch );
curl_close( $ch );
if ( $errno == 0 ) {
$fields = explode("Vertical-Align:",$gif);
$vfield = trim($fields[1]);
$fldlen = strspn($vfield,"+-0123456789");
$valign = substr($vfield,0,$fldlen); }
return $valign;
}
function mimetextag( $expression ) {
global $mimetexurl;
$valign = verticalalign($expression);
$url = $mimetexurl . $expression;
echo ' <img src="',$url,'" ';
echo ' style="Vertical-Align:',$valign,'px" ';
echo ' alt="" border=0>', "\n";
}
?>

  现在,你可以在你想要看到图像



的地方写上代码

<?php mimetextag('\frac12\left(a^2+b^2\right)'); ?>

并正确地对齐。
  该代码两次调用 mimeTeX 来渲染表达式,一次是获取 Vertical-Align: 头字段来建立 <img /> 标签,接着再次渲染该标签。
  如果你是一个非常好的 PHP 程序员并且写了更好的代码,请将代码副本发送到我的电子邮件。

  如果你使用 mimeTeX 的 -DCACHEPATH=\"path/\" 编译选项,请以 % 开头作为 path/ 的前缀,并写出 -DCACHEPATH=\"%path/\" 来代替。
  开头的 % 将不会成为你缓存目录 path/ 的一部分,但是它会给 mimeTeX 发送信号,与每张图像一起缓存头字段。
  否则,Vertical-Align: 信息将会丢失,并且试图对齐缓冲的图像会失败。

不同的解决方案




原版英文:http://www.forkosh.dreamhost.com/source_mimetex.html
 

没有评论: