\documentstyle[a4j,11pt]{jarticle}
\input picbox
\title{LBPページ記述言語の描画命令を直接扱うための \\dviout/prt の改変について}
\author{東北大学工学部応用物理学科
    \and 岩井 貞之
    \thanks{sada@atman.cc.tohoku.ac.jp,　GBF03356@niftyserve.or.jp}}
\date{1993/11/09 $\beta $-version}
\begin{document}
\maketitle

%-------------------------------------------------------------------%
\section{改造の動機}
%-------------------------------------------------------------------%
dviout/prtは、非常に優れたソフトであり、事実上DOSマシンでの\TeX の標準
デバイスドライバーの地位を確立してます。また、多くの方々の努力により様
々な拡張が施され、\TeX の唯一の弱点とも言える図表とのコンビネーション
を補うための機能を備えています。dviout/prtのおかげで、以前は鋏と糊を使
い苦労して切り貼りで出していたのが信じられないくらい簡単に図面を含んだ
文書を出せるようになり、一ユーザーとして非常にありがたく使わせていただ
いております。

ところで、図面等を出力するには、更に簡単な方法があります。それは最近急
速に低価格化が進み、一般の個人ユーザーも所有しているケースが多くなって
きたレーザープリンターのページ記述言語を用いて図を書くという方法です。
この場合、出力がデバイスドライバーとレーザープリンターに完全に依存して
しまうのですが、その簡便性、描画の美しさは一考に値するものがあります。
そこでこの度、dviprtがCANONのLIPS3とEPSONのESC/Pageに対応していることもあり、
それらのページ記述言語を直接扱えるように改造することを考えました。

完全にドライバーとプリンター依存のdviファイルを作ることになってしまい
ますが、dviprtとレーザープリンター以外の組み合わせではその部分は空白に
なって出力されますし、その部分はどうせ図を切り貼りするための部分なので
あまり大きな問題はないだろうと考えました。

%-------------------------------------------------------------------%
\section{動作仕様}
%-------------------------------------------------------------------%

%-------------------------------------------------------------------%
\begin{figure}[t]
\begin{center}
\PictureBox{spec}
\caption{GPで書いた図を張り込んだ例、その１。
picbox.texで読み込んでいる。}
\end{center}
\end{figure}
%-------------------------------------------------------------------%

仕組みは非常に簡単で、別ファイルにあらかじめ印刷したい絵をページ記述言語で書いておくと言うものです。dviファイル中のスペシャルコマンドで、
\begin{verbatim}
\special{lipsfile=*****}　もしくは　\specail{escpagefile=*****}
\end{verbatim}
の記述が見つかった場合は、指定されたファイルをオープンし中身のコードを
レーザープリンターに送るようになっています。そのときの出力先にLIPS3も
しくはESC/Pageをサポートしていないプリンターが指定されているときは、ス
ペシャルコマンドを無視するようになっています。

オープンされるファイル（LIPSの時は\verb+***+.LP3、ESC/Pageの時
は\verb+***+.EPG）には、
各々のページ記述言語が１バイトごと直接書き込まれています。手順は以下の
通りです。

\begin{enumerate}
\item まずあらかじめ文書の方で絵を張り込む部分の枠をあけ、\TeX のカレ
ントポイントをその枠の左上隅に移動しておきます。付属のpicture.texを使
うと楽に作業が出来ます。（picture.texは\LaTeX でもplain\TeX でも使えます）

\item 次に、スペシャルが現れた時点でdviprtはその時点のカレントポイント
の位置をLBPに送り、その位置を描画の座標原点にします。ファイル中の絵は
左上を座標原点に取り描画するように書かれている必要があります。

\item その後dviprtはページ記述言語が書かれたファイルをオープンし、１バ
イトごとLBPに送ります。

\item 送られるページ記述言語は、まずLBPがキャラクターモードになってい
るのでその設定を内部バッファーに保存し、LBPをグラフィックモードに切り
替え、初期化、フォントの設定、座標の設定の作業をします。

\item その後はページ記述言語でそのまま絵を描きます。これらのところはサ
ンプルのファイルを参照して下さい。

\item 最後にグラフィックモードを終わり、先に保存したキャラクターモードを
戻して終了します。

\item dviprtはその後いつものように文字列を出力していきます。

\end{enumerate}

dvioutでプレビューする場合は、その部分はただの空白に見えます。位置の確
認のみしか行えませんが、これは原理上仕方ありません。

%-------------------------------------------------------------------%
\begin{figure}[t]
\begin{center}
\PictureFrameBox{lasersys}

\caption{GPで書いた図を張り込んだ例その２。GPの描画機能を使った実験系の模式図。
picbox.texで読み込んでいる。}
\end{center}
\end{figure}
%-------------------------------------------------------------------%

