22 Nov 2007

land.to上のMediaWikiでTeXを使えるようにする

通常MediaWiki上で数式を扱う場合は、texvcをインストールし、texの記法をプログラムが解釈し、数式の画像を表示させます。しかしレンタルサーバでMediaWikiを運用している場合、texvcのインストールを自由にできない場合も多いと思います。mimetexというプログラムを使うことで、レンタルサーバでも数式を扱えるようになります。僕はland.toサーバーでWikiMediaを使っているので、land.toサーバーにmimetexをインストールする手順を紹介します。

参考サイト

Mimetex alternative


プログラムのダウンロード

http://www.forkosh.dreamhost.com/mimetex.exe/

ここから適切なプログラムをダウンロードします。land.toのサーバーはFreeBSDなのでfreebsdディレクトリのmimetex.zipを選べば良いでしょう。


サーバへアップロード

落としたファイルを展開し、"mimetex.cgi"を

public_html/cgi-bin/

にアップロードします。パーミッションは755に設定します。


mimetex.phpを作成

mimetex.phpというファイルを作り、MediaWikiをインストールしたディレクトリの下のextensionsフォルダにアップロードします。mimetex.phpの内容は以下のとおり。



$wgExtensionFunctions[] = "MimetexExtension";

function MimetexExtension() {
    global $wgParser;
    # register the extension with the WikiText parser
    # the first parameter is the name of the new tag.
    # In this case it defines the tag  ... 
    # the second parameter is the callback function for
    # processing the text between the tags
    $wgParser->setHook( "tex", "render_Mimetex" );
}

/**
* Renders $text in Mimetex
*/
 
function render_Mimetex($input, $argv, $parser = null) {

  if (!$parser) $parser =& $GLOBALS['wgParser'];
  // $img_url is the url the mimetex will be sent to.
  // IMPORTANT!! The URL below should be the link to YOUR mimetex.cgi if possible
  $img_url = "http://www.forkosh.dreamhost.com/mimetex.cgi?".$input;
        
  // Sets the output of the tex tag using the url from above, and the input as
  // the Alt text.  It's important to note that there is no error output added yet.
  $output = "$img_url\" alt= \"$input\" />";

  return $output;
}
?>

localsettings.phpの修正

require("extensions/mimetex.php");

この一文をlocalsettings.phpの最後の行に追加します。


editpage.phpの修正

通常MediaWiki上で数式を扱う場合は、タグを使いますが、mimetexはタグ間の記述を解釈します。編集画面もmathボタンを押すと通常はタグが出るんですが、これをタグに変更します。

inludesディレクトリのeditpage.phpから、

array(  'image' =>'button_math.png',
        'open'  =>   "<math>",
        'close' =>   "<\\/math>",
        'sample'=>   wfMsg('math_sample'),
        'tip'   =>   wfMsg('math_tip'),
        'key'   =>   'C'

という部分を探します。openとcloseの中身を次のように変更します。

array(  'image' =>'button_math.png',
        'open'  =>   "\\<tex\\>",
        'close' =>   "\\tex\\>",
        'sample'=>   wfMsg('math_sample'),
        'tip'   =>   wfMsg('math_tip'),
        'key'   =>   'C'

以上で完了です。