summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/shadethm/shadethm.sty
blob: 9da177c869cbcd58370465ca8288c6a0b6343853 (plain)
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
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{shadethm}[1999/11/23]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ShadeThm.sty
%   Shaded theorem environments in LaTeX, with \newshadetheorem in addition to
% \newtheorem.
%
% USAGE
%   Used as a LaTeX2e style, with \usepackage{shadethm}, it allows declarations
% of the form \newshadetheorem{theorem}{Theorem}, so that
%      \begin{theorem}  $e=mc^2$  \end{theorem}
% will produce the usual theorem, only placed in a shaded box.
%   Options.  Two come in this file:
%      bodymargin (default)  The body of the shaded text lines up with the
%        margins.  Just as though you called newtheorem, then colored later.
%        Shading falls outside the margin.
%      shademargin  The shading lines up with the margins, so the body of
%        shaded text comes out a little thinner.
% If you call it with an option not on that list then it will look for a
% file <OptionName>.sth and take the parameters from there.  See the included 
% files shadein.sth and colored.sth, the first of which gives theorems that are
% (like LaTeX quotations) indented left and  right and the second of which 
% gives color shading.  
%
% REMARKS
%  (1) You can of course have non-shaded environments, also.  The \newtheorem 
% command still works.
%  (2) Numbering within: An prior version of this style required that you
% number within like this: 
%     \newshadetheorem{thm}{Theorem}
%     \newshadetheorem{note}[shadethm]{Note} % No longer needed!
% but this one drops that requirement.  If you didn't use the old version,
% forget about it.
%  (3) Uses the graphics package.  Look for it in the CTAN TeX-archive nearest
% you, for instance at tug.ctan.org.  
%  (4) Works with amsthm.sty.
%  (5) Notice that if you say \newshadetheorem{theorem}{Theorem} and then 
% \newtheorem{theorem}{Theorem} then you will get an error message since
% the first allows you to say \begin{theorem} ..., as does the second.
%
% INSTALLATION
%   Put this where your TeX looks for .sty files. 
%   There are some parameters you could set the default for (try them as is, 
% first).
%    (i) shadethmcolor  The shading color of the background.  See the 
%      documentation for the color package, but with a `gray' model, I find .97
%      looks good out of my printer, while a darker shade like .92 is needed 
%      to make it copy well.  (Black is  0, white is 1.) 
%    (i*) shaderulecolor  The shading color of the border of the shaded box.  
%      See (i).  If \shadeboxrule is set to 0pt then this won't print anyway.
%    (i**) shadeboxrule  The width of the border around the shading.  Set it to
%      0pt (not just 0) to make it disappear.
%    (i***) shadeboxsep  The length by which the shade box surrounds the text.
%    (ii) shadesetinsideminipage   The theorems are set inside a minipage to
%      get line breaks, but some things, like paragraph indents, are messed 
%      with there, so I have a hook to reset them.  Probably you can just
%      leave this alone.
%     (iii) The default option.  Change the \ExecuteOptions{...} right before
%      the \ProcessOptions.
%  Comment:
%   If you get an error about `undefined color model' then you need to create
% the file color.cfg in the same place as color.sty, and put in it the line
% \ExecuteOptions{dvips} (or whatever is the name of your driver).  See the
% documentation for the graphics package.  I needed this in the distant past
% under NTeX.
%
% BUGS
%  (1) Page breaks are a problem since it sets the theorem before it is shaded.
% The theorem is put into a minipage in order to have the right line breaks
% put in, but then can't be broken across pages.  I'd be interested in any
% fixes for this.  DA?
%
% LICENSE
%% Copyright 1999 Jim Hefferon jim@joshua.smcvt.edu
% This program can redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
% archives in directory macros/latex/base/lppl.txt; either
% version 1 of the License, or (at your option) any later version.
%
% HISTORY
%  99XI23  jh Redid the parsing to stick to \newcommand-style calls.  Needed
%    to put in some oppresive \expandafter strings.
%  99VII09 jh tex@joshua.smcvt.edu Fixed the number within situation.  LPPL 
%    added.
%  97I07 jh Changed the interior of the \DeclareOptions to \AtBeginDocument
%    for cases where the \textwidth is changed.
%  95VI19 jh Adapted for LaTeX2e.  Now uses the graphics package, and all
%    the neat 2e package stuff.  Still haven't rewritten the parsing code to
%    use the new optional arguments to \newcommand, though.  Ah well.
%  94VII11 jim hefferon hefferon@smcvax.smcvt.edu.  First written (after lots
%    of sporadic tries, over months; I couldn't get any of the extant shading 
%    macros to work with theorems) from a hint in TvZ's Fancybox writeup. 
%    It's all so easy once you know how.
%
\DeclareOption{bodymargin}{
 \AtEndOfPackage{%
  \setlength{\shadeboxsep}{2pt}  
  \setlength{\shadeboxrule}{0pt}  
  \setlength{\shadedtextwidth}{\textwidth}
  \setlength{\shadeleftshift}{-\shadeboxsep} 
  \setlength{\shaderightshift}{-\shadeboxsep}
  \definecolor{shadethmcolor}{gray}{0.92}
  \definecolor{shaderulecolor}{gray}{0.92}  
 }
}
\DeclareOption{shademargin}{
 \AtEndOfPackage{%
  \setlength{\shadeboxsep}{2pt}  
  \setlength{\shadeboxrule}{0pt}  
  \setlength{\shadedtextwidth}{\textwidth}
  \addtolength{\shadedtextwidth}{-2\shadeboxsep}
  \setlength{\shadeleftshift}{0pt} 
  \setlength{\shaderightshift}{0pt}
  \definecolor{shadethmcolor}{gray}{0.92}  
  \definecolor{shaderulecolor}{gray}{0.92}
 }
}
\DeclareOption*{\InputIfFileExists{\CurrentOption.sth}{}{%
  \typeout{shadethm warning: option \CurrentOption\space not known.}}}

