일반 tex에서 pstricks와 함께 color.tex를 사용할 때 ghostscript는 --execute--에 정의되지 않음을 제공합니다.

일반 tex에서 pstricks와 함께 color.tex를 사용할 때 ghostscript는 --execute--에 정의되지 않음을 제공합니다.

다음과 같은 일반 TeX 파일을 가정합니다.

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

eTeX를 사용한 컴파일은 잘 작동하며, dvips도 마찬가지입니다. 그러나 결과 PS 파일은 gs를 사용하여 처리할 수 없습니다. 필요한 경우 오류 메시지를 게시하겠습니다. 언제~ 아니다컬러 패키지를 사용하면 처리 흐름이 정상적으로 작동합니다. 생성된 두 Postscripts 파일의 차이점은 다음과 같습니다.

<  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

즉, 한 번은 "0.setgray"가 사용되고 다른 한 번은 "gray 0"이 사용됩니다. 내가 찾은 내용에 따르면 "회색"이 유효한 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. 그러나 실제로 package 를 사용할 필요는 없습니다 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 특수(color 명령 뒤에 인수가 오는)가 PostScript로 변환됩니다.

0.5 TeXcolorgray

이는 거의 원시적인 PostScript 호출에 불과합니다.

 0.5 setgray

색상 패키지가 작동하는 방식은 일반적으로 "드라이버별 특수 구문"으로 내부 색상을 유지하므로 회색은 gray 0.5검정색 gray 0등이며 필요한 경우 라텍스가 수행되고 \special{color push \current@color}올바른 코드가 생성됩니다.

그러나 여기에는 pstricks 내부 형식으로 변환하는 인터페이스가 있으므로 pstricks는 pdflatex와 함께 pstricks를 사용하려고 하면 항상 정의되지 않은 것으로 나타나는 gray 0악명 높은 명령을 호출하는 대신 검정색을 출력합니다.\c@lor@to@ps

\c@lor@to@ps gray 0\c@lor@ps@gray 0여기서는 어떤 확장이 0 setgray작동하는지 호출합니다 .

관련 정보