                            IPC in W32TeX

イントロダクション

TeX における IPC (InterProcess Communication) は、NeXT 上の TeXView 専用に
T. Rokicki によって実装されたもので、Shamim Mohamed が Web2C に適用した
ものです。コントロール情報と共に、DVI 自身もファイルに書き出されると同時
に、TeXView にも送られ、インクリメンタルに表示できるようになっているよう
です。 NeXT 専用なので、ほとんど IPC が使えるように Make されることはあり
ません。ただ、DVI ファイル書き出しがバッファリングされなくなるので、それを
利用するアプリケーションのために IPC enabled として Make されることがあり
ます。サーバ (TeXView) が無ければ単に DVI ファイルがバッファリングされずに
書き出されるという効果だけになります。通常使用では、バッファリングなしで
書き出される場合、(体感できるほどではないでしょうが)若干パフォーマンスが
悪くなると思われます。


W32TeX における IPC

W32TeX も IPC enabled として Make しています。従ってオプション
-ipc と -ipc-start を使用することができます。サーバの名前は texview.exe
に固定されていて変更はできません。 texview.exe が無ければ、単に DVI を
バッファリング無しで書き出すようになるだけです。texview.exe が存在して
通信できる場合も、コントロール情報を送るだけで、DVI 自身は送りません。
通信は TCP/IP でアドレスはローカルホスト (127.0.0.1) に固定しています。
使用ポートも 4242 に固定しています。送られるコントロール情報は

struct msg {
int    namelength;
int    eof;
char   fname[256];
}

の形式をしており、eof は既に書き出された DVI ファイルのバイト数に近い
数です。 namelength がゼロでない場合には、fname に DVI ファイルの
フルパス名が入っており、その文字列の長さが namelength です。ただし
C 文字列ではないので、文字列の直後が '\0' になっている保証はないので
注意して下さい。この文書が存在するディレクトリに、あまり役にたたない
サンプル texview.c があります。これから作成した texview.exe がテスト
用としてインストールされます。 dviout は DVI ファイルが最後まで書かれ
ていない段階で、途中まで読ませてもだめなので、サンプルの texview.exe
は コントロール情報のファイル名だけを使用して、DVI ファイルがすべて書
き出された頃にもし dviout が立ち上がっていなかったら、自動的に dviout
を立ち上げて完成した DVI を開きます。既に dviout が立ち上がっている場
合には、その dviout を使用して DVI を開きます。あまり参考にはなりませ
んが、詳細は texview.c を参照して下さい。

texview.exe の使い方:
  通常は何も意識することなく、dviout でプレビューしたいと思ったときに
  platex -ipc-start ...
  とすると、コンパイルが終了した時点で自動的に dviout を立ち上げて
  プレビューすることができます。この場合、texview も一回で終了します。
  つまり -ipc-start のときは、texview は --stay オプション無しで実行
  されます。
  platex -ipc ...
  とすると、通常DVI書き出しがバッファリングされないだけで、何も変わりませ
  んが、-ipc-start のときと同じように、コンパイル終了時に自動的に dviout
  を立ち上げるには、
  start texview --stay
  として、別のコマンドプロンプトウインドウで texview.exe を走らせておきます。
  --stay オプションで実行しておくと、終了しませんから、何回でも
  platex -ipc ...
  で同じ効果が得られます。 texview.exe が不要になったときは、texview が
  走っているコマンドプロンプトウインドウで Control C を入力して texview
  を終了させます。

(1) オプション -ipc の場合
既に texview.exe が実行されていた場合、connection に成功したら
DVI ファイルを書きながら、コントロール情報を texview.exe に送ります。
connection に失敗したり、texview.exe が実行されていない場合には、DVI
ファイル書き出しがバッファリングされないだけで、通常と同じです。

(2) オプション -ipc-start の場合
texview.exe を立ち上げて通信しようと試みます。成功したら DVI ファイルを
書きながら、コントロール情報を texview.exe に送ります。
texview.exe の立ち上げや通信に失敗した場合は、DVI ファイルの書き出しが
バッファリングされないだけで、通常と同じです。
サンプルとして入れている texview.exe を使う場合、次のような使い方が
考えられます:
platex test
platex test
platex -ipc-start test
この場合、2 回は通常のように platex を実行し、3 回目はコンパイルが完成
することを予想して、終わったら dviout でプレビューしよう、という意図を
持っていることになります。ただし dviout.exe と texview.exe が PATH から
見つけられないと、-ipc-start オプションの効果は無くなります。

----------------------------------------------
A. Kakuto