\ExecuteOptions{bodymargin} %default  
\ProcessOptions

\RequirePackage{color}

% Save the document paragraph indents so they can be reasserted inside the
% minipage into which the theorems get put.
\newlength{\saveparindent}              %to have paragraphs default to their 
\setlength{\saveparindent}{\parindent}  %usual indent inside the minipage
\newcommand{\shadesetinsideminipage}{%    %To reset this inside an option,
  \setlength{\parindent}{\saveparindent}} %or a document, \renewcommand{...} 

% Declare the lengths we need.  Set in the package options.
%  Here is a diagram:
%        text text text text text text text text text text text text
%           ------------------------------------------------------
%           | Theorem.  My bonnie lies over the ocean.  My bonnie |
%           | lies over the sea.                                  |
%           ------------------------------------------------------
%    --->|  |<----                                          --->| |<--
%           \shadeleftshift                                     \shadeboxsep
%                                                              (all four sides)
%
%             |<-------------- \shadetextwidth ---------------->|
% 
\newlength{\shadeboxsep} %start of color to start of text; four sides  
\newlength{\shadeboxrule} %width of bordering rule  
\newlength{\shadedtextwidth} %width of the text body
\newlength{\shadeleftshift}  %margin to start of shading (may be negative)
\newlength{\shaderightshift} %makes total line width come out (may be negative)


