次のプレーン TeX ファイルを想定します。
\input pstricks
\input color
\pscircle{1.5}
\bye
eTeXを使用したコンパイルは問題なく動作します。dvipsも同様です。ただし、結果として得られるPSファイルはgsを使用して処理できません。必要な場合はエラーメッセージを投稿します。ないカラー パッケージを使用すると、処理フローは正常に動作します。生成された 2 つの Postscript ファイルの違いは次のとおりです。
< 0.8 SLW 0. setgray 0.0 0.0 2 copy moveto 42.67911 0 CLW mul round
< sub dup 0 rmoveto 0 360 arc closepath gsave 0.8 SLW 0. setgray 1.
< .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore end
---
> 0.8 SLW gray 0 0.0 0.0 2 copy moveto 42.67911 0 CLW mul round sub
> dup 0 rmoveto 0 360 arc closepath gsave 0.8 SLW gray 0 1. .setopacityalpha
> 0 setlinejoin 0 setlinecap stroke grestore end
つまり、1 回は「0. setgray」が使用され、もう 1 回は「gray 0」が使用されています。「gray」が有効な Postscript コマンドである場合、私が調べたところ、色を定義する通常の方法は「setxxx」であることがわかりました。
まだ、これが color.sty の問題なのか、それとも ghostscript の問題なのか 100% はっきりしていません。簡単なヒントをいただけませんか? ありがとうございます!
答え1
PSTricks には少なくとも定義された色 が必要ですblack
。これは内部的に として定義され、\black
それ自体は に展開されます0 setgray
。ただし、 が定義されている場合のみです。ただし、これは機能します。
\input pstricks
\input color
\newgray{black}{0}
\pscircle{1.5}
\bye
問題となる部分は次のとおりですcolor.sty
:
\ifx\color@gray\@undefined
\ifx\color@rgb\@undefined
\else
\definecolor{black}{rgb}{0,0,0}
\definecolor{white}{rgb}{1,1,1}
\fi
\else
\definecolor{black}{gray}{0}
\definecolor{white}{gray}{1}
\fi
歴史的な理由により、PSTricks はデフォルトで色 を定義します\black
。
\color@gray
は定義されていないため、色 は を実行し、
\definecolor{black}{gray}{0}
の代わりに ps ファイルに渡されます0 setgray
。ただし、パッケージ を使用する必要は実際にはありませんcolor
。plainTeX の PSTricks マクロを使用して色を設定できます。
答え2
これは gs の問題ではありません (生成された PostScript はエラーです)
ラテックスでは、明示的に指定しなくてもxcolorがロードされるので動作します(そうだと思います)。
\documentclass{article}
\usepackage{pstricks}
\usepackage{color}
\begin{document}
\pscircle{1.5}
\end{document}
グレースケールカラーは普通に無地でも機能します
\special{color push gray 0.5}
on two
\special{color pop}
three four
\bye
dvips特殊(カラーコマンドの後に引数が来る)はPostScriptに変換される。
0.5 TeXcolorgray
これは、多かれ少なかれ、原始的なPostScript呼び出しである。
0.5 setgray
カラー パッケージの動作は通常、内部カラーを「ドライバー固有の特殊構文」で保持し、グレーはgray 0.5
黒gray 0
などとし、必要な場合は LaTeX で処理して\special{color push \current@color}
適切なコードを生成します。
しかし、ここでは、pstricks の内部形式に変換するインターフェイスなので、pstricks は、 pdflatex で pstricks を使用しようとした場合に常に undefined として表示されるgray 0
悪名高いコマンドを呼び出す代わりに、黒を出力し\c@lor@to@ps
ます。
\c@lor@to@ps gray 0
ここでは\c@lor@ps@gray 0
which が呼び出され、0 setgray
which が機能します。