Supongamos el siguiente archivo TeX simple:
\input pstricks
\input color
\pscircle{1.5}
\bye
Compilar usando eTeX funciona bien, dvips también. Sin embargo, el archivo PS resultante no se puede procesar con gs; publicaré el mensaje de error si es necesario. CuandonoUsando el paquete de color, el flujo de procesamiento funciona bien. La diferencia entre los dos archivos Postscripts generados es:
< 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
es decir, una vez se utiliza "0. setgray" y la otra vez "gray 0". Intenté aclarar que si "gris" es un comando Postscript válido, según lo que encontré, la forma habitual de definir un color es "setxxx".
Aún así, no estoy al 100% si se trata de un problema en color.sty o un problema en ghostscript. ¿Podrías darme una breve pista? ¡Gracias!
Respuesta1
PSTricks necesita al menos el color definido black
, que a su vez está definido internamente y \black
al que se expande 0 setgray
. Pero sólo si está definido. Sin embargo, esto funciona:
\input pstricks
\input color
\newgray{black}{0}
\pscircle{1.5}
\bye
la parte problemática está en 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
Por algunas razones históricas, PSTricks define por defecto el color \black
.
\color@gray
no está definido, por lo que el color tiene un valor
\definecolor{black}{gray}{0}
que se pasa al archivo ps en lugar de 0 setgray
. Sin embargo, no existe una necesidad real de utilizar el paquete color
. Se pueden configurar los colores con las macros de PSTricks para PlainTeX.
Respuesta2
No es un problema de gs (el PostScript generado es un error)
Funciona en látex ya que (creo) xcolor está cargado en ese caso, incluso si no está explícitamente
\documentclass{article}
\usepackage{pstricks}
\usepackage{color}
\begin{document}
\pscircle{1.5}
\end{document}
Los colores en escala de grises también funcionan normalmente
\special{color push gray 0.5}
on two
\special{color pop}
three four
\bye
el especial dvips (con los argumentos después del comando de color) se convierte al PostScript
0.5 TeXcolorgray
que es más o menos simplemente la llamada primitiva PostScript
0.5 setgray
La forma en que funciona el paquete de color es que normalmente contiene el color interno en una "sintaxis especial específica del controlador", por lo que el gris es gray 0.5
negro, gray 0
etc., y cuando sea necesario, el látex servirá \special{color push \current@color}
y se generará el código correcto.
Pero aquí la interfaz para convertir a pstricks forma interna, por lo que pstricks genera negro en gray 0
lugar de llamar al infame comando \c@lor@to@ps
que siempre aparecía como indefinido si intentaba usar pstricks con pdflatex.
\c@lor@to@ps gray 0
aquí llamaría \c@lor@ps@gray 0
a cuál se expande a 0 setgray
cuál funcionaría.