summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/colorspace/colorspace.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/colorspace/colorspace.tex
Initial commit
Diffstat (limited to 'macros/latex/contrib/colorspace/colorspace.tex')
-rw-r--r--macros/latex/contrib/colorspace/colorspace.tex563
1 files changed, 563 insertions, 0 deletions
diff --git a/macros/latex/contrib/colorspace/colorspace.tex b/macros/latex/contrib/colorspace/colorspace.tex
new file mode 100644
index 0000000000..dff859ab3e
--- /dev/null
+++ b/macros/latex/contrib/colorspace/colorspace.tex
@@ -0,0 +1,563 @@
+%
+% Copyright (C) 2015-2019 Javier Bezos http://www.texnia.com
+%
+% This file may be distributed and/or modified under the conditions of
+% the MIT License. A version can be found at the end of this file.
+%
+% Repository: https://github.com/jbezos/colorspace
+%
+
+\documentclass[a4paper]{ltxguide}
+
+\title{\textsf{colorspace}\\\large Version 1.3}
+
+\author{Javier Bezos\\\texttt{http://www.texnia.com}}
+
+\date{2019-03-25}
+
+\raggedright
+\parskip=.8ex
+\advance\oddsidemargin-.7cm
+\advance\textwidth2cm
+\addtolength{\textheight}{3.5cm}
+\addtolength{\topmargin}{-2cm}
+
+\newif\ifcolorspace
+\newif\iftikz
+
+\usepackage{graphicx,bera}
+
+\IfFileExists{colorspace.sty}{%
+ \usepackage[illuminant=d65]{colorspace}%
+ \definespotcolor{foo}{BarTone 555 GN}{.8,.2,.5,.3}%
+ \definespotcolor{foob}{BarTone 666 GN}[rgb]{.8, .2, .4}%
+ \definespotcolor{foolab}{BarTone 888 LB}[alt=lab]%
+ {50, -30, -40/1, .20, .15, .07}%
+%
+ \definecolorspace{fooshaded}{mixed}{foo,black}%
+ \definecolorspace{labshaded}{mixed}{foolab,foob}%
+%
+ \definecolor{sfoo}{fooshaded}{1,0}
+ \definecolor{sblack}{fooshaded}{0,1}
+ \definecolorseries{shseries}{fooshaded}{last}{sfoo!40}{sblack}
+ \colorspacetrue}{}
+
+\IfFileExists{tikz.sty}{%
+ \catcode`|=12
+ \usepackage{tikz}%
+ \catcode`|=\active
+ \tikztrue}{}
+
+\def\showclr#1#{\testclr{#1}}
+\def\testclr#1#2{{\fboxsep0pt\fbox{\colorbox#1{#2}{\phantom{,MM}}}}}
+
+\makeatletter
+\def\@begintheorem#1#2{%
+ \list{}{}%
+ \global\advance\@listdepth\m@ne
+ \item[{\sffamily\bfseries\color{foob}\MakeUppercase{#1}}]}%
+\makeatother
+\newtheorem{warning}{Warning}
+\newtheorem{note}{Note}
+\newtheorem{example}{Example}
+
+\begin{document}
+
+{\fontsize{48}{48}\selectfont colorspace\par}
+{\LARGE Spot colors, mixed inks and more\par}
+\vspace*{1ex}
+Version 1.3 (2019-03-25)\par
+Javier Bezos (\texttt{http://www.texnia.com})
+
+\vspace*{6ex}
+
+The aim of this package is, as its name implies, to provide tools for
+PDF color spaces. It requires \textsf{xcolor}, which is loaded if it
+has not been before. It seems to work with \textsf{tikz}.
+
+Currently it supports what I think are the most common tools:
+\begin{itemize}
+\item Spot colors, with a clean user interface, and including tints
+ (with the |!| notation).
+\item CIE LAB spot colors.
+\item Proper switching of color spaces.
+\item Mixed spot and process colors (up to 4), like shades (ie, a spot
+ color with black). Also CIE LAB if a CMYK equivalent is provided.
+\item ICC based (or ``tagged'') default CMYK, RGB and Gray spaces.
+\item Overprinting (across pages, using the color stack).
+\end{itemize}
+Currently only \textsf{pdftex} and \textsf{luatex} are
+supported. Support for \textsf{xetex} is on the `to do' list, but due
+to the limitations of this engine this task is somewhat challenging
+and I'm not sure all features will be implemented.
+
+Other functions related to the PDF color spaces (indexed, calibrated,
+Lab spaces) are not yet suported, but they are under study. Calibrated
+colors, although not directly supported, can be defined with an ICC
+profile created with
+LPROF\footnote{\texttt{http://lprof.sourceforge.net/}} and then
+assigned to a default space as described below.
+
+They apply to text and line art only, not external images. For the
+latter, \textsf{graphicx} provides a plea of (undocumented)
+transformations: \texttt{interpolate}, \texttt{decodearray},
+\texttt{maskarray}, \texttt{intent}, \texttt{ocobjnum}, and
+\texttt{ocobjref}. For transparency, see \textsf{transparent}, by
+Heiko Oberdiek.
+
+This package is still evolving, but the basic behaviour described here
+will be preserved in future versions. However, some functions from
+\textsf{xcolor} might not work yet (for example
+\verb|\selectcolormodel| and the corresponding package options |cmyk|
+and the like).
+
+Declarations are global and should go in the preamble.
+
+This package is built on the previous attempts to provide spot colors
+and other additional features by Jens Elstner, Stephan Lehmke and Siep
+Kroonenberg (with some inspiration from \textsf{ConTeXt}, too).
+
+\section{CMYK spot colors}
+
+Spot colors are defined with a single macro:
+
+\begin{decl}
+|\definespotcolor{<latex-name>}{<PDF-name>}{<CMYK-equivalent>}|
+\end{decl}
+
+Here |<latex-name>| is the \LaTeX{} name, as used in \verb|\color| and
+the like, |<PDF-name>| is the PDF name (usually taken from a swatch
+book; multiple spaces are collapsed into one) as shown by PDF viewers,
+and the four numbers are the CMYK equivalent. \LaTeX{} knows nothing
+about the PDF name, which is just a string to be written to the
+generated file, while the PDF knows nothing about the \LaTeX{} name.
+
+To mix inks, see below.
+
+\begin{example}
+ Write, for example:
+\begin{verbatim}
+\definespotcolor{foo}{BarTone 555 GN}{.8,.2,.5,.3}
+\end{verbatim}
+ This creates the color \showclr{foo}, which is used in \LaTeX{} as
+ |\color{foo}|. If you preflight the PDF file you will see a color
+ named `BarTone 555 GN' besides cyan, magenta, yellow and black.
+
+You can use tints as usual in \textsf{xcolor}, like:
+\begin{verbatim}
+\color{foo!50}
+\colorlet{foo50}{foo!50}
+\end{verbatim}
+\ifcolorspace
+ which would produce \showclr{foo!50}, and
+\fi
+even set tints from other tints.
+\end{example}
+
+\begin{note}
+ The special PDF names \verb|All| (for all plates) and \verb|None|
+ work as expected:
+\begin{verbatim}
+\definespotcolor{registration}{All}{1,1,1,1}
+\end{verbatim}
+\end{note}
+
+\begin{note}
+ Remember as far PDF is concerned a spot color is a color space on
+ its own.
+\end{note}
+
+\begin{note}
+ This package does not provide a list of Pantone, TrueMatch, HKS,
+ Folcoltone, Toyo, etc., colors. Currently you can find quite easily
+ CMYK equivalents on the web, and after all they are intended to be
+ used with a ``physical'' swatch book (and not, as often done, by
+ picking a color from a ``virtual'' palette just because it looks
+ nice on screen).
+\end{note}
+
+\begin{decl}
+|\definespotcolor{<latex-name>}{<PDF-name>}[<model>]{<equivalent>}|
+\end{decl}
+
+Internally, only CMYK is used for the equivalent color, but with this
+variant you can define the latter with another name space, which is
+then converted.
+\begin{example} The following definition is based on RGB:
+\begin{verbatim}
+\definespotcolor{foob}{BarTone 666 GN}[rgb]{.8, .2, .4}
+\end{verbatim}
+ which yields \showclr{foob}. Here \textsf{xcolor} just
+ converts this value to CMYK, which is still the space used
+ internally.
+\end{example}
+
+\begin{warning}
+ This conversion relies on the \textsf{xcolor} numerical methods,
+ which do not take into account any color profile and therefore
+ should be avoided in production if the alternate space is going to
+ be actually used. It is provided just for convenience in drafting or
+ in contexts where accuracy is not essential.
+\end{warning}
+
+\section{CIE LAB spot colors}
+
+Instead of targeting the CMYK space, spot colors may be defined using
+the CIE LAB (also known as L*a*b*, or even just Lab) space. Unlike the
+default CMYK space, which is by default device dependend, the Lab
+space is device independent. To define a Lab spot color, you must
+first set the illuminant with the package option |illuminant|, which
+takes a value:
+\begin{verbatim}
+\usepackage[illuminant=d65]{colorspace}
+\end{verbatim}
+Values are \texttt{a}, \texttt{c}, \texttt{e}, \texttt{d50},
+\texttt{d55}, \texttt{d65}, \texttt{d75}.
+
+The command to define a color is:
+\begin{decl}
+|\definespotcolor{<latex-name>}{<PDF-name>}[alt=lab]{<Lab-values>}|
+\end{decl}
+Note the optional argument with the string |alt=lab| (which cannot be
+combined with a model). The three |<Lab-values>| have ranges
+\textit{L}* $=$ $0$\ldots$100$, \textit{a}* $=$ $-$128$\ldots$127,
+\textit{b}* $=$ $-$128{\ldots}127, respectively.
+
+\begin{example}
+ With
+\begin{verbatim}
+\definespotcolor{foolab}{BarTone 888 LB}[alt=lab]{50, -30, -40}
+\end{verbatim}
+the result is \showclr{foolab}. An example of tint is
+\verb|\color{foolab!30}| (\showclr{foolab!30}).
+\end{example}
+
+\begin{warning}
+ The package does not warn if the color falls outside the gamut of
+ the CMYK space or if the color is not visible. To put it in
+ other words, you should not just write some arbitrary values to see
+ what happens.
+\end{warning}
+
+\begin{warning}
+ This model is not available in \textsf{xcolor}. If you need some
+ transformation, you must resort to an external tool like
+ \textsf{transicc} (or \textsf{icctrans}) included in Little
+ CMS\footnote{\texttt{http://www.littlecms.com/1/downloads.htm}}.
+\end{warning}
+
+\begin{warning}
+ There is no default illuminant -- it must be set if Lab colors are
+ defined.
+\end{warning}
+
+\begin{note}
+ The observer is currently only 2$^\circ$ (1931).
+\end{note}
+
+The Lab space allows to define colors accurately, but there is a price
+to pay -- mixing Lab colors is not in general possible except after
+converting them somehow to CMYK or RGB.\footnote{There are no simple
+rules to carry out those transformations, which, I think, explains why
+\textsf{xcolor} does not support Lab at all}. Since currently mixing
+colors in this package is based on CMYK, you must provide an alternate
+value as shown, if mixed inks are required\footnote{Internally, and
+in PDF jargon, Lab is the ``alternate space'' and ``tints transforms''
+are based on CMYK}:
+\begin{verbatim}
+\definespotcolor{foolab}{BarTone 888 LB}[alt=lab]{50, -30, -40/1, .20, .15, .07}
+\end{verbatim}
+
+\section{Mixing spot colors}
+
+To mix spot colors you must first declare a color space (or model)
+including them. This is done with the following macro:
+
+\begin{decl}
+ |\definecolorspace{<latex-name>}{mixed}{<color-list>}|
+\end{decl}
+
+Here, |<latex-name>| is the name to be used in |\color| and the
+like as the color model. The second argument is the string |mixed|,
+and the last one is a list of up to 4 colors, either defined with
+\textsf{xcolor} using the CMYK model or spot.
+
+\begin{example}
+ A simple and typical usage would be for shades:
+\begin{verbatim}
+\definecolorspace{fooshaded}{mixed}{foo,black}
+\end{verbatim}
+ Then, you can define a color in this new model named
+ \verb|fooshaded| with:
+\begin{verbatim}
+\definecolor{darkfoo}{fooshaded}{.6,.3}
+\end{verbatim}
+Or set it with:
+\begin{verbatim}
+\color[fooshaded]{.6,.3}
+\end{verbatim}
+In both cases, the mix is 60\% \verb|foo| and 30\% \verb|black|.
+\end{example}
+
+\begin{example}
+ If we have two spot colors named \verb|spot1| and \verb|spot2|, and
+ we want in addition yellow:
+\begin{verbatim}
+\definecolorspace{mix12y}{mixed}{spot1,spot2,yellow}
+\end{verbatim}
+To define a new color based on this space:
+\begin{verbatim}
+\definecolor{mix12y}{mix12y}{.5,.4,.6}
+\end{verbatim}
+And to set it:
+\begin{verbatim}
+\color[mix12y]{.5,.4,.6}
+\end{verbatim}
+\end{example}
+
+\begin{example}
+Here is a duotone mixing the \verb|foob| and \verb|foolab| colors defined above:
+\begin{verbatim}
+\definecolorspace{labshaded}{mixed}{foolab,foob}
+\end{verbatim}
+The colors corresponding to:
+\begin{verbatim}
+\color[labshaded]{1,0} \color[labshaded]{.8,.2}
+\color[labshaded]{.6,.4} \color[labshaded]{.4,.6}
+\color[labshaded]{.2,.8} \color[labshaded]{0,1}
+\end{verbatim}
+are \showclr[labshaded]{1,0} \showclr[labshaded]{.8,.2}
+ \showclr[labshaded]{.6,.4} \showclr[labshaded]{.4,.6}
+ \showclr[labshaded]{.2,.8} \showclr[labshaded]{0,1}
+\end{example}
+
+\begin{warning}
+ Due to internal limitations of \textsf{xcolor}, no more than four
+ colors are allowed.
+\end{warning}
+
+\begin{note}
+ The alternate color space in the PDF file is that of the spot colors
+ (which means currently it is CMYK).
+\end{note}
+
+\begin{note}
+ There is an easy trick to mix colors with \verb|!| and
+ \verb|color,num| -- just define an ortogonal set of colors based on
+ the new color model:
+\begin{verbatim}
+\definecolor{xspot1}{mix12y}{1,0,0}
+\definecolor{xspot2}{mix12y}{0,1,0}
+\definecolor{xyellow}{mix12y}{0,0,1}
+\end{verbatim}
+ and then you can say:
+\begin{verbatim}
+\color{xspot1!30!xspot2!40!xyellow}
+\color{mix12y:xspot1,3;xspot2,2;xyellow,1}
+\end{verbatim}
+ Of course, it is just a trick and a better and direct interface is
+ under study (none of those provided by \textsf{xcolor} fits well
+ with the new |mixed| models).
+\end{note}
+
+\begin{warning}
+ Mixing colors in \verb|\color|, \verb|\definecolor| and the like
+ from diferent spaces can lead to unexpected results (currently no
+ checking is done).
+\end{warning}
+
+Color series (see the \textsf{xcolor} documentation) are also
+partially supported. For example:
+\begin{verbatim}
+\definecolorseries{test}{mix12y}{grad}[mix12y]{.95,.85,.55}{3,11,17}
+\definecolorseries{test}{mix12y}{last}{xyellow!50}{xspotA}
+\end{verbatim}
+
+\ifcolorspace
+\begin{example}
+ Here is a example with some of the described techniques, based on
+ the |fooshaded| space defined above (figure 1 shows the |foo|
+ plate):
+
+\begin{verbatim}
+\definecolor{sfoo}{fooshaded}{1,0}
+\definecolor{sblack}{fooshaded}{0,1}
+\definecolorseries{shseries}{fooshaded}{last}{sfoo!40}{sblack}
+\def\testclr#1{{\fboxsep0pt\fbox{\colorbox{#1}{\phantom{XX}}}}}
+\resetcolorseries[8]{shseries}
+\begin{tabular}{cccccccc}
+ 0 \testclr{shseries!!+} &
+ 1 \testclr{shseries!!+} &
+ 2 \testclr{shseries!!+} &
+ 3 \testclr{shseries!!+} &
+ 4 \testclr{shseries!!+} &
+ 5 \testclr{shseries!!+} &
+ 6 \testclr{shseries!!+} &
+ 7 \testclr{shseries!!+}
+\end{tabular}
+\end{verbatim}
+
+\begingroup
+\def\testclr#1{{\fboxsep0pt\fbox{\colorbox{#1}{\phantom{XX}}}}}
+\resetcolorseries[8]{shseries}
+\begin{tabular}{cccccccc}
+ 0 \testclr{shseries!!+} &
+ 1 \testclr{shseries!!+} &
+ 2 \testclr{shseries!!+} &
+ 3 \testclr{shseries!!+} &
+ 4 \testclr{shseries!!+} &
+ 5 \testclr{shseries!!+} &
+ 6 \testclr{shseries!!+} &
+ 7 \testclr{shseries!!+}
+\end{tabular}
+\endgroup
+\end{example}
+\fi
+
+\begin{figure}
+\fbox{\includegraphics[width=\linewidth]{colorspaceshade.png}}
+\caption{Plate for the \texttt{foo} spot color as shown by Adobe
+Acrobat. Note both \texttt{foob} and \texttt{foolab},
+defined in this document, are listed, too.}
+\end{figure}
+
+\section{Page color spaces}
+
+Each PDF page must know which colors will be used (other than the
+predefined CMYK, RGB and Gray). By default, \textsf{colorspace} turns
+on for every page all newly defined colors, and that will be fine in
+most cases. However, you may want to set explicitly the list (for
+covers or plates). Use this feature with care, because (1) the
+asynchronous nature of \TeX{} (remember it affects the whole current
+page), and (2) each distinct color list creates a PDF resource.
+
+\begin{decl}
+|\pagecolorspace{<color-list>}|\\
+|\resetpagecolorspace|
+\end{decl}
+
+To change the color space for a page and the subsequent ones, you can
+set something like:
+\begin{verbatim}
+\pagecolorspace{name1,name2,name3}
+\end{verbatim}
+(It can be empty.) To return to the default color space, which
+contains all the defined spot colors, use \verb|\resetpagecolorspace|.
+
+\section{ICC based spaces}
+
+\begin{decl}
+ |\definecolorspace*{<latex-name>}{iccbased}{<icc-file>}|
+\end{decl}
+The starred version \verb|\definecolorspace*| does not define a new
+color model, but sets the behaviour of the three basic color spaces
+(CMYK, RGB and Gray). When belonging to the same space, the last
+definition for that space takes precedence and it is considered the
+default one. It cannot be used to define new colors or set
+them. Currently, only a type is supported -- \verb|iccbased|. For
+example,
+\begin{verbatim}
+\definecolorspace*{sRGB}{iccbased}{sRGB Profile.icc}
+\end{verbatim}
+
+The space it applies to is read from the ICC profile.
+
+The name can be used in \verb|\pagecolorspace|. Alternatively, there
+are 3 reserved names: \verb|*rgb|, \verb|*gray|, \verb|*cmyk|, which
+stand for the last-defined, default ICC based spaces. Named ICC based
+spaces are not set by \verb|\resetpagecolorspace|, but the starred
+named are. On the other hand, the starred names are not set
+automatically by |\pagecolorspace|, and you must set them explicitly
+if you want them to be active.
+
+\begin{note}
+ Those ICC spaces do not go to the output intent dictionary (see
+ the \textsf{pdfx} package). The latter, as the PDF reference
+ explains, supplements rather than replaces the ICC profiles in a
+ default color space.
+\end{note}
+
+\begin{example}
+ Given the following declarations:
+\begin{verbatim}
+\definecolorspace*{sRGB}{iccbased}{sRGB Profile.icc}
+\definecolorspace*{colormatch}{ColorMatchRGB.icc}
+\end{verbatim}
+ and remembering the RGB space is always active (like the CMYK and
+ Gray ones),
+\begin{verbatim}
+\pagecolorspace{}
+\end{verbatim}
+leaves the RGB space unprofiled;
+\begin{verbatim}
+\pagecolorspace{sRGB}
+\end{verbatim}
+sets the RGB space to sRGB; while the following are (in this
+particular example) equivalent:
+\begin{verbatim}
+\pagecolorspace{colormatch}
+\pagecolorspace{*rgb}
+\resetpagecolorspace
+\end{verbatim}
+
+\end{example}
+
+\section{Overprinting}
+
+This is usually a pre-print task, but by setting it in the document
+you will get a better idea of how the colors are actually overlapped
+in soft proofing. However, remember the effect produced is
+device-dependent, and colorant overprint decisions should be made at
+output time (according to the PDF reference).
+
+Very often, it is set for the whole document with the package options
+\verb|knockout| (no overprint), and \verb|overprint|. By default, the
+overprint mode is 1, but it can be changed with \verb|opm=0|.
+
+Once set the overprint state for the whole document, you can use
+something like:
+\begin{verbatim}
+{\overprintstate{1}text}
+\textoverprint[1]{text}
+\end{verbatim}
+(or \verb|0|, or \verb|no|; default in \verb|\textoverprint| is
+\verb|1|, except with the package option \verb|opm=0|).
+
+Since the color stack is used, pdf\TeX{} $\ge$ 1.40 is required.
+
+\begin{warning}
+ Some PDF viewers ignore this setting.
+\end{warning}
+
+\section{Version}
+
+1.1.1. No new features. Just internal changes related to
+\textsc{luatex} and new manual.
+
+1.2.0. CIE LAB spot colors and |illuminant|. Manual rewritten.
+
+1.3. Fixes several incompatibilities with \textsf{pgf}/\textsf{tikz}.
+
+\end{document}
+
+MIT License
+-----------
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.