Ghostscript gibt „undefined in --execute--“ aus, wenn color.tex mit pstricks auf einfachem Tex verwendet wird

Ghostscript gibt „undefined in --execute--“ aus, wenn color.tex mit pstricks auf einfachem Tex verwendet wird

Nehmen wir die folgende einfache TeX-Datei an:

\input pstricks
\input color
\pscircle{1.5}
\bye

Das Kompilieren mit eTeX funktioniert einwandfrei, dvips auch. Die resultierende PS-Datei kann jedoch nicht mit gs verarbeitet werden. Ich werde die Fehlermeldung bei Bedarf posten. WennnichtMit dem Farbpaket funktioniert der Verarbeitungsablauf einwandfrei. Der Unterschied zwischen den beiden generierten Postscript-Dateien ist:

<  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

d. h. einmal wird „0. setgray“ verwendet, das andere Mal „gray 0“. Ich habe versucht zu klären, ob „gray“ ein gültiger Postscript-Befehl ist. Nach dem, was ich herausgefunden habe, ist die übliche Art, eine Farbe zu definieren, „setxxx“.

Ich bin mir immer noch nicht 100%ig sicher, ob es sich um ein Problem mit color.sty oder Ghostscript handelt. Könnten Sie mir einen kurzen Hinweis geben? Danke!

Antwort1

PSTricks benötigt mindestens die definierte Farbe black, die selbst intern als definiert ist und \blacksich selbst zu erweitert 0 setgray. Aber nur, wenn sie definiert ist. Das hier funktioniert jedoch:

\input pstricks
\input color
\newgray{black}{0}
\pscircle{1.5}
\bye

der problematische Teil ist 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

Aus historischen Gründen definiert PSTricks standardmäßig die Farbe \black. \color@grayist nicht definiert, daher verwendet color ein , \definecolor{black}{gray}{0} das anstelle von an die PS-Datei übergeben wird 0 setgray. Es besteht jedoch keine wirkliche Notwendigkeit, das Paket zu verwenden color. Man kann die Farben mit den PSTricks-Makros für PlainTeX festlegen.

Antwort2

Es ist kein GS-Problem (das generierte PostScript ist fehlerhaft)

Es funktioniert in Latex, da (glaube ich) in diesem Fall xcolor geladen wird, auch wenn dies nicht explizit geschieht.

\documentclass{article}
\usepackage{pstricks}
\usepackage{color}
\begin{document}


\pscircle{1.5}

\end{document}

Graustufenfarben funktionieren normalerweise auch im Normalzustand.

\special{color push gray 0.5}
on two
\special{color pop}
three four

\bye

Das dvips-Special (mit den Argumenten nach dem Farbbefehl) wird in das PostScript-Format konvertiert.

0.5 TeXcolorgray

was mehr oder weniger nur der primitive PostScript-Aufruf ist

 0.5 setgray

Die Funktionsweise des Farbpakets besteht darin, dass es normalerweise die interne Farbe in einer „treiberspezifischen Spezialsyntax“ hält, also ist Grau gray 0.5Schwarz gray 0usw. und bei Bedarf reicht Latex aus \special{color push \current@color}und der richtige Code wird generiert.

Aber hier ist die Schnittstelle zur Konvertierung in die interne Form von pstricks, sodass pstricks schwarz ausgibt, anstatt gray 0den berüchtigten Befehl aufzurufen \c@lor@to@ps, der immer als undefiniert angezeigt wurde, wenn Sie versucht haben, pstricks mit pdflatex zu verwenden.

\c@lor@to@ps gray 0hier würde der Aufruf \c@lor@ps@gray 0„which erweitert sich zu 0 setgraywhich“ funktionieren.

verwandte Informationen