Color

From Wiki
Jump to navigation Jump to search

< Visuals | Graphics >

Using Colors

Using colors with ConTeXt is easy:

  • Start with \setupcolors[state=start]. Without that, everything appears in greys.
  • RGB and CMYK are enabled by default. If you want only RGB or only CMYK color, use cmyk=no or rgb=no. Multitone colors see below.
  • For spot colors, say spot=yes. To eliminate everything except spot colours, leaving a clean file for professional printing, accompany this with rgb=no,cmyk=no. See spot colours below for more details.
  • Normally all colors are defined in RGB and CMYK and get converted if needed.
  • You find lists of predefined colors in the files colo-xxx.tex, load them with \setupcolor[xxx]:
    • rgb: some simple colors, loaded by default (with translations for the different interface languages!)
    • xwi: X-Windows-colors
    • pra: PRAGMA ADE company colors
    • ema: Emacs colors
  • Try the magic \showcolor[xxx]!
  • Define your own colors with \definecolor[blablue][r=.1, g=.1, b=1, c=1, m=.1, y=0, k=0, s=.2] (definition for RGB, CMYK and Grey!)
  • You can define transparent colors through setting t, e.g. t=0.5. Beware, most PDF viewers and printshops can't handle PDF transparences!
  • Use the color name like [color=blablue] in some \setup... command.
  • Typeset single text elements with \color[blablue]{nice blue text} or longer sections with \startcolor[blablue] ... \stopcolor.

(See also "Color and Background" in the manual!)

Sample

\setupcolors[state=start]
\definecolor[blablue][r=.25, g=.1, b=1, c=1, m=.1, y=0, k=0, s=.2]

Here's some \color[blablue]{blue text} inbetween!

\showcolor[rgb]

Colorgroups and Palettes

\definecolorgroup[name][system][values]

\definepalet[palettename][colorname1=groupcolor:1, colorname2=groupcolor:2, ...]

Very interesting feature, to be described later... (see manual)

Spot colours

To produce a file ready for a clean PDF separation process at your print house, start with:

\setupcolors[rgb=no,cmyk=yes,spot=yes,state=start,overprint=yes]

which will set things up for spot colors with CMYK allowed. The last setting ensures that black overprinting your spot colour tints will not knock out the colour - this is important for some types of commercial printing.

Then define your basic spot colour. Note that the name cannot contain spaces or numbers (but we come to that later):

\definecolor[PantoneTwoNineFour][c=1,m=.56,y=0,k=.18]

Now you can define the tints of this ink that you are actually going to use in your document. Let's say you'll have a 100% for headings:

\definespotcolor[MyBlue][PantoneTwoNineFour][p=1]

And then a 20% tint for nice display boxes:

\definespotcolor[MyBlueTint][PantoneTwoNineFour][p=.2]

And now you can happily use these named colours:

\starttext
   \color[MyBlue]{Interesting}
\stoptext

If you are including graphics made by an external program, you might want to match the colour name used in the graphic with the colour name in your ConTeXt set-up so that only one colour space is used in the final file. Unfortunately Pantone names and others tend to have spaces and numbers in them, so you need to do a low-level mapping trick from your base name to the name you want embedded in the file:

\doregisterspotcolorname{PantoneTwoNineFour}{PANTONE 294 CV}

Now your output file should work beautifully with graphics embedded!

Using the 'e' key to \definecolor to specify a spot colour name with spaces

As an update to the above description on defining spot colours, you can now use the 'e' key when defining your spot colours in order to specify the precise colour names to be used by your ConTeXt set-up in the output file. For example:

% Define spot colours using 'e=....' to specify colour names to use in output file
\definecolor
   [PantoneThreeZeroEight]
   [c=1,m=.05,y=0,k=.47,e=PANTONE 308 CV]

\definecolor
   [PantoneTwoNineEight]
   [c=.69,m=.07,y=0,k=0,e=PANTONE 298 CV]

% Define tints of spot colours to be used in document for colouring text
\definespotcolor
   [DarkBlue]
   [PantoneThreeZeroEight]
   [p=1]

\definespotcolor
   [LightBlue]
   [PantoneTwoNineEight]
   [p=1]

(Tested only on minimal Linux distribution dated 31 Aug 2005 - can others confirm this to be true across the board now?)

Any text between a \startcolor[DarkBlue] and \stopcolor should now be assigned to the correct spot colour channel - Pantone 308 CV - on output. More importantly if you include an external figure containing areas of this colour then your text and those parts of the graphic which have the same colour should now appear together in the 'Pantone 308 CV' colour channel on colour separation.

For example, if your original graphic is an EPS file containing the following lines:

%%DocumentCustomColors: (PANTONE 298 CV)
%%+ (PANTONE 308 CV)
%%CMYKCustomColor: 0.69 0.07 0 0 (PANTONE 298 CV)
%%+ 1 0.05 0 0.47 (PANTONE 308 CV)

and you convert this to a PDF using ps2pdf for inclusion in your ConTeXt document your PDF graphic will then contain something like:


8 0 obj
[/Separation
/PANTONE#20308#20CV
/DeviceCMYK
9 0 R]endobj
10 0 obj
[/Separation
/PANTONE#20298#20CV
/DeviceCMYK
11 0 R]endobj

Note how the space characters in the colour name are now encoded as '#20', but the colour names are essentially identical between the original EPS graphic, the new PDF graphic and your text.

A good way of testing colour separation if you don't have access to expensive pre-flight PDF validation tools is to use the following GhostScript command:

gs \
  -dBATCH \
  -dNOPAUSE \
  -sDEVICE=tiffsep \
  -dDOINTERPOLATE \
  -dTextAlphaBits=4 \
  -dGraphicsAlphaBits=4 \
  -sOutputFile=output.tif \
  -r120 \
  -MaxSeparations=8 \
  input.pdf

