Ghostscript da indefinido en --ejecutar-- cuando se usa color.tex con pstricks en texto simple

Ghostscript da indefinido en --ejecutar-- cuando se usa color.tex con pstricks en texto simple

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 \blackal 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@grayno 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.5negro, gray 0etc., 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 0lugar de llamar al infame comando \c@lor@to@psque siempre aparecía como indefinido si intentaba usar pstricks con pdflatex.

\c@lor@to@ps gray 0aquí llamaría \c@lor@ps@gray 0a cuál se expande a 0 setgraycuál funcionaría.

información relacionada