*dvips [#y40d302b]

[未完]
dvips は DVI ファイルを [[PostScript]] ファイルに変換するソフトウェアです。
実績があり、信頼のおけるプログラムとして TeX の世界では広く用いられてきました。

**dvips の用紙サイズ指定 [#b1d8723b]
-[[Tom Rokicki and Radical Eye Software:http://www.radicaleye.com/]]
--[[The Official Dvips Home Page:http://www.radicaleye.com/dvips.html]]
-[[Dvips(k):http://www.tug.org/dvips/]]

標準では A4 サイズになり,%%BoundingBox や %%PaperSize
には正しい用紙サイズが出力されますが,PostScript の用紙設定コマンド a4 は出力されません。
a4 コマンドを含む PostScript ファイルはプリンタ依存になってしまうからです。
しかし,これを無設定の Acrobat Distiller で処理すると,用紙がレターサイズになってしまいます。(注意: 2007年10月24日現在、最も新しい config.ps では、デフォルトの用紙設定コマンド
a4 が出力されます。a4 が解釈できないプリンタの場合は無視され、解釈される
場合だけ使用されるように書かれています。 最新の W32TeX における dvips ではこの
config.ps が採用されています。したがって、デフォルト用紙サイズを使って
ps を作成する場合、以下に書かれているようにする必要はありません。)
レターサイズになっても Acrobat や Acrobat Reader
での印刷に支障はありませんが,気になるなら Distiller
のジョブオプションの設定で A4 をデフォルトにするか,あるいは dvips
に -t a4 というオプションを付けて実行します。
この場合 a4 コマンドが PostScript ファイルに出力されます。
----
#contents
----

私の [[新ドキュメントクラス:http://oku.edu.mie-u.ac.jp/~okumura/jsclasses/]] でたとえば

 \documentclass[papersize,a4paper]{jsarticle}
**使い方 [#a0ed32c6]

のようにオプション [papersize] を与えれば,dviファイル中に
foo.dvi という DVI ファイルを PostScript ファイル foo.ps に変換するには,次のように打ち込みます:
 dvips -o foo.ps foo.dvi
このとき,TeX Live では欧文フォントとして Type 1 フォントが使われます。

// 少し古い W32TeX を使っている場合は Type 1 フォントでなく pk フォントが使われてしまい,これを PDF に変換すると汚くなります。
// 私の手元では 2012 年 11 月時点で pk フォントを利用していたことを確認しています。
// 2014 年 12 月にはいつのまにか Type 1 フォントになっていました。
// なお,かつての teTeX や ptetex は 2006 年時点で既に Type 1 フォントでした。
PS ファイルを引き続き PDF に変換する予定があれば
 dvips -Ppdf -o foo.ps foo.dvi
ように “-Ppdf” というオプションを付けておきましょう。
欧文 Base14 フォントを埋め込む場合は “-Pdownload35” といったオプションにします。

ハイパーリンクを埋め込んであるなら
 dvips -z -o foo.ps foo.dvi
のように “-z” を付けます。

***制限事項 [#x73150ff]

長い間新機能の追加もなく、このため技術的にはかなり遅れています。
以下のような制限があります。

- TrueType や OpenType フォントは利用できない。
>
利用できるのは PostScript Type1 フォントと PK フォントです。
<
- PNG、JPEG、PDF などの画像は利用できない。
>
画像は常に EPS へ変換して利用します。
<

***dvips の用紙サイズ指定 [#b1d8723b]

標準では A4 サイズになり,&#x25;&#x25;BoundingBox や &#x25;&#x25;PaperSize には正しい用紙サイズが出力され,PostScript の用紙設定コマンド a4 が出力されます。
この用紙設定コマンドが解釈不可能な場合には単に無視されます。

レターサイズにするには dvips に -t letter というオプションをつけて実行します。

[[jsclasses]]でたとえば
 \documentclass[a4paper,papersize]{jsarticle}
のようにオプション [papersize] を与えれば,DVI ファイル中に
 papersize=用紙の幅,用紙の高さ
という形式の [[special 命令]]が挿入されます。

という形式の special コマンドが挿入されます。

一般のドキュメントクラスでこのような special を出力するには,LaTeX ファイルのプリアンブルにたとえば

 \AtBeginDvi{\special{papersize=210mm,297mm}}

のように書いておきます。

この papersize special の解釈は dvips の設定ファイル config.ps に依存します。
たとえば config.ps に次のように書いてあったとします。
また,dvips に -t a4 というオプションを与えれば,強制的に a4 という設定が選ばれ,PDF に変換した際に正しく A4 サイズになります。

 @ a4size 210mm 297mm
 @+ %%PaperSize: a4
 
 @ a4 210mm 297mm
 @+ ! %%DocumentPaperSizes: a4
 @+ %%BeginPaperSize: a4
 @+ a4
 @+ %%EndPaperSize
 
 @ b4 257mm 364mm
 @+ ! %%DocumentPaperSizes: B4
 @+ %%BeginPaperSize: B4
 @+ b4
 @+ %%EndPaperSize
 
 @ unknown 0in 0in
 @+ statusdict /setpageparams known { hsize vsize 0 1 statusdict begin {
 @+ setpageparams } stopped end } { true } ifelse { statusdict /setpage known
 @+ { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if
***dvips で変換した PS ファイルを PDF に変換する [#m9a341d6]

ここで dvi ファイル内で papersize
を与えた場合,それが210mm×297mmに±1/4インチ(dvips 5.96 以降では 5bp. なお、
ptetex3 の dvips は 実質的に 5.96 になっており、5bp になっているはず.)の誤差で一致するなら a4size が選ばれます。
これは &#x25;&#x25;BoundingBox を210mm×297mmにし,&#x25;&#x25;PaperSize: a4
というコメントを出力しますが,Distiller で PDF
に変換する際にはジョブオプションのデフォルトページサイズになります。
dvips で出力した PS ファイルを PDF ファイルに変換するには,以下の方法があります:

また,257mm×364mmに±1/4インチ(dvips 5.96 以降では 5bp. なお、
ptetex3 の dvips は 実質的に 5.96 になっており、5bp になっているはず.)の誤差で一致するなら b4
が選ばれますが,これは &#x25;&#x25;BoundingBox を257mm×364mmにし,頭の部分で
-dvips で変換した PS ファイルは [[Ghostscript]] 付属の ps2pdf コマンドで PDF ファイルに変換できます。きちんと設定すれば,日本語部分もきれいなアウトラインで出力されます。

 %%DocumentPaperSizes: B4
-Adobe Acrobat をお持ちであれば,PS ファイルをダブルクリックすれば Adobe Acrobat Distiller が PDF に変換してくれます。

という1行,最後のところで
通常のドキュメントクラスでは,a4paper オプションを付けても,Adobe Acrobat Distiller のデフォルト設定では用紙がレターサイズになってしまいます。
A4 にするには,ジョブオプションの設定でページサイズを変えるか,あるいは dvips に “-t a4” というオプションを付けてください。
[[jsclasses]]なら
 \documentclass[a4paper,papersize]{jsarticle}
のように “papersize” オプションを付けると dvips が用紙サイズを認識してくれます。

 %%BeginPaperSize: B4
 b4
 %%EndPaperSize
***図の挿入 [#e0b06e9a]

という3行を出力します。
b4 という PostScript コマンドのため,PostScript
ファイルはプリンタ依存になってしまいますが,PDF
に変換した際に正しく B4 サイズになります。
図を挿入する際には [[graphicx]] パッケージに
 \usepackage[dvips]{graphicx}
のように dvips オプションを指定します.
図として EPS を挿入できます.

papersize がどの項目にも一致しないなら,最後の unknown
が選ばれ,
% 以下,LaTeX入門/図表からの移転。

 statusdict /setpageparams known { hsize vsize 0 1 statusdict begin {
 setpageparams } stopped end } { true } ifelse { statusdict /setpage known
 { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if
(u)pLaTeX + [[dvips]] でタイプセットする場合には
 \documentclass[dvips]{jsarticle}
 \usepackage[dvips]{graphicx}
と書くことで,画像取り込みの指示が dvips に正しく伝わります。

という3行が出力され,プリンタ依存になりますがページサイズが正しく設定されます
(この3行は新しい teTeX 2 ではなくなっています)。
***しおりの文字化けを防ぐ [#v5d4fb65]

また,dvips に -t a4 というオプションを与えれば,強制的に a4
という設定が選ばれ,上記の b4 の場合と同様,PDF
に変換した際に正しく A4 サイズになります。
LaTeX で作成した日本語文書を
dvips を用いて PDF 化する際,しおりが文字化けしないようにするためには
[[convbkmk>https://ctan.org/pkg/convbkmk]] または bkmk2uni を使います。

-http://www.t-lab.opal.ne.jp/tex/uptex.html
-[[convbkmkコマンドの使い方 覚え書き:http://konoyonohana.blog.fc2.com/blog-entry-35.html]]

なお,convbkmk は Ruby スクリプトですので,[[Ruby]] の処理系が必要です.


**リンク集 [#fd89856f]

-TeXLiveのdvips [[forum:678]]
-pdfへのフォントの埋め込みとPSプリンタ [[qa:38540]]

***ChangeLog [#o96c7d5c]
-[[[texlive] Index of /trunk/Build/source/texk/dvipsk:http://www.tug.org/svn/texlive/trunk/Build/source/texk/dvipsk/]]
--[[log:http://www.tug.org/svn/texlive/trunk/Build/source/texk/dvipsk/?view=log]]
--[[ChangeLog:http://www.tug.org/svn/texlive/trunk/Build/source/texk/dvipsk/ChangeLog?view=markup]]