summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/thmtools/thm-patch.sty
blob: 7b5315388e908d46d2d37c438373f439815c02dc (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
%%
%% This is file `thm-patch.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% thm-patch.dtx  (with options: `patch')
%% 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 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-patch}[2008/02/17 BETA thm-patch (ulmi)]
\let\@xa=\expandafter
\let\@nx=\noexpand

\@ifundefined{c@thmt@dummyctr}{%
  \newcounter{thmt@dummyctr}%
}{}%
\gdef\theHthmt@dummyctr{dummy.\arabic{thmt@dummyctr}}%

\newif\ifthmt@isstarred
\newif\ifthmt@hassibling
\newif\ifthmt@hasparent

\let\thmt@original@newtheorem\newtheorem
\def\newtheorem{%
  \thmt@isstarredfalse
  \let\thmt@sibling=\relax \thmt@hassiblingfalse
  \let\thmt@parent=\relax  \thmt@hasparentfalse
  \@ifstar
    {\thmt@isstarredtrue\thmt@newtheoremii}%
    {\thmt@newtheoremii}%
}
\newcommand\thmt@newtheoremii[1]{%
  \def\thmt@envname{#1}%
  \thmt@newtheoremiii
}
\newcommand\thmt@newtheoremiii[2][]{%
  \def\thmt@thmname{#2}%
  \ifx&#1&\else
    \thmt@hassiblingtrue
    \def\thmt@sibling{#1}%
  \fi
  \@ifnextchar[{%
    \thmt@hasparenttrue
    \def\tmp@a[####1]{\def\thmt@parent{####1}\thmt@newtheoremiv}%
    \tmp@a
  }{%
    \thmt@newtheoremiv
  }%
}
\newcommand\thmt@newtheoremiv{%
  \thmt@newtheorem@predefinition
  % whee, now reassemble the whole shit.
  \protected@edef\thmt@args{%
    \@nx\thmt@original@newtheorem%
    \ifthmt@isstarred *\fi
    {\thmt@envname}%
    \ifthmt@hassibling [\thmt@sibling]\fi
    {\thmt@thmname}%
    \ifthmt@hasparent [\thmt@parent]\fi
  }
  \thmt@args
  \thmt@newtheorem@postdefinition
}

\newcommand\thmt@newtheorem@predefinition{}
\newcommand\thmt@newtheorem@postdefinition{}

\g@addto@macro\thmt@newtheorem@postdefinition{%
  \@xa\thmt@addtheoremhook\@xa{\thmt@envname}%
  \ifthmt@isstarred\@namedef{the\thmt@envname}{}\fi
  \protected@edef\thmt@tmp{%
    \def\@nx\thmt@envname{\thmt@envname}%
    \def\@nx\thmt@thmname{\thmt@thmname}%
  }
  \@xa\addtotheoremprehook\@xa[\@xa\thmt@envname\@xa]\@xa{%
    \thmt@tmp
  }%
}
\newcommand\thmt@addtheoremhook[1]{%
  % this adds two command calls to the newly-defined theorem.
  \@xa\let\csname thmt@original@#1\@xa\endcsname
          \csname#1\endcsname
  \@xa\renewcommand\csname \thmt@envname\endcsname[1][]{%
    \def\thmt@optarg{##1}%
    \csname thmt@#1@preheadhook\endcsname
    \thmt@generic@preheadhook
    \csname thmt@original@#1\@xa\endcsname
      \ifx\@empty\thmt@optarg\else [##1]\fi
    \csname thmt@#1@postheadhook\endcsname
    \thmt@generic@postheadhook
  }%
  \@namedef{thmt@#1@preheadhook}{}%
  \@namedef{thmt@#1@postheadhook}{}%
}
\newcommand\thmt@generic@preheadhook{\refstepcounter{thmt@dummyctr}}
\newcommand\thmt@generic@postheadhook{}

\newcommand\addtotheoremprehook[1][generic]{%
  \expandafter\g@addto@macro\csname thmt@#1@preheadhook\endcsname%
}
\newcommand\addtotheoremposthook[1][generic]{%
  \expandafter\g@addto@macro\csname thmt@#1@postheadhook\endcsname%
}

\endinput
%%
%% End of file `thm-patch.sty'.