%! /oldsetrgbcolor /setrgbcolor load def /setrgbcolor { (in replacement setrgbcolor\n) print %% R G B 1 index 1 index %% R G B G B eq { %% 2 index 1 index %% R G B R B eq { %% Here if R = G = B pop pop %% remove two values % setgray % "replace the 'setgray' with": 0 0 0 4 -1 roll % setcmykcolor -1 mul %% obtain -R on top of stack 1 add %% obtain 1-R on top of stack setcmykcolor %% now set(cmykcolor) K (as 1-R) } { oldsetrgbcolor %% set the RGB values } ifelse }{ oldsetrgbcolor %% Set the RGB values }ifelse } bind def /oldsetgray /setgray load def /setgray { (in replacement setgray\n) print % == % debug: pop last element and print it % here we're at a gray value; % http://www.tailrecursive.org/postscript/operators.html#setcymkcolor % setgray: "gray-value must be a number from 0 (black) to 1 (white)." % setcymkcolor: "The components must be between 0 (none) to 1 (full)." % so convert here again: 0 0 0 4 -1 roll % push CMY:000 after Gray and roll down, % so top of stack becomes % ...:C:M:Y:Gray -1 mul %% obtain -Gray on top of stack 1 add %% obtain 1-Gray on top of stack setcmykcolor %% now set(cmykcolor) K (as 1-Gray) } bind def %~ # test: rgb2gray %~ gs -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=./blah-slide-hackRGB-gray.ps ./HackRGB.ps ./blah-slide-gsps2w.ps %~ # gray2cmyk %~ gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=./blah-slide-hackRGB-gray-ci.pdf ./HackRGB-cmyk-inv.ps ./blah-slide-hackRGB-gray.ps %~ # check separations - looks OK %~ gs -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -dFirstPage=1 -dLastPage=1 -sOutputFile=p%02d.tif blah-slide-hackRGB-gray-ci.pdf && eog p01.tif 2>/dev/null