summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-08-07 22:18:43 +0000
committerKarl Berry <karl@freefriends.org>2020-08-07 22:18:43 +0000
commitd7359b696521401de6deaa4f70a6b40319cfa2a0 (patch)
tree8d45b41c17197de7a8514fb22f9c305a6ae9865d /Master/texmf-dist/source
parentd6a7e0e5536b4924edec286797ed38021b94509d (diff)
thmtools
git-svn-id: svn://tug.org/texlive/trunk@56068 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex/thmtools/thm-kv.dtx206
-rw-r--r--Master/texmf-dist/source/latex/thmtools/thm-listof.dtx58
-rw-r--r--Master/texmf-dist/source/latex/thmtools/thm-llncs.dtx2
-rw-r--r--Master/texmf-dist/source/latex/thmtools/thmdef-mdframed.dtx3
-rw-r--r--Master/texmf-dist/source/latex/thmtools/unique.dtx53
5 files changed, 227 insertions, 95 deletions
diff --git a/Master/texmf-dist/source/latex/thmtools/thm-kv.dtx b/Master/texmf-dist/source/latex/thmtools/thm-kv.dtx
index bdac30899d8..78591262743 100644
--- a/Master/texmf-dist/source/latex/thmtools/thm-kv.dtx
+++ b/Master/texmf-dist/source/latex/thmtools/thm-kv.dtx
@@ -210,25 +210,47 @@
}
\@for\tmp@keyname:=parent,numberwithin,within\do{%
-\define@key{thmdef}{\tmp@keyname}{\thmt@trytwice{\thmt@setparent{#1}}{}}%
+ \define@key{thmdef}{\tmp@keyname}{%
+ \thmt@trytwice{%
+ \thmt@setparent{#1}
+ \thmt@setsibling{}%
+ }{}%
+ }%
+}
+\newcommand\thmt@setparent{%
+ \def\thmt@parent
}
\@for\tmp@keyname:=sibling,numberlike,sharenumber\do{%
-\define@key{thmdef}{\tmp@keyname}{\thmt@trytwice{\thmt@setsibling{#1}}{}}%
+ \define@key{thmdef}{\tmp@keyname}{%
+ \thmt@trytwice{%
+ \thmt@setsibling{#1}%
+ \thmt@setparent{}%
+ }{}%
+ }%
+}
+\newcommand\thmt@setsibling{%
+ \def\thmt@sibling
}
\@for\tmp@keyname:=title,name,heading\do{%
-\define@key{thmdef}{\tmp@keyname}{\thmt@trytwice{\thmt@setthmname{#1}}{}}%
+ \define@key{thmdef}{\tmp@keyname}{\thmt@trytwice{\thmt@setthmname{#1}}{}}%
+}
+\newcommand\thmt@setthmname{%
+ \def\thmt@thmname
}
\@for\tmp@keyname:=unnumbered,starred\do{%
-\define@key{thmdef}{\tmp@keyname}[]{\thmt@trytwice{\thmt@isnumberedfalse}{}}%
+ \define@key{thmdef}{\tmp@keyname}[]{\thmt@trytwice{\thmt@isnumberedfalse}{}}%
}
\def\thmt@YES{yes}
\def\thmt@NO{no}
\def\thmt@UNIQUE{unless unique}
-\define@key{thmdef}{numbered}[\thmt@YES]{
+\newif\ifthmt@isnumbered
+\newif\ifthmt@isunlessunique
+
+\define@key{thmdef}{numbered}[yes]{
\def\thmt@tmp{#1}%
\thmt@trytwice{%
\ifx\thmt@tmp\thmt@YES
@@ -237,27 +259,38 @@
\thmt@isnumberedfalse
\else\ifx\thmt@tmp\thmt@UNIQUE
\RequirePackage[unq]{unique}
- \ifuniq{\thmt@envname}{%
- \thmt@isnumberedfalse
- }{%
- \thmt@isnumberedtrue
- }%
+ \thmt@isunlessuniquetrue
\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}}
+ \ifx\thmt@parent\@empty
+ \addtotheorempreheadhook[\thmt@envname]{\setuniqmark{\thmt@envname}}%
+ \else
+ \protected@edef\thmt@tmp{%
+ % expand \thmt@envname and \thmt@parent
+ \@nx\addtotheorempreheadhook[\thmt@envname @unique]{\@nx\setuniqmark{\thmt@envname.\@nx\@nameuse{the\thmt@parent}}}%
+ \@nx\addtotheorempreheadhook[\thmt@envname @numbered]{\@nx\setuniqmark{\thmt@envname.\@nx\@nameuse{the\thmt@parent}}}%
+ \@nx\addtotheorempreheadhook[\thmt@envname @unique]{\def\@nx\thmt@dummyctrautorefname{\thmt@thmname\@nx\@gobble}}%
+ \@nx\addtotheorempreheadhook[\thmt@envname @numbered]{\def\@nx\thmt@dummyctrautorefname{\thmt@thmname\@nx\@gobble}}%
+ }%
+ \thmt@tmp
+ \fi
+ % \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}{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}}{}}
@@ -296,52 +329,116 @@
}
\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}
\let\thmt@newtheorem\newtheorem
+% \declaretheorem[option list 1]{thmname list}[option list 1]
+% #1 = option list 1
+% #2 = thmname list
\newcommand\declaretheorem[2][]{%
+ % TODO: use \NewDocumentCommand from xparse?
+ % xparse will be part of latex2e format from latex2e 2020 Oct.
+ \@ifnextchar[%
+ {\declaretheorem@i{#1}{#2}}
+ {\declaretheorem@i{#1}{#2}[]}%
+}
+\@onlypreamble\declaretheorem
+
+% #1 = option list 1
+% #2 = thmname list
+% #3 = option list 2
+\def\declaretheorem@i#1#2[#3]{%
+ \@for\thmt@tmp:=#2\do{%
+ % strip spaces, \KV@@sp@def is defined in keyval.sty
+ \@xa\KV@@sp@def\@xa\thmt@tmp\@xa{\thmt@tmp}%
+ \@xa\declaretheorem@ii\@xa{\thmt@tmp}{#1,#3}%
+ }%
+}
+
+% #1 = single thmname (#1 and #2 are exchanged)
+% #2 = option list
+\def\declaretheorem@ii#1#2{%
% why was that here?
%\let\thmt@theoremdefiner\thmt@original@newtheorem
- \def\thmt@envname{#2}%
- \thmt@setthmname{\thmt@modifycase #2}%
+ % init options
\thmt@setparent{}%
\thmt@setsibling{}%
- \thmt@isnumberedtrue%
- \@thmt@firstkeysettrue%
- \kvsetkeys{thmdef0}{#1}%
- \kvsetkeys{thmdef}{#1}%
+ \thmt@isnumberedtrue
+ \thmt@isunlessuniquefalse
+ \def\thmt@envname{#1}%
+ \thmt@setthmname{\thmt@modifycase #1}%
+ % use true code in \thmt@trytwice{<true>}{<false>}
+ \@thmt@firstkeysettrue
+ % parse options
+ \kvsetkeys{thmdef0}{#2}% parse option "style" first
+ \kvsetkeys{thmdef}{#2}%
+ % call patched \newtheorem
+ \ifthmt@isunlessunique
+ \ifx\thmt@parent\@empty
+ % define normal "unless unique" thm env
+ \ifuniq{#1}{\thmt@isnumberedfalse}{\thmt@isnumberedtrue}%
+ \declaretheorem@iii{#1}%
+ \else
+ % define special "unless unique" thm env,
+ % when "numbered=unless unique" and "numberwithin=<counter>" are both used
+ \declaretheorem@iv{#1}%
+ \thmt@isnumberedtrue
+ \declaretheorem@iii{#1@numbered}%
+ \thmt@isnumberedfalse
+ \declaretheorem@iii{#1@unique}%
+ \fi
+ \else
+ % define normal thm env
+ \declaretheorem@iii{#1}%
+ \fi
+ % use false code in \thmt@trytwice{<true>}{<false>}
+ \def\thmt@envname{#1}%
+ \@thmt@firstkeysetfalse
+ % 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.
+ \kvsetkeys{thmdef0}{#2}%
+ \kvsetkeys{thmdef}{#2}%
+}
+
+% define normal thm env, call \thmt@newtheorem
+\def\declaretheorem@iii#1{%
\protected@edef\thmt@tmp{%
\@nx\thmt@newtheorem
- \ifthmt@isnumbered\else *\fi
- {#2}%
- \ifx\thmt@sibling\@empty\else [\thmt@sibling]\fi
- {\thmt@thmname}%
- \ifx\thmt@parent\@empty\else [\thmt@parent]\fi
+ \ifthmt@isnumbered
+ {#1}%
+ \ifx\thmt@sibling\@empty\else [\thmt@sibling]\fi
+ {\thmt@thmname}%
+ \ifx\thmt@parent\@empty\else [\thmt@parent]\fi
+ \else
+ *{#1}{\thmt@thmname}%
+ \fi
\relax% added so we can delimited-read everything later
- % (recall newtheorem is patched)
- }%\show\thmt@tmp
+ }%
+ \thmt@debug{Define theorem `#1' by ^^J\meaning\thmt@tmp}%
+ \thmt@tmp
+}
+
+% define special thm env
+\def\declaretheorem@iv#1{%
+ \protected@edef\thmt@tmp{%
+ % expand \thmt@envname and \thmt@parent
+ \@nx\newenvironment{#1}{%
+ \@nx\ifuniq{\thmt@envname.\@nx\@nameuse{the\thmt@parent}}{%
+ \def\@nx\thmt@rawenvname{#1@unique}%
+ }{%
+ \def\@nx\thmt@rawenvname{#1@numbered}%
+ }%
+ \begin{\@nx\thmt@rawenvname}%
+ }{%
+ \end{\@nx\thmt@rawenvname}%
+ }%
+ }%
+ \thmt@debug{Define special theorem `#1' by ^^J\meaning\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}
@@ -379,13 +476,14 @@
\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
-}
+% FIXME: not used?
+% \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}
diff --git a/Master/texmf-dist/source/latex/thmtools/thm-listof.dtx b/Master/texmf-dist/source/latex/thmtools/thm-listof.dtx
index 39603b4341d..cb5b7e380a4 100644
--- a/Master/texmf-dist/source/latex/thmtools/thm-listof.dtx
+++ b/Master/texmf-dist/source/latex/thmtools/thm-listof.dtx
@@ -80,16 +80,15 @@
\newcommand\listoftheorems[1][]{%
%% much hacking here to pick up the definition from the class
%% without oodles of conditionals.
- \bgroup
+ \begingroup
\setlisttheoremstyle{#1}%
\let\listfigurename\listtheoremname
\def\contentsline##1{%
\csname thmt@contentsline@##1\endcsname{##1}%
}%
\@for\thmt@envname:=\thmt@allenvs\do{%
- \@xa\protected@edef\csname l@\thmt@envname\endcsname{% CHECK: why p@edef?
- \@nx\@dottedtocline{1}{1.5em}{\@nx\thmt@listnumwidth}%
- }%
+ % CHECK: is \cs{l@\thmt@envname} repeatedly defined?
+ \thmtlo@newentry
}%
\let\thref@starttoc\@starttoc
\def\@starttoc##1{\thref@starttoc{loe}}%
@@ -108,7 +107,7 @@
}%
%\expandafter
\listoffigures
- \egroup
+ \endgroup
}
\newcommand\setlisttheoremstyle[1]{%
@@ -123,25 +122,60 @@
% FMi 2019-09-31 allow local title
\define@key{thmt-listof}{title}{\def\listtheoremname{#1}}
% -- FMi
+\newif\ifthmt@listswap
+\def\thmt@TRUE{true}
+\def\thmt@FALSE{false}
+\define@key{thmt-listof}{swapnumber}[true]{%
+ \def\thmt@tmp{#1}%
+ \ifx\thmt@tmp\thmt@TRUE
+ \thmt@listswaptrue
+ \else\ifx\thmt@tmp\thmt@FALSE
+ \thmt@listswapfalse
+ \else
+ \PackageError{thmtools}{Unknown value `#1' to key swapnumber}{}%
+ \fi\fi
+}
-\providecommand\thmt@listnumwidth{2.3em}
+\ifdefined\@tocline
+ % for ams classes (amsart.cls, amsproc.cls, amsbook.cls) which
+ % don't use \@dottedtocline and don't provide \@dotsep
+ \def\thmtlo@newentry{%
+ \@xa\def\csname l@\thmt@envname\endcsname{% CHECK: why p@edef?
+ % similar to \l@figure defined in ams classes
+ \@tocline{0}{3pt plus2pt}{0pt}{\thmt@listnumwidth}{}%
+ }%
+ }
+ \providecommand*\thmt@listnumwidth{1.5pc}
+\else
+ \def\thmtlo@newentry{%
+ \@xa\def\csname l@\thmt@envname\endcsname{% CHECK: why p@edef?
+ \@dottedtocline{1}{1.5em}{\thmt@listnumwidth}%
+ }%
+ }
+ \providecommand*\thmt@listnumwidth{2.3em}
+\fi
\providecommand\thmtformatoptarg[1]{ (#1)}
\newcommand\thmt@mklistcmd{%
- \@xa\protected@edef\csname l@\thmt@envname\endcsname{% CHECK: why p@edef?
- \@nx\@dottedtocline{1}{1.5em}{\@nx\thmt@listnumwidth}%
- }%
+ \thmtlo@newentry
\ifthmt@isstarred
\@xa\def\csname ll@\thmt@envname\endcsname{%
- \protect\numberline{\protect\let\protect\autodot\protect\@empty}%
+ \protect\ifthmt@listswap
+ \protect\else
+ \protect\numberline{\protect\let\protect\autodot\protect\@empty}%
+ \protect\fi
\thmt@thmname
\ifx\@empty\thmt@shortoptarg\else\protect\thmtformatoptarg{\thmt@shortoptarg}\fi
}%
\else
\@xa\def\csname ll@\thmt@envname\endcsname{%
- \protect\numberline{\csname the\thmt@envname\endcsname}%
- \thmt@thmname
+ \protect\ifthmt@listswap
+ \thmt@thmname~\csname the\thmt@envname\endcsname
+ \protect\else
+ \protect\numberline{\csname the\thmt@envname\endcsname}%
+ \thmt@thmname
+ \protect\fi
\ifx\@empty\thmt@shortoptarg\else\protect\thmtformatoptarg{\thmt@shortoptarg}\fi
}%
\fi
diff --git a/Master/texmf-dist/source/latex/thmtools/thm-llncs.dtx b/Master/texmf-dist/source/latex/thmtools/thm-llncs.dtx
index 134acb18b7c..994067050e9 100644
--- a/Master/texmf-dist/source/latex/thmtools/thm-llncs.dtx
+++ b/Master/texmf-dist/source/latex/thmtools/thm-llncs.dtx
@@ -71,7 +71,7 @@
{\thmt@thmname}%
\ifthmt@hasparent [\thmt@parent]\fi
{\thmt@style@headfont}{\thmt@style@bodyfont}%
- }
+ }%
\thmt@args
\thmt@newtheorem@postdefinition
}
diff --git a/Master/texmf-dist/source/latex/thmtools/thmdef-mdframed.dtx b/Master/texmf-dist/source/latex/thmtools/thmdef-mdframed.dtx
index 85c5d9bd2d1..cae264b04eb 100644
--- a/Master/texmf-dist/source/latex/thmtools/thmdef-mdframed.dtx
+++ b/Master/texmf-dist/source/latex/thmtools/thmdef-mdframed.dtx
@@ -24,8 +24,7 @@
\thmt@trytwice{}{%
\RequirePackage{mdframed}%
\RequirePackage{thm-patch}%
- \addtotheorempreheadhook[\thmt@envname]{%
- \begin{mdframed}[#1]}%
+ \addtotheorempreheadhook[\thmt@envname]{\begin{mdframed}[#1]}%
\addtotheorempostfoothook[\thmt@envname]{\end{mdframed}}%
}%
}
diff --git a/Master/texmf-dist/source/latex/thmtools/unique.dtx b/Master/texmf-dist/source/latex/thmtools/unique.dtx
index bf013ca6d48..f2fff48a07e 100644
--- a/Master/texmf-dist/source/latex/thmtools/unique.dtx
+++ b/Master/texmf-dist/source/latex/thmtools/unique.dtx
@@ -15,7 +15,7 @@
%<*code>
%\fi
% Two macros are provided: |\setuniqmark| takes a single parameter,
-% the name, which should be a string of letters. |\ifuniqmark| takes
+% the name, which should be a string of letters. |\ifuniq| takes
% three parameters: a name, a true-part and a false-part. The true
% part is executed if and only if there was exactly one call to
% |\setuniqmark| with the given name during the previous \LaTeX\ run.
@@ -58,17 +58,18 @@
% \begin{macrocode}
\newcommand\setuniqmark[1]{%
\expandafter\ifx\csname uniq@now@#1\endcsname\relax
- \global\@namedef{uniq@now@#1}{\uniq@ONE}%
+ \global\@namedef{uniq@now@#1}{\uniq@ONE}%
\else
- \expandafter\ifx\csname uniq@now@#1\endcsname\uniq@MANY\else
- \immediate\write\uniq@channel{%
- \string\uniq@setmany{#1}%
- }%
- \ifuniq{#1}{%
- \uniq@warnnotunique{#1}%
- }{}%
- \fi
- \global\@namedef{uniq@now@#1}{\uniq@MANY}%
+ \expandafter\ifx\csname uniq@now@#1\endcsname\uniq@MANY
+ \else
+ \immediate\write\uniq@channel{%
+ \string\uniq@setmany{#1}%
+ }%
+ \ifuniq{#1}{%
+ \uniq@warnnotunique{#1}%
+ }{}%
+ \fi
+ \global\@namedef{uniq@now@#1}{\uniq@MANY}%
\fi
}
% \end{macrocode}
@@ -77,19 +78,19 @@
% \begin{macro}{\ifuniq}
% Companion to |\setuniqmark|: if the uniqmark given in the first
% argument was called more than once, execute the second argument,
-% otherwise execute the first argument. Note than no call to
+% otherwise execute the third argument. Note that no call to
% |\setuniqmark| for a particular uniqmark at all means that this
% uniqmark is unique.
%
-% This is a lazy version: we could always say false if we already had two calls
-% to setuniqmark this run, but we have to rerun for any ifuniq prior
-% to the first setuniqmark anyway, so why bother?
+% This is a lazy version: we could always say false if we already had two
+% calls to |\setuniqmark| this run, but we have to rerun for any |\ifuniq|
+% prior to the first setuniqmark anyway, so why bother?
% \begin{macrocode}
\newcommand\ifuniq[1]{%
\expandafter\ifx\csname uniq@last@#1\endcsname\uniq@MANY
- \expandafter \@secondoftwo
+ \expandafter\@secondoftwo
\else
- \expandafter\@firstoftwo
+ \expandafter\@firstoftwo
\fi
}
% \end{macrocode}
@@ -124,11 +125,11 @@
% \begin{macrocode}
\def\uniq@warnifunique#1{%
\expandafter\ifx\csname uniq@now@#1\endcsname\uniq@MANY\else
- \PackageWarningNoLine{uniq}{%
- `#1' is unique now.\MessageBreak
- Rerun LaTeX to pick up the change%
- }%
- \@uniq@reruntrue
+ \PackageWarningNoLine{uniq}{%
+ `#1' is unique now.\MessageBreak
+ Rerun LaTeX to pick up the change%
+ }%
+ \@uniq@reruntrue
\fi
}
% \end{macrocode}
@@ -153,10 +154,10 @@
% \begin{macrocode}
\def\uniq@maybesuggestrerun{%
\if@uniq@rerun
- \PackageWarningNoLine{uniq}{%
- Uniquenesses have changed. \MessageBreak
- Rerun LaTeX to pick up the change%
- }%
+ \PackageWarningNoLine{uniq}{%
+ Uniquenesses have changed. \MessageBreak
+ Rerun LaTeX to pick up the change%
+ }%
\fi
}
% \end{macrocode}