tex.inc.php

サマリLaTeXのインストールなしでLaTeX数式を表示させるプラグイン
リビジョン1.0
対応バージョン1.4.7
投稿者abicky?
投稿日2010-04-18 (日) 10:41:04

概要

PukiWikiでTeXの数式を表示するためのプラグイン.
ref.inc.phpをベースに作成しました.なので強制的にGPLライセンスになるのかと思って一応GPLということにしておきます.

特徴

  • Google Chart APIを使用するため,サーバ側のインストール作業がほとんど不要(math2やmimetexとの比較)
  • ブラウザに依存しない(mathmlとの比較)
  • TeXの数式なので数式が綺麗(mathmlとの比較)
  • 数式画像をキャッシュするので2回目以降の表示が速い(jsmathとの比較)
  • オプションが豊富(math2, mimetex, jsmath, mathmlとの比較)

使い方

#tex($数式$ [,options] [,parameters])
&tex($数式$ [,options] [,parameters]);
options
  left: 左寄せ(デフォルト)
  center: 中央揃え
  right: 右寄せ
  around: 回り込み
  link: 元ファイルへのリンクを貼る
  url: Google Chart API のURLを表示する
  noimg: 画像を展開しない
  zoom: 縦横比を保持する(拡大率の小さい方に合わせる)
parameters
  WIDTHxHEIGHT: WIDTH px,HEIGHT pxにする  ※WIDTH, HEIGHT は数値
  NUM%: NUM%のサイズにする  ※NUM は数値
  #RRGGBB: 数式の色を16進数で指定(デフォルトは#000000)
  bg#RRGGBBAA: 背景色を16進数で指定.AAは不透過度(デフォルトは#ffffff00)
  TITLE: タイトルをTITLEにする

サンプル

こちらを御覧下さい

ダウンロード&インストール

  1. WIKIHOMEディレクトリにteximgディレクトリをパーミッション707で作成する
  2. こちらから最新版をダウンロードし,tex.inc.phpという名前でWIKIHOME/pluginディレクトリに保存する

数式を手軽に表示させる(PukiWiki 1.4.7のみで確認)

LaTeXのようにドルマークで挟んだり,\[ \]などで挟んだりすることで数式を書きたい場合は以下のような変更を加えることで実現できます.
※この記法でオプションは使えません

数式をドルマークで挟むことでインライン要素として表示させる

  • WIKIHOME/lib/make_link.phpを書き換える
    • InlineConverterクラスの$convertersを以下のように変更('TeX'を追加)
      $converters = array(
      	'plugin',        // Inline plugins
      	'TeX',    // LaTeX Mathematical Expression
      	'note',          // Footnotes
      	'url',           // URLs
      	'url_interwiki', // URLs (interwiki definition)
      	'mailto',        // mailto: URL schemes
      	'interwikiname', // InterWikiNames
      	'autolink',      // AutoLinks
      	'bracketname',   // BracketNames
      	'wikiname',      // WikiNames
      	'autolink_a',    // AutoLinks(alphabet)
      );
    • 以下の内容を適当なところに追加
      // LaTeX Mathematical Expression
      class Link_TeX extends Link_plugin
      {
      	 function Link_plugin($start)
      	 {
      		 parent::Link_plugin($start);
      	 }
      
      	 function get_pattern()
      	 {
      		 $this->pattern = '(?<!\\\\)\$((.+?))(?<!\\\\)\$';
      		 return $this->pattern;
      	 }
      
      	 function get_count()
      	 {
      		 return 2;
      	 }
      
      	 function set($arr, $page)
      	 {
      		 list($all, $this->plain, $this->param) = $this->splice($arr);
      
      		 $matches = array();
      		 return parent::setParam($page, 'tex', '', 'plugin');
      	 }
      }
  • 1行にドルマークを2つ表示させたい場合はInlineConverterクラスのconvert関数も書き換える
    $retval .= array_shift($arr) . array_shift($this->result);
      ↓
    $retval .= str_replace('\$', '$', array_shift($arr)) . array_shift($this->result);
    ※ドルマークを表示させる場合は\$と表記します

数式を\[ \]などで挟むことでブロック要素として表示させる

  • WIKIHOME/lib/convert_html.phpを書き換える
    • Bodyクラスのparse関数内で //Default の前に以下の内容を追加
      // LaTeX Mathematical Expression
      if (substr($line, 0, 2) == '\[') {
      	if (strpos($line, '\]') === false){
      		while (! empty($lines)) {
      			$next_line = preg_replace("/[\r\n]*$/", '', array_shift($lines));
      			$line .= $next_line;
      			if (strpos($next_line, '\]') !== false) break;
      		}
      	}
      	$this->last  = & $this->last->add(TeX($this, $line));
      	continue;
      } else if (substr($line, 0, 6) == '\begin'){
      	if (strpos($line, '\end') === false){
      		while (! empty($lines)) {
      			$next_line = preg_replace("/[\r\n]*$/", '', array_shift($lines));
      			$line .= $next_line;
      			if (strpos($line, '\end') !== false) break;
      		}				
      	}
      	$this->last  = & $this->last->add(TeX($this, $line));
      	continue;
      }
  • 以下の内容を適当なところに追加
    function & TeX(& $root, $text)
    {
    	if(exist_plugin_convert('tex'))
    		return new Div(array('', 'tex', $text));
    	else
    		return new Paragraph($text);
    }

不具合

  • URLエンコード後の数式の文字数が200を超えると画像を取得できない(Google Chart APIの仕様)
    ※\bm x は \mathbf{x} に変換されるなどの処理をしているので,使用者が書いた数式の文字数が200文字を超えなくても画像を取得できないことがあります.

コメント

不具合や感想などがあればこちらで投稿お願いします.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-04-18 (日) 11:16:10
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u6. HTML convert time: 0.198 sec.

OSDN