diff options
Diffstat (limited to 'macros/latex/contrib/thmtools/source/thmdef-shaded.dtx')
-rw-r--r-- | macros/latex/contrib/thmtools/source/thmdef-shaded.dtx | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/macros/latex/contrib/thmtools/source/thmdef-shaded.dtx b/macros/latex/contrib/thmtools/source/thmdef-shaded.dtx new file mode 100644 index 0000000000..c7501cae36 --- /dev/null +++ b/macros/latex/contrib/thmtools/source/thmdef-shaded.dtx @@ -0,0 +1,116 @@ +% \iffalse meta-comment +% +% Copyright (C) 2010-2014 by Ulrich M. Schwarz +% Copyright (C) 2019 by Frank Mittelbach +% Copyright (C) 2020- by Yukai Chou +% +% This file may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, version 1.3c. +% The license can be obtained from +% http://www.latex-project.org/lppl/lppl-1-3c.txt +% +%\fi +% +%\iffalse (hide this from DocInput) +%<*shaded> +%\fi +% +% Mostly, this key wraps the theorem in a |shadebox| environment. +% The parameters are set by treating the value we are given as +% a new key-val list, see below. +% +% \begin{macrocode} + \define@key{thmdef}{shaded}[{}]{% + \thmt@trytwice{}{% + \RequirePackage{shadethm}% + \RequirePackage{thm-patch}% + \addtotheorempreheadhook[\thmt@envname]{% + \setlength\shadedtextwidth{\linewidth}% + \kvsetkeys{thmt@shade}{#1}\begin{shadebox}}% + \addtotheorempostfoothook[\thmt@envname]{\end{shadebox}}% + }% + } +% \end{macrocode} +% The docs for |shadethm| say: +% \begin{quote} +% There are some parameters you could set the default for (try them as is, +% first). +% \begin{itemize} +% \item |shadethmcolor|\quad 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.) +% \item |shaderulecolor|\quad The shading color of the border of the shaded box. +% See (i). If shadeboxrule is set to 0pt then this won't print anyway. +% \item |shadeboxrule|\quad The width of the border around the shading. Set it to +% 0pt (not just 0) to make it disappear. +% \item |shadeboxsep|\quad The length by which the shade box surrounds the text. +% \end{itemize} +% \end{quote} +% +% So, let's just define keys for all of these. +% +% \begin{macrocode} +\define@key{thmt@shade}{textwidth} {\setlength\shadedtextwidth{#1}} +\define@key{thmt@shade}{bgcolor} {\thmt@definecolor{shadethmcolor}{#1}} +\define@key{thmt@shade}{rulecolor} {\thmt@definecolor{shaderulecolor}{#1}} +\define@key{thmt@shade}{rulewidth} {\setlength\shadeboxrule{#1}} +\define@key{thmt@shade}{margin} {\setlength\shadeboxsep{#1}} +\define@key{thmt@shade}{padding} {\setlength\shadeboxsep{#1}} +\define@key{thmt@shade}{leftmargin} {\setlength\shadeleftshift{#1}} +\define@key{thmt@shade}{rightmargin}{\setlength\shaderightshift{#1}} +% \end{macrocode} +% +% What follows is wizardry you don't have to understand. In essence, +% we want to support two notions of color: one is ``everything that goes +% after |\definecolor{shadethmcolor}|'', such as +% |{rgb}{0.8,0.85,1}|. On the other hand, we'd also like +% to recognize an already defined color name such as |blue|. +% +% To handle the latter case, we need to copy the definition of one color +% into another. The \pkg{xcolor} package offers |\colorlet| for that, +% for the \pkg{color} package, we just cross our fingers. +% \begin{macrocode} +\def\thmt@colorlet#1#2{% + %\typeout{don't know how to let color `#1' be like color `#2'!}% + \@xa\let\csname\string\color@#1\@xa\endcsname + \csname\string\color@#2\endcsname + % this is dubious at best, we don't know what a backend does. +} +\AtBeginDocument{% + \ifcsname colorlet\endcsname + \let\thmt@colorlet\colorlet + \fi +} +% \end{macrocode} +% Now comes the interesting part: we assume that a simple color name +% must not be in braces, and a color definition starts with an opening +% curly brace. (So, if |\definecolor| ever gets an optional arg, +% we are in a world of pain.) +% +% If the second argument to |\thmt@definecolor| (the key) starts +% with a brace, +% then |\thmt@def@color| will have an empty second argument, +% delimited by the brace of the key. Hopefully, the key will have exactly +% enough arguments to satisfy |\definecolor|. Then, +% |thmt@drop@relax| will be executed and gobble the fallback +% values and the |\thmt@colorlet|. +% +% If the key does not contain an opening brace, |\thmt@def@color| +% will drop everything up to |{gray}{0.5}|. So, first the color +% gets defined to a medium gray, but then, it immediately gets overwritten +% with the definition corresponding to the color name. +% \begin{macrocode} +\def\thmt@drop@relax#1\relax{} +\def\thmt@definecolor#1#2{% + \thmt@def@color{#1}#2\thmt@drop@relax + {gray}{0.5}% + \thmt@colorlet{#1}{#2}% + \relax +} +\def\thmt@def@color#1#2#{% + \definecolor{#1}} +% \end{macrocode} +%\iffalse (hide this from DocInput) +%</shaded> +%\fi |