tex.inc.php

概要

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

特徴

  • Google Chart APIを使用するため,サーバ側のインストール作業がほとんど不要(math2やmimetexとの比較)
  • ブラウザに依存しない(mathmlとの比較)
  • TeXの数式なので数式が綺麗(mathmlとの比較)
  • API経由で取得した数式画像をサーバ側にキャッシュするので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にする

サンプル

#tex($p(\bm t|\bm x, \bm w, \beta)=\prod_{n=1}^N \mathcal N(t_n|f(x_n, \bm w), \beta^{-1})$)
p(\bm t|\bm x, \bm w, \beta)=\prod_{n=1}^N \mathcal N(t_n|f(x_n, \bm w), \beta^{-1})

オプションやパラメータがなければドルマークで括らなくても大丈夫です

#tex(p(\bm t|\bm x, \bm w, \beta)=\prod_{n=1}^N \mathcal N(t_n|f(x_n, \bm w), \beta^{-1}))
p(\bm t|\bm x, \bm w, \beta)=\prod_{n=1}^N \mathcal N(t_n|f(x_n, \bm w), \beta^{-1})

Google Chart APIで対応している表現なら使用可能です

#tex(\begin{eqnarray} f(x) &=& (a+b)^2 \\ &=& a^2+2ab+b^2 \end{eqnarray})
\begin{eqnarray} f(x) &=& (a+b)^2 \\ &=& a^2+2ab+b^2 \end{eqnarray}

※Google Chart API だと \bm が使えませんが,\bm を \mathbf に勝手に変換してくれます
※Google Chart API だと \mathbf xx は \mathbf{xx}と解釈されますが,\mathbf{x}x に勝手に変換してくれます

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

  1. WIKIHOMEディレクトリにteximgディレクトリをパーミッション707で作成する
  2. 以下のファイルから最新版をダウンロードし,tex.inc.phpという名前でWIKIHOME/pluginディレクトリに保存する
  3. プロキシを通さないとWebにアクセスできない場合はここを参考に$use_proxyを1にしてサーバとポートの設定をする
  • filetex.inc.php.20110203
    変更点
    • \mboxを使用した際に\mboxの中身が消えるバグを修正しました
    • 余分な空白の削除で改行の後の空白が削除されないバグを修正しました
  • filetex.inc.php.20101123
    変更点
    • APIの字数制限にかかった場合に省略できるものを省略するようにしました
      詳しくはこちら
    • 余分な空白の削除にバグがあったのを修正しました
  • filetex.inc.php.20100925
    変更点
    • プロキシサーバで認証が必要な場合のバグを修正しました
    • 余分な空白の削除が甘かったので (\alpha = が\alpha=にならないなど) 修正しました
  • filetex.inc.php.20100923
    変更点
    • プロキシに対応しました
    • 以前に比べて適切なエラーメッセージを表示するようになりました
    • APIを叩く際に数式の余分な空白を削除するようにしました(少しは文字数制限にかかりにくくなるはず!)
    • 数式の最後にカンマがある場合,ブロック要素だと削除されるバグを修正しました
  • filetex.inc.php.20100425
    変更点
    • cURLモジュールが無効なホストで起きるバグを修正しました(hyagniさんからのご指摘)
  • filetex.inc.php.20100418
    変更点
    • テキストの色や背景色のデフォルト値を指定できるようにしました
  • filetex.inc.php.20100411

※PHPのcURLモジュールが無効で,かつallow_url_fopenがoffになっている場合はどちらかを有効にしてください
(ほとんどの環境ではどちらかは有効になっていると思います.特に後者は.)

数式を手軽に表示させる(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);
    ※ドルマークを表示させる場合は\$と表記します
  • サンプル
    2013/2/17 追記: こちらの PukiWiki では mathjax.inc.php に移行したので以下に表示されているのは mathjax.inc.php によって変換された数式です。
    学習データ$(\bm t,\bm x)$に対して多項式関数$f(x, \bm w)$を求める
    学習データ\( (\bm t,\bm x) \)に対して多項式関数\( f(x, \bm w) \)を求める

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

  • 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);
    }
  • サンプル
    2013/2/17 追記: こちらの PukiWiki では mathjax.inc.php に移行したので以下に表示されているのは mathjax.inc.php によって変換された数式です。
    \[
     p(\bm t|\bm x, \bm w, \beta)=\prod_{n=1}^N \mathcal N(t_n|f(x_n, \bm w), \beta^{-1})
    \]
    \[ p(\bm t|\bm x, \bm w, \beta)=\prod_{n=1}^N \mathcal N(t_n|f(x_n, \bm w), \beta^{-1}) \]
    \begin{eqnarray}
     f(x) &=& (a+b)^2 \\
          &=& a^2+2ab+b^2
    \end{eqnarray}
    \begin{eqnarray} f(x) &=& (a+b)^2 \\ &=& a^2+2ab+b^2 \end{eqnarray}

不具合

  • URLエンコード後の数式の文字数が200を超えると画像を取得できない(Google Chart APIの仕様)
    ※\bm x は \mathbf{x} に変換されるなどの処理をしているので,使用者が書いた数式の文字数が200文字を超えなくても画像を取得できないことがあります.
    ※スペースも文字数としてカウントされますが,不必要なスペースを削除してから画像を取得しにいくので,見やすいようにスペースを使っても文字数上問題ありません

添付ファイル: filetex.inc.php.20110203 1100件 [詳細] filetex.inc.php.20101123 724件 [詳細] filetex.inc.php.20100925 547件 [詳細] filetex.inc.php.20100923 487件 [詳細] filetex.inc.php.20100425 753件 [詳細] filetex.inc.php.20100418 542件 [詳細] fileconvert_html.php 833件 [詳細] filemake_link.php 823件 [詳細] filetex.inc.php.20100411 704件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-24 (土) 05:20:11 (2771d)