Skip to main content
Skip table of contents

Defining the HqnLayout color bar

This page applies to Harlequin v13.1r0 and later; both Harlequin Core and Harlequin MultiRIP.

The following objects would be defined in a ColorBarComponents dictionary in a file created in SW/Usr/ColorBars/Components, as described in Locating objects for HqnLayout on disk.

To construct a block that reacts dynamically to the number of separations being rendered, you must define the details of each tint block in a Selector. Each Selector needs only one constituent dictionary, keyed with the integer 1, because it is only used in a block containing a single row of patches.

TEXT
  /ColorComponents <<
  /Selectors <<
    /Patch40
TEXT
<<
      1 <<
        /BaseColors [ [ 1 0.4 ] ]
        /BaseShape [ /Square ]
        /PatchStep [ true ]
        /BasePatchLabel [ [ /None ] ]
        /BaseBottomLabel [ /Percent ]
        /BaseTopLabel [ /CSpace /None ]
        /BottomLabelColored true
        /TopLabelColored true
        /TopLabelAlign /LeftPatch2
        /BottomLabelAlign /Center
        % The Black separation should be last, so that it is adjacent to the
        % CMY neutral that will be drawn in the following Block.
        % AmendSeparations is used to ensure that:
        /AmendSeparations { ProcessLast }
      >>
    >> % Patch40
    /Patch80 <<
      1 <<
        /BaseColors [ [ 1 0.8 ] ]
        /BaseShape [ /Square ]
        /PatchStep [ true ]
        /BasePatchLabel [ [ /None ] ]
        /BaseBottomLabel [ /Percent ]
        /BaseTopLabel [ /CSpace /None ]
        /BottomLabelColored true
        /TopLabelColored true
        /TopLabelAlign /LeftPatch2
        /BottomLabelAlign /Center
        /AmendSeparations { ProcessLast }
      >>
    >> % Patch80
  >>
  /Blocks <<
    % The selectors are then used to create dynamic Blocks,
    % using the BuildRenderedWedge procedure:
    /AllSep40 { /Patch40 BuildRenderedWedge }
    /AllSep80 { /Patch80 BuildRenderedWedge }
    % In addition, blocks for the CMY neutral patches that will be
    % placed alongside the K tints are required:
    /Neutral80 <<
      /Colors [ [ { .80 .72 .72 0 } ] ]
      /ColorSpace /DeviceCMYK
      /Rows 1
      /Columns
      /TopLabel [ (Neutral) ]
      /BottomLabel [ (80/72/72) ]
      /PatchShape [ /BeanRight ]
    >>
    /Neutral40 <<
      /Colors [ [ { .4 .30 .30 0 } ] ]
      /ColorSpace /DeviceCMYK
      /Rows 1
      /Columns 1
      /TopLabel [ (Neutral) ]
      /BottomLabel [ (40/30/30) ]
      /PatchShape [ /BeanRight ]
    >>
  >>


Additional data may be stored within the ColorBarComponents dictionary if required for procedural definition of an object within it. Names must not clash with names used in the procset environment; we recommend that you use an abbreviation of your company name as a prefix:


TEXT
  /GGS_CMYColors << [ /Cyan /Magenta /Yellow ] { null } forall >>
  /BlockSets <<


Block sets for the 40 and 80% patches are straightforward; each contains a single block definition:


TEXT
    /AllSep80Set [ /AllSep80 ]
    /AllSep40Set [ /AllSep40 ]


The CMY neutral patches should only be shown if all of C, M, and Y separations are being produced. They can therefore be defined as a procedure that returns a literal array. In this case the array is empty if any of C, M, or Y is not being produced:


TEXT
    /Neutral80Set { [ 0
      Separations {
        GGS_CMYColors exch known {
        1 add
      } if
    } forall 3 eq { /Neutral80 } if
  ] }
  /Neutral40Set { [ 0
      Separations {
        GGS_CMYColors exch known {
          1 add
        } if
      } forall 3 eq { /Neutral40 } if
    ] }
  >>
  /BlockSequences <<


The Block Sequence for this mark uses BlockSets defined in HqnLayout BlockSets, as well as several included in the standard component files shipped with the Harlequin RIP.

In this case, there are only two BlockSets for the solid and flat tint patches that we want, but we are interspersing these with three different BlockSets (overprints, registration marks and slur). The BlockSequence is therefore defined with three repeats of the two tint BlockSets and two repeats of each of the three other BlockSets to ensure that both cycle round correctly.


TEXT
    /PlateBar_40-80_1 [
      /AllSep80Set
      /Neutral80Set
      /OverprintSet
      /AllSep40Set
      /Neutral40Set
      /RegSet
      /AllSep80Set
      /Neutral80Set
      /SlurSet
      /AllSep40Set
      /Neutral40Set
      /OverprintSet
      /AllSep80Set
      /Neutral80Set
      /RegSet
      /AllSep40Set
      /Neutral40Set
      /SlurSet
    ]
  >>
  /Strips <<
    /PlateStrip_40-80_1 <<


This strip is encapsulated with a “Harlequin at Heart” logo at each end. The following two values are therefore intended to leave enough space for those logos:


TEXT
      /LeftEnd20.9
      /RightEnd-21% Must be negative to mean right hand end.
      /PackMethod/Stretch
      /BaseY 0


The following values are inherited by the Blocks within this strip, ensuring consistency along the whole color bar.


TEXT
      /PatchHeight 19
      /PatchWidth 19
      /PatchBottom6
      /PatchTop 6
      /Rows 1
      /BottomLabel /None
      /BorderWeight 0
      /Border /None
      /PatchLabelSize 4.5
      /BottomLabelSize 5
      /TopLabelSize 5
      /ColorBars /PlateBar_40-80_
    >>
  >>
  /ControlBars <<
    /PlateControlBar_40-80_1 <<
      /ControlDepth 31
      /Marks [ ]
      /StripSequence [
        /PlateStrip_H@H_Left
        /PlateStrip_40-80_1
        /PlateStrip_H@H_Right
      >>
    >>
  >>
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.