†逆襲のOS/2†

日本語pTeXのインストール

作成開始日 2013.04.20
最終更新日 2015.12.19

日本語pTeXはJ.SawataishiさんによってOS/2に移植されている。これを使えば、OS/2上で日本語文書の組版およびプレビュー表示・印刷が可能になる。OS/2上で原稿執筆をしているユーザーには極めてありがたい。しかし、そのインストールは決して簡単ではない。添付ドキュメントに詳しいインストール方法が記述されているが、正直なところ、これだけでは少々厳しいと思う。そこで、私なりにインストールの体験をまとめておく。ちなみに、インストール作業開始からpTeXが使えるようになるまで、約2週間掛かった。


概略

まずは概略的な事柄から。特に、他のアプリケーションなどと違って、unzipしてインストーラーを実行すれば使えるようになる、というシロモノでないことをはっきり自覚することが重要。

@Linux互換環境が大前提である

EMXは当然として、lsやcp、mov、cat、lessなどLinuxの基本命令が使用できるようになっていることが大前提となる。awkやsedも必要だし、sortに至ってはOS/2のsortコマンドを殺す必要まである。プレビューや印刷のためにはGhostscriptやGSViewもインストールされていなければならない。XFree86は必須ではないが、ある方が望ましい。また、ディレクトリ構成や数多くの環境変数もLinuxに準拠したものになる。OS/2ネイティブ・アプリケーションというより、Linuxアプリケーションをエミュレーター上で動かしている、という感覚に近い。

A必要なファイルが膨大である

TeXというシステムは、大きく分けて、実行可能ファイル、設定ファイル、ドキュメントの三種類から構成されている。このうち、環境に依存するのは実行可能ファイルのみで、設定ファイルやドキュメントは基本的に環境非依存である。ゆえに、OS/2版として配布されているのは、実行可能ファイルとそれに付随する設定ファイルのみである。逆に言うと、その他のファイルは別途入手しなければならない。また、組版処理(dviの生成)とdviの表示は基本的に別のアプリケーションの仕事となるし、前述のLinux互換環境を構築するためにも多数のファイルが必要になる。

B必要な設定変更や前処理が多い

TeXはスタイルファイルやフォントの生成までユーザー自身が行わなければならない。ディストリビューションにもよるが、TeX/LaTeXの本体を使用する前に、fmtutilやmetafontの実行が必要になるのがTeX流、そして、この段階で引っ掛かることが少なくないのもTeX流なのである。スクリプトや設定ファイルを自力で読んで、自分の環境に合わせて変更しなければならない場合もある。また、gawk→awkのように、実行可能ファイル名をリネームしないと動かない場合もある。


ファイルの入手

では、具体的なインストール作業の手順を示す。まずは必要なファイルの入手から。

▼TeX本体に関するもの
os2tetex.zip OS/2版のteTeXと日本語pTeXのバイナリ部分+一部の設定ファイル。Hobbesにアップされている最終版は2006年のもの。
tetex-texmf-3.0.tar.gz teTeXの各種設定ファイル(環境非依存)。CTANのサイトから入手。tetetx-texmf-3.0po.tar.gzも実質的に同じ内容らしい。

▼Linux互換環境に関するもの

添付ドキュメントREADME_tetex-src-3.0.os2に必要なコマンドと入手先の一覧が書かれているので、詳細はそちらを参照してもらうとして、ざっと一覧を作っておくと;

o sort, pwd, expr, env, mkdir, sh, find, tr, cat, chmod, touch, dirname
o awk, grep, sed
o man, groff, less
o gzip, bzip, tar
o emx runtime version 0.9d (or later)
中には、マニュアル表示にのみに必要な命令や、実際には使用されない命令も含まれているようだが、一応全部インストールしておくことを推奨。ちなみに、Hobbesにはgnu-core、gnufile、gnutextなどのgnuコマンド集がアップされているので、これを使うと便利。ただし、gnu-coreのpwdはバグ入りの可能性が高い。しかも、他のパッケージにはpwdは入っていないようだ。結局、私はos2tetexの古いパッケージに入っていたpwdを使用した(os2tetexの最新のパッケージには入っていなかった)。また、gawk(awk)やgrepは添付ドキュメントの指示に従ってリネーム乃至コピーする必要がある。

