\documentstyle[11pt,ascmac]{jarticle}

\title{''epsf.sty''マニュアル}

\author{風間 一洋\\NTTソフトウェア研究所 ソフトウェア基礎技術研究部}

\date{1990年8月9日}

\begin{document}

\maketitle

\section{はじめに}
NTT \TeX のPostScriptプリンタ用dviドライバ''dvi2ps''には、1.0jから
EPS(Encapsulated PostScript)型式のファイルを
取り込む機能が追加されています。
EPSファイルとは、カプセル化されたPostScriptファイルのことで、
プログラムが作成するページの中に簡単に絵を取り入れたりすることができます。

''epsf.sty''はこの機能を簡単に
使うことのできるスタイルファイルです。
この追加された機能と''epsf.sty''の使用法について説明します。

\section{$\backslash$specialを使った指定方法}
dvi2psは、EPSファイルの場合は\verb|\|specialで、
epsfileと指定すると自動的に次のコメントを読んで図形を配置します。

\begin{quote}
\%\%BoundingBox: $llx$ $lly$ $urx$ $ury$
\end{quote}

これはこのファイルが描く図形の外接四角形の左下の座標$(llx, lly)$
及び右上の座標$(urx, ury)$を情報を示しています。
dvi2psがこの情報を利用することで、
PostScript図形を自由に拡大・縮小して配置することができます。
また、''\%\%BoundingBox''コメントで指定された領域外は
自動的にクリッピングされます。

ただし、実際に文章中で使用する場合には、
取り込む絵の大きさだけ明示的に\TeX の方でスペースをあける必要があります。
指定する単位は1/72インチです。

EPSファイルの型式について、より詳しいことを知りたければ、
\cite{epsf}および\cite{confirm}を参考にしてください。

\paragraph{単にEPSを取り込む場合}

\begin{quote}
\verb|\special{epsfile=foo.ps}|
\end{quote}

\paragraph{縦または横の大きさを指定した場合}

縦(vsize)または横(hsize)の大きさのどちらかを指定した場合には、
dvi2psは指定されていない方の大きさも自動的に計算して、
縦・横のサイズを同じ倍率で拡大・縮小します。

縦と横の大きさを同時に指定した場合には、
それぞれ指定した大きさに拡大・縮小されます。
\begin{quote}
\verb|\special{epsfile=foo.ps hsize=144}|\\
\verb|\special{epsfile=foo.ps vsize=288}|\\
\verb|\special{epsfile=foo.ps hsize=144 vsize=288}|
\end{quote}

\paragraph{縦・横の倍率を指定した場合}
\begin{quote}
\verb|\special{epsfile=foo.ps hscale=0.5}|\\
\verb|\special{epsfile=foo.ps vscale=0.5}|\\
\verb|\special{epsfile=foo.ps hscale=0.5 vscale=0.5}|
\end{quote}

\section{``epsf.sty''の使用法}
``epsf.sty''はpsfigを変更したものです。
NTT版のdvi2psに合うように変更した他に、いくつかの改良が加えられています。

``epsf.sty''はEPSファイルのコメントを読んで、
\TeX 文書中にそれだけの大きさのスペースを自動的にあけてくれますので、
PostScriptの絵を取り込むためには
ユーザはファイルの取り込みを指定するだけです。

また''cm'',''in'',''pt''などを使ってサイズを指定できます。

\subsection{``epsf.sty''の簡単な使い方}
\begin{enumerate}
\item \LaTeX の文章で''epsf.sty''を指定します。

\begin{quote}
\verb|\documentstyle[|\em epsf\verb|]{j-article}|
\end{quote}

\item 文書中で、ファイルを指定します。
この例では同時に絵の高さを5cmにしてセンタリングしています。

\begin{quote}
\begin{verbatim}
\begin{center}
\epsfile{file=sample.ps,height=5cm}
\end{center}
\end{verbatim}
\end{quote}

