TeX と「TeX 以外」:正しい理解のために

最近は便利な LaTeX の統合環境が開発され,“ボタン一発”で PDF 化できるようになっています. しかし,統合環境の使用者が増えるにつれ,

dvips と ps2pdf を使用して PDF 化すると正しく表示されていた EPS 画像が,dvipdfmx で PDF 化したら表示がずれるようになった

などの類のトラブルを見かけることが多くなりました. これは,ユーザ自身が“自分が何をしているのか”を把握していない,ということが真の原因です.

そこで,ここでは“TeX と TeX 以外のものとの関係”について,初心者の(というより,“いまどきの”)LaTeX ユーザがふまえておくべき点を(独断と偏見で)挙げてみます. 以下の記述は“目の前にある問題の解決”には決して役には立ちませんが,“TeX 以外のものに関する問題に直面したときに落ち着いて対処する余裕”を身につける手助けにはなるでしょう.



LaTeX を用いた文書作成の概要と心構え

LaTeX を用いた文書作成では,基本的には次の手順を用います.

ここで,LaTeX 自身は“ソースファイルを処理して DVI ファイルを作成する”という作業しか行いません. (pTeX による組版の仕組みについては和文の仕組みに記述があります.) それ以外の,“DVI ファイルの画面表示”,“DVI ファイルのほかの形式(PostScriptPDF など)への変換”といった処理は,LaTeX とはまったく別のソフトウェアで行います.

入門書においては,(不慣れな読者に負担をかけたくないという理由からだとは思いますが)“TeX 自身”と各種の“TeX 関連ソフトウェア”をあまり区別せずに“TeX(システム)”としてひとくくりにしていることもしばしばあります. しかし,TeX 自身と個々の TeX 関連ソフトウェアの区別,あるいは,TeX 関連ソフトウェアどうしの区別,は厳格に行うように心がけてください. 上記の一連の作業で用いる個々のソフトウェアの区別をきちんとつければ,“いつもと違う”ことをする場合にどのソフトウェアを取り換えて処理すればよいかの見当がつくでしょう. また,“トラブルの際には‘どのソフトウェアの’問題であるかを把握する必要がある”という(TeX 関係のコミュニティでしばしば指摘される)ことの理由も自ずと明らかになるでしょう.

もし,ユーザ自身が TeXworks 等の“統合環境”しか用いたことがないのでしたら,コマンドラインからコマンドを直接入力して処理する方法も,(常用するかどうかは別としても)心得ておいてください. 実際,トラブルシューティングの際には,“問題の所在”を明確にするために,個々のソフトウェアをなるべく単独で使用することになります. また,個々のコマンドを直接実行してみれば,TeX 自身とそれ以外のソフトウェアを用いていることを明確に認識できるでしょう. また,統合環境や各種ソフトウェアの“便利ボタン”を用いるときには,“個々の処理の際にどのソフトウェアを呼び出しているか”(これは,通常,各種オプション設定のところで確認・変更できます)を必要があれば(少なくとも,最初に用いるときには必ず)確認することになります.

TeX 自身で処理することと TeX 自身では扱わないこと

最近のワープロソフトに慣れた方には奇異に思えるかもしれませんが,“画像の取り込み”,“色の設定”といったことは TeX 自身の機能ではありません. (実際に出力される文書の体裁に関して)TeX 自身でできることは,極端に言えば“文字と罫線(水平または垂直なもののみ)を並べる”ことだけです(もちろん,それに必要な行分割処理などの内部処理は当然行います).

では,“画像の取り込み”という処理はどのようにして実現されているか,というと,“取り込むべき画像ファイルのファイル名や取り込み方(拡大率など)に関する指示”を dvi ファイルの中に書き込み(TeX 自身では dvi ファイルには画像そのものは入れません), それを dvi ファイルを処理する個々のソフトウェア(以下,dviware と総称します)に解釈させる, という方法を用います. “色”の処理や PDF の“しおり”(bookmark)の処理に関しても同様です.

組版処理自身(TeX そのものの処理)と dviware が担当する処理が“分業”されている(実際,TeX 自身は,画像に関しては“画像用のスペースを空けておきあとで貼り込んでもらう”という古式ゆかしい方法でしか処理していないわけです)というのには,確かに面倒な面があります. しかし,これは,プラットフォームに応じた dviware あるいは個々のユニークな機能をもった dviware を適宜選択して用いることができる,ということへの代償とみなすのが妥当でしょう. また,その面倒さを軽減するために“統合環境”が用意されたわけです.

画像の取り扱いと graphicx パッケージ

前項で述べたように,画像の取り込みという処理は TeX 自身の機能ではなく,“dvi ファイルの中に書き込まれた画像の取り扱いに関する指示”を個々の dviware が解釈する,という仕組みになっています. ここで,次のことに注意が必要です.