これで、LBPを使っている限りは、そのLBPに対応したアプリケーションが印刷
する綺麗な出力そのままをTeXの文書に張り込めるようになります。デバイス
に依存しているだけあって、ghostscript、tpic等を介すよりも遥かに細かく
綺麗な出力が得られます。更に印字部分の処理は他のアプリケーションにまか
せ、事前にファイルを作っておくことによって、dviprt本体には負荷をかけず
にすみますので、動作も軽快です。

また、dviprtでLIPSのLBPを使う指定の'-p=l'、もしくはESC/Pageの'-p=m'の
オプションがなければ、この部
分のspecialは無視する仕様になっています。その他の部分は
今まで通りのdviprtです。なお、以前のdvioutの仕様ではspecial commandの中
に'file='の文字があるとghostscriptを起動してしまいます。ここの所をパス
するためにdvioutの方もいじりました。


%-------------------------------------------------------------------%
\section{現在対応しているアプリケーション}
%-------------------------------------------------------------------%

現在この仕様に対応しているアプリケーションは、以下の通りです。
\begin{itemize}
\item GP $\cdots$ (FGALAP LIB 7, PC98版、IBM PC/AT 互換機版)

枝松圭一氏（eda@akiu.gw.tohoku.ac.jp）作、二次元グラフプロット\&データ
解析プログラム。lips3出力用のデバイスドライバー（LIPS3.GPD）を同梱のも
のと差し替える必要あり。

\item Ngraph $\cdots$ (FGALAP LIB 7, PC98版)

石坂智氏（isizaka@nsis86.cl.nec.co.jp、NAH01761@niftyserve.or.jp）作、
デ−タ解析・グラフ描画プログラム。LIPS形式のファイルのみ制限付きで使用
可。（飯原氏作のドライバー GRA2LIPS.EXE が作るGPと同形式のファイルによ
る。修正を要す場合あり）

\end{itemize}

元々この出力の仕様は、上記のGPの作者の枝松氏がTeXのデバイスドライバー
であるDVI2LP3でGPで書いたグラフを張り込んで印刷するために考え出したも
のです。LIPSもしくはESC/Pageを扱えるソフトならば、出力先をファイルにも
指定できるように若干修正するだけで対応できると思います。


%-------------------------------------------------------------------%
\section{現時点での問題点}
%-------------------------------------------------------------------%
\begin{itemize}
\item 
現在手元にあるのがPC98とCANON Lasershot を使った開発環境で、その組み合
わせでしか動作を確認しておりません。ESC/Pageをサポートしたプリンターは
手元になく、また対応しているアプリケーションもないことからテストしてお
りません。原理的には問題ないと思いますが本当の所はわかりません。PC/AT
互換機やその他の機種でも、機種に依存しないルーチンだと思いますので、こ
のままコンパイル可能だと思います。

\item 
dviprtには拡大縮小を印字時に行ってくれるオプションもありますが、この場
合印刷される図は大きさがもとのままになります。これは読み込んでくるファ
イルの内容が、それを作るアプリケーション側で指定した大きさで書かれてい
るためです。

\item 
Vオプションによる横向きの印字は問題ないと思います。ただ、紙面をはみ出
す位置に図が来てしまうと、複数の図があちこちに現れてしまうので注意して
下さい。

\item 
複雑な図を同じページに何枚か書くと、LBP側に送るデータがあまりに
多くなってしまうことがあります。このようなとき、例えばLasershotの
場合'メモリオーバー'のエラーが出ます。このような時は、Lasershotの受信
バッファーを0に設定するなどしてメモリを最大限使えるようにすると回避出
来ることがあります。
\end{itemize}

%-------------------------------------------------------------------%
\section{連絡先}
%-------------------------------------------------------------------%

何か問題などがございましたら、下記のところまでご連絡下さい。

\begin{flushright}
\begin{tabular}{ll}
  \multicolumn{2}{l}{\large 岩井 貞之 (Sadayuki Iwai)} \\
                    E-mail    & {\tt GBF03356@niftyserve.or.jp} \\
\end{tabular}\\
\end{flushright}
%-------------------------------------------------------------------%
\section{SHIMAによる補足}
%-------------------------------------------------------------------%
\begin{verbatim}
\special{lipsfile=*****}　もしくは　\specail{escpagefile=*****}
\end{verbatim}
のほかに
\begin{verbatim}
\special{pdlfile=*****}
\end{verbatim}
を追加しました。
これは、dviprtで'p=l'や'p=m'の指定がなくても、
\verb+***+.PDLの内容をプリンタに転送するものです。
\end{document}
