mathTeX.cgi のキャッシュ

LaTeX 数式の表示は、サーバに latex と dvipng の実行ファイル( TeX Live 2010 )を入れ、mathTeX の CGI から呼び出しています。(一部は mimeTeX)

昨日気がついたのですが、このサイトのところどころで mathTeX のエラー(7) が発生しています。

エラーメッセージ ☞ (7) Can't run latex program... mathtex.cgi

(7) Can’t run latex program:
check -DLATEX=\”path\”, etc.
See mathtex.html#message7

対処療法的には、ページ記述の際に数式に mathtex.cgi の \cache オプションを付加して明示的にサーバにキャッシュを生成するようにすれば、何度かページを再読み込みする間に解消するようです。明示しなくてもデフォルトでサーバにキャッシュ画像を生成するはずなのですが、うまくいかないことがあるようです。latex や dvipng で処理した画像のキャッシュファイルが一度生成できれば、次からはキャッシュ画像を返すようになります。

サイトをご覧の方の側では、ブラウザで何度か再読み込みを繰り返すと、そのうちに数式画像が表示されるようになります。(たいていは…… orz )

このエラーは複数の LaTeX 数式画像があるページで発生していて、ブラウザで再読み込みするたびに違う数式画像がエラーになります。サーバ上の mathtex.cgi 用キャッシュ ディレクトリを眺めていると、エラーになるような場合、数式画像のキャッシュが残っていません。

エラーメッセージによると latex プログラムが実行できないと言っているので、処理が間に合わずに多重起動で失敗が連鎖していくような状況でしょうか。何がおこっているのかはよくわかりません。場合によっては、dvipng が実行できないエラーのこともあります。以前のサーバでは発生していなかったようにも思えるので、CGI や実行ファイルの起動数など、サーバ側の設定による可能性もあります。

だいたい、LaTeX の処理系自体、シェルログインできないサーバにFTP でファイル一式コピーして、無理やり動かしています。そんな状態なので、現象や問題の切り分けからして難しいんですよね。

mathtex.cgi は 1.05 が出ていたので 1.03 からバージョンアップしましたが、同じ現象が起こっているようです。

mathTeX version 1.03 → mathTeX version 1.05

mathtex.cgi に \version を渡すと、

現在: \cache \version

なお、一度キャッシュが生成されると自動的には書き換わらないので、バージョンアップしたらキャッシュをクリアしておかないと、いつまでも古いバージョンとして表示され続けます。

< img src=”…/mathtex.cgi?… ” / > で直接書くより、 [ tex ] ~ [ /tex ] で呼び出すほうがエラーの率が高いように思えますが、はっきりしません。問題は mathtex.cgi ではなく、[ tex ] のほうのプラグインかもしれません。

以下、適当に数式を載せてみます。

TeX入門/簡単な数式(2) – TeX Wiki より

mathTeX manual (mathtex.html) より

       

エラー(7)にならずに表示されているでしょうか。このページ作成時には表示可能でしたが……。私のサイトには LaTeX 処理系のサブセットしか入れていないので、表示不能の例もいろいろありました。そういう場合もエラー(7)が表示されるようです。

(2013/7/13)

ローカルの仮想マシンにTeX Live (LaTeX) をインストール (2)

Apache2 が動いているローカルの仮想マシンに LaTeX と mathTeX をインストールしてみます。

LaTeX のインストール

まず、「ローカルの仮想マシンにTeX Live (LaTeX) をインストール (1)」を参考にしながら LaTeX を入れます。多少条件を変えました。

適当なディレクトリで、

wget  http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar  zxvf  install-tl-unx.tar.gz
./install-tl  -portable

で TeX Live のインストーラを USB などで持ち歩くためのモードで起動します。

メインメニューで、

<S> installation scheme

から、詳細メニュー Select scheme: で

a [ ] basic scheme (plain and LaTeX)

を選択します。メインメニューに戻って、

<C> standard collections

の詳細メニュー Select collections: では

a [X] Essential programs and files
o [X] Basic LaTeX packages

の二つが [X] で選択状態なので、 dvipng が含まれる c を追加します。

c [X] TeX auxiliary programs

メインメニューに戻り、

<D> directories:

詳細メニュー Directories setup: の

<1> TEXDIR:       /usr/local/texlive

以下を書き換えます。<1> を入力すると、<2>~<4> は自動的に書き換わります。<5>~<7>は -portable ではパス指定がないので、デフォルトのままです。仮に /home/makisima/texlive/2010 にインストールするなら、

<1> TEXDIR:       /home/makisima/texlive/2010
<2> TEXMFLOCAL:     /home/makisima/texlive/texmf-local
<3> TEXMFSYSVAR:    /home/makisima/texlive/2010/texmf-var
<4> TEXMFSYSCONFIG: /home/makisima/texlive/2010/texmf-config

