%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CMYK-HAX.TEX: % E This is a set of TeX macros supporting color separation and % substitution using TeX/PostScript environment. Needs DVIPS and % COLORDVI from standard DVIPS distribution. % % P Zestaw makr TeX-owo-PostScript-owych do tworzenia wyci/ag/ow barwnych % i podmiany kolor/ow. Wsp/o/lpracuje ze sterownikiem DVIPS % i zestawem makr COLORDVI (ze standardowej dystrybucji DVIPS-a); % % AUTHORS' COORDINATES: % BOP s.c. % ul. Piastowska 70, 80-363 Gda\'nsk, Poland % tel./fax +48 58 553-46-59 % email: bop@bop.com.pl % % VERSION 0.75, 15.06.2000 % Public domain % % HISTORY: % E version released during the GUST annual meeting Bacho\TeX'95. % P wersja udost/epniona podczas Bacho\TeX'95. % VERSION 0.51, 5 V 1995: % E macro \CMYKinit added (it places necessary def's in a PS prolog). % P dodane zosta/lo makro inicjalizacyjne `\CMYKinit', % kt/ore umieszcza w prologu PS u/zywane definicje. % VERSION 0.52, 27 VI 1995: % E the `currentpoint' fault in case of empty current path; now `currentpoint' % is called by the `stopped' command, which makes an error action % availlable. % P `currentpoint' generowa/l b/l/ad gdy bie/z/aca /scie/zki by/la pusta; % obecnie `currentpoint' jest wykonywane przez `stopped', % co daje mo/zliwo/s/c zareagowania na b/l/ad. % VERSION 0.53, 23 VII 1996: % E 1. the constant `epsilon=0.005' entered to do approximed % color comparations. % 2. \PSscreen became a \special. % P 1. wprowadzono sta/l/a `epsilon=0.005', kt/ora jest dok/ladno/sci/a % por/ownania kolor/ow. % 2. \PSscreen by/l dot/ad makrem TeX-owym o tre/sci PS-owej % sensowne jest, aby sta/l si/e \specialem % VERSION 0.54, 8 XI 1996 r. % E `show' redefinition allows the text outlining. % P redefinicja `show' umo/zliwia ju/z dok/ladanie obw/odki do tekst/ow. % VERSION 0.60, 11 IV 1997: % E processing of CMYK bitmaps enabled % P umo/zliwienie przetwarzania bitmap CMYK % VERSION 0.61, 11.VIII.1997 % E `adddownstroke' added (stroke under fill) % P dodano `adddownstroke' (rysowan/a pod fillem) % VERSION 0.62, 24.IX.1997 % E `setscreen' gets all parameters % P `setscreen' zyskuje wszystkie parametry podawane explicite % nie korzysta si/e z warto/sci `currentscreen' % VERSION 0.64, 9.VII.1999 % E bitmap color separation added, delblack (also for imagemask), % additional 5-th all-white bitmap separation (\BITinit and /to_sep_bitmap true def /hax_sep 4 def) % additional 6-th all-black bitmap separation (\BITinit and /to_sep_bitmap true def /hax_sep 5 def) % P do/l/aczono rozbarwianie bitmap, delblack (tak/ze dla imagemask), % 5. bia/ly wyci/ag z bitmap (\BITinit oraz /to_sep_bitmap true def /hax_sep 4 def) % 6. czarny wyci/ag z bitmap (\BITinit oraz /to_sep_bitmap true def /hax_sep 5 def) % VERSION 0.65, 6.VIII.1999 % E 5-th and 6-th bitmap separation were improved (`pop' added % in the case of not-dictionary images) % P poprawka w 5. i 6. wyci/agu bitmap (dodano `pop' w bitmapach % nies/lownikowych) % VERSION 0.66, 13.IX.1999 % E indexed color bitmaps support (for `colormap') % P obs/luga bitmap paletowych (do `colormap') % VERSION 0.67, 21.01.2000 % E support for multisource `colorimage' -- only CMYK separations % P obs/luga wersji wielo/xr/od/lowej polecenia `colorimage' % -- na razie tylko CMYK i tylko separacja % VERSION 0.68, 16.03.2000 % E \projectCMYK calls setcmykcolor explicite % P \projectCMYK wywo/luje explicite setcmykcolor % VERSION 0.70, 27.03.2000 % E image, colorimage and imagemask operators are transferred to % their dictionary form and we support them almost completly; % limitations: we support only bitmaps with % ImageType = 1, in one of Device Color Spaces, % when BitsPerComponent = 1 (other values of BitsPerComponent % we allow for imagemask, of corse, and for DeviceGray model -- % without color substitution, unfortunately) % P oparatory image, colorimage oraz imagemask przeniesione do wersji % s/lownikowej i prawie kompletnie obs/lu/zone; % ograniczenia: obs/lugujemy tylko bitmapy, dla kt/orych % ImageType = 1, model barw nale/zy do klasy Device Color Spaces, % BitsPerComponent = 8 (inne warto/sci BitsPerComponent dopuszczamy % oczywi/scie dla imagemask oraz w przypadku modelu DeviceGray -- % wtedy jednak nie potrafimy podmienia/c kolor/ow) % VERSION 0.71, 10.04.2000 % E 3 bugs fixed: % 1) we already support MultipleDataSources in ImageDict % 2) it was a superfluous pop in merge_multi3 % 3) 1 level of redefinition setcmykcolor (hax_setcmykcolor) added % P usuni/eto 3 pluskwy w obs/ludze image: % 1) ju/z obs/luguje si/e MultipleDataSources w ImageDict % 2) by/l zb/edny pop w merge_multi3 % 3) dodano 1 poziom redefinicji setcmykcolor (hax_setcmykcolor) % VERSION 0.73, 28.04.2000 % E 1) \sepbitmapfalse turns bitmap separation off, % \sepbitmaptrue turns bitmap separation on % 2) missing ImageDict parameter added before ori_image % P 1) \sepbitmapfalse wy/l/acza rozbarwianie bitmap, % \sepbitmaptrue przywraca rozbarwianie bitmap % 2) dodano brakuj/acy parametr ImageDict przed ori_image % VERSION 0.74, 11.05.2000 % E Bug in \delblacktrue handling has been fixed; % the colors created from black with changecolor can be separated now. % P Poprawiona pluskwa w obs/ludze \delblacktrue; % mo/zliwe staje si/e rozbarwianie kolor/ow powsta/lych z podmiany % koloru czarnego. % VERSION 0.75, 15.06.2000 % E \convertbitmaptrue turns on conversion of RGB bitmaps to CMYK, % to allow them to be separated % \convertbitmapfalse truns conversion off, by default, RGB bitmaps % are neither converted nor separated % P \convertbitmaptrue w/l/acza konwersj/e bitmap RGB do modelu CMYK, % co umo/zliwia ich rozbarwianie % \convertbitmapfalse wy/l/acza konwersj/e bitmap RGB do modelu CMYK, % co uniemo/zliwia ich rozbarwianie; domy/slnie bitmapy RGB nie s/a % ani konwertowane, ani rozbarwiane %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \edef\slashcatcode {\the\catcode`\/} \catcode`\/12 % \def\CMYKinit {\special {! userdict begin % /ori_setcmykcolor where {pop} {/ori_setcmykcolor /setcmykcolor load def} ifelse /ori_setrgbcolor where {pop} {/ori_setrgbcolor /setrgbcolor load def} ifelse /ori_setgray where {pop} {/ori_setgray /setgray load def} ifelse /ori_colorimage where {pop} {/ori_colorimage /colorimage load def} ifelse /ori_image where {pop} {/ori_image /image load def} ifelse /ori_imagemask where {pop} {/ori_imagemask /imagemask load def} ifelse /ori_fill where {pop} {/ori_fill /fill load def} ifelse /ori_eofill where {pop} {/ori_eofill /eofill load def} ifelse /ori_stroke where {pop} {/ori_stroke /stroke load def} ifelse /ori_show where {pop} {/ori_show /show load def} ifelse /hax_setcmykcolor /ori_setcmykcolor load def % /maybe_black { 4 copy 1 sub abs epsilon le exch 0 sub abs epsilon le and exch 0 sub abs epsilon le and exch 0 sub abs epsilon le and /if_delblack exch def } def % /my_fill {userdict begin if_delblack {newpath} {ori_fill} ifelse end} def /my_eofill {userdict begin if_delblack {newpath} {ori_eofill} ifelse end} def /my_stroke {userdict begin if_delblack {newpath} {ori_stroke} ifelse end} def /my_show {userdict begin if_delblack {false charpath currentpoint newpath moveto} {ori_show} ifelse end} def % /eofill {userdict begin my_eofill end} def /fill {userdict begin my_fill end} def /stroke {userdict begin my_stroke end} def /show {userdict begin my_show end} def % /setcmykcolor {userdict begin /k_ exch def /y_ exch def /m_ exch def /c_ exch def c_ m_ y_ k_ hax_setcmykcolor end} def /setgray {ori_setgray currentcmykcolor setcmykcolor} def /setrgbcolor {ori_setrgbcolor currentcmykcolor setcmykcolor} def % /hax_image { dup type cvlit /dicttype eq { /ImageDict exch def currentcolorspace dup length 1 eq % only Device color spaces ImageDict /ImageType get 1 eq and {% and ImageType 1 are supported 0 get dup /DeviceRGB eq {/ncomp 3 def} if dup /DeviceGray eq {/ncomp 1 def} if /DeviceCMYK eq {/ncomp 4 def} if ImageDict /BitsPerComponent get 8 ne % only gray image separations /ncomp 1 ne and {/ncomp 0 def} if % allowed if sample is not a byte } {pop /ncomp 0 def} ifelse } { false 1 makeimagedict } ifelse ncomp 0 eq {ImageDict ori_image} {hax_image_} ifelse } def % /hax_colorimage { makeimagedict hax_image_ } def % /makeimagedict { dup /ncomp exch def dup 4 eq {/DeviceCMYK setcolorspace} if dup 3 eq {/DeviceRGB setcolorspace} if 1 eq {/DeviceGray setcolorspace} if /ImageDict 7 dict def ImageDict begin {/MultipleDataSources true def ncomp array astore} if % store multi source in array /DataSource exch def /ImageMatrix exch def /BitsPerComponent exch def /Height exch def /Width exch def /Decode [ncomp {0 1} repeat] def /ImageType 1 def end } def % /data_str 65532 string def % very long /data_str_ 8192 string def /merge_multi4 { ImageDict /DataSource get aload pop dup type cvlit /filetype eq { /fdatsrck exch def /fdatsrcy exch def /fdatsrcm exch def /fdatsrcc exch def /datasrck {fdatsrck data_str_ readstring pop} def /datasrcy {fdatsrcy data_str_ readstring pop} def /datasrcm {fdatsrcm data_str_ readstring pop} def /datasrcc {fdatsrcc data_str_ readstring pop} def } { /datasrck exch def /datasrcy exch def /datasrcm exch def /datasrcc exch def } ifelse ImageDict /DataSource { data_str 0 datasrcc {3 copy put pop 4 add} forall pop 1 datasrcm {3 copy put pop 4 add} forall pop 2 datasrcy {3 copy put pop 4 add} forall pop 3 datasrck {3 copy put pop 4 add} forall 3 sub 0 exch getinterval } put } def % /merge_multi3 { ImageDict /DataSource get aload pop dup type cvlit /filetype eq { /fdatsrcb exch def /fdatsrcg exch def /fdatsrcr exch def /datasrcb {fdatsrcb data_str_ readstring pop} def /datasrcg {fdatsrcg data_str_ readstring pop} def /datasrcr {fdatsrcr data_str_ readstring pop} def } { /datasrcb exch def /datasrcg exch def /datasrcr exch def } ifelse ImageDict /DataSource { data_str 0 datasrcr {3 copy put pop 3 add} forall pop 1 datasrcg {3 copy put pop 3 add} forall pop 2 datasrcb {3 copy put pop 3 add} forall 2 sub 0 exch getinterval } put } def % /i_Str 3 string def /O_Str 4 string def /UCR {0.5 mul} def /BG {0.7 mul} def /min {1 index 1 index le {pop} {exch pop} ifelse} def /max {1 index 1 index ge {pop} {exch pop} ifelse} def % /RGBtoCMYK {% RGB pixel is on the stack % RGB --> CMYK conversion (Red Book p. 306) dup 0 get R_scale mul R_shift add /c_i exch def dup 1 get G_scale mul G_shift add /m_i exch def 2 get B_scale mul B_shift add /y_i exch def /k_i c_i m_i y_i min min def O_Str dup 0 255 0 c_i k_i UCR sub cvi max min put dup 1 255 0 m_i k_i UCR sub cvi max min put dup 2 255 0 y_i k_i UCR sub cvi max min put dup 3 255 0 k_i BG cvi max min put } def % /RGBtoCMYKfilter { ImageDict /Decode get aload pop % use Decode for RGB -> CMYK conversion 2 copy sub /B_scale exch def pop 255 mul 255 exch sub /B_shift exch def 2 copy sub /G_scale exch def pop 255 mul 255 exch sub /G_shift exch def 2 copy sub /R_scale exch def pop 255 mul 255 exch sub /R_shift exch def /rtc_file ImageDict /DataSource get def ImageDict /DataSource {rtc_file i_Str readstring {RGBtoCMYK} if} 0 () /SubFileDecode filter put /DeviceCMYK setcolorspace /ncomp 4 def ImageDict /Decode [0 1 0 1 0 1 0 1] put } def % /sep_str 8192 string def /SEP_CMYK { 0 hax_sep 4 3 index length 1 sub { 2 index exch get 3 copy put pop 1 add } for dup 0 ne {0 exch getinterval}{pop pop ()} ifelse } def % /SEPfilters { ncomp 4 eq { hax_sep 3 le { /sepproc /SEP_CMYK load def ImageDict begin /Decode [ Decode hax_sep 2 mul 1 add get Decode hax_sep 2 mul get ] def end } { /sepproc {dup length 4 idiv 0 exch getinterval} def } ifelse /sep_file ImageDict /DataSource get def ImageDict /DataSource {sep_file sep_str readstring pop sepproc} 0 () /SubFileDecode filter put /DeviceGray setcolorspace } {% ncomp 1 eq hax_sep 3 ne {ImageDict /Decode [ 1 1 ] put} if } ifelse hax_sep 4 eq {ImageDict /Decode [ 1 1 ] put} if hax_sep 5 eq {ImageDict /Decode [ 0 0 ] put} if } def % /change_str 12288 string def % must be a multiplicity of 3 and 4 /CHANGEfilter { /change_file ImageDict /DataSource get def ImageDict /DataSource { change_file change_str readstring pop 0 ncomp 2 index length ncomp sub { 1 index exch 2 copy ncomp getinterval changebits putinterval } for } 0 () /SubFileDecode filter put } def % /hax_image_ { ImageDict /MultipleDataSources known { ImageDict /MultipleDataSources get { ImageDict /MultipleDataSources false put ImageDict /DataSource get length dup 4 eq {merge_multi4} if dup 3 eq {merge_multi3} if 1 eq {ImageDict begin /DataSource DataSource aload pop def end} if } if } if ImageDict begin /DataSource dup load Width BitsPerComponent mul 7 add 8 idiv Height ncomp mul mul () /SubFileDecode filter def end to_change_bitmap {CHANGEfilter} if ncomp 3 eq to_convert_bitmap and {RGBtoCMYKfilter} if ncomp 3 ne to_sep_bitmap and {SEPfilters} if ImageDict ori_image } def % /zero_data_str 65532 string def % length of the data_str /hax_imagemask { if_delblack { dup type cvlit /dicttype eq { /ImageDict exch def } { /ImageDict 7 dict def ImageDict begin /DataSource exch def /ImageMatrix exch def /Decode exch {[1 0]} {[0 1]} ifelse def /Height exch def /Width exch def /BitsPerComponent 1 def /ImageType 1 def end } ifelse ImageDict begin /DataSource load Width 7 add 8 idiv Height mul () /SubFileDecode filter end /mask_file exch def ImageDict /DataSource { zero_data_str 0 mask_file data_str readstring pop length getinterval } 0 () /SubFileDecode filter put ImageDict /Decode [1 0] put ImageDict ori_imagemask } {ori_imagemask} ifelse } def % /truebp {0 matrix defaultmatrix matrix currentmatrix matrix invertmatrix matrix concatmatrix dtransform dup mul exch dup mul add sqrt} def /truein {72 mul truebp} def /truept {72.27 div truein} def /truesp {65536 div truept} def /truedd {1238 mul 1157 div truept} def /truecc {12 mul truedd} def /truemm {25.4 div truein} def /truecm {10 mul truemm} def % /epsilon 0.005 def /if_delblack false def /to_change_bitmap false def /to_convert_bitmap false def /to_sep_bitmap false def % currentcmykcolor setcmykcolor % end % userdict }}% \special \CMYKinit %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\PSbegingroup {\begingroup \special{ps: save }} \def\PSendgroup {\special{ps: restore }\endgroup} % \def\forcolor #1{\def\thecolor{#1}} \def\checkcolor {\thecolor\space count 4 lt {(Not CMYK ) print} if % k_ eq exch y_ eq and exch m_ eq and exch c_ eq and % comparison of colours with a predefined accurracy (epsilon): k_ sub abs epsilon le exch y_ sub abs epsilon le and exch m_ sub abs epsilon le and exch c_ sub abs epsilon le and } % \def\changefill #1{% \edef\changefills{\changefills \checkcolor {#1 hax_setcmykcolor} if }} \def\changestroke #1{% \edef\changestrokes{\changestrokes \checkcolor {#1 hax_setcmykcolor} if }} \def\changecolor #1{% \edef\changecolors{\changecolors \checkcolor {#1 hax_setcmykcolor} if }} \def\addfill #1{% \edef\addfills{\addfills \checkcolor {addfill} if }% \edef\changefills{\changefills \checkcolor {#1 hax_setcmykcolor} if }} \def\adddownstroke #1{% \edef\addstrokes{\addstrokes \checkcolor {adddownstroke} if }% \edef\changestrokes{\changestrokes \checkcolor {#1 hax_setcmykcolor} if }} \def\addstroke #1{% \edef\addstrokes{\addstrokes \checkcolor {addstroke} if }% \edef\changestrokes{\changestrokes \checkcolor {#1 hax_setcmykcolor} if }} \def\addcolor #1{\addstroke{#1}\addfill{#1}} \def\delfill {% \edef\delfills{\delfills \checkcolor {delfill} if }} \def\delstroke {% \edef\delstrokes{\delstrokes \checkcolor {delstroke} if }} \def\delcolor {% \edef\delcolors{\delcolors \checkcolor {delfill delstroke} if }} \def\strokehook #1{% \edef\strokehooks{\strokehooks \checkcolor {#1} if }} \def\fillhook #1{% \edef\fillhooks{\fillhooks \checkcolor {#1} if }} \def\strokeup {% \edef\changestrokes{\changestrokes \checkcolor {upstroke} if }} \def\fillup {% \edef\changestrokes{\changestrokes \checkcolor {upfill} if }} % \def\forbitmap #1{\def\thebitcolor{<#1>}} \def\checkbitcolor {dup \thebitcolor\space eq } % \def\changebitmap #1{% \edef\changebits{\changebits \checkbitcolor {pop <#1>} if }} % \def\setCMYKchange{% \edef\changestrokes{}% \edef\changefills{}% \edef\changecolors{}% \edef\addstrokes{}% \edef\addfills{}% \edef\delstrokes{}% \edef\delfills{}% \edef\delcolors{}% \edef\strokehooks{}% \edef\fillhooks{}% \edef\changebits{}% } % \def\fillinitials{% /to_fill true def /to_stroke false def /to_upstroke false def } \def\strokeinitials{% /to_fill false def /to_stroke true def /to_upstroke true def } % \def\useCMYKchange{% \special{ps: userdict begin /addfill {/to_fill true def} def /delfill {/to_fill false def} def /upfill {/to_upstroke false def} def /addstroke {/to_stroke true def upstroke} def /adddownstroke {/to_stroke true def upfill} def /delstroke {/to_stroke false def} def /upstroke {/to_upstroke true def} def /current_point {{currentpoint} stopped {0 0} if} def % /do_stroke { to_stroke {gsave \changestrokes \strokehooks my_stroke grestore} if } def % /eofill { userdict begin \fillinitials \delfills \delcolors \addstrokes current_point to_upstroke {} {do_stroke} ifelse to_fill {gsave \changefills \fillhooks my_eofill grestore} if to_upstroke {do_stroke} if newpath moveto end } def % /fill { userdict begin \fillinitials \delfills \delcolors \addstrokes current_point to_upstroke {} {do_stroke} ifelse to_fill {gsave \changefills \fillhooks my_fill grestore} if to_upstroke {do_stroke} if newpath moveto end } def % /stroke { userdict begin \strokeinitials \delstrokes \delcolors \addfills current_point to_upstroke {} {do_stroke} ifelse to_fill {gsave \changefills \fillhooks my_eofill grestore} if to_upstroke {do_stroke} if newpath moveto end } def % /show { userdict begin \fillinitials \delfills \delcolors \addstrokes to_upstroke {} {dup false gsave charpath do_stroke grestore} ifelse to_fill {dup gsave my_show grestore} {} ifelse to_upstroke {dup false gsave charpath do_stroke grestore} if false charpath current_point newpath moveto end } def % /setcmykcolor { userdict begin /k_ exch def /y_ exch def /m_ exch def /c_ exch def c_ m_ y_ k_ hax_setcmykcolor \changecolors end } def % currentcmykcolor setcmykcolor end}% \ifx\changebits\empty\else \BITinit \special{ps: userdict begin /to_change_bitmap true def /changebits {\changebits} def end}% \fi } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\cyan {1 0 0 0} \def\magenta {0 1 0 0} \def\yellow {0 0 1 0} \def\black {0 0 0 1} \def\white {0 0 0 0} % \def\ScreenFrequency {150} \def\Cangle {15} \def\Mangle {75} \def\Yangle {0} \def\Kangle {45} % \def\PSscreen #1{\ifx\ScreenFrequency\empty \special{ps: currentscreen exch pop #1 exch setscreen}% \else \special{ps: /dot_spot {dup mul exch dup mul add 1 exch sub 2 div} def \ScreenFrequency\space #1 {dot_spot} setscreen }\fi} % \newif\ifdelblack \delblackfalse \newif\ifbitmapsep \bitmapseptrue % \def\sepbitmaptrue{% \bitmapseptrue \BITinit \special{ps: userdict begin /to_sep_bitmap true def end}} % \def\sepbitmapfalse{% \bitmapsepfalse \special{ps: userdict begin /to_sep_bitmap false def end}} % \def\convertbitmaptrue{% \BITinit \special{ps: userdict begin /to_convert_bitmap true def end}} % \def\convertbitmapfalse{% \special{ps: userdict begin /to_convert_bitmap false def end}} % \def\BITinit{\special{ps: userdict begin /image /hax_image load def /colorimage /hax_colorimage load def /imagemask /hax_imagemask load def end}} % \def\projectCMYK #1{% \edef\projectcolor{#1}% \ifx\projectcolor\cyan \special{ps: userdict begin /hax_sep 0 def /hax_setcmykcolor {\ifdelblack maybe_black \fi pop pop pop 1 exch sub ori_setgray} def end }% \PSscreen\Cangle \else \ifx\projectcolor\magenta \special{ps: userdict begin /hax_sep 1 def /hax_setcmykcolor {\ifdelblack maybe_black \fi pop pop exch pop 1 exch sub ori_setgray} def end }% \PSscreen\Mangle \else \ifx\projectcolor\yellow \special{ps: userdict begin /hax_sep 2 def /hax_setcmykcolor {\ifdelblack maybe_black \fi pop exch pop exch pop 1 exch sub ori_setgray} def end }% \PSscreen\Yangle \else \ifx\projectcolor\black \special{ps: userdict begin /hax_sep 3 def /hax_setcmykcolor {exch pop exch pop exch pop 1 exch sub ori_setgray} def end }% \PSscreen\Kangle \fi \fi \fi \fi \ifbitmapsep\sepbitmaptrue\fi \special{ps: currentcmykcolor setcmykcolor}% } % \def\CMYKlabels #1{{#1% #1 is a font csname \Cyan{CYAN} \Magenta{MAGENTA} \Yellow{YELLOW} \Black{BLACK}}} % \ifx\notCMYKinit\undefined\CMYKinit\fi % \catcode`\/\slashcatcode % \endinput