LANDISK で TeX を動かす

[戻る]

はじめに

PowerPoint 等を使って資料を作る際, 時折数式を入れたくなる時があります. 簡単な数式やしょうもない資料なら, 上付き文字や下付き文字, それに直線とか曲線, 全角のギリシャ文字を使って済ませます. しかし, 結構面倒くさいですし, 年に 1,2 回は別の手段を使います. 具体的には eqn2gif online を活用させて頂いてます. 年に 1,2 回ならばいいんですが, 頻度が高くなると相手側のサーバに対する負荷を 考えると躊躇しちゃいます. もちろんオンライン版を使わず 単体 を使えばいいんでしょうが, 個人的には Windows には TeX を入れてなく, TeX を使う必要があるときのみ Linux マシンに火を入れて使っているため, 常用で eqn2gif を使うのは現実的に厄介です.

まぁ正確に言えば 常時起動の Linux マシンを愛用していますが, それは Landisk (HDL-160U) という 一風変わった Linux-Box で, 今まで Namazu を使った CGI 等で活用していました. こいつに eqn2gif online が動けば言うこと無しなんですが, TeX のコンパイルはめんどうくさそうで今まで躊躇していました.

eqn2gif は TeX と Ghostscript が必要です. Ghostscript に関しては以前 入れています. そこで, 今回思い切って TeX を入れてみることにしました.

必要ファイル

TeX のコンパイルに関してちょっと調べた所, こちら にいろいろと情報があることが分かりました. これを参考に以下の三つのファイルを 入手しました.

こいつを集めコンパイルを進めます.

なお, Landisk でのセルフコンパイルの方法は こちらを参照してください. また, メイクにあたっては patch 及び flex (すなわち yacc と m4 も) が必要ですが, その辺の情報はここを 参照してください. さらに unzip も必要です. 私は unzip552.zipを make しましたが, debian にパッケージとして転がっている かもしれません.

コンパイルテスト

まずは上述した三つのファイルを同じディレクトリに置き, ptetex3-20060517.tar.gz を展開, 出来た ptetex3-20060517 ディレクトリに移動します.

続いて, cp my_option.sample を my_option にコピーし, 中の --without-x--without-xdvikのコメントを外します.

その後, ためしに

# make tmp
としてみたのですが,
gcc -DHAVE_CONFIG_H  -I. -I. -I.. -I./..   -g -O2  -c bibtex.c -o bibtex.o
/bin/sh ../libtool --mode=link gcc -o bibtex   bibtex.o lib/lib.a ../kpathsea/libkpathsea.la -lm
gcc -o bibtex bibtex.o  lib/lib.a ../kpathsea/.libs/libkpathsea.a -lm
bibtex.o: In function `zscanfndef':
/var/tmp/src/tetex-src-3.0/texk/web2c/bibtex.c:3420: undefined reference to `.L4428'
bibtex.o: In function `scanbalancedbraces':
/var/tmp/src/tetex-src-3.0/texk/web2c/bibtex.c:3708: undefined reference to `.L8139'
collect2: ld returned 1 exit status
make[4]: *** [bibtex] Error 1
と出てメイクが通りません.

.L4428 ってどこにあるんだっと grep しても何も出てきません. ためしにデスクトップの Plamo Linux で同様のことをしてみると, 少なくとも bibtex のコンパイルではエラーは出ませんでした.

いろいろと試行錯誤してみた結果, gcc の -g オプションが原因ということが 分かりました. というわけで環境変数や my_option かなにかをいじって -g を付かない方法は ないかと探してみたのですが分からず, 結局 gcc をいじることにしました.

といっても, そんな大げさなことではなく, 現状 gcc は gcc-3.0 へのシンボリックとなっていたことを利用し, シンボリックリンクの代わりに以下のようなファイルを gcc としました.

#!/usr/bin/perl
$R="";
foreach $i (0 .. $#ARGV){
  $P=$ARGV[$i];
  if ($P eq "-g"){
#    exit 1;
  } else {
    $P =~ s/\"/\\\"/g;
    if ($P =~ /[<> ]/ ){
      $R .= "\"";
      $R .= $P;
      $R .= "\" ";
    } else {
      $R .= $P;
      $R .= " ";
    }
  }
}
#print $R;
#print "\n";
exec "gcc-3.0 $R";

これで上手く make tmp が通るようになりました (ちなみにセルフコンパイルだと 3 時間近くかかります).

コンパイル

make tmp が通るようになったので, いよいよ本番です. 最終形はセルフコンパイル環境 (仮想ルート環境でなく), 素の環境で使いたいので パスの設定を変えます.

やることは二つで, 一つは my_option に前述した --without-x--without-xdvik の定義以外に vartexfonts を有効にし, 値を/mnt/hda3/bin/var/lib/texmf にします. もう一つは Makefile を開き PREFIX/mnt/hda3/bin/usr/local/share にします.

後は make して三時間待ち, make font を実行します. 本来ならその後, make test を実行してエラーが無いか確認しなくてはならないの ですが, 私は失敗しました. んが, platex と dvips が通るようなので 深く追求せずほっといています.

さて, 出来たファイルは仮想ルート上で /mnt/hda3/bin/usr/local/share/teTeX, すなわち素の環境では /mnt/hda3/vroot/mnt/hda3/bin/usr/local/share/teTeX にあります. これを素の環境における /mnt/hda3/bin/usr/local/share/teTeX へコピーもしくは シンボリックリンクを張れば PATH の設定をしさえすれば素の環境下でも動きます.

オブジェクトダウンロード

とまぁ, 結構大変なので例によって出来たファイルを置こうと思ったのですが, 圧縮しても 100Mbyte 程になり, さすがにそのままでは置けません. 調べてみた所, 幸い teTeX/share/texmf-dist 配下は tetex-texmf-3.0.tar.gz を そのまま展開したもののようだということが分かりました.

正確に言うと, teTeX/share/texmf-dist 以下で ls -lR したものと, tetex-texmf-3.0.tar.gz を展開したものを ls -lR したものの diff を取ると

12c12
< -rw-rw-rw-   1 root     root       197231 May 23 16:55 ls-R
---
> -rw-r--r--   1 root     root       197206 Feb  7  2005 ls-R
13816c13816
< -rw-r--r--   1 root     root        41527 Nov 20  2004 thumbpdf.pl
---
> -rwxr-xr-x   1 root     root        41527 Nov 20  2004 thumbpdf.pl
13820c13820
< -rw-r--r--   1 root     root         1322 Dec 26  2004 uniqleaf.pl
---
> -rwxr-xr-x   1 root     root         1322 Dec 26  2004 uniqleaf.pl
と, 微妙にパーミションが違いますが, まぁ関係ないでしょう.

という訳で, tetex-texmf-3.0.tar.gz は別途入手してもらうことにします. 必要ファイルは

の二つです. 取得して /mnt/hda3/bin/usr/local/share 以下で texset.tar.gz を展開し, さらに /mnt/hda3/bin/usr/local/share/teTeX/share/texmf-dist に移動し, tetex-texmf-3.0.tar.gz を展開してください.

続き

さて, 今回は話が長くなりそうだったので二部構成にしました (ghostscript も入れると三部構成になりますね). eqn2gif online に関しては 次回いろいろと 書いていこうと思います.


2006.5