86f6a31e |
1 | % \begin{meta-comment} |
2 | % |
6c811756 |
3 | % $Id: mdwthm.dtx,v 1.2 2002/02/24 12:35:55 mdw Exp $ |
86f6a31e |
4 | % |
5 | % Standard theorem typesetting |
6 | % |
7 | % (c) 2001 Mark Wooding |
8 | % |
9 | %----- Revision history ----------------------------------------------------- |
10 | % |
11 | % $Log: mdwthm.dtx,v $ |
6c811756 |
12 | % Revision 1.2 2002/02/24 12:35:55 mdw |
13 | % Fix handling of \chapter, in case some idiot has said `\csname |
14 | % chapter\endcsname'. |
15 | % |
86f6a31e |
16 | % Revision 1.1 2002/02/03 20:49:03 mdw |
17 | % Checkin for new build system. |
18 | % |
19 | % |
20 | % \end{meta-comment} |
21 | % |
22 | % \begin{meta-comment} <general public licence> |
23 | %% |
24 | %% mdwthm package -- standard theorem stuff |
25 | %% Copyright (c) 2001 Mark Wooding |
26 | %% |
27 | %% This program is free software; you can redistribute it and/or modify |
28 | %% it under the terms of the GNU General Public License as published by |
29 | %% the Free Software Foundation; either version 2 of the License, or |
30 | %% (at your option) any later version. |
31 | %% |
32 | %% This program is distributed in the hope that it will be useful, |
33 | %% but WITHOUT ANY WARRANTY; without even the implied warranty of |
34 | %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
35 | %% GNU General Public License for more details. |
36 | %% |
37 | %% You should have received a copy of the GNU General Public License |
38 | %% along with this program; if not, write to the Free Software Foundation, |
39 | %% Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
40 | % \end{meta-comment} |
41 | % |
42 | % \begin{meta-comment} <Package preambles> |
43 | %<+package>\NeedsTeXFormat{LaTeX2e} |
44 | %<+package>\ProvidesPackage{mdwthm} |
45 | %<+package> [2001/09/16 1.0 theorem typesetting] |
46 | %<+thmstyle>\ProvidesFile{mdwmargin.thm} |
47 | %<+thmstyle> [2001/09/16 1.0 numbers-in-the-margin theorem style] |
48 | % \end{meta-comment} |
49 | % |
6c811756 |
50 | % \CheckSum{145} |
86f6a31e |
51 | %% \CharacterTable |
52 | %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z |
53 | %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z |
54 | %% Digits \0\1\2\3\4\5\6\7\8\9 |
55 | %% Exclamation \! Double quote \" Hash (number) \# |
56 | %% Dollar \$ Percent \% Ampersand \& |
57 | %% Acute accent \' Left paren \( Right paren \) |
58 | %% Asterisk \* Plus \+ Comma \, |
59 | %% Minus \- Point \. Solidus \/ |
60 | %% Colon \: Semicolon \; Less than \< |
61 | %% Equals \= Greater than \> Question mark \? |
62 | %% Commercial at \@ Left bracket \[ Backslash \\ |
63 | %% Right bracket \] Circumflex \^ Underscore \_ |
64 | %% Grave accent \` Left brace \{ Vertical bar \| |
65 | %% Right brace \} Tilde \~} |
66 | %% |
67 | % |
68 | % \begin{meta-comment} |
69 | % |
70 | %<*driver> |
71 | \input{mdwtools} |
72 | \describespackage{mdwthm} |
73 | \mdwdoc |
74 | %</driver> |
75 | % |
76 | % \end{meta-comment} |
77 | % |
78 | %^^A------------------------------------------------------------------------- |
79 | % \section{User guide} |
80 | % |
81 | % \subsection{Environments provided} |
82 | % |
83 | % \DescribeEnv{theorem} |
84 | % \DescribeEnv{lemma} |
85 | % \DescribeEnv{proposition} |
86 | % \DescribeEnv{corollary} |
87 | % \DescribeEnv{definition} |
88 | % \DescribeEnv{example} |
89 | % \DescribeEnv{fact} |
90 | % \DescribeEnv{remark} |
91 | % \DescribeEnv{note} |
92 | % The package defines a collection of theorem environments, declared in the |
93 | % usual way. All of them except \env{claim} share the same counter. If the |
94 | % document class has a |\chapter| command, then they are numbered within the |
95 | % chapter; otherwise there is a single numbering system throughout the |
96 | % document. |
97 | % |
98 | % Every environment has a $*$-version, which doesn't print a number. This |
99 | % might be useful every now and then. |
100 | % |
101 | % The environments \env{theorem}, \env{lemma}, \env{proposition}, |
102 | % \env{claim}and \env{corollary} are set using the `plain' style, with the |
103 | % body text in \textit{italics}. The environments \env{definition} and |
104 | % \env{example} are set in the `definition' style, with body text in roman. |
105 | % The remaining environments, \env{fact}, \env{remark}, and \env{note} are |
106 | % set in the `remark' style. |
107 | % |
108 | % \DescribeEnv{claim} |
109 | % \DescribeEnv{proof} |
110 | % The \env{claim} environment has its own counter, which is reset at the |
111 | % beginning of the \env{proof} environment. |
112 | % |
113 | % \subsection{The \package{mdwmargin} style} |
114 | % |
115 | % This package also provides a pretty `number-hanging-in-the-margin' theorem |
116 | % style collection, available under the name \env{mdwmargin}. |
117 | % |
118 | % \implementation |
119 | % |
120 | % |
121 | %^^A------------------------------------------------------------------------- |
122 | % \section{Implementation of the environments} |
123 | % |
124 | % \begin{macrocode} |
125 | %<*package> |
126 | \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{amsthm}} |
127 | \ProcessOptions\relax |
128 | \RequirePackage{amsthm} |
129 | % \end{macrocode} |
130 | % |
131 | % \subsection{The simple bits} |
132 | % |
133 | % \begin{environment}{theorem} |
134 | % |
135 | % Do the right thing with the numbering rules. |
136 | % |
137 | % \begin{macrocode} |
138 | \toks@{\newtheorem{theorem}{Theorem}} |
139 | \@tempswatrue% |
140 | \ifx\if@article\iftrue\@tempswafalse\fi |
141 | \ifx\chapter\@@undefined\@tempswafalse\fi |
6c811756 |
142 | \ifx\chapter\relax\@tempswafalse\fi |
86f6a31e |
143 | \if@tempswa\toks@\expandafter{\the\toks@[chapter]}\fi |
144 | \the\toks@ |
145 | \newtheorem*{theorem*}{Theorem} |
146 | % \end{macrocode} |
147 | % |
148 | % \end{environment} |
149 | % |
150 | % \begin{environment}{lemma} |
151 | % \begin{environment}{proposition} |
152 | % \begin{environment}{corollary} |
153 | % \begin{environment}{claim} |
154 | % \begin{environment}{definition} |
155 | % \begin{environment}{example} |
156 | % \begin{environment}{fact} |
157 | % \begin{environment}{remark} |
158 | % |
159 | % Most of this is very easy. |
160 | % |
161 | % \begin{macrocode} |
162 | \theoremstyle{plain} |
163 | \newtheorem{lemma}[theorem]{Lemma} |
164 | \newtheorem*{lemma*}{Lemma} |
165 | \newtheorem{proposition}[theorem]{Proposition} |
166 | \newtheorem*{proposition*}{Proposition} |
167 | \newtheorem{corollary}[theorem]{Corollary} |
168 | \newtheorem*{corollary*}{Corollary} |
169 | \newtheorem{fact}[theorem]{Fact} |
170 | \newtheorem*{fact*}{Fact} |
171 | \newtheorem{claim}{Claim} |
172 | \newtheorem*{claim*}{Claim} |
173 | % \end{macrocode} |
174 | % |
175 | % \begin{macrocode} |
176 | \theoremstyle{definition} |
177 | \newtheorem{definition}[theorem]{Definition} |
178 | \newtheorem*{definition*}{Definition} |
179 | \newtheorem{example}[theorem]{Example} |
180 | \newtheorem*{example*}{Example} |
181 | % \end{macrocode} |
182 | % |
183 | % \begin{macrocode} |
184 | \theoremstyle{remark} |
185 | \newtheorem{remark}[theorem]{Remark} |
186 | \newtheorem*{remark*}{Remark} |
187 | % \end{macrocode} |
188 | % |
189 | % \end{environment} |
190 | % \end{environment} |
191 | % \end{environment} |
192 | % \end{environment} |
193 | % \end{environment} |
194 | % \end{environment} |
195 | % \end{environment} |
196 | % \end{environment} |
197 | % |
198 | % \begin{environment}{note} |
199 | % |
200 | % Someone else might also have a \env{note} environment. Be careful. |
201 | % |
202 | % \begin{macrocode} |
203 | \ifx\note\@@undefined |
204 | \newtheorem{note}[theorem]{Note} |
205 | \newtheorem*{note*}{Note} |
206 | \fi |
207 | % \end{macrocode} |
208 | % |
209 | % \end{environment} |
210 | % |
211 | % \begin{environment}{proof} |
212 | % |
213 | % Now to hack the proof environment. |
214 | % |
215 | % \begin{macrocode} |
216 | \renewenvironment{proof}[1][\proofname]{% |
217 | \setcounter{claim}{0}% |
218 | \par\normalfont% |
219 | \trivlist\advance\itemindent\labelsep\let\makelabel\textit% |
220 | \advance\@topsep-\parskip% |
221 | \advance\@topsepadd-\parskip% |
222 | \item[#1\@proofdot]% |
223 | }{% |
224 | \qed\endtrivlist% |
225 | } |
226 | \def\@proofdot{.} |
227 | % \end{macrocode} |
228 | % \end{environment} |
229 | % |
230 | % Done. |
231 | % |
232 | % \begin{macrocode} |
233 | %</package> |
234 | % \end{macrocode} |
235 | % |
236 | %^^A------------------------------------------------------------------------- |
237 | % \section{Implementation of the theorem style} |
238 | % |
239 | % \begin{macrocode} |
240 | %<*thmstyle> |
241 | % \end{macrocode} |
242 | % |
243 | % \begin{macro}{\thmhead@margin} |
244 | % |
245 | % Firstly, a macro to typeset the theorem environment header, with the number |
246 | % in the margin. |
247 | % |
248 | % \begin{macrocode} |
249 | \def\thmhead@margin#1#2#3{% |
250 | \thmnumber{\llap{#2{\normalsize\quad}}}% |
251 | \thmname{#1}% |
252 | \thmnote{ \the\thm@notefont(#3)}% |
253 | } |
254 | % \end{macrocode} |
255 | % \end{macro} |
256 | % |
257 | % \begin{macro}{\thm@headfont@margin} |
258 | % |
259 | % Now to decide on the header font. Definitely we want boldface; if the |
260 | % documentclass (or \package{mdwfonts}) has decided on a different font |
261 | % family for the headings, then we use that. |
262 | % |
263 | % \begin{macrocode} |
264 | \def\thm@headfont@margin{% |
265 | \fontseries{b}% |
266 | \ifx\headdefault\@@undfined\else\fontfamily\headdefault\fi% |
267 | \selectfont% |
268 | } |
269 | % \end{macrocode} |
270 | % \end{macro} |
271 | % |
272 | % \begin{macro}{\qedsymbol} |
273 | % |
274 | % Use the nice symbol if available. |
275 | % |
276 | % \begin{macrocode} |
277 | \AtBeginDocument{\ifx\square\@@undefined\else\def\qedsymbol{$\square$}\fi} |
278 | % \end{macrocode} |
279 | % \end{macro} |
280 | % |
281 | % \begin{macro}{\hack@thm} |
282 | % |
283 | % Now we hack the standard theorem styles to do what we want. This is a |
284 | % tedious enough game with |\expandafter|. |
285 | % |
286 | % \begin{macrocode} |
287 | \def\hack@thm#1#2{% |
288 | \expandafter\def\expandafter#1\expandafter{#1% |
289 | \let\thmhead\thmhead@margin% |
290 | \thm@headfont{\thm@headfont@margin}% |
291 | \thm@headpunct{}% |
292 | \advance\thm@postskip-\parskip% |
293 | \def\after@thm{#2}% |
294 | } |
295 | } |
296 | \def\@endtheorem{\after@thm\endtrivlist\@endpefalse} |
297 | \let\@proofdot\relax |
298 | \hack@thm\th@plain{} |
299 | \hack@thm\th@definition{\qed} |
300 | \hack@thm\th@remark{\qed} |
301 | %</thmstyle> |
302 | % \end{macrocode} |
303 | % \end{macro} |
304 | % |
305 | % \hfill Mark Wooding, \today |
306 | % \Finale |
307 | % |
308 | \endinput |