<5> TEXMFVAR:       $TEXMFSYSVAR
<6> TEXMFCONFIG:    $TEXMFSYSCONFIG
<7> TEXMFHOME:      $TEXMFLOCAL

これでインストールオプションの設定が終わったので、メインメニューの I でインストールを開始します。

Actions:
<I> start installation to hard disk

ダウンロードしながらインストールが行われます。

インストールが終わっても、./install-tl -portable のときは、環境変数をどう設定するかという指示は表示されません。

LaTeX や dvipng が動くかどうか確認するため、フルパスまたは相対パスを指定して実行します。

find / -name latex
find / -name dvipng

でフルパスがわかります。

ちなみに、 dvipng は TeX Live のインストールオプションとしてインストールしなくても、実行ファイル単体ひとつだけを latex と同じディレクトリにコピーすれば動きます。

mathTeX のコンパイル

LaTeX のインストールが終わったら、mathTeX にとりかかります。LaTeX を web から利用する方法は様々にあると思いますが、 mimeTeX との互換性から mathTeX を選びました。mimeTeX が動いている環境なら、mimetex.cgi へのパスを mathtex.cgi に書き換えるだけで、プラグインも同じプラグインで動きます。
まず、

download mathTeX リンクから、仮想マシンの適当なフォルダにダウンロードします。今回は Ubuntu 10.10 desktop です。

mathTeX のページの指示に従い、コンパイルします。latex と dvipng へのパスは、実行ファイル名まで必要です(複数の LaTeX 処理系のどれかを任意に選べる)。また、それぞれの二重引用符の前には\が必要です(忘れるとコンパイルエラーになる)。上に述べてきたような設定で、デフォルトのオプションでコンパイルするときは次のようになります。デフォルトでは GIF 画像が生成されるようになります。

cc -DLATEX=\”/home/makisima/texlive/2010/bin/i386-linux/latex\” -DDVIPNG=\”/home/makisima/texlive/2010/bin/i386-linux/dvipng\” mathtex.c -o mathtex.cgi

mathTeX で LaTeX を動かすときに環境変数はどうするのだろうかと疑問だったのですが、コンパイル時に cgi に組み込んでしまうんですね。したがって、配布用の実行ファイルも存在しないということになります。

できた mathtex.cgi をターミナルで実行できるかどうか確認します。たとえば、

./mathtex.cgi “x^2+y^2” -o equation1

生成された equation1.gif が予想どおりの画像なら mathtex.cgi は正常です。ファイル・ブラウザですぐに確認できます。

Apache の設定

できた mathtex.cgi を apache2 で動かす設定です。

Ubuntu 10.04 desktop に apache2 を入れると、デフォルトでは、ウェブのルートは /var/www です。今回は http://localhost/mathtex/mathtex.cgi に置くことにしたので、/var/www/mathtex/ に mathtex.cgi をコピーしました。なお、apache の設定次第で、どのディレクトリに置いても //localhost/mathtex に見せることは可能です。

Apache2 mod_rewrite と AllowOverride

のときの設定を流用して、/etc/apache2/sites-available/default を

<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews +ExecCGI
#Options Indexes FollowSymLinks MultiViews
# AllowOverride None
AllowOverride All
Order allow,deny
allow from all
</Directory>

と書き換えました。公開するわけではないので、とりあえず動けばいいという設定です。apache2 を再起動します。

$ sudo /etc/init.d/apache2 restart

ブラウザで、

http://localhost/mathtex/mathtex.cgi

を開いて

No expression supplied

などと表示すれば動いています。

http://localhost/mathtex/mathtex.cgi?y=x^2

のように ? の後に LaTeX の式を入れて数式画像が表示されれば正常です。

赤字でエラーメッセージが表示されたら

http://www.forkosh.com/mathtex.html の Run-time error messages… の項を参照して対処します。

たとえば、cache ディレクトリ mathtex が作れないと言ってきたら、mathtex ディレクトリのパーミッションを

sudo chmod 777 /var/www/mathtex

といった具合です。

デフォルトのコンパイル オプションでは、 mathtex.cgi のあるディレクトリに mathtex というサブディレクトリを作って、一度生成した画像をキャッシュとして置いておくようになっています。

プラグインの設定

ここまでの設定で、HTML の <img > タグに mathtex.cgi を指定すれば LaTeX 画像を表示できます。たとえば、

<img src=”http://localhost/mathtex/mathtex.cgi?y=x^2″ alt=”y=x^2″ />

WordPress などではプラグインを使うと便利です。mathTeX は mimeTeX と入替えて使えるので、プラグインの mimeTeX への http パスを mathTeX のものに書き換えるだけです。

ちなみに、 mathTeX の配布先に公開サーバがあるので、http のパスをそちらに接続すれば品質確認できます。

mimeTeX から mathTeX に切り替えたとき、そのままでは数式画像が表示されず、WordPress でページを編集→更新すると表示されるという現象が発生しました。このあたりの動作についてはどうなっているのかよくわかりません。

(2010.11.17)