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 \black
sich 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@gray
ist 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.5
Schwarz gray 0
usw. 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 0
den 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 0
hier würde der Aufruf \c@lor@ps@gray 0
„which erweitert sich zu 0 setgray
which“ funktionieren.