-
Notifications
You must be signed in to change notification settings - Fork 5
/
xcolor.dtx
8276 lines (8209 loc) · 333 KB
/
xcolor.dtx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% \iffalse meta-comment
%%
%% ----------------------------------------------------------------
%% Copyright (C) 2003-2021 by Dr. Uwe Kern <xcolor at ukern dot de>
%% 2021-2024 LaTeX Project https://github.com/latex3/xcolor/issues
%% ----------------------------------------------------------------
%%
%<*package>
%% Please send error reports and suggestions for
%% improvements to https://github.com/latex3/xcolor/issues.
%%
%% This package contains code copied from
%%
%% color.dtx [1999/02/16 v1.0i Standard LaTeX Color (DPC)]
%% Copyright (C) 1994--1999 David Carlisle
%%
%% which is part of the Standard LaTeX `Graphics Bundle'.
%%
%</package>
%<*extract|driver|test1|test2|test3|test4>
\def\XCfileversion{v3.02}%
\def\XCfiledate{2024/09/29}%
%</extract|driver|test1|test2|test3|test4>
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in:
%
% http://www.latex-project.org/lppl.txt
%
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008-05-04 or later.
%
% \fi
%
%
% \DoNotIndex{\def,\gdef,\edef,\xdef,\long,\let}
% \DoNotIndex{\ifnum,\ifdim,\iftrue,\iffalse,\ifx,\ifcase,\else,\or,\fi}
% \DoNotIndex{\bgroup,\egroup,\begingroup,\endgroup,\begin,\end}
% \DoNotIndex{\relax,\endinput}
% \DoNotIndex{\csname,\endcsname,\string,\the,\noexpand,\expandafter}
% \DoNotIndex{\advance,\count,\dimen}
% \DoNotIndex{\m@ne,\z@,\@ne,\tw@,\p@,\@@tmp}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
%
% \iffalse
%<*batchfile>
\IfFileExists{xcolor.ins}{\let\uknext=\relax}{\let\uknext=\stop}
\begin{filecontents*}{xcolor.ins}
%% Package `xcolor' by Dr. Uwe Kern
%%
%% Extract all package files:
%% `latex xcolor.ins'
%%
%% Put the generated files to their respective locations
%% within the TeX installation:
%% *.sty -> /tex/latex/xcolor/
%% *.def -> /tex/latex/xcolor/
%% *.pro -> /dvips/xcolor/
%%
%% Create the documentation:
%% `latex xcolor.dtx'
%% `latex xcolor.dtx'
%% `makeindex -s gind.ist xcolor.idx'
%% `latex xcolor.dtx'
%% `latex xcolor.dtx'
%%
%% Run the test files (N=1,2,...):
%% `latex xcolorN.tex'
%% `latex xcolorN.tex'
%%
\def\batchfile{xcolor.ins}
\input docstrip.tex
\askforoverwritefalse
\generate{\file{xcolor.lox}{\from{xcolor.dtx}{extract}}}
\batchinput{xcolor.lox}
\endbatchfile
\end{filecontents*}
%</batchfile>
%
%<*driver>
\listfiles
\ProvidesFile{xcolor.dtx}[\XCfiledate\space\XCfileversion\space
`xcolor' source and documentation (UK)]
\PassOptionsToPackage
{
hyperindex=false,bookmarks,bookmarksopen,bookmarksopenlevel=1,%
pdftitle={xcolor \XCfileversion{} (\XCfiledate)},
pdfauthor={Dr. Uwe Kern},%
pdfsubject={Color extensions for LaTeX and pdfLaTeX},%
pdfkeywords={xcolor,color,colour,model,tint,tone,shade,harmony,spot,latex,pdftex,dvips,%
conversion,blend,mix,mask,separation,rgb,cmy,cmyk,hsb,gray,html,wave,thsb,wheel}
}{hyperref}
\documentclass{ltxdoc}
\usepackage[table,showerrors,dvipsnames,hyperref]{xcolor}[2005/06/06]
\usepackage{chngpage,varioref,tabularx,amsmath,amsthm}
\OnlyDescription
\EnableCrossrefs
\CodelineIndex
\makeatletter
\def\Meaning#1{\texttt{\expandafter\expandafter\expandafter\strip@prefix\expandafter\meaning\csname #1\endcsname}}
\makeatother
\pagestyle{myheadings}
\markright{\hskip-2.5cm xcolor \XCfileversion\space(\XCfiledate)}
\begin{document}
\DocInput{xcolor.dtx}
\let\Section\section\def\section*#1{\Section*{#1}\addcontentsline{toc}{section}{#1}}
\begin{adjustwidth}{-2.5cm}{}
\def\markboth#1#2{}\PrintIndex
\end{adjustwidth}
\end{document}
%</driver>
%
%<*extract>
\def\ukfile#1#2#3#4%
{\def\ukhead
{\ifnum#1>2 \perCent!^^J\fi
\defaultpreamble^^J\MetaPrefix^^J%
\ifcase#1
\string\ProvidesPackage{#2}^^J\or
\string\ProvidesFile{#2}^^J\or
\string\ProvidesFile{#2.def}^^J\or
\MetaPrefix\space #2.pro (PostScript/dvips header file)^^J\MetaPrefix\space
\fi
\space[\XCfiledate\space\XCfileversion\space#4\space(UK)]}
\usepreamble\ukhead
\file{#2.\ifcase#1sty\or tex\or def\or pro\fi}{\from{xcolor.dtx}{#3}}}
\generate{
\ukfile0{xcolor}{package}{LaTeX color extensions}
\ukfile2{svgnam}{svgnames}{Predefined colors according to SVG 1.1}
\ukfile2{x11nam}{x11names}{Predefined colors according to Unix/X11}
\ukfile1{xcolor1}{test1}{Color conversion test}
\ukfile1{xcolor2}{test2}{Pstricks color test}
\ukfile1{xcolor3}{test3}{Color logging test}
\ukfile1{xcolor4}{test4}{Color driver test}
\def\PStail{\MetaPrefix\space End of file `\outFileName'.}
\usepostamble\PStail
\ukfile3{xcolor}{dvips}{LaTeX color extensions}
}
%</extract>
% \fi
%
%
%
% \iffalse
%-------------------------------------------------------------------------------
% \fi
%
%
% \makeatletter
%
% \def\testclr#1#{\@testclr{#1}}
% \def\@testclr#1#2{{\fboxsep\z@\fbox{\colorbox#1{#2}{\phantom{XX}}}}}
% \def\Testclr#1#{\@Testclr{#1}}
% \def\@Testclr#1#2#3{\testclr#1{#2}~\rlap{\Color[-]{#3}}\\}
% \def\TestClr#1#{\@TestClr{#1}}
% \def\@TestClr#1#2#3{\testclr#1{#2}~\rlap{\Color[+]{#3}}\\}
% \newif\if@Meta
% \DeclareRobustCommand*\Meta{\@ifstar{\@Metatrue\@Meta}{\@Metafalse\@Meta}}
% \newcommand*\@Meta[2][]{\meta{#2}\@ifxempty{#1}{}{\ensuremath{\mskip-1mu\rule[-.4ex]{0pt}{1ex}_{#1}}}\if@Meta\index{arguments\levelchar\meta{#2}\string|usage}\fi}
% \def\DescribeArg#1{\leavevmode\@bsphack\marginpar{\raggedleft\Meta*{#1}}\@esphack\ignorespaces}
% \def\DescribeFunc#1{\leavevmode\@bsphack\marginpar{\raggedleft\Function{#1}\strut}\@esphack\ignorespaces}
%
% \makeatother
%
% \def\Index#1{#1\index{#1\string|usage}}
% \def\Package#1{\textsf{#1}\index{packages\levelchar\textsf{#1}\string|usage}}
% \def\Program#1{\textsf{\itshape#1}\index{programs\levelchar\textsf{\itshape#1}\string|usage}}
% \def\Model#1{\textsf{\bfseries#1}\index{color models\levelchar\textsf{\bfseries#1}\string|usage}}
% \def\nModel#1{`#1'\index{color models\levelchar`#1'\string|usage}}
% \def\pModel#1{\textbf{\itshape #1}}
% \def\People#1#2{#1 #2\index{people\levelchar#2, #1\string|usage}}
% \newcommand*\Color[2][+]{\textsl{#2}\ifx#1+\index{color names\levelchar\textsl{#2}\string|usage}\fi}
% \def\Option#1{\texttt{#1}\index{package options\levelchar\texttt{#1}\string|usage}}
% \def\oOption#1{\texttt{#1}\index{package options (obsolete)\levelchar\texttt{#1}\string|usage}}
% \def\Key#1{\textit{#1}\index{keys\levelchar\textit{#1}\string|usage}}
% \def\File#1{\texttt{#1}\index{files\levelchar\texttt{#1}\string|usage}}
% \def\Function#1{\textit{#1}\index{color functions\levelchar\textit{#1}\string|usage}}
% \def\Op#1#2{#1\nolimits_{\,\Model{#2}}}
% \def\med{\mathop{\textrm{med}}}
% \def\mix{\mathop{\textrm{mix}}}
% \def\rd{\mathop{\textrm{round}}}
% \def\tint{\mathop{\textrm{tint}}}
% \def\shade{\mathop{\textrm{shade}}}
% \def\tone{\mathop{\textrm{tone}}}
% \def\LC{\Package{color}}
% \def\LCP{\Package{color} package}
% \def\XC{\Package{xcolor}}
% \def\XCP{\Package{xcolor} package}
% \def\XCW{\texttt{\href{http://www.ukern.de/tex/xcolor.html}{www.ukern.de/tex/xcolor.html}}}
% \def\URL#1{\texttt{\url{#1}}}
% \def\CTAN#1#2{\texttt{\href{http://www.ctan.org/tex-archive/#1}{CTAN/#1#2}}}
% \newtheorem{lemma}{Lemma}
% \def\RtoI#1{\Gamma_{\!#1}}
% \def\ItoR#1{\Delta_{#1}}
% \def\bbbN{\textrm{I\kern-.333ex N}}
% \def\bbbR{\textrm{I\kern-.333ex R}}
% \def\Circ{\textsuperscript{$\circ$}}
%
% \newdimen\XCdim
%
% \parindent0pt
% \extrarowheight1pt
% \def\textfraction{0.01}
% \def\topfraction{0.99}
% \def\bottomfraction{0.99}
% \def\floatpagefraction{0.70}
% \setlength\abovecaptionskip{12pt}
% \setlength\belowcaptionskip{10pt}
% \colorlet{tableheadcolor}{gray!25}
% \colorlet{tablerowcolor}{gray!12.5}
%
%
%
% \title{Extending \LaTeX's color facilities: the \XCP}
% \author{\href{mailto:[email protected]}{\fboxrule0pt\fboxsep2pt\fbox{Dr. Uwe Kern}}}
% \date{\XCfileversion{} (\XCfiledate)
% \thanks{This package can be downloaded from \CTAN{macros/latex/contrib/xcolor/}{}.
% There is also an \textsf{xcolor} homepage: \XCW.
% Please send error reports and suggestions for improvements to:
% \url{https://github.com/latex3/xcolor/issues}.}}
% \maketitle
%
% \begin{abstract}
% \noindent
% \XC{} provides easy driver-independent access to several kinds of colors, tints, shades, tones, and mixes of arbitrary colors by means of color expressions like |\color{red!50!green!20!blue}|.
% It allows to select a document-wide target color model and offers tools for automatic color schemes, conversion between twelve color models, alternating table row colors, color blending and masking, color separation, and color wheel calculations.
% \end{abstract}
%
% \phantomsection\pdfbookmark[1]{\contentsname}{toc}
% \tableofcontents\listoftables\listoffigures\newpage
%
%
%
%
% \clearpage
% \section{Introduction}
%
% \subsection{Purpose of this package}
%
% The \LCP{} provides a powerful and stable tool for handling colors within (pdf)\LaTeX{} in a consistent and driver-independent way, supporting several color models (slightly less driver-independent).
%
% Nevertheless, it is sometimes a bit clumsy to use, especially in cases where slight color variations, color mixes or color conversions are involved:
% this usually implies the usage of another program that calculates the necessary parameters, which are then copied into a |\definecolor| command in \LaTeX.
% Quite often, also a pocket calculator is involved in the treatment of issues like the following:
% \begin{itemize}
% \item My company has defined a corporate color, and the printing office tells me how expensive it is to use more than two colors in our new brochure, whereas all kinds of tints (e.g., a 75\% version) of our color can be used at no extra cost.
% But how to access these color variations in \LaTeX?\\
% (Answer: |\color{CorporateColor!75}| etc.)
% \item My friend uses a nice color which I would like to apply in my own documents; unfortunately, it is defined in the \Model{hsb} model which is not supported in my favorite application pdf\LaTeX.
% What to do now?\\
% (Answer: just use the \Model{hsb} definitions, \XC{} will do the necessary calculations)
% \item How does a mixture of 40\% \Color{green} and 60\% \Color{yellow} look like?\\
% (Answer: 40\% \testclr{green} $+$ 60\% \testclr{yellow} $=$ \testclr{green!40!yellow}, e.g., |\color{green!40!yellow}|)
% \item And how does its complementary color look like?\\
% (Answer: \testclr{-green!40!yellow}, accessible via |\color{-green!40!yellow}|)
% \item Now I want to mix three parts of the last color with two parts of its complement and one part of \Color{red}.
% How does that look?\\
% (Answer: $3\times$ \testclr{-green!40!yellow} $+ 2\times$ \testclr{green!40!yellow} $+ 1\times$ \testclr{red} $=$ \testclr{rgb:-green!40!yellow,3;green!40!yellow,2;red,1}, the last color being accessible via |\color{rgb:-green!40!yellow,3;green!40!yellow,2;red,1}|)
% \item I know that light waves of 485nm are within the visible range. But which color do they represent?\\
% (Answer: approximately \testclr[wave]{485}, via |\color[wave]{485}|)
% \item My printing office wants all color definitions in my document to be transformed into the \Model{cmyk} model.
% How can I do the calculations efficiently?\\
% (Answer: |\usepackage[cmyk]{xcolor}| or |\selectcolormodel{cmyk}|)
% \item I have a table with 50 rows.
% How can I get alternating colors for entire rows without copying 50 |\rowcolor| commands? The alternating scheme should start in the 3rd row.\\
% (Answer: something like |\rowcolors{3}{OddColor}{EvenColor}|)
% \end{itemize}
% These are some of the issues solved by the \XCP.
% Its purpose can be summarized as to maintain the characteristics of \LC, while providing additional features and flexibility with (hopefully) easy-to-use interfaces.
%
%
%
% \subsection{Color tints, shades, tones, and complements}
%
% According to \cite{smith} we define the terms
% \begin{itemize}
% \item \textbf{\Index{tint}}: a color with \Color{white} added,
% \item \textbf{\Index{shade}}: a color with \Color{black} added,
% \item \textbf{\Index{tone}}: a color with \Color{gray} added.
% \end{itemize}
% These are special cases of a general function
% $\mix(C,C',p)$ which constructs a new color, consisting of $p$ parts of color $C$ and $1-p$ parts of color $C'$, where $0\le p\le1$.
% Thus, we set
% \begin{align}
% \tint(C,p) &:= \mix(C,|white|,p)\\
% \shade(C,p) &:= \mix(C,|black|,p)\\
% \tone(C,p) &:= \mix(C,|gray|,p)
% \end{align}
% where |white|, |black|, and |gray| are model-specific constants, see table \vref{tab.const}.
% Further we define the term
% \begin{itemize}
% \item \textbf{complement}: a color $C^*$ that yields \Color{white} if superposed with the original color $C$,
% \end{itemize}
% knowing that there are also different concepts of complementarity in place (e.g., opposite colors on \emph{color wheels}).
% See section \vref{sec.cnv} for calculation details and section \vref{sec.harmony} for some remarks on color wheels.
%
%
%
% \subsection{Color models}
%
% A color model is a tool to describe or represent a certain set of colors in a way that is suitable for the desired target device, e.g., a screen or a printer.
% There are proprietary models (like \Index{Pantone} or \Index{HKS}) that provide finite sets of colors (often called \emph{\Index{spot color}s}), where the user has to choose from without caring about parametrisations; on the other hand, there are parameter-driven models like \Model{gray}, \Model{rgb}, and \Model{cmyk}, that aim to represent large finite or even (theoretically) infinite sets of colors, built on very small subsets of base colors and rules, how to construct other colors from these base colors.
% For example, a large range of colors can be constructed by linear combinations of the base colors \Color{red}, \Color{green}, and \Color{blue}.
% On the other hand, usually \Index{spot color}s can only be \emph{approximated} by parameter values in models like \Model{cmyk} or \Model{rgb}; the original colors are being physically mixed even dependent on the targeted kind of paper.
% Finally, there are certain colors like \Color{gold} and \Color{silver} that are hardly reproducible by any parameter-driven color model on standard ink or laser printers.
%
%
%
% \subsection{Color wheels and color harmony}\label{sec.harmony}
%
% There has been a long history of placing colors (hues) on wheels in order to discuss theoretical or practical color issues (e.g., \People{Isaac}{Newton}, \People{Johann Wolfgang von}{Goethe}).
% One reason may be that the circle itself is a natural tool to demonstrate common relationships as well as opposite properties.
%
% Nowadays, there exists some confusion about notions, since both major areas related to color --- art and graphics design on one hand, scientific color theory on the other hand --- tend to use the same words to describe color properties, however meaning sometimes very different facts!
% Thus, the appearance of color wheels differs as well as the meaning of concepts like `primary' or `complementary' colors.
%
%
% \paragraph{Typical color wheel construction}
% First, three \emph{primary colors} are placed at 0\Circ, 120\Circ, 240\Circ (artists often choose \Color{red}, \Color{yellow}, \Color{blue}, whereas color scientists might prefer \Color{red}, \Color{green}, \Color{blue}).
% Next, three \emph{secondary colors} are put at 60\Circ, 180\Circ, 300\Circ.
% Then, six \emph{tertiary colors} may be placed in between (30\Circ, 90\Circ, \dots).
% This is why color wheels are frequently described to consist of twelve equidistant colors, although the algorithm can be repeated arbitrarily often.
%
%
% \paragraph{Color harmonies derived from a wheel}
% We start with an arbitrary color wheel:
% \begin{itemize}
% \item \textbf{complementary colors} have a distance of 180\Circ{} on the wheel,
% \item \textbf{color triads} consist of three colors in 120\Circ{} steps,
% \item \textbf{color tetrads} consist of four colors in 90\Circ{} steps.
% \end{itemize}
% We assume now that the wheel is partitioned into $2n$ sectors of equal size:
% \begin{itemize}
% \item \textbf{split complementary colors} of a given color are the two immediate neighbours of its complementary color, characterised by the positions $\frac{n\pm1}{2n}\cdot360^\circ$,
% \item \textbf{analogous colors} to a given color are its two or four neighbours, characterised by the positions $\pm\frac{1}{2n}\cdot360^\circ$ and $\pm\frac{2}{2n}\cdot360^\circ$.
% \end{itemize}
% Given these methods to generate `color harmonies', we conclude that the results depend heavily on how we constructed the wheel!
% Moreover, the choice of $n$ will affect the visual results as well.
% Examples are shown in figure \vref{fig.harmony}.
%
%
%
%
% \clearpage
% \section{The User Interface}
%
% \subsection{Preparation}
%
% \subsubsection{Package installation}
%
% First of all, put \File{xcolor.sty} and all the \File{.def} files to some place where (pdf)\LaTeX{} finds them.
% A typical place according to the \emph{\TeX\ Directory Structure} (TDS) would be the directory |texmf/tex/latex/xcolor|, where |texmf| denotes the main directory of your \TeX\ installation.
% Additionally, put \File{xcolor.pro} to a place where \Program{dvips} finds it, typically |texmf/dvips/xcolor|.
% Usually, you will have to run some kind of filename database update in order to make the files known and quickly searchable to the \TeX\ system.
% Then simply use \XC{} (instead of \LC) in your document.
% Thus, the general command is |\usepackage|\oarg{options}|{xcolor}| in the document preamble.
% Table \vref{tab.package} shows what has to be taken into account with respect to the package loading order.
%
%
% \subsubsection{Package options}
%
% In general, there are several types of options:
% \begin{itemize}
% \item options that determine the color driver as explained in \cite{dpc} and \cite{color}, currently: \Option{dvips}, \Option{xdvi}, \Option{dvipdf}, \Option{dvipdfm}, \Option{dvipdfmx}, \Option{luatex}, \Option{pdftex}, \Option{dvipsone}, \Option{dviwindo}, \Option{emtex}, \Option{dviwin}, \Option{oztex}, \Option{textures}, \Option{pctexps}, \Option{pctexwin}, \Option{pctexhp}, \Option{pctex32}, \Option{truetex}, \Option{tcidvi}, \Option{vtex}, \Option{xetex}, \Option{dvisvgm},
% \item options that determine the target color model\footnote{Section \vref{sec.tgt} explains how this setting can be overridden at any point in a document.} (\Option{natural}, \Option{rgb}, \Option{cmy}, \Option{cmyk}, \Option{hsb}, \Option{gray}, \Option{RGB}, \Option{HTML}, \Option{HSB}, \Option{Gray}) or disable colored output (\Option{monochrome}),
% \item options that control whether and how certain sets of predefined colors are being loaded: \Option{dvipsnames}, \Option{dvipsnames*}, \Option{svgnames}, \Option{svgnames*}, \Option{x11names}, \Option{x11names*},
% \item option that determine which other packages are to be loaded or supported: \Option{table},
% \item options that influence the behaviour of other commands: \Option{prologue}, \Option{kernelfbox}, \Option{xcdraw}, \Option{noxcdraw}, \Option{fixinclude}, \Option{showerrors}, \Option{hideerrors},
% \item obsolete options:
% \oOption{pst},
% \oOption{override}, \oOption{usenames}, \oOption{nodvipsnames}, \oOption{fixpdftex}, \oOption{hyperref}.
% \end{itemize}
% All available package options (except driver selection and obsolete options) are listed in table \vref{tab.opt}.
% \DescribeMacro\GetGinDriver
% \DescribeMacro\GinDriver
% In order to facilitate the co-operation with the \Package{hyperref} package, there is a command |\GetGinDriver|\footnote{This command is executed automatically if the package option \Option{hyperref} is used.} that grabs the driver actually used and puts it into the command |\GinDriver|.
% The latter can then be used within \Package{hyperref} (or other packages), see the code example on page \pageref{ex.range}.
% If there is no corresponding \Package{hyperref} option, \Option{hypertex} will be taken as default.
%
% Warning: there is a substantial difference between \XC{} and \LC{} regarding how the \Option{dvips} option is being handled.
% The \LCP{} implicitly invokes the \Option{dvipsnames} option, whenever one of the |dvips|, |oztex|, |xdvi| drivers is selected.
% This makes documents less portable, since whenever one of these colors is used without explicit \Option{dvipsnames} option, other drivers like |pdftex| will issue error messages because of unknown colors.
% Therefore, \XC{} always requires an explicit \Option{dvipsnames} option to use these names --- which then works for all drivers.
%
%
% \begin{table}[p]\caption{Package options}\label{tab.opt}
% \extrarowheight2pt
% \begin{adjustwidth}{-2.5cm}{}
% \advance\textwidth2.5cm
% \rowcolors{3}{tablerowcolor}{}
% \begin{tabularx}{\linewidth}{lX}
% \hline
% \rowcolor{tableheadcolor}
% \em Option & \em Description\\
% \Option{natural}& (Default.) Keep all colors in their model, except \Model{RGB} (converted to \Model{rgb}), \Model{HSB} (converted to \Model{hsb}), and \Model{Gray} (converted to \Model{gray}).\\
% \Option{rgb}& Convert all colors to the \Model{rgb} model.\\
% \Option{cmy}& Convert all colors to the \Model{cmy} model.\\
% \Option{cmyk}& Convert all colors to the \Model{cmyk} model.\\
% \Option{hsb}& Convert all colors to the \Model{hsb} model.\\
% \Option{gray}& Convert all colors to the \Model{gray} model. Especially useful to simulate how a black \& white printer will output the document.\\
% \Option{RGB}& Convert all colors to the \Model{RGB} model (and afterwards to \Model{rgb}).\\
% \Option{HTML}& Convert all colors to the \Model{HTML} model (and afterwards to \Model{rgb}).\\
% \Option{HSB}& Convert all colors to the \Model{HSB} model (and afterwards to \Model{hsb}).\\
% \Option{Gray}& Convert all colors to the \Model{Gray} model (and afterwards to \Model{gray}).\\
% \hline
% \Option{dvipsnames}, \Option{dvipsnames*}& Load a set of predefined colors.\footnotemark[1]\\
% \Option{svgnames}, \Option{svgnames*}& Load a set of predefined colors according to \Index{SVG} 1.1.\footnotemark[1]\\
% \Option{x11names}, \Option{x11names*}& Load a set of predefined colors according to \Index{Unix}/\Index{X11}.\footnotemark[1]\\
% \hline
% \Option{table}& Load the \Package{colortbl} package, in order to use the tools for coloring rows, columns, and cells within tables.\\
% \Option{fixpdftex}& This option is obsolete and does nothing at all.\\
% \Option{hyperref}& Support the \Package{hyperref} package in terms of color expressions by defining additional keys (see section \vref{sec.hyperref}).\\
% \hline
% \Option{prologue}& Write prologue information to \File{.xcp} file for every color definition (as described in section \vref{sec.prologue}).\\
% \hline
% \Option{kernelfbox}& Use \LaTeX{} kernel method to draw \texttt{\string\f(rame)box} frames\footnotemark[2].\\
% \Option{xcdraw}& Use driver-specific commands to draw frames and color boxes.\footnotemark[2]\\
% \Option{noxcdraw}& (Default.) Use generic code to draw frames and color boxes.\footnotemark[2]\\
% \Option{fixinclude}& Prevent |dvips| color reset before \File{.eps} file inclusion (see section \vref{sec.fixinclude}).\\
% \hline
% \Option{showerrors}& (Default.) Display an error message if an undefined color is being used (same behaviour as in the original \LCP).\\
% \Option{hideerrors}& Display only a warning if an undefined color is being used, and replace this color by \Color{black}.\\
% \hline\hline
% \multicolumn2{c}{\footnotemark[1]\,See section \vref{sec.additionalcolors}.\quad \footnotemark[2]\,See section \vref{sec.fbox}.}\\
% \hline
% \end{tabularx}
% \end{adjustwidth}
% \end{table}
%
%
% \begin{table}[htbp]\caption{Package loading order}\label{tab.package}
% \begin{adjustwidth}{-2.5cm}{}
% \raggedleft
% \extrarowheight2pt
% \rowcolors{3}{tablerowcolor}{}
% \begin{tabular}{l*{5}{c}}
% \hline
% \rowcolor{tableheadcolor}
% \em Action/Package & \Package{colortbl}& \Package{hyperref}& \Package{pstricks}& \LC& \Package{pstcol}\\
% load before \XC & allowed & allowed & allowed\rlap{\footnotemark[1]} & no & no \\
% load with \XC{} option& \Option{table} & --- & --- & --- & --- \\
% load after \XC & allowed & allowed & allowed & no & no \\
% \hline\hline
% \multicolumn5{c}{\footnotemark[1]\,\Package{pstricks} loads \XC\ by default}\\
% \hline
% \end{tabular}
% \end{adjustwidth}
% \end{table}
%
%
% \begin{table}[htbp]\caption{Supported color models}\label{tab.mod}
% \raggedleft
% \extrarowheight2pt
% \rowcolors{3}{tablerowcolor}{}
% \begin{tabular}{l>{\em}l>{$}l<{$}rl}
% \hline
% \rowcolor{tableheadcolor}
% \emph{Name} & Base colors/notions & \emph{Parameter range}& \multicolumn2{>{\columncolor{tableheadcolor}}l}{\emph{Default}}\\
% \Model{rgb} & red, green, blue & \left[0,1\right]^3&& \\
% \Model{cmy} & cyan, magenta, yellow & \left[0,1\right]^3&& \\
% \Model{cmyk} & cyan, magenta, yellow, black & \left[0,1\right]^4&& \\
% \Model{hsb} & hue, saturation, brightness & \left[0,1\right]^3&& \\
% \Model{Hsb} & hue\Circ\!, saturation, brightness & \left[0,H\right]\times\left[0,1\right]^2&$H=$& $\mkern-15mu\rangeHsb$\\
% \Model{tHsb} & hue\Circ\!, saturation, brightness & \left[0,H\right]\times\left[0,1\right]^2&$H=$& $\mkern-15mu\rangeHsb$\\
% \Model{gray} & gray & \left[0,1\right]&& \\
% \Model{RGB} & Red, Green, Blue & \{0,1,\dots,L\}^3& $L\,=$& $\mkern-15mu\rangeRGB$\\
% \Model{HTML} & RRGGBB & \{\texttt{000000},\dots,\texttt{FFFFFF}\}&& \\
% \Model{HSB} & Hue, Saturation, Brightness & \{0,1,\dots,M\}^3& $M=$& $\mkern-15mu\rangeHSB$\\
% \Model{Gray} & Gray & \{0,1,\dots,N\}& $N\,=$& $\mkern-15mu\rangeGray$\\
% \Model{wave} & lambda \emph{(nm)}& \left[363,814\right]&& \\
% \hline\hline
% \multicolumn5{c}{$L,M,N$ are positive integers; $H$ is a positive real number}\\
% \hline
% \end{tabular}
% \end{table}
%
%
% \subsubsection{Executing additional initialisation commands}
%
% \DescribeMacro\xcolorcmd
% Here is a simple interface to pass commands that should be executed at the end of the \XCP{} (immediately before the initialising |\color{black}| is executed).
% Just say |\def\xcolorcmd|\marg{commands} at some point before \XC{} is loaded.
%
% Example: assuming that |a.tex| is a complete \LaTeX{} document, a command like
% `|latex \def\xcolorcmd{\colorlet{black}{red}}\input{a}|'
% at the console generates a file |a.dvi| with all occurrences of \Color{black} being replaced by \Color{red}, without the necessity to change the source file itself.
% (The exact spelling of the console command might vary across operating systems and \TeX{} distributions.)
%
%
%
% \subsection{Color models}
%
% \subsubsection{Supported color models}
%
% The list of supported color models and their parameter ranges is given in table \vref{tab.mod}.
% We emphasize that this color support is independent of the chosen driver.
%
% `Color model support' also means that it is possible to specify colors directly with their parameters, e.g., by saying |\textcolor[cmy]{0.7,0.5,0.3}{foo}| (\textcolor[cmy]{0.7,0.5,0.3}{foo}) or |\textcolor[HTML]{AFFE90}{foo}| (\textcolor[HTML]{AFFE90}{foo}).
%
% \paragraph{\Model{rgb}, \Model{cmyk}, \Model{hsb}, \Model{gray}}
% These are the models supported by \Index{PostScript} directly.
% We therefore refer to \cite{plrm} for a description of their properties and relations.
% There is a special command
% \DescribeMacro\adjustUCRBG
% to fine-tune the mechanisms of \emph{undercolor-removal} and \emph{black-generation} during conversion to the \Model{cmyk} model, see section \vref{sec.cmy2cmyk} for details.
%
% \paragraph{\Model{cmy}}
% This is mainly a model for intermediary calculation steps.
% With respect to that, it is a simple complement of \Model{rgb}.
% As far as visualisation is concerned, \Model{cmy} is treated as \Model{cmyk} with $k=0$.
%
% \paragraph{\Model{HTML}}
% This is a model derived from \Model{rgb} in order to enable input of color parameters from web pages or CSS files.
% Therefore, it is not really a color model of its own right, but rather a user interface for convenience.
% It is worth mentioning that \Model{HTML} accepts any combination of the characters |0|--|9|, |A|--|F|, |a|--|f|, as long as the string has a length of exactly 6~characters.
% However, outputs of conversions to \Model{HTML} will always consist of numbers and \emph{uppercase} letters.
%
% \paragraph{\Model{Hsb}, \Model{tHsb}}
% Firstly, \Model{Hsb} is a `user interface' model, mapping $\emph{hue}\in[0,1]$ onto $\emph{hue\Circ}\in[0,H]$, where $H$ is given by |\def\rangeHsb|\marg{H}.
% \DescribeMacro\rangeHsb
% Thus, if $H=360$, we can think of a circle or wheel to specify the \emph{hue\Circ} parameter.
% Secondly, \Model{Hsb} is the basis for \Model{tHsb}, also named \pModel{tuned} \Model{Hsb}, which enables the user to apply a piecewise linear transformation on \emph{hue\Circ} by shifting selected \emph{hue\Circ} values forward or backward on the circle.
% This transformation is defined by |\def\rangetHsb{|$x_1,y_1;x_2,y_2;\dots$|}|
% \DescribeMacro\rangetHsb
% which specifies that $\emph{hue\Circ}=x_1$ in \Model{tHsb} means $\emph{hue\Circ}=y_1$ in \Model{Hsb}, etc.
% For example, \Color{yellow} is at 60\Circ{} in the \Model{Hsb} circle (\Color{red} being at 0\Circ), however, in most color wheels used by artists, \Color{yellow} is at 120\Circ.
% Therefore, a `|120,60|' entry would make sense if we planned to replicate an artist's color wheel via \Model{tHsb}.
% See section \vref{sec.tHsb2Hsb} for the exact transformation formula and further restrictions, and section \vref{sec.harmony} for color wheels and color harmonies.
% Figure \vref{fig.tHsb} may serve for comparison purposes.
%
% Example: `|\def\rangetHsb{|\texttt{\rangetHsb}|}|' is in fact \XC's default setting.
%
% \paragraph{\Model{wave}}
% With this model we try to make wavelengths transformable to standard color models, in order to approximate the visual appearance of light waves.
% While the visible spectrum covers a range of approximately 400--750\,nm, the implementation in \XC{} generally allows for all real `wavelengths' $\lambda$ that have an absolute value less than \csname strip@pt\endcsname\maxdimen{} (the biggest number \TeX{} can represent as a dimension).
% However, the probability of getting any non-black color outside the range of $\lambda\in[363,814]$ is exactly zero.
% Therefore, figure \vref{fig.spectrum} illustrates only the mentioned wavelength interval.
% Note that it is not possible to convert other models to \Model{wave} in a sensible way, since the latter covers only a limited range of colors.
%
% \paragraph{\Model{RGB}, \Model{HSB}, \Model{Gray}}
% These are derived models, turning the continuous $[0,1]$ parameter ranges of \Model{rgb}, \Model{hsb}, and \Model{gray} to finite sets of integers; we therefore use the term \emph{integer models}.
% The constants $L, M, N$ of table \ref{tab.mod} are defined via the commands |\def\rangeRGB|\marg{L},
% \DescribeMacro\rangeRGB
% |\def\rangeHSB|\marg{M},
% \DescribeMacro\rangeHSB
% and |\def\rangeGray|\marg{N}.
% \DescribeMacro\rangeGray
% Changes of these constants can be done \emph{before} or \emph{after} the \XCP{} is loaded, e.g.,
% \label{ex.range}\begin{verbatim}
% \documentclass{article}
% ...
% \def\rangeRGB{15}
% \usepackage[dvips]{xcolor}
% ...
% \GetGinDriver
% \usepackage[\GinDriver]{hyperref}
% ...
% \begin{document}
% ...
% \def\rangeRGB{63}
% ...
% \end{verbatim}
%
%
% \subsubsection{Substituting individual color models}\label{sec.subst}
%
% \DescribeMacro\substitutecolormodel
% \marg{source model}\marg{target model-list}\\
% Substitute \Meta{source model} by the first actually present model that occurs in \Meta{target model-list}.
% Only color models of type \Meta{num model} are allowed;
% all changes are local to the current group, but a prepended |\xglobal| is obeyed.
%
% Example: assume the actual driver has an incorrect implementation of \Model{hsb} whereas \Model{rgb} looks well.
% Then |\substitutecolormodel{hsb}{rgb}| could be a good choice, since it converts --- from that point onwards --- all definitions of \Model{hsb} colors by \XC's algorithms into \Model{rgb} specifications, without touching other models.
%
%
% \subsubsection{Changing the target color model within a document}\label{sec.tgt}
%
% \DescribeMacro\selectcolormodel
% \marg{num model}\\
% Sets the target model to \Meta{num model}, where the latter is one of the model names allowed as package option (i.e., \Option{natural}, \Option{rgb}, \Option{cmy}, \Option{cmyk}, \Option{hsb}, \Option{gray}, \Option{RGB}, \Option{HTML}, \Option{HSB}, \Option{Gray}), see figure \vref{fig.tgt} for an example.
% There are two possible hooks, where the conversion to the target model can take place:
% \begin{itemize}
% \item \DescribeMacro\ifconvertcolorsD at color \emph{definition} time\footnote{This means that all \emph{newly} defined colors will be first converted to the target model, then saved.} (i.e., within |\definecolor| and friends); this is controlled by the switch |\ifconvertcolorsD|;
% \item \DescribeMacro\ifconvertcolorsU at time of color \emph{usage} (immediately before a color is displayed, therefore covering colors that have been defined in other models or that are being specified directly like |\color[rgb]{.1,.2,.3}|); this is controlled by the switch |\ifconvertcolorsU|.
% \end{itemize}
% Both switches are set to `true' by selecting any of the models, except \Option{natural}, which sets them to `false'.
% This applies for selection via a package option as well as via |\selectcolormodel|.
% Why don't we simply convert all colors at time of usage?
% If many colors are involved, it can save some processing time when all conversions are already done during color definitions.
% Best performance can be achieved by |\usepackage[rgb,...]{xcolor}\convertcolorsUfalse|, which is actually the way how \XC{} worked up to version 1.07.
%
%
% \begin{table}[p]\caption{Arguments and terminology}\label{tab.term}
% \def\RS{\ensuremath{\to}\space}
% \footnotesize\raggedleft
% \extrarowheight2pt
% \begin{adjustwidth}{-2.5cm}{}
% \advance\textwidth2.5cm
% \tabcolsep.25em
% \rowcolors{3}{tablerowcolor}{}
% \begin{tabularx}{\textwidth}{lX}
% \hline
% \rowcolor{tableheadcolor}
% \em Element & \em Replacement string\\
% \Meta*{empty}& \RS empty string `'\\
% \Meta*{minus}& \RS non-empty string consisting of one or more minus signs `|-|'\\
% \Meta*{plus}& \RS non-empty string consisting of one or more plus signs `|+|'\\
% \hline
% \Meta*{int}& \RS integer number\hfill(\emph{integer})\\
% \Meta*{num}& \RS non-negative integer number\hfill(\emph{number})\\
% \Meta*{dec}& \RS real number\hfill(\emph{decimal})\\
% \Meta*{div}& \RS non-zero real number\hfill(\emph{divisor})\\
% \Meta*{pct}& \RS real number from the interval $[0,100]$\hfill(\emph{percentage})\\
% \hline
% \Meta*{id}& \RS non-empty string consisting of letters and digits\hfill(\emph{identifier})\\
% \Meta*{ext id}& \RS \Meta{id}\newline
% \RS \Meta[1]{id}|=|\Meta[2]{id}\\
% \Meta*{id-list}& \RS \Meta[1]{ext id}|,|\Meta[2]{ext id}|,...,|\Meta[l]{ext id}\\
% \Meta*{name}& \RS \Meta{id}\hfill(\emph{explicit name})\newline
% \RS `|.|'\hfill(\emph{implicit name})\\
% \Meta*{core model}& \RS `|rgb|', `|cmy|', `|cmyk|', `|hsb|', `|gray|'\hfill(\emph{core models})\\
% \Meta*{num model}& \RS \Meta{core model}\newline
% \RS `|RGB|', `|HTML|', `|HSB|', `|Gray|'\hfill(\emph{integer models})\newline
% \RS `|Hsb|', `|tHsb|', `|wave|'\hfill(\emph{decimal models})\\
% \Meta*{model}& \RS \Meta{num model}\hfill(\emph{numerical models})\newline
% \RS `|named|'\hfill(\emph{pseudo model})\\
% \Meta*{model-list}& \RS \Meta[1]{model}|/|\Meta[2]{model}|/.../|\Meta[m]{model} \hfill(\emph{multiple models})\newline
% \RS \Meta{core model}|:|\Meta[1]{model}|/|\Meta[2]{model}|/.../|\Meta[m]{model}\\
% \Meta*{spec}& \RS comma-separated list of numerical values\hfill(\emph{explicit specification})\newline
% \RS space-separated list of numerical values\hfill(\emph{explicit specification})\newline
% \RS name of a `named' color\hfill(\emph{implicit specification})\\
% \Meta*{spec-list}& \RS \Meta[1]{spec}|/|\Meta[2]{spec}|/.../|\Meta[m]{spec} \hfill(\emph{multiple specifications})\\
% \Meta*{type}& \RS \Meta{empty}\newline
% \RS `|named|', `|ps|'\\
% \hline
% \Meta*{expr}& \RS \Meta{prefix}\Meta{name}\Meta{mix expr}\Meta{postfix}\hfill(\emph{standard color expression})\\
% \Meta*{prefix}& \RS \Meta{empty}\newline
% \RS \Meta{minus}\hfill(\emph{complement indicator})\\
% \Meta*{mix expr}& \RS |!|\Meta[1]{pct}|!|\Meta[1]{name}|!|\Meta[2]{pct}|!|\Meta[2]{name}|!...!|\Meta[n]{pct}|!|\Meta[n]{name} \hfill(\emph{complete mix expr.})\newline
% \RS |!|\Meta[1]{pct}|!|\Meta[1]{name}|!|\Meta[2]{pct}|!|\Meta[2]{name}|!...!|\Meta[n]{pct} \hfill(\emph{incomplete mix expr.})\\
% \Meta*{postfix}& \RS \Meta{empty}\newline
% \RS |!!|\Meta{plus}\hfill(\emph{series step})\newline
% \RS |!![|\Meta{num}|]|\hfill(\emph{series access})\\
% \hline
% \Meta*{ext expr}& \RS \Meta{core model}|,|\Meta{div}|:|\Meta[1]{expr}|,|\Meta[1]{dec}|;|\Meta[2]{expr}|,|\Meta[2]{dec}|;...;|\Meta[k]{expr}|,|\Meta[k]{dec}\newline
% \RS \Meta{core model}|:|\Meta[1]{expr}|,|\Meta[1]{dec}|;|\Meta[2]{expr}|,|\Meta[2]{dec}|;...;|\Meta[k]{expr}|,|\Meta[k]{dec}\\
% \hline
% \Meta*{func expr}& \RS |>|\Meta{function}|,|\Meta[1]{arg}|,|\Meta[2]{arg}|,...,|\Meta[j]{arg}\hfill(\emph{color function expression})\\
% \Meta*{function}& \RS `|wheel|', `|twheel|'\hfill(\emph{color functions})\\
% \hline
% \Meta*{color}& \RS \Meta{color expr}\Meta[1]{func expr}\Meta[2]{func expr}|...|\Meta[i]{func expr}\\
% \Meta*{color expr}& \RS \Meta{name}\newline
% \RS \Meta{expr}\newline
% \RS \Meta{ext expr}\\
% \hline\hline
% \rowcolor{white}
% Remarks:& Each \RS denotes a possible replacement string for the element in the left column;
% however, further context-dependent restrictions may apply.
% See main text for details.
% A string `|foo|' is always to be understood without the quotes.
% $i,j,k,l,m,n$ denote non-negative integers, $k,l,m,n>0$, $m\le8$.\\
% \hline
% \end{tabularx}
% \end{adjustwidth}
% \end{table}
%
%
%
% \subsection{Arguments and terminology}\label{sec.term}
%
% Before we describe \XC's color-related commands in detail, we define several elements or identifiers that appear repeatedly within arguments of those commands.
% A general syntax overview is given in table \vref{tab.term}.
%
%
% \subsubsection{Additional remarks and restrictions on arguments}
%
% \paragraph{Basic strings and numbers}
% \DescribeArg{empty}
% \DescribeArg{minus}
% \DescribeArg{plus}
% \DescribeArg{int}
% \DescribeArg{num}
% \DescribeArg{dec}
% \DescribeArg{pct}
% \DescribeArg{div}
% These arguments do not need much explanation.
% However, as far as numerical values are concerned, it is noteworthy that real numbers in (La)\TeX{} are --- as long as they are to be used in the context of lengths, dimensions, or skips --- are restricted to a maximum absolute value $<16384$.
% Certainly, in a chain of numerical calculations, this constraint has also to be obeyed for every single interim result, which usually implies further range restrictions.
% Since \XC{} makes extensive use of \TeX's internal dimension registers for most types of calculations, this should be kept in mind whenever \Meta{ext expr} expressions are to be used.
%
%
% \paragraph{Color names}
% \DescribeArg{name}
% A \Meta{name} denotes the declared name (or the name to be declared) of a \emph{color} or a \emph{color series};
% it may be declared \emph{explicitly} by one of the following commands: |\definecolor|, |\providecolor|, |\colorlet|, |\definecolorset|, |\providecolorset|, |\definecolorseries|, |\definecolors|, |\providecolors|.
% On the other hand, the reserved color name `|.|' is declared \emph{implicitly} and denotes the \emph{current color}.
% Actually, besides letters and digits, certain other characters do also work for \Meta{name} declarations, but the given restriction avoids misunderstandings and ensures compatibility with future extensions of \XC.
%
% Examples: `|red|', `|MySpecialGreen1980|', `|.|'.
%
%
% \paragraph{Color models}
% \DescribeArg{core model}
% \DescribeArg{num model}
% \DescribeArg{model}
% The differentiation between \emph{core models} (\Model{rgb}, \Model{cmy}, \Model{cmyk}, \Model{hsb}, \Model{gray}), \emph{integer models} (\Model{RGB}, \Model{HTML}, \Model{HSB}, \Model{Gray}), \emph{decimal models} (\Model{Hsb}, \Model{tHsb}, \Model{wave}) and \emph{pseudo models} (currently \nModel{named}, \nModel{ps}) has a simple reason: core models with their parameter ranges based on the unit interval $[0,1]$ are best suited for all kinds of calculations, whereas the purpose of the integer models is mainly to facilitate the input of parameters, followed by some transformation into one of the core models.
% Finally, the decimal models \Model{Hsb} and \Model{tHsb} are special-purpose versions of \Model{hsb}, whereas \Model{wave} and the pseudo model \nModel{named} have a special status, since they are `calculation-averse': it is usually only possible to convert such a color into one of the other models, but not the other way round.
% Even worse for the pseudo model \nModel{ps}: since such colors contain \Index{PostScript} code, they are absolutely intransparent for \TeX.
%
%
% \paragraph{Color specifications}
% \DescribeArg{spec}
% The \Meta{spec} argument --- which specifies the parameters of a color --- obviously depends on the underlying color model.
% We differentiate between \emph{explicit} and \emph{implicit} specification, the former referring to numerical parameters as explained in table \vref{tab.mod}, the latter --- ideally --- referring to driver-provided names.
%
% Examples: `|.1,.2,.3|', `|.1 .2 .3|', `|0.56789|', `|89ABCD|', `|ForestGreen|'.
%
%
% \paragraph{Multiple models and specifications}
% \DescribeArg{model-list}
% \DescribeArg{spec-list}
% These arguments always appear in (explicit or implicit) pairs within the following color definition commands:
% |\definecolor|, |\providecolor|, |\definecolorset|, |\providecolorset|.
% First, \Meta{model-spec} is being reconciled with the current target model (as set by a package option or the |\selectcolormodel| command); in case there is no exact match, the first model of the list is chosen.
% Then, the corresponding color specification will be selected from \Meta{spec-list}, such that we arrive at a proper $(\Meta{model}, \Meta{spec})$ pair.
% Therefore, in the actual executed color definition there is no ambiguity anymore.
% The extended form \Meta{core model}|:|\Meta[1]{model}|/|\Meta[2]{model}|/.../|\Meta[m]{model} causes an immediate conversion of the relevant \Meta{spec} to \Meta{core model}; an unknown target model will be silently ignored here.
%
% Examples: `|rgb/cmyk/named/gray|', `|0,0,0/0,0,0,1/Black/0|', `|rgb:cmy/hsb|'.
%
%
% \paragraph{The type argument}
% \DescribeArg{type}
% This is used only in the context of color defining commands, see the description of |\definecolor| and friends.
%
%
% \paragraph{Standard color expressions}
% \DescribeArg{expr}
% \DescribeArg{prefix}
% \DescribeArg{mix expr}
% \DescribeArg{postfix}
% These expressions serve as a tool to easily specify a certain form of cascaded color mixing which is described in detail in section~\ref{sec.expr-meaning}.
% The \Meta{prefix} argument controls whether the color following thereafter or its complement will be relevant:
% an odd number of minus signs indicates that the color resulting from the remaining expression has to be converted into its complementary color.
% An \emph{incomplete mix expression} is just an abbreviation for a \emph{complete mix expression} with $\Meta[n]{name} = |white|$, in order to save some keystrokes in the case of tints.
% The \Meta{postfix} string is usually empty, but it offers some additional functionality in the case of a \emph{color series}:
% the non-empty cases require that
% \begin{itemize}
% \item \Meta{name} denotes the name of a \emph{color series},
% \item \Meta{mix expr} is a \emph{complete} mix expression.
% \end{itemize}
% Examples: `|red|', `|-red|', `|--red!50!green!12.345|', `|red!50!green!20!blue|', `|foo!!+|', `|foo!![7]|', `|foo!25!red!!+++|', `|foo!25!red!70!green!![7]|'.
%
%
% \paragraph{Extended color expressions}
% \DescribeArg{ext expr}
% These expressions provide another method of color mixing, see section \vref{sec.extexpr-meaning} for details.
% The shorter form
% \begin{align*}
% \Meta{core model}&|:|\Meta[1]{expr}|,|\Meta[1]{dec}|;|\Meta[2]{expr}|,|\Meta[2]{dec}|;...;|\Meta[k]{expr}|!|\Meta[k]{dec}\\
% \intertext{is an abbreviation for the special (and probably most used) case}
% \Meta{core model}|,|\Meta{div}&|:|\Meta[1]{expr}|,|\Meta[1]{dec}|;|\Meta[2]{expr}|,|\Meta[2]{dec}|;...;|\Meta[k]{expr}|!|\Meta[k]{dec}\\
% \intertext{with the following definition (requiring a non-zero sum of all \Meta[\kappa]{dec} coefficients):}
% \Meta{div} &:= \Meta[1]{dec} + \Meta[2]{dec} + \dots + \Meta[k]{dec} \neq0.
% \end{align*}
% Examples: `|rgb:red,1|', `|cmyk:red,1;-green!25!blue!60,11.25;blue,-2|'.
%
%
% \paragraph{Function expressions}
% \DescribeArg{func expression}
% \DescribeArg{function}
% These expressions extend the functionality of \emph{standard} or \emph{extended} expressions by taking the result of such an expression to perform additional calculations.
% The number of arguments may vary between different functions, see section \vref{sec.functions} for details.
%
% Examples: `|>wheel,30|', `|>wheel,30,|', `|>twheel,1,12|', `|>twheel,-11,12|'.
%
%
%
% \paragraph{Colors}
% \DescribeArg{color}
% \DescribeArg{color expr}
% Finally, \Meta{color} is the `umbrella' argument, covering the different concepts of specifying colors.
% This means, whenever there is a \Meta{color} argument, the full range of names and expressions, as explained above, may be used.
%
%
% \subsubsection{Meaning of standard color expressions}\label{sec.expr-meaning}
%
% We explain now how an expression
% \begin{gather*}
% \Meta{prefix}\Meta{name}|!|\Meta[1]{pct}|!|\Meta[1]{name}|!|\Meta[2]{pct}|!|\dots|!|\Meta[n]{pct}|!|\Meta[n]{name}\Meta{postfix}
% \end{gather*}
% is being interpreted and processed:
% \begin{enumerate}
% \item First of all, the model and color parameters of \Meta{name} are extracted to define a temporary color \Meta{temp}.
% If \Meta{postfix} has the form `|!![|\Meta{num}|]|', then \Meta{temp} will be the corresponding (direct-accessed) color \Meta{num} from the series \Meta{name}.
% \item Then a color mix, consisting of \Meta[1]{pct}\% of color \Meta{temp} and $(100-\Meta[1]{pct})$\% of color \Meta[1]{name} is computed; this is the new temporary color \Meta{temp}.
% \item The previous step is being repeated for all remaining parameter pairs (\Meta[2]{pct},\Meta[2]{name}), \dots, (\Meta[n]{pct},\Meta[n]{name}).
% \item If \Meta{prefix} consists of an odd number of minus signs `-', then \Meta{temp} will be changed into its complementary color.
% \item If \Meta{postfix} has the form `|!!+|', `|!!++|', `|!!+++|', etc., a number of step commands (=~number of `|+|' signs) are performed on the underlying color series \Meta{name}.
% This has no consequences for the color \Meta{temp}.
% \item Now the color \Meta{temp} is being displayed or serves as an input for other operations, depending on the invoking command.
% \end{enumerate}
% Note that in a typical step 2 expression \Meta{temp}|!|\Meta[\nu]{pct}|!|\Meta[\nu]{name}, if \Meta[\nu]{pct}=100 resp.{} \Meta[\nu]{pct}=0, the color \Meta{temp} resp.{} \Meta[\nu]{name} is used without further transformations.
% In the true mix case, $0<$\Meta[\nu]{pct}$<100$, the two involved colors may have been defined in different color models, e.g., |\definecolor{foo}{rgb}{...}| and |\definecolor{bar}{cmyk}{...}|.
% In general, the second color, \Meta[\nu]{name}, is transformed into the model of the first color, \Meta{temp}, then the mix is calculated within that model.\,\footnote{Exception: in order to avoid strange results, this rule is being reversed if \Meta{temp} origins from the \Model{gray} model; in this case it is converted into the underlying model of \Meta[\nu]{name}.}
% Thus, \Meta{temp}|!|\Meta[\nu]{pct}|!|\Meta[\nu]{name} and \Meta[\nu]{name}|!|\Meta[\nu]{$100-$pct}|!|\Meta{temp}, which should be equivalent theoretically, will not necessarily yield identical visual results.
%
% Figures \vrefrange{fig.expr}{fig.ex} show some first applications of colors and expressions.
% More examples are given in figure \vref{fig.progress}.
% Over and above that, a large set of color examples can be found in \cite{chroma}.
%
%
% \subsubsection{Meaning of extended color expressions}\label{sec.extexpr-meaning}
%
% An \emph{extended color expression}
% \begin{gather*}
% \Meta{core model}|:|\Meta[1]{expr}|,|\Meta[1]{dec}|;|\Meta[2]{expr}|,|\Meta[2]{dec}|;...;|\Meta[k]{expr}|,|\Meta[k]{dec}
% \end{gather*}
% mimes color mixing as painters do it: specify a list of colors, each with a \Meta{dec} factor attached to.
% For such an \Meta{ext expr}, each standard color expression \Meta[\kappa]{expr} will be converted to \Meta{core model}, then the resulting vector is multiplied by $\Meta[\kappa]{dec}/\Meta{div}$, where
% \begin{gather*}
% \Meta{div} := \Meta[1]{dec} + \Meta[2]{dec} + \dots + \Meta[k]{dec}.
% \end{gather*}
% Afterwards the sum of all of these vectors is calculated.
%
% Example: mixing 4~parts of \testclr{red} \Color{red}, 2~parts of \testclr{green} \Color{green}, and 1~part of \testclr{yellow} \Color{yellow}, we get \testclr{rgb:red,4;green,2;yellow,1} via |\color{rgb:red,4;green,2;yellow,1}|.
% Trying the same with $-1$ parts of \Color{yellow} instead, we get \testclr{rgb:red,4;green,2;yellow,-1}.
% Note that this mechanism can also be used to display an individual color (expression) in a certain color model: |\color{rgb:yellow,1}| results in such a conversion.
% The general form
% \begin{gather*}
% \Meta{core model}|,|\Meta{div}|:|\Meta[1]{expr}|,|\Meta[1]{dec}|;|\Meta[2]{expr}|,|\Meta[2]{dec}|;...;|\Meta[k]{expr}|,|\Meta[k]{dec}
% \end{gather*}
% does the same operation with the only difference that the divisor \Meta{div} is being specified instead of calculated.
% In the above example, we get a shaded version \testclr{rgb,9:red,4;green,2;yellow,1} via |\color{rgb,9:red,4;green,2;yellow,1}|.
% Note that it is not forbidden to specify a \Meta{div} argument which is smaller than the sum of all \Meta[\kappa]{dec}, such that one or more of the final color specification parameters could be outside the interval $[0,1]$.
% However, the mapping of equation (\ref{eq.U}) takes care of such cases.
%
%
% \subsubsection{Color functions}\label{sec.functions}
%
% Color functions take a comma-separated list of arguments, and they serve to transform the \emph{given color} (i.e., the result of all calculations prior to the function call) into a new color.
%
% \paragraph{Color wheel calculations}
% \DescribeFunc{wheel}
% \DescribeFunc{twheel}
% Arguments: \Meta{angle} or \Meta{angle}|,|\Meta{full circle}, the former being an abbreviataion of \Meta{angle}|,\rangeHsb|.
% These functions allow to calculate related colors by harmonic relations based on color wheels (cf.~section \vref{sec.harmony}).
% The second argument \Meta{full circle} declares how many units a full circle consists of, the first argument states by how many units the given color has to be rotated.
% To this end, the given color is first converted to \Model{Hsb} (in case of \Function{wheel}), yielding \emph{hue\Circ}, \emph{saturation}, and \emph{brightness}, respectively.
% Then
% \begin{gather}
% \displaystyle\emph{hue\Circ} := \emph{hue\Circ} + \frac{\Meta{angle}}{\Meta{full circle}}\cdot H, \qquad \emph{hue} := u\Bigl( \frac{\emph{hue\Circ}}{H} \Bigr)
% \end{gather}
% where $u$ is the range-reduction function of equation~(\ref{eq.U}) and $H = \texttt{\string\rangeHsb}$.
% With \emph{saturation} and \emph{brightness} left untouched, the final model is \Model{hsb}.
% The \Function{twheel} function works similarly, but its arguments refer to \Model{tHsb} instead of \Model{Hsb}.
% Examples are shown in figure \vref{fig.harmony}.
%
%
% \subsection{Predefined colors}
%
% \subsubsection{Colors that are always available}
%
% \def\test#1{\testclr{#1}~\Color{#1}}
% Within \File{xcolor.sty}, the following color names are defined:
% \test{red}, \test{green}, \test{blue}, \test{cyan}, \test{magenta}, \test{yellow}, \test{black}, \test{gray}, \test{white}, \test{darkgray}, \test{lightgray}, \test{brown}, \test{lime}, \test{olive}, \test{orange}, \test{pink}, \test{purple}, \test{teal}, \test{violet}.
%
% This base set of colors can be used without restrictions in all kinds of color expressions, as explained in section \vref{sec.term}.
%
%
% \subsubsection{Additional sets of colors}\label{sec.additionalcolors}
%
% There are also sets of color names that may be loaded by \XC{} via package options, available in two variants:
% a `normal' version (e.g., \Option{dvipsnames}) and a `starred' version (e.g., \Option{dvipsnames*}).
% The first variant simply defines all the colors \emph{immediately}, whereas the second applies the mechanism of \emph{deferred} definition.
% In the latter case, individual color names have to be activated by |\definecolors| or |\providecolors| commands, as described in section \vref{sec.deferred}, before they can be applied in a document.
% \begin{itemize}
% \item \Option{dvipsnames}/\Option{dvipsnames*} loads a set of 68 \Model{cmyk} colors as defined in the |dvips| driver. However, these colors may be used in all supported drivers.
% \item \Option{svgnames}/\Option{svgnames*} loads a set of 151 \Model{rgb} color names\footnote{In fact, these names represent 141 different colors.} according to the \Index{SVG}~1.1 specification \cite{svg}\footnote{Actually, the cited specification lists only lowercase names, and the original definitions are given in \Model{RGB} parameters, converted to \Model{rgb} by the author.}, enhanced by~4 names taken from the file \File{rgb.txt} which is part of \Index{Unix}/\Index{X11} distributions. Note that \Index{HTML4} accepts a subset of 16~color keywords (using identical specifications), see \cite{HTML4} and section \vref{sec.names}.
% \item \Option{x11names}/\Option{x11names*} loads a set of 317 \Model{rgb} color names\footnote{These names represent 315 different colors.} that are basically variations of a subset of the \Index{SVG} set mentioned before, according to the file \File{rgb.txt} which is part of \Index{Unix}/\Index{X11} distributions\footnote{Again, the original definitions are given in \Model{RGB} parameters, converted to \Model{rgb} by the author.}.
% We describe now how to access all 752 color names of \File{rgb.txt} without much effort:
% \begin{itemize}
% \item Load \Option{x11names} as well as \Option{svgnames}.
% \item Capitalise initials and skip blanks: \Color[-]{DarkSlateGray} instead of \Color[-]{dark slate gray}.
% \item \Index{X11} names without numbers are identical to the corresponding \Index{SVG} colors, except in 5~cases:
% use \Color{Gray0}, \Color{Grey0}, \Color{Green0}, \Color{Maroon0}, \Color{Purple0} instead of \Color[-]{Gray}, \Color[-]{Grey}, \Color[-]{Green}, \Color[-]{Maroon}, \Color[-]{Purple} to obtain the original \Index{X11} colors.
% \item For $N=0,1,\dots,100$ use `|[gray]{|$N/100$|}|' or `|black!|$100-N$' instead of \Color[-]{grayN} or \Color[-]{greyN}.
% \end{itemize}
% \end{itemize}
% The color names and corresponding displays are listed in section \vref{sec.names}.
% Section \vref{sec.clash} describes how to deal with name clashs while using both \Option{svgnames} and \Option{dvipsnames} in the same document.
% See also \cite{chroma} for a systematic set of color and mix examples.
%
%
% \subsection{Color definition}\label{sec.def}
%
% \subsubsection{Ordinary and named colors}\label{sec.prologue}
%
% In the \LCP{} there is a distinction between `colors' (defined by the command |\definecolor|) and `named colors' (defined by |\DefineNamedColor|, which is allowed only in the preamble).
% Whenever an ordinary color is being used in a document, it will be translated into a |\special| command that contains a --- driver-specific --- numerical description of the color which is written to the \File{.dvi} file.
% On the other hand, named colors offer the opportunity to store numerical values at a central place whereas during usage, colors may be identified by their names, thus enabling post-processing if required by the output device.
%
% All drivers delivered with the standard \Package{graphics} package support the \emph{formalism} of defining and invoking `named colors'.
% However, real support for the \emph{concept} behind that, i.e.~employing names instead of parameters, ranges from `none' to `complete'.
% We demonstrate the current situation for three different drivers:
% \begin{itemize}
% \item \Option{dvips} has very good support for the `named' concept; the \Index{PostScript} equivalents to the color names defined by \Option{dvipsnames} are being loaded -- unless switched off -- by \Program{dvips} automatically.
% However, additional names have to be made known to the \Index{PostScript} interpreter by some kind of header file.
% Since version 2.01, \XC{} offers an integrated solution for this task: by invoking the package option \Option{prologue}, a \Index{PostScript} header file \File{xcolor.pro} is loaded by \Program{dvips}.
% Additionally, under this option every color definition command\footnote{This is not only true for the document preamble, but for the document body as well.} (|\definecolor|, |\colorlet|, etc.) will generate some \Index{PostScript} code that is written to an auxiliary file with the extension \File{.xcp} (shortcut for \textbf{xc}olor \textbf prologue).
% This file is as well loaded by \Program{dvips} as a prologue, thus making all color names available to the \Index{PostScript} interpreter.
% Of course, the \File{.xcp} file may be edited before \Program{dvips} is applied, making it easy to change device-specific color parameters at a central place.
% Note that the \Index{PostScript} code is designed similar to \File{color.pro}: only \emph{new} names are defined.
% This allows to preload other prologue files with color definitions that are not being destroyed by \XC.
% On the other hand, it requires the user to take care about redefining color names.\\
% Example: |\colorlet{foo}{red}\colorlet{foo}{blue}\color{foo}| will switch to \Color{blue} in the usual \XC{} logic, however the \File{.ps} file would display \Color{red} (unless \Color{foo} had been defined differently before).\\
% It should be stressed that this mechanism is only employed by the \Option{prologue} option.
% Without that, the predefined `named' colors activated by the \Option{dvipsnames} option (without employing any tints, shades, color expressions, etc.) may be used in this way, all other `named' colors are unknown to \Index{PostScript}.
% \item \Option{dvipdfm} supports only the standard \Option{dvipsnames} colors since these are hard-coded in the \Program{dvipdfm} program itself; there seems to be no way to load any user-defined prologue files.
% \item \Option{pdftex} does not offer conceptual support, all `named' colors are converted immediately to their numerical representation. It therefore allows unrestricted definition and usage of named colors (although offering no added value through this).
% \end{itemize}
%
% Typically, a \File{.dvi} viewer will have difficulties to display user-defined `named' colors.
% For example, \Index{MiK\TeX}'s viewer \Program{Yap} currently displays only `named' colors from the \Option{dvipsnames} set.
% Thus, whenever the \Option{prologue} option is invoked together with \Option{dvips}, \emph{all} other colors will appear black.
% However, after employing \Program{dvips}, a \Index{PostScript} viewer should display the correct colors.
%
%
% \subsubsection{Color definition in \XC}
%
% \DescribeMacro\definecolor
% \oarg{type}\marg{name}\marg{model-list}\marg{spec-list}\footnote{Prior to version 2.00, this command was called \cs{xdefinecolor}, the latter name still being available for compatibility reasons.}\\
% This is one of the commands that may be used to assign a \Meta{name} to a specific color.
% Afterwards, this color is known to the system (in the current group) and may be used in \emph{\Index{color expression}s}, as explained in section \vref{sec.term}.
% It replaces both \LC's |\DefineNamedColor| and |\definecolor|.
% Note that an already existing color \Meta{name} will be overwritten.
% The variable |\tracingcolors| controls whether such an overwriting will be logged or not (see section \vref{sec.info} for details).
% The arguments are described in section \vref{sec.term}.
% Hence, valid expressions for color definitions are
% \begin{itemize}
% \item |\definecolor{red}{rgb}{1,0,0}|,
% \item |\definecolor{red}{rgb/cmyk}{1,0,0/0,1,1,0}|,
% \item |\definecolor{red}{hsb:rgb/cmyk}{1,0,0/0,1,1,0}|,
% \item |\definecolor[named]{Black}{cmyk}{0,0,0,1}|,
% \item |\definecolor{myblack}{named}{Black}|,
% \end{itemize}
% where the last command is equivalent to |\colorlet{myblack}{Black}| (see below); the second command defines \Color{red} in the \Model{rgb} or \Model{cmyk} model, depending on the current setting of the \emph{target model}, whereas the third will additionally transform the color to \Model{hsb} prior to saving.
% Note that there is a special \Package{pstricks}-related version as described in section \vref{sec.pstricks}.
%
% \medskip
%
% \DescribeMacro\providecolor
% \oarg{type}\marg{name}\marg{model-list}\marg{spec-list}\\
% Similar to |\definecolor|, but the color \Meta{name} is only defined if it does not exist already.
%
% \medskip
%
% \DescribeMacro\colorlet
% \oarg{type}\marg{name}\oarg{num model}\marg{color}\\
% Copies the actual color which results from \Meta{color} to \Meta{name}.
% If \Meta{num model} is non-empty, \Meta{color} is first transformed to the specified model, before \Meta{name} is being defined.
% The pseudo model \nModel{named} is \emph{not} allowed here, it may, however, be specified in the \Meta{type} argument.
% Note that an already existing color \Meta{name} will be overwritten.
%
% Example: we said |\colorlet{tableheadcolor}{gray!25}| in the preamble of this document.
% In most of the tables we then formatted the first row by using the command |\rowcolor{tableheadcolor}|.
%
%
% \subsubsection{Defining sets of colors}
%
% \DescribeMacro\definecolorset
% \oarg{type}\marg{model-list}\marg{head}\marg{tail}\marg{set spec}\\
% This command facilitates the construction of \emph{\Index{color set}s}, i.e.~(possibly large) sets of individual colors with common underlying \Meta{model-list} and \Meta{type}.
% Here, \Meta{set spec} = \Meta[1]{name},\Meta[1]{spec-list};\dots;\Meta[l]{name},\Meta[l]{spec-list} ($l\ge1$ name/specification-list pairs).
% Individual colors are being constructed by single
% \begin{center}
% |\definecolor|\oarg{type}|{|\Meta{head}\Meta[\lambda]{name}\Meta{tail}|}|\marg{model-list}|{|\Meta[\lambda]{spec-list}|}|
% \end{center}
% commands, $\lambda=1,\dots,l$.
% For example,
% \begin{itemize}