% MAIN CODE
%   see LaTeXbook (second edition) pp 108 and 132
% (1) make a box \saveshadebox that will hold the text that is to be
%  typeset in the theorem.  
% (2) Read that material in with the lrbox environment.  The material
%  is set in a minipage so the margins are controllable.
% (3) Use that box, inside of an fcolorbox.
% Notes
%  * lrbox is used instead of savebox because this is an environment.
%  * The fcolorbox is inside a trivlist because that makes the vertical
%     spacing come out right.  I don't know how else to do it.
%  * The fcolorbox is left shifted by some length (which may be negative) and
%     then aftward, a right shift is put in. 
\newsavebox{\shadesavebox}   % no `@'; users can redefine shadebox if they want
\newenvironment{shadebox}%   % shadow boxes or something. 
{\begin{lrbox}{\shadesavebox}\begin{minipage}{\shadedtextwidth}%
\shadesetinsideminipage}%
{\end{minipage}\end{lrbox}%
\begin{trivlist}\item[]% In a trivlist because theorems are in trivlists.
\setlength{\fboxsep}{\shadeboxsep}%
\setlength{\fboxrule}{\shadeboxrule}%
\mbox{\hspace{\shadeleftshift}\fcolorbox{shaderulecolor}{shadethmcolor}{\usebox{\shadesavebox}}\hspace{\shaderightshift}}%
\end{trivlist}}

%PARSING CODE
%  The definition of \newshadetheorem is modelled on the one for \newtheorem
% in latex.tex.
%  The invocation possibilities are:
%   \newshadetheorem{NAME}{TEXT}[COUNTER]
%      e.g., \newshadetheorem{theorem}{Theorem}[section] meaning to allow
%      one to say \begin{theorem} $e=mc^2$ \end{theorem} to produce
%        Theorem 1.1.1 e=mc2
%      shaded and numbered by section.
%   \newshadetheorem{NAME}[OLDNAME]{TEXT}
%      e.g., \newshadetheorem{remark}[theorem]{Remark} meaning to allow
%      one to say \begin{remark} Obvious. \end{remark} to produce
%        Remark 1.1.2  Obvious.
%      shaded and numbered with the same counter used for theorems.
% \newcommand parsing
%  In LaTeX2e, to call a macro with an optional argument, let the
% optional's default  value be given  in a second set of []'s:
% \newcommand{\mymac}[2][hello]{#2, ``#1''} will have
%   \mymac{I say}             |---> I say ``hello''
%   \mymac[goodbye]{You say}  |---> You say ``goodbye''
% I want to use this to parse LaTeX's 
%  \newtheorem{--env_name--}{--caption--}[--within--]
%  or \newtheorem{--env_name--}[--numbered_like--]{--caption--}
% So 
%  (1) \newshadetheorem{arg1}
%     arg1:  the environment name (e.g. definition)
%   It ends by calling a macro \sth@getcaption with one mandatory argument and 
%   one optional argument.
%  (2) \sth@getcaption[oparg1]{arg1}
%     arg1:  the caption name (e.g. Definition)
%     oparg1: the numbered_like (e.g., theorem)
%   It ends by calling a macro \sth@getwithin of no mandatory arguments but 
%   one optional argument.
%  (3) \sth@getwithin[oparg1]
%     oparg1: the numbered within (e.g. subsection)
%   This routine finishes the processing.  Depending on the four possibilities
%   of whether there is a numbered_like or not, and whether there is a 
%   within or not, \newtheorem is called as is appropriate.
%     If there is no numbered_like, then the counter has to be set.  That is,
%   a user expects to say \newtheorem{corollary}[theorem]{Corollary} and get
%   a corollary environment that is numbered in the same sequence as the
%   theorem environment, e.g., uses the theorem counter c@theorem.  But in 
%   runnning the \newshadetheorem we have called a \newtheorem{shadetheorem}...
%   and so the counter actually created is c@shadetheorem.  We need the three
%   c@theorem, p@theorem and \thetheorem.
% **** Remark on the \expandafter madness ****
%  Probably I am going about this all wrong ... 
%  The construct
%    \newtheorem{\sth@envname}{\sth@caption}
% doesn't do the job here because the \sth@envname and sth@caption aren't
% resolved until they are called in the document:
%  after \newshadetheorem{theorem}{Theorem}
%        \newshadetheorem{corollary}{Corollary}
%  and later in the document
%   \begin{theorem} .. \end{theorem}
%  we get ``Corollary'' because that's what \sth@envname is at that moment.  
% Aarrg!
%  Instead, it has to be expanded when \newshadetheorem is called.  This is 
% hard, IMHO.  \expandafter<tok1><\tok2> puts <tok1> on a stack and expands
% <tok2>.  If <tok2> is another \expandafter then we have
% \expandafter<tok1>\expandafter<tok3><tok4> which resolves to 
% <tok1><tok3><expansion of tok4>.  If <tok1> is another \expandafter then
% there is another round of expansion.  
%  * To have \newshadetheorem{thm}{Thm} expand, we do this (where \ea is an
%   abbreviation for \expandafter):
%    \ea\ea\ea\newtheorem\ea\ea\ea{\ea\sth@shadeenvname\ea}\ea{\sth@caption}
%    ... which resolves to ...
%       \ea   \newtheorem   \ea   {   \sth@shadeenvname   }   {Thm         }
%    ... which in turn resolves to ...
%             \newtheorem         {   thm                 }   {Thm         }
%    ... which is what I want.
% * To have a three-argument case come out right, we need seven \ea's.  
% Consider the one that we want to come out as \newtheorem{thm}{Thm}[section].
%  \ea\ea\ea\ea\ea\ea\ea\newtheorem\ea\ea\ea\ea\ea\ea\ea{
%     \ea\ea\ea\sth@shadeenvname\ea\ea\ea}
%     \ea\sth@caption\ea}\ea[\sth@within]
%   (ignore the line breaks, which are for visual clarity only)
%   ... which resolves to ...
%     \ea   \ea   \ea   \newtheorem   \ea   \ea   \ea   {
%        \ea   \sth@shadeenvname   \ea   }
%        \sth@caption   }   [section    ]
%   ... which in turn resolves to ...
%           \ea         \newtheorem         \ea         {
%              \sth@shadeenvname         }
%        Thm            }   [section    ]
%   ... which, in its turn, resolves to ...
%                       \newtheorem                     {
%              shadethm                  }
%        Thm            }   [section    ]
%   which is the call that I want. 
% TeX is a strange place.

\newcommand{\newshadetheorem}[1]{%
\def\sth@envname{#1}\def\sth@shadeenvname{shade#1}%
\sth@getcaption}

\newcommand{\sth@getcaption}[2][\relax]{%
\def\sth@caption{#2}\def\sth@numberedlike{#1}%
\sth@getwithin}

\newcommand{\sth@getwithin}[1][\relax]{%
\def\sth@within{#1}%
\if\sth@numberedlike\relax  %if --numbered_like-- is not present 
  \if\sth@within\relax
    %\newtheorem{shade\sth@envname}{\sth@caption}% 
    \expandafter\expandafter\expandafter\newtheorem\expandafter\expandafter\expandafter{\expandafter\sth@shadeenvname\expandafter}\expandafter{\sth@caption} %
  \else
    %\newtheorem{shade\sth@envname}{\sth@caption}[\sth@within]% 
    \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\newtheorem\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\sth@shadeenvname\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\sth@caption\expandafter}\expandafter[\sth@within]% 
  \fi
  \global\expandafter\countdef\csname \expandafter c\expandafter @\sth@envname\endcsname=\allocationnumber % just allocated shade<ctr>; make <ctr> be the same register
  \expandafter\expandafter\expandafter\gdef\expandafter\csname the\sth@envname\expandafter\endcsname\expandafter{\csname theshade\sth@envname\endcsname}% make \the<ctr> display the same as \theshade<ctr>
  \global\expandafter\let\csname p@\sth@envname\endcsname\@empty % and what the heck is p@<ctr>, anyway?
\else  %if --numbered_like-- is present
  \if\sth@within\relax
    %\newtheorem{shade\sth@envname}[\sth@numberedlike]{\sth@caption}% 
    \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\newtheorem\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\sth@shadeenvname\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter[\expandafter\sth@numberedlike\expandafter]\expandafter{\sth@caption}% 
  \else
    % Presumably get an error from newtheorem.
    \typeout{!!!ERROR, shadethm.sty: \newshadetheorem used with both [numbered like] and [within] options.}
    \newtheorem{\sth@shadeenvname}[\sth@numberedlike]{\sth@caption}[\sth@within]% 
  \fi
\fi
\expandafter\shade@@thm\expandafter{\sth@envname}}

% \shade@@thm
%   arg1: name of environment (e.g., `definition')
% Define an environment that will be called by the user (e.g., 
% \begin{definition} .. \end{definition}.
%   Calls, e.g.,  \begin{shadedefinition} .. \end{shadedefinition} inside of
% a \begin{shadebox} .. \end{shadebox} environment.
\def\shade@@thm#1{%
\newenvironment{#1}%
{\begin{shadebox}\begin{shade#1}}%
{\end{shade#1}\end{shadebox}}}

\endinput %end shadethm.sty
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-shadetest.tex-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
\documentclass{article} % test of LaTeX package shadethm.sty
\usepackage{shadethm}
\newshadetheorem{theorem}{Theorem}[section]
\newshadetheorem{cor}[theorem]{Corollary}
\newtheorem{remark}[theorem]{Remark}
\newtheorem{unshadedtheorem}[theorem]{Theorem}
\newtheorem{comment}{Comment}[section]

\begin{document}
Document begins with some initial text.

\section{First Section}
Here is some initial text before the shaded box.

\begin{theorem}
This is the text to be shaded.
\end{theorem}

This is some text after the first shade.
It is separated from the environments by a blank line; that is 
all handled as usual in \LaTeX.
\begin{cor}
This is more text to be shaded.
It is numbered with the same counter as the environment above.

Multiple paragraphs will be handled with the usual paragraph indentation,
unless of course the user asks for a different paragraph indentation inside
the environment.
\end{cor}
This is not separated from the prior environment by a blank line and
so I don't expect a new paragraph.
This shows that the default is for the shaded areas have the usual text size 
so that shading sticks out into the margin.
This is the shadethm option \emph{bodymargin}.
The behavior of having the shading end at the margin
(so the words do not take up the full text width)
comes from the option \emph{shademargin}, invoked with 
\verb!\usepackage[shademargin]{shadethm}!. 


\begin{unshadedtheorem}
More text.
This time not set in shade, but it is still numbered in the same sequence.
\end{unshadedtheorem}

A bit more.

\begin{comment}
More text.
This time neither set in shade, nor numbered in the same sequence.
\end{comment}


\section{A New Section}

Section preamble.

\begin{theorem}
This theorem is shaded and the number has been reset by the section.
\end{theorem}

\begin{remark}
  And a closing remark
\end{remark}
Finishing text.

\clearpage
\section{A Test of Colors}
This section shows how you can fool around to see some of you own colors.
% Set up some lengths so that you can see the border.
\setlength{\shadeboxsep}{2pt}  
\setlength{\shadeboxrule}{.4pt}  
\setlength{\shadedtextwidth}{\textwidth}
\addtolength{\shadedtextwidth}{-2\shadeboxsep}
\addtolength{\shadedtextwidth}{-2\shadeboxrule}
\setlength{\shadeleftshift}{0pt} 
\setlength{\shaderightshift}{0pt}
% Macro to test colors
\newcommand{\thmwithcmykcolor}[2]{%
\par Material before the theorem.
\definecolor{shadethmcolor}{cmyk}{#1}%  
\definecolor{shaderulecolor}{cmyk}{#2}%
\begin{theorem}
This is a theorem set in the cmyk color \textbf{#1}, surrounded with a 
borderline set in the cmyk color \textbf{#2}.
Note, for instance, that shades darken on overheads, so test your colors
where you will use them. 
\end{theorem}}
% Some colors
\thmwithcmykcolor{.10,.10,0,0}{.75,.75,0,.5}
\thmwithcmykcolor{.04,.04,0,.10}{.99,0,0.52,0.70}
\thmwithcmykcolor{0,.13,.11,0}{0,0.88,0.85,0.35}
The prior theorem illustrates what happens if you use the option 
\emph{colored}, as supplied in the file \verb!colored.sth!,
except that the supplied file has the color stick out into the margin.

One more supplied option is \emph{shadein} where each shaded theorem
is indented, like a \LaTeX\ quotation.
% ---> Uncomment if you want to test dvips's named colors
% \newcommand{\thmwithnamedcolor}[1]{%
% \par Material before the theorem.
% \definecolor{shadethmcolor}{named}{#1}%  
% \definecolor{shaderulecolor}{named}{Black}%
% \begin{theorem}
% This is a theorem set in the named color \textbf{#1}, surrounded with a blac
% borderline.
% Note, for instance, that colors darken on overheads, so test your colors
% where you will use them. 
% \end{theorem}}
%
% These are all the DVIPS named colors from color.pro (as of 1999-Aug-11).
% \thmwithnamedcolor{GreenYellow}
% \thmwithnamedcolor{Yellow}
% \thmwithnamedcolor{Goldenrod}
% \thmwithnamedcolor{Dandelion}
% \thmwithnamedcolor{Apricot}
% \thmwithnamedcolor{Peach}
% \thmwithnamedcolor{Melon}
% \thmwithnamedcolor{YellowOrange}
% \thmwithnamedcolor{Orange}
% \thmwithnamedcolor{BurntOrange}
% \thmwithnamedcolor{Bittersweet}
% \thmwithnamedcolor{RedOrange}
% \thmwithnamedcolor{Mahogany}
% \thmwithnamedcolor{Maroon}
% \thmwithnamedcolor{BrickRed}
% \thmwithnamedcolor{Red}
% \thmwithnamedcolor{OrangeRed}
% \thmwithnamedcolor{RubineRed}
% \thmwithnamedcolor{WildStrawberry}
% \thmwithnamedcolor{Salmon}
% \thmwithnamedcolor{CarnationPink}
% \thmwithnamedcolor{Magenta}
% \thmwithnamedcolor{RedViolet}
% \thmwithnamedcolor{Fuchsia}
% \thmwithnamedcolor{Lavender}
% \thmwithnamedcolor{Thistle}
% \thmwithnamedcolor{Orchid}
% \thmwithnamedcolor{DarkOrchid}
% \thmwithnamedcolor{Purple}
% \thmwithnamedcolor{Plum}
% \thmwithnamedcolor{Violet}
% \thmwithnamedcolor{RoyalPurple}
% \thmwithnamedcolor{BlueViolet}
% \thmwithnamedcolor{Periwinkle}
% \thmwithnamedcolor{CadetBlue}
% \thmwithnamedcolor{CornflowerBlue}
% \thmwithnamedcolor{MidnightBlue}
% \thmwithnamedcolor{NavyBlue}
% \thmwithnamedcolor{RoyalBlue}
% \thmwithnamedcolor{Blue}
% \thmwithnamedcolor{Cerulean}
% \thmwithnamedcolor{Cyan}
% \thmwithnamedcolor{ProcessBlue}
% \thmwithnamedcolor{SkyBlue}
% \thmwithnamedcolor{Turquoise}
% \thmwithnamedcolor{TealBlue}
% \thmwithnamedcolor{Aquamarine}
% \thmwithnamedcolor{BlueGreen}
% \thmwithnamedcolor{Emerald}
% \thmwithnamedcolor{JungleGreen}
% \thmwithnamedcolor{SeaGreen}
% \thmwithnamedcolor{Green}
% \thmwithnamedcolor{ForestGreen}
% \thmwithnamedcolor{PineGreen}
% \thmwithnamedcolor{LimeGreen}
% \thmwithnamedcolor{YellowGreen}
% \thmwithnamedcolor{SpringGreen}
% \thmwithnamedcolor{OliveGreen}
% \thmwithnamedcolor{RawSienna}
% \thmwithnamedcolor{Sepia}
% \thmwithnamedcolor{Brown}
% \thmwithnamedcolor{Gray}

Enjoy!
\textit{--Jim Hefferon}
\end{document}