ghostscript は、プレーン tex で pstricks 付きの color.tex を使用すると、--execute-- で undefined を返します。

ghostscript は、プレーン tex で pstricks 付きの color.tex を使用すると、--execute-- で undefined を返します。

次のプレーン 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.5gray 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 0which が呼び出され、0 setgraywhich が機能します。

関連情報