(v13) Specifying spot colors in Level 1 and Level 2
This page applies to Harlequin v13.1r0 and later; both Harlequin Core and Harlequin MultiRIP.
PostScript-language jobs give the information about the spot colors required in two different ways:
- In Level 2, using the
Separation
color space. In this case thesetcolorspace
operator gives the name of the spot color, and its approximation in another color space (oftenDeviceCMYK
), and thesetcolor
operator gives the tint. For example:
[ /Separation (Gold) /DeviceCMYK
{ dup 0.2 mul 1 index 0.2 mul 2 index 0.8 mul
4 -1 roll 0.2 mul } bind ] setcolorspace
0.8 setcolor
In this example, the procedure converts the tint of the spot color to CMYK by multiplying the CMYK equivalent, (0.2, 0.2, 0.8, 0.2), by the tint; see [RB2].
- In Level 1, procedures were defined conventionally (in [L1SEPS] ) to implement spot colors and their tints. Some of these have carried forward directly as Level 2 operators (such as
setoverprint
), but others, such assetcustomcolor
which is the conventional way of preparing to draw in a spot color, have not.
The Level 2 method is handled automatically. If a separation of the given name is requested (see below), then the spot color tint is used; otherwise the spot color is converted to process colors. However, the Level 1 conventions must be handled specially. In effect the RIP needs to make the same definitions available to the job as a separator program would.
This is done using the procset Level1Separator
. This procset contains a set of procedures as defined in the separation conventions, plus some variations to help where specific applications (such as Aldus FreeHand, later acquired by MacroMedia) do not follow the conventions exactly. Jobs expect to find the procedures in the dictionary stack, and since the dictionary representing the procset is read only, it is best to copy them to userdict
rather than leave a read-only dictionary on top of the dictionary stack.
The correct procedure that needs to be executed depends upon the LanguageLevel at which the job is eventually run, although the procedure itself should be executed while still at LanguageLevel 3.
To set up the Level 1 separating procedures correctly for subsequent use within LanguageLevel 1 do:
/Level1Separator /ProcSet findresource
/HqnInitializeL1Separation get exec
Similarly, for LanguageLevel 2 do:
/Level1Separator /ProcSet findresource
/HqnInitializeL2Separation get exec
The same principle applies for LanguageLevel 3.
This fragment would be executed at some point before the job is run—either prefixed on the job itself, in a page feature in the user interface version, or perhaps in a startup file if the Harlequin RIP is being used solely to do separation of Level 1 jobs. It should not be executed when separation is not being done.
In GUI versions of the RIP, the check box Use Level 1 spot colors
, in the Separation Setup dialog box, has the same effect as using this code.