なお、これらのコマンドをどこに置くかが問題になるが、私はg:\gnubinというディレクトリに集めて、OS/2のパスを通しておいた。本来は/usr/binあたりに集約すべきだろうが、TeXのインストールはけっこう厄介で、/usr以下を全部削除して、一からインストールし直すということもあったので、コマンド類は完全に別ディレクトリにしておく方が便利だった。

▼プレビューに関するもの

基本的にこのシステムでは、dviファイルをpsファイルに変換し、psファイルをGSViewで表示する、という方法でプレビュー表示をする。したがって、Ghostscript、GSViewおよびその日本語対応は必須である。もっとも、Ghostscript 9.xでは何もしなくても日本語表示ができたので、そちらを使えば簡単ではないかと思うのだが、8.5.3が大前提でシステムが構築されているようなので、少なくとも最初はそれに従う。

GSView psに変換したdviファイルを表示する。日本語dviを表示するには実質的に必須。
Ghostscript 8.5.3GSViewに同梱されているGhostscriptではなく、別途8.5.3を入手することを推奨(os2siteの/util/ghostscriptから入手)。
gs800-j-vlib-os2.zipGhostscript 8.5.3で日本語CIDフォントを扱えるようにするパッチ。少なくとも、Ghostscript 8.7.1では使えなかった。


Linuxコマンド類のインストール

まずは、EMXをインストールする。これは絶対必須。

次に、Linuxのコマンド類をインストールする。と言っても、基本的に、解凍してpathの通ったディレクトリに放り込むだけでよい。中にはdllが必要なものもあるが、dllはlibpathの通ったディレクトリに放り込む。問題はこれらを具体的にどのディレクトリに入れるのか、という点。通常は/usr/binと/usr/dllに入れて、それぞれpathとlibpathを通しておくのがセオリーだと思うが、前述のような理由から、私は\gnubinと\gnudllというディレクトリを作り、こちらに放り込むことにした。

