ホームTeX 関連 RPMS

teTeX-1.0 パッケージングメモ


Vine2.5/2.6 や teTeX-2.0 が出て、内容が古くなってしまいました。 最新情報は teTeX-2.0 パッケージングメモ をどうぞ。
teTeX の Vine 用パッケージを作る上で、 気のついたことをメモしておきます。 RPM の入手と使い方は TeX 関連 RPMS 詳細 をご覧ください。

Vine pTeX vs. teTeX

 Vine2.1 の TeX 関連パッケージは、 "日本語対応のアスキー版 pTeX (pTeX, 3.14159, p2.1.8)" を中心として、以下のような構成になっています。

TeX コンパイラ本体pTeX-2.1.8-13
LaTeX マクロpLaTeX2e-19990809-4
pLaTeX2e_Macros-2.0-2
PSへのコンバータdvipsk-5.78a_jp-14
type1フォントcmpskit-3-3
プレビューアxdvik-22.15_jp-10
生成済みビットマップフォントpk300-1-4

 日本語対応はもちろん、不足するフォントの自動生成から、 日本語フォントの設定、VFlib 対応、 platex209(platex2e のエミュレーションではない) までが完全に動くよう調整されています。

 しかし残念なことに、 アスキーの開発する pTeX は、pTeX2.1.9 [2000/02/29] から teTeX に追加する形で公開されているようです。 つまり、Vine の pTeX は少し古いのです。

 teTeX というのは、Thomas Esser が作った UNIX 用 TeX パッケージです。 TeX 本体(WEB2C と書けばよいのでしょうか)に、 LaTeX マクロはもちろん、dvips, xdvi, pdftex などの各種ツールを、 各種フォントとともに一発でコンパイル、インストールできるように調整し、 さらにはインストール後の設定変更のツールまで含んでいます。

 RedHat7.0J, Kondara1.2 は既に teTeX が採用されています。 もちろん日本語化されてますが、 platex209 が動かないなどの細かい不具合があるようです。 これらを参考に Vine 用 teTeX パッケージを作ることにしました。


pTeX2.1.10 のインストール

 ptex を RPM 特有の仮想インストールする時のコツを見つけました。 ptex では make 時に "*.fmt" を生成しようとしますが、 この時点では teTeX が install されておらず、うまく動きません。 teTeX では make install 時に "*.fmt" を生成することになってるようですので、この動きに合わせることにします。

 つまり、%build セクションでは

./configure EUC; make programs

 だけを行い、%install セクションで、 teTeX の install の後 'texhash' を実行しておくと(これが重要)、 ようやく ptex を普通に make install できるようになります。 (RedHat 等は Makefile にパッチを当てて解決してあります。)

 また、platex → ptex などのシンボリックリンクがあると便利ですが、 いちいち手で作らず、 次の追記をして 'texlinks' を実行するのがよいでしょう。 これは "*.fmt" の生成にも役立ちます。 (最後の行は platex209 の設定です。)

"texmf/web2c/fmtutil.cnf" に追記
# Japanese pLaTeX:
ptex            ptex            -               ptex.ini
platex          ptex            language.dat    platex.ini
platex209       ptex            language.dat    plplain.ini

 参考文献:奥村晴彦さんの Linux での pTeX,pLaTeX2e のインストール


platex209 のインストール

 上記の方法で pLaTeX2e はインストールできます。 pLaTeX2e にも pLaTeX2.09 のエミューレションモードがありますが、 一部のマクロはこれでは動かないことがあります。 そこで本物の platex209 も追加でインストールするのがよいでしょう。

 platex209 に必要なものは、teTeX, ptex の他には、アスキーが配布して下さってる pLaTeX2.09 マクロ だけです。付属の説明書には teTeX を考慮した記述はありませんが、 以下のようにするとよいと思います。 texmf/ptex の下にこの "platex209.tar.gz" を展開し、

"texmf/ptex/platex209/plplain.ini"
\input plplain.tex \dump

 というファイルを作り、 上の段落の "texmf/web2c/fmtutil.cnf" への追記を行って、 'texhash; texconfig init; texlinks' を実行します。

 なお、この方法では jlatex209 コマンドを作るのは難しそうです。

 ちなみに、ポーランド語 LaTeX も platex というようで、 texmf/tex の下の platex 以下はそのためのファイルでしょう。 日本語 pLaTeX は texmf/ptex の下を使うべきと思いますので、 platex209 もお間違えのないように。