\item \LaTeX で処理してから、dvi2psで出力します。
\end{enumerate}

\subsection{``epsf.sty''での指定方法}
\paragraph{単にEPSを取り込む場合}

\begin{quote}
\verb|\epsfile{file=foo.ps}|
\end{quote}

\paragraph{縦・横の大きさを指定した場合}

\begin{quote}
\verb|\epsfile{file=foo.ps,height=3cm}|\\
\verb|\epsfile{file=foo.ps,width=5cm}|\\
\verb|\epsfile{file=foo.ps,height=3cm,width=5cm}|
\end{quote}

\paragraph{倍率を指定した場合}

\begin{quote}
\verb|\epsfile{file=foo.ps,scale=0.5}|
\end{quote}

\paragraph{縦・横の倍率を指定した場合}

縦と横の倍率を別々に指定することもできます。
\begin{quote}
\verb|\epsfile{file=foo.ps,hscale=0.5}|\\
\verb|\epsfile{file=foo.ps,vscale=0.5}|\\
\verb|\epsfile{file=foo.ps,hscale=0.5,vscale=0.5}|
\end{quote}

\section{EPS以外のPSファイルの場合}

今まで説明してきた機能も、EPSファイル以外では使用することができません。
ここでは、EPS型式でないPSファイルを取り扱う場合を説明します。

\subsection{ヘッダ注釈}

EPSファイルは、EPS型式であることを示す次のような型式の行から
始まらなくてはいけません。
(ただし、dvi2ps, ``epsf.sty''ではわざとチェックしていません。)

\begin{quote}
\%\%!PS-Adobe-2.0 EPSF-1.2
\end{quote}

なお、この数字は規約のバージョンを表しています。

\subsection{``\%\%BoundingBox:''コメント}

dvi2psが図形を自動的に配置するためには、図形の外接四角形の座標情報が必要です。
この情報を得るためには、次のような方法でおこなうことができます。

\begin{enumerate}
\item ``\%\%BoundingBox:''情報を出力するように、
アプリケーションを改良する。

\begin{quote}
ビットマップ情報を扱うアプリケーションの場合は、
簡単におこなうことができます。
\end{quote}

\item 座標軸をつけてプリンタに出力する
\item ``bbfig''を使う

\begin{quote}
``bbfig''を使って次のように出力すると、プリンタに''\%\%BoundingBox:''情報と
外接四角形を付加した状態で出力されます。

プリンタと対話型環境を実現しているところでは、
``print''と''flush''オペレータを使って
この情報を標準出力に出力するように変更することで、
紙を節約することができます。

\begin{quote}
\begin{verbatim}
bbfig < foo.ps | lpr
\end{verbatim}
\end{quote}
\end{quote}
\end{enumerate}

\subsection{修正した方がよいコメント情報}
次のようなコメント情報は、トラブルの元になりますので削除してください。
これらが問題を引き起こすことがあります。
この修正には、この配布に含まれている''psfix''というperlスクリプトを
用いると便利です。

\begin{itemize}
\item \%\%BoundingBox: ? ? ? ?
\item \%\%Pages:
\item \%\%Page:
\item \%\%EOF
\end{itemize}

\subsection{使用してはいけないオペレータ}

EPSファイルに使用してはいけない次のようなオペレータがあります。
このようなオペレータはコメントアウトするか、
無効になるように再定義してください。
これらにオペレータについて詳しく知りたい場合は、
\cite{redbook}を参考にしてください。

``showpage''に関しては、dvi2psでは次のように再定義してあります。

\begin{quote}
/showpage \{\} def
\end{quote}

\begin{itemize}
\item カレント・ページの状態の変更

\begin{quote}
erasepage, copypage, showpage など
\end{quote}

\item パラメータの初期化

\begin{quote}
initgraphics, initmatrix, initclip など
\end{quote}

\item 出力デバイスに対する変更

\begin{quote}
framedevice, banddevice, nulldevice, setdevice など
\end{quote}

\item グラフィックス状態の変更