まず,前者(dviware によって,“理解できる指示”の形式は異なる)についてですが,dviware によって“理解できる指示”の形式が異なるのは(指示を解釈するのが個々の dviware である以上)当然のことで,TeX 自身は“各々の dviware 専用の指示”を dvi ファイルに書き込まなければならないわけです. もっとも,画像の取り込みや色に関してはよその dviware に対する指示を理解する dviware もかなりありますが,その場合でも“完全互換”であることを期待はできません.

一方,ユーザ側から見れば,graphicx パッケージを使用して

\includegrahics[<options>]{<filename>}

という形式で画像を取り込めるわけで,dviware 専用の記述は見当たりませんが, 実際には,graphicx パッケージ(の内部で読み込まれる graphics パッケージ)へのオプション指定によって,dviware を指定することに注意してください. 例えば,

\usepackage[dvipdfmx]{graphicx}

という指定で graphicx パッケージを読みこんだ場合には,オプション指定 dvipdfmx に応じて dvipdfmx.def というファイルも読み込まれ,この def ファイルの中に“dvipdfmx に対する指示の仕方”が載っているのです. ほかの dviware を指定した場合も同様で,

\usepackage[dvips]{graphicx}

ならば“dvips への指示の仕方”をファイル dvips.def から取得するわけです.

このような仕組みになっているため,graphicx パッケージ(に限らず,dviware の機能に頼った処理へのインタフェイスを提供するパッケージ)への“ドライバ指定”(=“dviware 指定”)オプションは一度にはただひとつしか指定できないことがわかるでしょう(実際,“複数の dviware に共通に理解されるような指示法”が存在するとは限りません). もし,何らかの理由で複数の dviware を使い分ける場合は,“dviware A で処理するための dvi ファイルを,dviware A 用のドライバ指定を行った状態でタイプセットして作成する”一方,“dviware B で処理するための dvi ファイルを,dviware B 用のドライバ指定を行った状態でタイプセットして作成する”という具合にいちいちドライバ指定を切り換えなければなりません.

後者(dviware によって,“サポートする画像形式”の種類は異なる)のほうも,このこと自体は言うまでもないことでしょうけれども,ユーザ自身が“自分で何をしているのか”を把握していない場合には問題となります.

例えば,ある dviware(≠ dvipdfmx)が“裏で dvipdfmx を呼び出して PDF 化する”という処理を用意していたとしましょう. このとき,その dviware 自身がサポートする形式の画像を取り込んだ場合には,その dviware での処理は問題なく実行できます. しかし,取り込まれている画像の形式が dvipdfmx ではサポートしないものであった場合には,dvipdfmx での PDF 化の際にユーザの意図しない結果が生じるわけです. もちろん,このようなことは各 dviware の責任ではなく,単に,

ようにすれば済みます. もちろん,各種“便利ボタン”に関連付けられているソフトウェアのほうを,使いたい形式の画像をサポートするものに変更してもよいわけです.

特殊なパッケージ

しばしば見かける“初心者向けの”書籍では,各種のパッケージをあれこれと紹介していることもあり,ユーザの技術レベルに関係なく様々な処理を利用している場面をよく目にします. そのこと自体には問題はないのですが,各種のパッケージのすべてが TeX の機能だけで済ませているとは限らないことに注意が必要です.

例えば,psfrag パッケージや PSTricks パッケージは PostScript コードを直接用いてそれらのパッケージが提供する機能を実現しています. 実際,psfrag.pro あるいは pstricks.pro などの dvips 用の各種ヘッダファイルに必要な PostScript コードが記述されています. したがって,psfrag パッケージや PSTricks パッケージを用いる際には,それらのヘッダファイル(および psfrag や PSTricks によって与えられる \special 命令)をパッケージの意図通りに使用できる dviware を用いる必要があるわけです. *1

ほかのパッケージに関しても同様で,少なくともそれぞれのパッケージのマニュアルを通読し,パッケージが前提とする条件(例えば,dvi ファイルを dvips で PostScript 化するといった条件)について確認する必要があります. その際,先にも述べた

TeX 自身でできることは,極端に言えば “文字と罫線(水平または垂直なもののみ)を並べる”ことだけ

という点を心得ておけば“TeX 自身の機能以外のものを用いているか否か”の見当がつけやすくなることでしょう. *2


*1 実際,ここで例示した 2 個のパッケージは,基本的には dvips でPostScript 化した後,その PostScript ファイルを更に加工することを念頭に置いています.したがって,例えば psfrag パッケージを用いた文書の PDF 化には dvipdfmx は(少なくとも,何も細工・設定をしない状態では)使えないわけです.
*2 例えば,psfrag パッケージが提供する“図中のラベル文字列を,文書側で指定した文字列で置き換える”という処理は,(La)TeX 側では画像ファイルの中身には関知しない以上,dviware(あるいはその先の処理を担当するソフトウェア)の機能に頼っているのではないかと見当がつくわけです.

Last-modified: 2017-06-24 (土) 17:30:13 (332d)