type1 フォント

 Vine の cmpskit というパッケージには、 Computer Modern の type1 形式(ベクトル)フォントが入っています。 このおかげで、dvips で変換した PS ファイルが 高い解像度でもきれいに見えるのです。 (しかし 600dpi pk フォントよりはファイルサイズが大きくなるようです。)

 teTeX でもこのフォントを含んでいて、 texmf/dvips/config/updmap の type1_default=true の行を有効にして、 このスクリプトを実行するだけで使うようになります。 cmpskit よりも teTeX のほうがたくさんのフォントを含んでいるようです。

 Vine には 'dvipsfnt' コマンドで type1 と pk の切り替えができるのですが、 teTeX の updmap はそれに代わるものというわけです。 (その割にはわかりにくいところに置いてありますが。)

 RPM を作る時には、type1 フォントだけを別パッケージにして、 そのパッケージをインストールする時に texmf/dvips/config/updmap を書き直すようにしてみました。

 参考文献:Kondara1.2 の spec file

 P.S. config.generic という設定ファイルはなんのためなんでしょうか...


dvips の VFlib 対応

 信州大学の中山さんの Dvipsk を VFlib 対応にする パッチがありますが、teTeX-1.0 の dvips5.86 には対応してません。

 検索エンジンで探すと、 dvips5.86 に対応するよう作りなおした「人」は見つかるのですが、 パッチそのものが見つからないので、自分で作業して公開することにします。

 なお、Vine 用にライブラリ名を VFlib2 に変更しています。 パッチを当てると生成されるファイル "dvipsk/xdefs.make" をご覧ください。

 しかし map ファイルですが、よくわかりません... 3つめのカラムに "<`min" などと書けばよいようですが、 下手に VFlib を使うと PS ファイルのサイズが脹れ上がってしまいます。 VFlib を使う時と使わない時の切り替えをどうすればよいのか...


jvf

 Vine の jvf パッケージには、何種類かの日本語仮想フォントが入っています。 TFM ファイルも含まれています。 ptex にも TFM ファイルが含まれていて、どうなってるのかよくわかりません。


pk300

 Vine には pk300 という、ビットマップフォントが入っています。 これのおかげで、xdvi での表示に、いちいちフォントを生成せずにすみます。 もちろん、フォントの足りない時には生成するのですが...

 Vine の dvips はこのフォントを使いません。 (前述のように type1 フォントを使います。うまくできています。) 調べてみると、pk300 は texmf の下にはファイルを作りません。 別の場所に置いたファイルを texmf/web2c/texmf.cnf に xdvi だけが見に行くような設定がしてありました。 うまくできてるので、私の RPM でもこれを真似しました。

 ところで、300dpi と言えば、 伝統的に mode には cx プリンタを指定することが多いと思いますが、 Vine のパッケージでは epsonact になっています。 ディスプレイで表示するのに適しているのでしょうか。 どうせアンチエリアシングがかかるので大差ない気がするのですが。


書き換えられるファイル

 以下のファイルは環境にあわせて生成されますので、 RPM パッケージに含めるとすれば %config 指定をする必要があります。 しかし、パッケージ削除しても .rpmsave がついて残ってしまいます。

 あるいは、最初からパッケージから除外してしまえば、 'rpm --verify' でも表示されず都合がよいですが、 今度はパッケージ削除しても消えないので %preun で消去するのがよいのでしょうか。 → Piled RPM Remarks によると %ghost と指定するとよいようです。 この指定をしたファイルは、パッケージには含まれませんが、 アンインストール時に削除してくれるんだそうです。 どのバージョンの RPM で有効かはわかりません。