\begin{quote}
setscreen, settransfer, setmatrix など
\end{quote}

\item 用紙の設定

\begin{quote}
letter, note, legal, a4 など
\end{quote}

\item インタープリタ、サーバの動作の変更

\begin{quote}
quit, exitserver など
\end{quote}
\end{itemize}

\section{Macintoshのプリンタドライバで作成したPSファイルの場合}
MacintoshのLaserWriterドライバは、
Command--KやCommand--Fを使うことによって、
出力をPSファイルとしてセーブします。

  ここではMacintoshのプリンタドライバで生成したPostScriptファイルに対
しても''epsf.sty''を使えるようにする方法を説明します。

\subsection{LaserWriterドライバを用いたPSファイルの作成}
直接PostScript 型式でセーブできないソフトの場合は、
LaserWriterドライバを用いて
PSファイルを出力しなければなりません。
これは次の順序でおこないます。

\paragraph{Commnd--F, Command--Kを使う方法}
\begin{enumerate}
\item まずメニューバーのリンゴマークから
セレクタ（英語のシステムではchooser）を選択して
LaserWriterドライバを指定してください。
この時にバックグラウンドプリントがオフであることを確認してください。
これがオンの時はファイルが作成されません。

\item 次にメニューから印刷コマンドを選択してください。
この時ダイアログが出てきますから設定を確認してから、
OKを押したら、すぐにコマンドキーとfのキーを同時に押します。
``ポストスクリプトファイルを作成中''というメッセージが
出てからキーを離してください。

\item 生成されたPostScript ファイルは、
メッセージで表示されたように'PostScript0'というファイル名で
システムフォルダ、アプリケーションのあるフォルダ、カレントフォルダの
どれかにセーブされています。
この番号は0から9まで指定されます。
\end{enumerate}

なおLaserWriterドライバを次のように改造することによって、
ダイアログにPostScript ファイルをセーブするためのボタンを
付けることができます。

\begin{enumerate}
\item ResEditを使ってLaserWriterファイルのDITLの8191をオープンします。
\item DITLメニューから、'Select Item Number'を選択します。
\item 22を入力してからリターンを押します。
\item 'Open as Dialog Item'をFileメニューから選択します。
\item 'ディスクファイル'（英語では'Disk File'）
の位置情報がすべて0になっていますので、
ウィンドウのtop, left, bottom, rightの位置を72, 327, 90, 404に設定してから
ウィンドウを閉じます。
\item 今度はボタンが見えるようになっていますので、
好きなサイズ、位置に設定します。
\item セーブしてから、ResEditを終了します。
\end{enumerate}

この改造をおこなうとバックグラウンドプリントをonに設定しておいても
PSファイルを作ることが可能になります。
この時は、システムフォルダ内の'Spool folder'にファイルが作成されます。

\subsection{LaserPrepの修正方法}
Command-FまたはディスクファイルボタンでPSファイルを作成しますが、
これにはLaserPrepと呼ばれるファイルが必要です。
このLaserPrepファイルをプリンタに一緒に送ることによって、
出力が可能になります。