さらに、一部のコマンド名を変更する。

  • gawk.exeをawk.exeとリネームする。
  • grep.exeをegrep.exeにコピーする。
  • OS/2のsort.exeをsort.bakなどにリネームして無効化する。
  • grepとegrepは両方必要なので、リネームではなくコピーを使う。なお、パッケージによっては予めgrepとegrepの両方が入っているものもあるようだ。


    パスと環境変数の設定

    インストールしたLinuxコマンドを使用できるように、Pathを設定してリブートを掛ける。また、ついでに、各種の環境変数もこの段階で設定しておくと便利。CONFIG.SYSを以下のように変更する。なお、EMXはx:\emxに、GNUツールはx:\gnubinに、GNU DLLはx:\gnudllにインストールしてあるものとする(x:はTeXやgnu関連のツールをインストールするドライブ)。

    LIBPATH=.......;x:\emx;x:\gnudll;x:\usr\dll;
    SET PATH=......;x:\gnubin;x:\usr\bin;
    
    環境変数は以下のようにする(mynameはユーザー名のディレクトリ)。各環境変数の意味は判らなくても特に問題にはならない(私も未だによく判らない)。留意点はディレクトリ区切りが「/」である点と、UNIXROOTはドライブ名のみ指定する点。CONFIG.SYSを変更したらリブートを掛ける。以後、基本的にリブートは必要なくなる。
    SET HOME=x:/myname
    SET TMP=x:/tmp
    SET TMPDIR=x:/tmp
    SET UNIXROOT=x:
    SET INFOPATH=x:/usr/share/info;
    SET MANPATH=x:/usr/share/man;
    SET TEXMF=x:/usr/share/texmf
    SET TEXMFMAIN=x:/usr/share/texmf
    SET TEXMFCNF=x:/usr/share/texmf/web2c
    SET TERMINFO_DIRS=x:/usr/share/terminfo;
    SET TERMINFO=x:/usr/share/terminfo
    SET TERMCAP=x:/usr/etc/termcap.dat
    SET TERM=os2
    SET PAGER=less
    SET prefix=x:/usr
    
    なお、以下のの3つのディレクトリは予め手作業で作成しておくこと。それ以外のディレクトリは以下の作業で自動的に作成される(はず)。
    x:\myname(ユーザー名ディレクトリ)
    x:\tmp
    x:\usr\share
    


    ファイルの展開

    次は、いよいよTeXのファイルを展開する。まずは環境非依存の設定ファイル(texmf)を展開し、その上にOS/2用にポーティングしたバイナリファイルを展開する。この順番で展開しないと、多分厄介なことになる。

    ▼texmfの展開

    これはtar.gz形式なので、展開にはgzipとtarが必要。適当なディレクトリで、下記のように展開する(GNUtarでzオプションを付ければgzipは不要だが)。

    	gzip -cd tetex-texmf-3.0.tar.gz | tar xvf -
    
    これでtexmfディレクトリ以下に必要なファイルが展開されるので、
    	x:/usr/share/texmf
    
    という場所に移動する。もちろん、x:/usr/sharaが作成されていなければ手動で作成する。

    ▼バイナリの展開

    バイナリ部分は二重のzipファイルになっている。まず、os2tetex.zipを適当なディレクトリで解凍する。すると、OS2tree.zipというファイルが作成されるので、これをx:のルートに持っていって、

    	[x:\]unzip os2tree.zip
    
    とすればよい。/usr以下のディレクトリが自動的に作成され、その中にファイルが解凍される。これで、ファイルの展開は終わり。最後に、/usr/binの中にあるmf.exeをmf.bakなどのようにリネームしたあと、
    	copy mf-nowin.exe mf.exe
    
    とする。本来、mf.exeはX-Window用らしいのだが、ここではXFree86が入っていないシステムを前提に考えているので、mfをコマンドライン版のmf-nowinに置き換える必要があるらしい。ちなみに、mf-nowinとmfの両方が必要なので、mf-nowinをmfにリネームするのではダメ。

    TeXに付随するツールの多くはシェルスクリプトで記述されているが、OS/2はLinuxのスクリプトをそのまま実行することができない。そこで、ダミーのEXEファイルを作り、これを介してスクリプトのインタープリタを起動する、という方法で実行しているようだ。そのダミーのEXEファイルのひな型がexe.exeで、たとえば、myscriptというシェルスクリプトがある場合、exe.exeをmyscript.exeとリネーム(コピー)する。そうすると、myscript.exeはsh2exeを起動して自分と同じ名前のスクリプト(myscript)を実行する、という仕組らしい。


    設定ファイルの変更

    設定ファイルx:/usr/share/texmf/web2c/texmf.cnfの中の以下の行のドライブ指定を、自分の環境に合わせて変更する(p:→x:)。

    	70) TEXMFMAIN = p:/usr/share/texmf
    	71) CMAP=p:/usr/share/cmap
    


    ファイル一覧ls-Rを作成する

    これは、TeXのシステム内にあるファイルの一覧リストを作り、検索を高速化するための作業。ただし、必ずしも必要な機能ではないし、副作用も大きい(ファイルが存在していてもリストに登録されていないと検索できない)ので、場合によっては使わない方が良いかもしれない。が、インストールのドキュメントでは、これを使うことが前提になっているようなので、とりあえずはそれに従う。いずれにしても、必要なファイルを適切なディレクトリに入れても、使えるようになるとは限らない、と言うことは頭に入れておいた方が良いだろう。リストの作成操作自体は簡単で、適当なディレクトリで、

    	mktexlsr
    
    を実行するだけでよい。これを実行すると、/usr/share/texmf/ls-Rが作成または更新される。なお、恐らくtouchでPermission deniedというエラーメッセージが出ると思うが、これは気にしなくても良いようだ。

    touchで存在しないファイルを指定すると、Permission deniedが発生するのだと思われる。本来touchはファイルのタイムスタンプを変更するコマンドだが、指定したファイルが存在しない場合には、そのファイルを新たに作成する。つまり、ファイルの新規作成コマンドとしても使用できる。そして、mktexlsrのスクリプトではそのように使用されている。そうであれば、このエラーメッセージが出るのは必然で、異常なことではない。

    次に、ls-Rが正常に作成されているかどうかを確認する。検索プログラムはkpsewhich。これを使ってtimes.styというファイルを検索するには、コマンドラインで、
    	kpsewhich times.sty
    
    とする。正常に機能していれば、
    	x:/usr/share/texmf/tex/latex/psnfss/times.sty
    
    のようにファイルのある場所が表示される。また、kpsewhichは環境変数の確認もできて、
    	kpsewhich -expand-var $TEXMFMAIN
    
    とすると、
    	x:/usr/share/texmf
    
    のように表示される。しかし、たとえば、
    	kpsewhich jtex.tex
    
    としても何も表示されない。jtex.texは/usr/share/doc/ptexの中に存在しているし、/usr/share/texmf/ls-Rの中にもリストアップされているのに、検索に掛からない。どうやら、kpsewhichは検索対象を限定する機能があるようだ(パスと拡張子で限定しているようだ…ちゃんと確認してはいないが)。


    スタイルファイルの作成

    ここからが本番。以下のようにして、fmtutilでフォーマットファイルを作成する。

    	fmtutil --all
    
    これが何の問題もなく通ってくれれば良いのだが、なかなかそうはいかない。大量のメッセージが表示された後、次のようなエラーメッセージおよび警告が表示された。
    This is a summary of all `failed' messages and warnings:
    `ptex -ini  -jobname=platex -progname=platex platex.ini' possibly failed.
    `pdfetex -ini  -jobname=latex -progname=latex -translate-file=cp227.tcx *latex.ini' possibly failed.
    `pdfetex -ini  -jobname=pdflatex -progname=pdflatex -translate-file=cp227.tcx *pdflatex.ini' possibly failed.
    `omega -ini  -jobname=lambda -progname=lambda lambda.ini' possibly failed.
    `aleph -ini  -jobname=lamed -progname=lamed *lambda.ini' possibly failed.
    
    このメッセージの意味するところは全然わかりません(^^ゞ とりあえず、どこでエラーが出ているかだけでもまとめておくと;

    ptex 日本語pTeXのこと。
    pdfetex PDFを直接出力できるTeXのこと。このシステムのLaTeXはこのPDFeTeXを使っている。
    ただし、このPDFeTeXは日本語に対応していないので、日本語PDFの直出力は無理のようだ。
    omega alephUnicode対応のTeXのことらしい。pTeXとの関係等、詳しいことは知らない。

    pTeXでのエラーはけっこう問題がありそうな気がする。なお、x:/usr/share/texmf/web2c/fmtutil.cnfの中の、以下の2行をコメントアウトしてしまえば、pTeXに関するエラーは出なくなるが、それではpTeX/pLaTeX自体が使えなくなる可能性がある。最終的に日本語が通らないとお話にならないので、コメントアウトすべきではないだろう。

    	ptex      ptex            -  ptex.ini
    	platex    ptex            -  platex.ini
    
    と言うことで、現時点ではこれらのエラーメッセージを放置して先に進む(結果的に、放置してもpLaTeX稼動にまで漕ぎ着けた)。


    フォントマップの更新

    次に、フォントマップを更新する。これも操作自体は簡単で、適当な場所で、

    	updmap
    
    とすればよい。が、案の定エラーが出る。
    !!! ERROR! The map file `' has not been found at all.
        Either put this file into the right place or remove the
        reference from the configuration file. An automatic way
        to disable unavailable map files is to call
          updmap --syncwithtrees
        For manual editing, call
          updmap --edit
    
    touch: setting times of `g:/tmp/updmap.2273/catMapsFailed': Permission denied
    
    メッセージの先頭行の「The map file `'」は、ファイル名が空白になっている。これではエラーになって当然だが、さて、その原因はとなると、見当がつかない。

    末尾のtouchの方は、恐らくls-Rの作成のときに起きた現象と同じだと思うのだが、今回は少々厄介な問題がある。それは、g:/tmp/updmap.2273/というディレクトリが存在しないのでcatMapsFailedファイルが作成できないということ。OS/2では新規ディレクトリと新規ファイルを同時に作成できないからだろう(touchのポーティングが不完全という見方もできるかも知れないが)。では、updmap.2273を予め作っておけば良さそうなものだが、このディレクトリ名の「.」以下の数字は毎回変更されるようなのだ。規則性の有無も不明。したがって、次にいくつになるか予測して作成しておくことはできない。

    もちろん、別のtouchを使ってみるとか、updmapのスクリプトに手を入れて、作成ディレクトリを決め打ちするとか言った方法は思い付かないではないが、どちらにしろ、それほど致命的なエラーではないように感じられるので、とりあえずスルーしてしまうことにした。


    実行可能ファイル名の変更

    実は、ここまでの作業で、LaTeX(日本語非対応)は一応使用可能になっている。簡単な英文のTeXファイルを作り、コンパイルを掛けて、emTeXのプレビューアで表示してみたが、特に問題なく表示できた。したがって、正直なところ、以下の操作で何をしたいのかよく判らない。

    ここでの問題はfmtutil.cnf内で定義されている実行可能ファイルの名称が、一般的な名称と違うということのようだ。たとえば、fmtutil.cnfには;

    	latex   pdfetex language.dat  -translate-file=cp227.tcx *latex.i
    
    という行があるが、これはlatex.styはpdfetex.exeで使用するもの、ということらしい。言い換えると、latex.exeではlatex.styは使えない、ということになる。そこで、pdfetex.exeをlatex.exeにコピーしなさい、というハナシになるらしい。ところが、だ、実際にはlatex.exeでコンパイルできているわけだし、逆にpdfetexを実行するとエラーが出てしまうわけだ。そうなると、迂闊にコピーなどしてよいものなのだろうか? そもそも私の理解に根本的な間違いがあるのではないだろうか?

    が、そうした疑問は放置して、ドキュメントの指示に従って作業を進める。この実行可能ファイルのリネームはかなり沢山あるため、それを自動化するバッチが用意されている。/usr/binディレクトリで以下のように操作する。

    	x:/usr/bin> 00copy_tex_executables_for_fmtutil_cnf.cmd
    	x:/usr/bin> 00copy
    
    最初のcmdファイルを実行すると、00copy.cmdが作成されるそうだ。で、これで何がどうなったのかは判らない。しかし、確かにlatexは使えるようになっている。たとえば;
    \documentstyle{article}
    \begin{document}
    Hello!
    \end{document}
    
    のようなサンプルファイルtest.texを作り、
    	latex test
    
    としてコンパイルしたところ、
    	This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4)
    
    というメッセージが出て、dvi作成に見事に成功!さらに、
    	dvipng test
    
    としてdviファイルをpngファイルに変換する(dvigifを使ってgifに変換しても良い)。これで適当な画像ビューアで出力が確認できる。なお、最終的にはdvipsでPSファイルに変換することになると思うが(dvipngやdvigifでは日本語は通らないようだし、dvipdfmxも若干問題がありそうだ)、PSファイルの表示にはGhostscriptが必要になるので、ここではまだ使えない。

    最後に、指示に従って;

    	copy dvips.exe odvips.exe
    
    とした。このあたりも何をやっているのかよく判らない。ちなみに、odvipsはdvipsのOmega版らしい(つまり、Unicode対応ということか?)。


    日本語pTeXの使用

    TeXの日本語対応は次の3ステップで行う。

     @フォントマップの変更
     Advipsの日本語対応
     BGhostscriptの日本語対応

    このうち、AとBはTeX本体ではなく、dviの表示に関するもの。TeX本体に関するのは@のフォントマップの変更のみで、設定ファイルに少し手を入れて、updmapを再実行するだけでよい…?(このあたりの理解は自信がない)。ともあれ、x:/usr/share/texmf/web2c/updmap.cfgを開いて、以下の行のコメントアウトを外す(行頭の#を削除すればよい)。

    	79) #Map japanese.map
    
    これで、コマンドラインから再度、
    	updmap
    
    を実行すればよい。前回updmapを実行したときと同じエラーが表示されるが、同じようにスルーしても良いようだ。


    dvipsを日本語対応にする

    dvipsはdviファイルをPSファイルに変換するツール。基本的にプレビュー表示は、dviをPSに変換してGSViewで表示するという方法を使うので、実質的に必須ツールである。ただし、teTeX添付のdvipsは、そのままでは日本語が通らない。なので、これを日本語対応版に置き換える。os2tetex.zipを解凍したときにdvips-jp.zipというzipファイルが作成されているはずなので、これをx:のルートに移動して、

    	[x:\]unzip dvips-jp.zip
    
    とする。これで上書き解凍されるはず。一応、上書きされているかどうか、タイムスタンプを確認することを推奨。


    GSViewとGhostscriptの日本語化

    GSViewはGhostscriptを呼び出して、PSファイル等をPM上のラスターデータに変換して表示するツール。まずは、このGSViewを入手&インストールする。それ自体は比較的簡単な作業だと思うので手順は割愛。ポイントは、GSViewにはGhostscriptが同梱されているが、そのGhostscriptのバージョンが必ずしもここで使用するのに適切なものではない点。

    このあたりも、本当のところはどうなんだろう?と言う気はするのだが、とりあえず、Ghostscript 8.5.3を使えとあるのでOS/2siteから入手した。これを適当なディレクトリ(たとえばx:/GS/gs8.53)に解凍したあと、GSViewの[Options|Advanced Configure]を次のように変更する(\PSFONTSはC:にあるものとする)。

    x:\GS\gs8.53\bin\gsdll2.dll
    x:\GS\gs8.53\lib;x:\GS\gs8.53\Resource\font;x:\GS\gs8.53\Resource\CIDfont;x:\GS\Fonts
    -dNOPLATFONTS -sFONTPATH="c:\psfonts"
    
    次に、gs800-j-vlib-os2.zipを入手して解凍し、作成されたCIDJ.cmdをgs8.53のディレクトリに持って行って実行する。
    	[x:\GS\gs8.53]CIDJ
    
    このCIDJ.cmdを実行すると「x]y」という妙な名前のディレクトリができ、その中にCIDFontというディレクトリが作成される。この中に日本語フォントの情報のファイルが入っている。このCIDFontディレクトリをgs8.53/Resourceの中に移動。これでGSViewで日本語PSファイルが表示できるようになる。

    「CIDフォント」とは2バイト文字対応のPSフォントのこと。

    なお、PostScriptプリンタを使う場合、プリントのダイアログでDeviceを「psmono」「600」(または300)として、「□PostScript printer」のチェックを外すと良い。デフォルト設定では、PSファイルの出力には問題はなかったが、PDFファイルが出力できなかった。


    動作確認

    以上で基本インストールは終了。以下のような簡単なテストファイル(test.tex)を作って、動作確認をしてみるとよい。

    \documentstyle{article}
    \begin{document}
    こんにちは
    \end{document}
    
    コンパイルは次のようにする(latexではなくplatexである点に注意)。
    	platex test
    
    これでtest.dviが作成されるはずなので、今度はdviをps化する。
    	dvips test
    
    これでtest.psが作成されるはずなので、これをGSViewで表示すればよい。ちなみに、私はバッチファイルを作って、コンパイルとPS化を一度に処理している。


    参考 日本語dviファイルのPDF化

    dvipdfmxというツールを使えば、日本語dviファイルを直接PDFファイルに変換することも可能。上記のtest.tex程度なら、dviを作成したあと、

    	dvipdfmx test
    
    とすれば日本語PDFファイルtest.pdfが作成できる。ただし、やや複雑なレイアウトのdviファイルでは、エラーが出て変換ができなかった。この点は今後の課題とする。ちなみに、GSViewの[File|Convert]ならば、同じファイルがPDF化可能だった。

    なお、dvipdfmxではlcirclew10等のフォントでエラーが発生するようだ。どうやら、OS/2で標準インストールしたpLaTeXでは「lcirclew10.pfb」が8.3切り詰めで「lcirclew.pfb」になっているのが問題らしい。

    /usr/share/texmf/fonts/type1/bluesky/latexの中にある「lcirclew.pfb」を別ディレクトリにコピーしたのち、「lcirclew10.pfb」にリネームし、元のディレクトリに戻す。そして、mktexlsrを実行して、検索データベースを更新する!これで出力可能になる。「lcircle10.pfb」(lcircle1.pfb)に関しても同様にすると良い。

    【逆襲のOS/2目次】 【ホーム】