生成コマンド生成ファイル
texhash (mktexlsr)texmf/ls-R
texmf/dvips/config/updmap texmf/dvips/config/psfonts.map
texmf/dvips/config/ps2pk.map
texmf/dvips/config/pdftex.map
texconf init texmf/web2c/*.fmt
texmf/web2c/*.log など

 ちなみに私のパッケージでは、 %post で 'texconf init' を実行するのは時間がかかりすぎる (環境に合わせて生成というほどでもありませんし、 マクロを読み込んだ時点でのメモりダンプですから) という判断で、これを %config 指定、ほかは %ghost 指定しました。

 その他、気のついた設定ファイルは以下の通りです。 rhl7.0 の spec に書いてあって気がつきました。 /etc に持っていったほうがよいのでしょうか...

texmf/web2c/*.cnf
texmf/dvips/config/config.{pdf,ps,www}
texmf/dvips/config/updmap
texmf/pdftex/config/pdftex.cfg
texmf/xdvi/vfontmap

 ちゃんとパッケージングできていることを確認するために、 'texconf init; rpm -V tetex ...' で表示されるファイルには c 属性がついていることを確かめます。

 参考文献:RedHat の Maximum RPM の When Verification Fails - rpm -V Output


trigger

 サブパッケージ tetex-ptex からメインの tetex のファイルを書き直すためには、 tetex-ptex の %post で処理することはできないのです。

rpm -ihv tetex-ptex-1.0.7-* tetex-1.0.7-*

 この順にインストールされると、tetex-ptex の %post は tetex の存在しない場面で 実行されてしまいます。

 (2001/5/28 補足:tetex-ptex に "PreReq: tetex" と書いておけば、 このような都合の悪い順序でのインストールを許さないことがわかりました。 しかし tetex のみを単独で rpm -U することがあるとすれば、 tetex-ptex での書き換えが無駄になるかもしれません。 その点、以下の trigger のほうが安全だと思います。)

 この目的には tetex-ptex の %triggerin -- tetex か tetex の %triggerin -- tetex-ptex が使えます。 前者のほうが素直でしょう。

 また、サブパッケージの(アン)インストールごとに texhash を実行したいですが、 サブパッケージの数だけ %post や %postun を書き並べるのはなんともバカバカしいので、

%triggerin -- tetex-ptex, tetex-latex, tetex-afm, tetex-type1, tetex-xdvi
としてまとめて書いてしまうのがよいのではないでしょうか。 (残念なことに、パッケージ名にはワイルドカードは使えないようです。) トリガースクリプトは複数書き並べることができますが、 実際に動くのは、そのうちの1つだけのようですので、注意が必要です。 つまり
%triggerin -- tetex-ptex, tetex-latex

 と

%triggerin -- tetex-ptex, tetex-xdvi

 の2つを書いても、tetex-ptex のインストール時に実行されるのは前者のみ、 ということです。

 参考文献:spec ファイルで使用できるタグ/マクロ/環境変数一覧


設定ファイルの書き換え

 %triggerin で書き加えた内容を %triggerun で削除するうまい sed スクリプトが debian-devel ML にありました。

 書き加える時はあらかじめ

echo <<EOF>> hogehoge
% begin %{name}-%{version}-%{release}
追加内容
% end %{name}-%{version}-%{release}
EOF

 と前後に目印をつけておき、

sed -e '/^% begin %{name}-%{version}-%{release}$/,/^% end %{name}-%{version}-%{release}$/d'

 で行単位の除去をするというものです。 これまでは同様のことを perl でやってました(これとて知り合いに教えてもらった方法)。

 このようなスクリプトをいちいち手で記述するのは繁雑なので、 rpm-rewrite なるものを作ってみました。


LaTeX 時限爆弾

 LaTeX には、マクロが古いとコンパイルに警告の出るようになっています。 新しい物を使って欲しいという意思表示なのでしょうが、 pTeX 本体のコンパイルがこれで失敗するとなると、ちょっと具合が悪いです。 ある日突然 build できなくなる SRPM であるわけですから。

 というわけで、新しい LaTeX マクロを入手するのが筋ですが、 警告が出ながらも build だけはできるように pTeX にパッチを当てることも必要でしょう。


ホームTeX 関連 RPMS 置場
リンクはご自由にどうぞ。
土村 展之(tutimura(a)nn.iij4u.or.jp) '(a)'は'@'に置き換えて
更新日 2/19 11:07, 2003