ここでは最新のシステムに付属しているLaserWriter 6.0 (appledict version
\#70 0)の場合の作成方法を説明します。

\begin{enumerate}
\item Command--Kを用いてPostScriptファイルを作ります。

\item このファイルの''\%\%EndProcSet''から後を切り取ります。

\begin{quote}
\begin{verbatim}
%endeexec
%%EndProcSet
--- ここで切り取る ---
%%EOF
\end{verbatim}
\end{quote}

\item このファイルの次の２つの部分をコメントアウトします。

\begin{itemize}
\item setsccinteractiveを無効にする

\begin{verbatim}
%ok{statusdict begin 9 sccinteractive 3 ne exch 0 ne or{9 0 3 setsccinteractive}
if end}if
\end{verbatim}

\item setdefaulttimeoutsを無効にする

\begin{verbatim}
%statusdict begin/waittimeout where{pop waittimeout 300 lt{md /wtkey true put}if
}if end
\end{verbatim}
\end{itemize}

\item LaserWriterシリーズ以外のAdobeの作ったPostScriptインタープリタを登
載しているPrinerの場合

次の行の"LaserWriter"という文字をプリンタの名前に変えて下さい。
これによってスムージング機能をLaserWriter以外でも使うことができます。

\begin{quote}
\begin{verbatim}
/LW{save statusdict/product get(LaserWriter)anchorsearch
exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def
\end{verbatim}
\end{quote}

例えば、これは

\begin{verbatim}
%!
/Times-Roman findfont 15 scalefont setfont
100 100 moveto
statusdict product get show
showpage
\end{verbatim}

とやった時に出力される文字です。
\end{enumerate}

\subsection{``\%\%BoundingBox:''コメントの修正}
  MacintoshのLaserWriterドライバが生成したPSファイルには''\%\%BoundingBox:''
と呼ばれる図形の領域情報を示すコメントが次のようになっています。

\begin{quote}
\%\%BoundingBox: ? ? ? ?
\end{quote}

ここでは先ほど説明したように''bbfig''などを用いて
、外接四角形情報を抽出します。

\begin{quote}
\begin{verbatim}
cat dictv60.ps sample.ps | bbfig | lpr

    dictv60.ps  MacintoshのLaserPrepファイル
    sample.ps   Command-Fまたは''ディスクファイル''ボタンを
                使って作成した''PostScript?''ファイル
\end{verbatim}
\end{quote}

この結果、プリンタには次のような情報が出力されるはずです。

\begin{quote}
\%\%BoundingBox: 40 709 147 798\\
\end{quote}
これを参考にファイルの最初を、たとえば次のように修正します。

\begin{quote}\begin{verbatim}
%!PS-Adobe-2.0
%%Title: 名称未設定-レイヤー#1
%%Creator: PrintMonitor
%%CreationDate: 1990年 7月 18日 水曜日
%%Pages: (atend)
%%BoundingBox: 40 709 147 798
%%PageBoundingBox: 115 120 2261 3247
%%For: Kazuhiro Kazama
%%IncludeProcSet: "(AppleDict md)" 70 0
%%EndComments
\end{verbatim}\end{quote}

\subsection{コメントの修正}
さらに\%\%Pages:, \%\%Page:, \%\%EOFのようなコメント情報を削除してください。
これにはpsfixを使うと便利です。

\subsection{LaserPrepに対する修正と出力}
他の文書に取り込まれるような場合に
うまくいくように、
ここではこの配布に含まれている''macfix.ps''と呼ばれるパッチファイルで
修正します。

ただし、これを使った場合は以前の方法を使った文章に対しての互換性はあり
ませんので、注意して下さい。
最終的にdvi2psを使って次のように出力します。

\begin{quote}\begin{verbatim}
dvi2ps -i dictv60.ps -i macfix.ps sample.dvi | lpr

        dictv60.ps      MacintoshのLaserPrep ファイル
        macfix.ps       MacintoshのLaserPrepに対する修正ファイル
\end{verbatim}\end{quote}
また、これらの方法をよく使う人に対しては、
ここで使用しているLaserPrepファイルと''macfix.ps''を
tex.psdocの最後に付け加えておくと便利です。

\begin{thebibliography}{9}
\bibitem{epsf}PostScript Developer Tools \& Strategies Group,
{\it ENCAPSULATED PostScript FILES Specification Version 2.0},
Adobe Systems Inc.,1989.
\bibitem{confirm}PostScript Developer Tools \& Strategies Group,
{\it DOCUMENT STRUCTURING CONVENTIONS Specification Version 2.1},
Adobe Systems Inc.,1989.
\bibitem{redbook}Adobe Systems Inc.,
{\it PostScript Language Reference Manual}, 
Addison Wesley, 1986.
\end{thebibliography}
\end{document}
