%% %% This is file `thm-kv.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% thm-kv.dtx (with options: `kv') %% This is a generated file. %% %% This file is part of the `thmtools' package. %% The `thmtools' package has the LPPL maintenance status: maintained. %% Current Maintainer is Ulrich M. Schwarz, ulmi@absatzen.de %% %% Copyright (C) 2008-2010 by Ulrich M. Schwarz. %% %% This file may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, version 1.3a. %% This version is obtainable at %% http://www.latex-project.org/lppl/lppl-1-3a.txt %% %% \NeedsTeXFormat {LaTeX2e} \ProvidesPackage {thm-kv}[2010/06/08 v35] \let\@xa\expandafter \let\@nx\noexpand \RequirePackage{keyval,kvsetkeys,thm-patch} \newcommand\thmt@mkignoringkeyhandler[1]{% \kv@set@family@handler{#1}{% \thmt@debug{Key `##1' with value `##2' ignored by #1.}% }% } \newcommand\thmt@mkextendingkeyhandler[3]{% \kv@set@family@handler{#1}{% \thmt@selfextendingkeyhandler{#1}{#2}{#3}% {##1}{##2}% }% } \newcommand\thmt@selfextendingkeyhandler[5]{% % #1: family % #2: prefix for file % #3: key hint for error % #4: actual key % #5: actual value \IfFileExists{#2-#4.sty}{% \PackageInfo{thmtools}% {Automatically pulling in `#2-#4'}% \RequirePackage{#2-#4}% \ifcsname KV@#1@#4\endcsname \csname KV@#1@#4\endcsname{#5}% \else \PackageError{thmtools}% {#3 `#4' not known} {I don't know what that key does.\MessageBreak I've even loaded the file `#2-#4.sty', but that didn't help. }% \fi }{% \PackageError{thmtools}% {#3 `#4' not known} {I don't know what that key does by myself,\MessageBreak and no file `#2-#4.sty' to tell me seems to exist. }% }% } \newif\if@thmt@firstkeyset \def\thmt@trytwice{% \if@thmt@firstkeyset \@xa\@firstoftwo \else \@xa\@secondoftwo \fi } \@for\keyname:=parent,numberwithin,within\do{% \define@key{thmdef}{\keyname}{\thmt@trytwice{\thmt@setparent{#1}}{}}% } \@for\keyname:=sibling,numberlike,sharenumber\do{% \define@key{thmdef}{\keyname}{\thmt@trytwice{\thmt@setsibling{#1}}{}}% } \@for\keyname:=title,name,heading\do{% \define@key{thmdef}{\keyname}{\thmt@trytwice{\thmt@setthmname{#1}}{}}% } \@for\keyname:=unnumbered,starred\do{% \define@key{thmdef}{\keyname}[]{\thmt@trytwice{\thmt@isnumberedfalse}{}}% } \def\thmt@YES{yes} \def\thmt@NO{no} \def\thmt@UNIQUE{unless unique} \define@key{thmdef}{numbered}[\thmt@YES]{ \def\thmt@tmp{#1}% \thmt@trytwice{% \ifx\thmt@tmp\thmt@YES \thmt@isnumberedtrue \else\ifx\thmt@tmp\thmt@NO \thmt@isnumberedfalse \else\ifx\thmt@tmp\thmt@UNIQUE \RequirePackage[unq]{unique} \ifuniq{\thmt@envname}{% \thmt@isnumberedfalse }{% \thmt@isnumberedtrue }% \else \PackageError{thmtools}{Unknown value `#1' to key numbered}{}% \fi\fi\fi }{% trytwice: after definition \ifx\thmt@tmp\thmt@UNIQUE \addtotheorempreheadhook[\thmt@envname]{\setuniqmark{\thmt@envname}}% \addtotheorempreheadhook[\thmt@envname]{\def\thmt@dummyctrautorefname{\thmt@thmname\@gobble}} \fi }% } \define@key{thmdef}{preheadhook}{\thmt@trytwice{}{\addtotheorempreheadhook[\thmt@envname]{#1}}} \define@key{thmdef}{postheadhook}{\thmt@trytwice{}{\addtotheorempostheadhook[\thmt@envname]{#1}}} \define@key{thmdef}{prefoothook}{\thmt@trytwice{}{\addtotheoremprefoothook[\thmt@envname]{#1}}} \define@key{thmdef}{postfoothook}{\thmt@trytwice{}{\addtotheorempostfoothook[\thmt@envname]{#1}}} \define@key{thmdef}{style}{\thmt@trytwice{\thmt@setstyle{#1}}{}} \define@key{thmdef0}{style}{% \ifcsname thmt@style #1@defaultkeys\endcsname \thmt@toks{\kvsetkeys{thmdef}}% \@xa\@xa\@xa\the\@xa\@xa\@xa\thmt@toks\@xa\@xa\@xa{% \csname thmt@style #1@defaultkeys\endcsname}% \fi } \thmt@mkignoringkeyhandler{thmdef0} \def\thmt@setstyle#1{% \PackageWarning{thm-kv}{% Your backend doesn't have a `\string\theoremstyle' command. }% } \ifcsname theoremstyle\endcsname \let\thmt@originalthmstyle\theoremstyle \def\thmt@outerstyle{plain} \renewcommand\theoremstyle[1]{% \def\thmt@outerstyle{#1}% \thmt@originalthmstyle{#1}% } \def\thmt@setstyle#1{% \thmt@originalthmstyle{#1}% } \g@addto@macro\thmt@newtheorem@postdefinition{% \thmt@originalthmstyle{\thmt@outerstyle}% } \fi \newif\ifthmt@isnumbered \newcommand\thmt@setparent[1]{% \def\thmt@parent{#1}% } \newcommand\thmt@setsibling{% \def\thmt@sibling } \newcommand\thmt@setthmname{% \def\thmt@thmname } \thmt@mkextendingkeyhandler{thmdef}{thmdef}{\string\declaretheorem\space key} \newcommand\declaretheorem[2][]{% \let\thmt@theoremdefiner\thmt@original@newtheorem \def\thmt@envname{#2}% \thmt@setthmname{\MakeUppercase #2}% \thmt@setparent{}% \thmt@setsibling{}% \thmt@isnumberedtrue% \@thmt@firstkeysettrue% \kvsetkeys{thmdef0}{#1}% \kvsetkeys{thmdef}{#1}% \protected@edef\thmt@tmp{% \@nx\newtheorem \ifthmt@isnumbered\else *\fi {#2}% \ifx\thmt@sibling\@empty\else [\thmt@sibling]\fi {\thmt@thmname}% \ifx\thmt@parent\@empty\else [\thmt@parent]\fi }%\show\thmt@tmp \thmt@tmp % uniquely ugly kludge: some keys make only sense % afterwards. % and it gets kludgier: again, the default-inherited % keys need to have a go at it. \@thmt@firstkeysetfalse% \kvsetkeys{thmdef0}{#1}% \kvsetkeys{thmdef}{#1}% } \@onlypreamble\declaretheorem \providecommand\thmt@quark{\thmt@quark} \thmt@mkextendingkeyhandler{thmuse}{thmuse}{\thmt@envname\space optarg key} \addtotheorempreheadhook{% \ifx\thmt@optarg\@empty\else \@xa\thmt@garbleoptarg\@xa{\thmt@optarg}\fi }% \newif\ifthmt@thmuse@iskv \providecommand\thmt@garbleoptarg[1]{% \thmt@thmuse@iskvfalse \def\thmt@newoptarg{\@gobble}% \def\thmt@newoptargextra{}% \def\thmt@warn@unusedkeys{}% \@for\thmt@fam:=\thmt@thmuse@families\do{% \kvsetkeys{\thmt@fam}{#1}% }% \ifthmt@thmuse@iskv \protected@edef\thmt@optarg{% \@xa\thmt@newoptarg \thmt@newoptargextra\@empty }% \protected@edef\thmt@shortoptarg{\thmt@newoptarg\@empty}% \thmt@warn@unusedkeys \else \def\thmt@optarg{#1}% \def\thmt@shortoptarg{#1}% \fi } \def\thmt@splitopt#1=#2\thmt@quark{% \def\thmt@tmpkey{#1}% \ifx\thmt@tmpkey\@empty \def\thmt@tmpkey{\thmt@quark}% \fi \@onelevel@sanitize\thmt@tmpkey } \def\thmt@thmuse@families{thm@track@keys} \kv@set@family@handler{thm@track@keys}{% \@onelevel@sanitize\kv@key \@namedef{thmt@unusedkey@\kv@key}{% \PackageWarning{thmtools}{Unused key `#1'}% }% \@xa\g@addto@macro\@xa\thmt@warn@unusedkeys\@xa{% \csname thmt@unusedkey@\kv@key\endcsname } } \def\thmt@define@thmuse@key#1#2{% \g@addto@macro\thmt@thmuse@families{,#1}% \define@key{#1}{#1}{\thmt@thmuse@iskvtrue \@namedef{thmt@unusedkey@#1}{}% #2}% \thmt@mkignoringkeyhandler{#1}% } \thmt@define@thmuse@key{label}{% \addtotheorempostheadhook[local]{\label{#1}}% } \thmt@define@thmuse@key{name}{% \def\thmt@newoptarg{#1\@iden}% } \def\thmt@declaretheoremstyle@setup{} \def\thmt@declaretheoremstyle#1{% \PackageWarning{thmtools}{Your backend doesn't allow styling theorems}{} } \newcommand\declaretheoremstyle[2][]{% \def\thmt@style{#2}% \@xa\def\csname thmt@style \thmt@style @defaultkeys\endcsname{}% \thmt@declaretheoremstyle@setup \kvsetkeys{thmstyle}{#1}% \thmt@declaretheoremstyle{#2}% } \@onlypreamble\declaretheoremstyle \kv@set@family@handler{thmstyle}{% \PackageInfo{thmtools}{% Key `#1' (with value `#2')\MessageBreak is not a known style key.\MessageBreak Will pass this to every \string\declaretheorem\MessageBreak that uses `style=\thmt@style'% }% \ifx\kv@value\relax% no value given, don't pass on {}! \@xa\g@addto@macro\csname thmt@style \thmt@style @defaultkeys\endcsname{% #1,% }% \else \@xa\g@addto@macro\csname thmt@style \thmt@style @defaultkeys\endcsname{% #1={#2},% }% \fi } \endinput %% %% End of file `thm-kv.sty'.