假設有以下純 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”。我試圖澄清,如果「gray」是有效的 Postscript 命令,根據我的發現,定義顏色的通常方法是「setxxx」。
但我仍然不能 100% 確定這是 color.sty 中的問題還是 Ghostscript 中的問題。你能給我一個簡短的提示嗎?謝謝!
答案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 預設定義 color \black
。
\color@gray
未定義,因此 color 會
\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 特殊(參數位於顏色指令之後)轉換為 PostScript
0.5 TeXcolorgray
這或多或少只是原始的 PostScript 調用
0.5 setgray
顏色包的工作方式是,通常它以“特定於驅動程式的特殊語法”保存內部顏色,因此灰色是gray 0.5
黑色gray 0
等,並且在需要時乳膠會執行\special{color push \current@color}
並產生正確的程式碼。
但這裡的介面轉換為 pstricks 內部形式,因此 pstricks 輸出黑色,而gray 0
不是呼叫臭名昭著的命令,\c@lor@to@ps
如果您嘗試將 pstricks 與 pdflatex 一起使用,則該命令總是顯示為未定義。
\c@lor@to@ps gray 0
這裡會呼叫\c@lor@ps@gray 0
哪個擴展到0 setgray
哪個可以工作。