This renders a PDF file input.pdf as a set of TIFF files:

  output.tif              - Composite including CMYK approximations to spot colours
  output.tif.Black.tif    - K channel
  output.tif.Cyan.tif     - C channel
  output.tif.Magenta.tif  - M channel
  output.tif.Yellow.tif   - Y channel
  output.tif.s0.tif       - Pantone 308 CV
  output.tif.s1.tif       - Pantone 298 CV

Multitones

Hans wrote on the mailinglist on 2004-12-27 about handling of multitone colors:

Currently it's done by pdftools.rb

Once pdfxTeX becomes pdfeTeX out of a sudden your beta can do it as well.

I still need to figure out a way to automatically reverse the graphic, but one of these days you can start using it.

Actually, multitones for text already work out of the box:

\setupcolors[state=start]

\definecolor [blue]   [c=1,m=.38,y=0,k=.64]
\definecolor [yellow] [c=0,m=.28,y=1,k=.06]

\definespotcolor [blue-100]   [blue]   [p=1]
\definespotcolor [yellow-100] [yellow] [p=1]

\definemultitonecolor [combicolor]   [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1]

\starttext

\startcolor[blue]\blackrule[width=3cm,height=3cm]\stopcolor

\startcolor[yellow]\blackrule[width=3cm,height=3cm]\stopcolor

\startcolor[combicolor]\blackrule[width=3cm,height=3cm]\stopcolor

\stoptext

(The CMYK color spec is the fall back color used on screen; one can preview separations in full Acrobat 7.)

Transparent Colors

As mentioned earlier, transparent colors can be produced by setting the t value for the color. Hans Hagen posted the following sample code for transparent colors on the mailing list on 2005-07-13; the yellow blocks have been added to demonstrate the order in which the blocks are drawn on the page; the first yellow block is behind the transparent red and blue blocks, while the second is in front of them.

\setupcolors[state=start]
\definecolor [transparentred]  [r=1,t=.5,a=1]
\definecolor [transparentblue] [b=1,t=.5,a=1]
\definecolor [solidyellow]  [y=1,t=1,a=1]

\starttext

\startTEXpage
This is some sample text that goes behind the rectangles\hskip-8cm
\blackrule[width=2cm,height=1cm,depth=1cm,color=solidyellow]\hskip-0.67cm
\blackrule[width=2cm,height=2cm,color=transparentred]\hskip-0.67cm
\blackrule[width=2cm,height=1cm,depth=1cm,color=transparentblue]\hskip-0.67cm
\blackrule[width=2cm,height=2cm,color=solidyellow]\hskip2cm.
\stopTEXpage

\stoptext

Colorizing Grayscale Pictures

Another sample by Hans (mailing list 2005-11-16) demonstrates a lot of different possibilities:

\setuplayout[header=0pt,footer=0pt,width=middle,height=middle,backspace=1cm,topspace=1cm]
\setupcolors[state=start]

\startbuffer
\definecolor [blue]   [c=1, m=.38, y=0, k=.64]
\definecolor [yellow] [c=0, m=.28, y=1, k=.06]

\definespotcolor [blue-100]   [blue]   [p=1]
\definespotcolor [yellow-100] [yellow] [p=1]

\definemultitonecolor [combicolor]   [blue=.12, yellow=.28] [c=.1, m=.1, y=.3, k=.1]

\definemultitonecolor [combicolor-b] [blue=1]   [c=1, m=.38, y=0, k=.64] % force multitone
\definemultitonecolor [combicolor-y] [yellow=1] [c=0, m=.28, y=1, k=.06] % force multitone

\useexternalfigure[demo-a][mill.png]     [object=no, width=.2\textwidth]
\useexternalfigure[demo-b][hacker-bw.jpg][object=no, width=.2\textwidth]

\startbaselinecorrection
\startcombination[4*1]
 {\externalfigure[demo-a]}                                {no color}
 {\externalfigure[demo-a][color=combicolor]}   {indexed duotone}
 {\externalfigure[demo-a][color=combicolor-b]} {spot color}
 {\externalfigure[demo-a][color=combicolor-y]} {spot color}
\stopcombination
\stopbaselinecorrection

\startbaselinecorrection
\startcombination[4*1]
 {\externalfigure[demo-b]}                     {no color}
 {\externalfigure[demo-b][color=combicolor]}   {indexed duotone}
 {\externalfigure[demo-b][color=combicolor-b]} {spot color}
 {\externalfigure[demo-b][color=combicolor-y]} {spot color}
\stopcombination
\stopbaselinecorrection

\startbaselinecorrection
\startcombination[4*1]
 {\externalfigure[demo-a]}                     {no color}
 {\externalfigure[demo-a][color=combicolor]}   {indexed duotone}
 {\externalfigure[demo-a][color=blue-100]}     {spot color}
 {\externalfigure[demo-a][color=yellow-100]}   {spot color}
\stopcombination
\stopbaselinecorrection

\startbaselinecorrection
\startcombination[4*1]
 {\externalfigure[demo-b]}                     {no color}
 {\externalfigure[demo-b][color=combicolor]}   {indexed duotone}
 {\externalfigure[demo-b][color=blue-100]}     {spot color}
 {\externalfigure[demo-b][color=yellow-100]}   {spot color}
\stopcombination
\stopbaselinecorrection
\stopbuffer

\getbuffer \typebuffer

\stoptext

Colors with Hexadecimal Numbers

You can also use hexadecimal numers to specify colors. You need to load the hex color module first:

\setupcolor[hex]

and they you may define colors with

\definecolor[hex-red][h=FF0000]