Fix checksum.
[mdwtools] / mdwthm.dtx
CommitLineData
86f6a31e 1% \begin{meta-comment}
2%
92e479d5 3% $Id: mdwthm.dtx,v 1.5 2003/12/01 00:47:56 mdw Exp $
86f6a31e 4%
5% Standard theorem typesetting
6%
7% (c) 2001 Mark Wooding
8%
9%----- Revision history -----------------------------------------------------
10%
11% $Log: mdwthm.dtx,v $
92e479d5 12% Revision 1.5 2003/12/01 00:47:56 mdw
13% Fix checksum.
14%
48c66928 15% Revision 1.4 2003/09/06 11:25:54 mdw
16% Allow configuration of theorem numbering.
17%
fe474f79 18% Revision 1.3 2003/09/05 16:16:20 mdw
19% Various nips and tucks. Redefine theorem styles from scratch now.
20%
6c811756 21% Revision 1.2 2002/02/24 12:35:55 mdw
22% Fix handling of \chapter, in case some idiot has said `\csname
23% chapter\endcsname'.
24%
86f6a31e 25% Revision 1.1 2002/02/03 20:49:03 mdw
26% Checkin for new build system.
27%
28%
29% \end{meta-comment}
30%
31% \begin{meta-comment} <general public licence>
32%%
33%% mdwthm package -- standard theorem stuff
34%% Copyright (c) 2001 Mark Wooding
35%%
36%% This program is free software; you can redistribute it and/or modify
37%% it under the terms of the GNU General Public License as published by
38%% the Free Software Foundation; either version 2 of the License, or
39%% (at your option) any later version.
40%%
41%% This program is distributed in the hope that it will be useful,
42%% but WITHOUT ANY WARRANTY; without even the implied warranty of
43%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
44%% GNU General Public License for more details.
45%%
46%% You should have received a copy of the GNU General Public License
47%% along with this program; if not, write to the Free Software Foundation,
48%% Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
49% \end{meta-comment}
50%
51% \begin{meta-comment} <Package preambles>
52%<+package>\NeedsTeXFormat{LaTeX2e}
53%<+package>\ProvidesPackage{mdwthm}
54%<+package> [2001/09/16 1.0 theorem typesetting]
55%<+thmstyle>\ProvidesFile{mdwmargin.thm}
56%<+thmstyle> [2001/09/16 1.0 numbers-in-the-margin theorem style]
57% \end{meta-comment}
58%
92e479d5 59% \CheckSum{205}
86f6a31e 60%% \CharacterTable
61%% {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
62%% 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
63%% Digits \0\1\2\3\4\5\6\7\8\9
64%% Exclamation \! Double quote \" Hash (number) \#
65%% Dollar \$ Percent \% Ampersand \&
66%% Acute accent \' Left paren \( Right paren \)
67%% Asterisk \* Plus \+ Comma \,
68%% Minus \- Point \. Solidus \/
69%% Colon \: Semicolon \; Less than \<
70%% Equals \= Greater than \> Question mark \?
71%% Commercial at \@ Left bracket \[ Backslash \\
72%% Right bracket \] Circumflex \^ Underscore \_
73%% Grave accent \` Left brace \{ Vertical bar \|
74%% Right brace \} Tilde \~}
75%%
76%
77% \begin{meta-comment}
78%
79%<*driver>
80\input{mdwtools}
81\describespackage{mdwthm}
82\mdwdoc
83%</driver>
84%
85% \end{meta-comment}
86%
87%^^A-------------------------------------------------------------------------
88% \section{User guide}
89%
90% \subsection{Environments provided}
91%
92% \DescribeEnv{theorem}
93% \DescribeEnv{lemma}
94% \DescribeEnv{proposition}
95% \DescribeEnv{corollary}
96% \DescribeEnv{definition}
97% \DescribeEnv{example}
98% \DescribeEnv{fact}
99% \DescribeEnv{remark}
100% \DescribeEnv{note}
101% The package defines a collection of theorem environments, declared in the
102% usual way. All of them except \env{claim} share the same counter. If the
103% document class has a |\chapter| command, then they are numbered within the
104% chapter; otherwise there is a single numbering system throughout the
105% document.
106%
107% Every environment has a $*$-version, which doesn't print a number. This
108% might be useful every now and then.
109%
110% The environments \env{theorem}, \env{lemma}, \env{proposition},
111% \env{claim}and \env{corollary} are set using the `plain' style, with the
112% body text in \textit{italics}. The environments \env{definition} and
113% \env{example} are set in the `definition' style, with body text in roman.
114% The remaining environments, \env{fact}, \env{remark}, and \env{note} are
115% set in the `remark' style.
116%
117% \DescribeEnv{claim}
118% \DescribeEnv{proof}
119% The \env{claim} environment has its own counter, which is reset at the
fe474f79 120% beginning of the \env{proof} environment. If you say |\qed| in a
121% \env{proof} environment then it uses your symbol; otherwise it adds its own
122% at the end.
86f6a31e 123%
48c66928 124% \subsection{Options}
125%
126% The package takes an option \syntax{"within="<counter>} -- number theorems
127% within \<counter>. If this isn't given, a default is chosen -- either
128% numbering in chapters, or global numbering. The \lit*{notwithin} option
129% forces global numbering.
130%
86f6a31e 131% \subsection{The \package{mdwmargin} style}
132%
133% This package also provides a pretty `number-hanging-in-the-margin' theorem
134% style collection, available under the name \env{mdwmargin}.
135%
136% \implementation
137%
138%
139%^^A-------------------------------------------------------------------------
140% \section{Implementation of the environments}
141%
142% \begin{macrocode}
143%<*package>
48c66928 144\RequirePackage{mdwkey}
145\if1%
146 \ifx\if@article\iftrue0
147 \else\ifx\chapter\@@undefined0
148 \else\ifx\chapter\relax0
149 \else1\fi\fi\fi
150 \def\mt@within{[chapter]}
151\else
152 \def\mt@within{}
153\fi
154\mkdef{mdwthm:opt}{within}{\def\mt@within{[#1]}}
155\mkdef{mdwthm:opt}{notwithin}*{\def\mt@within{}}
156\mkdef*{mdwthm:opt}{\PassOptionsToPackage{#1=#2}{amsthm}}
157\mkdef*{mdwthm:opt}*{\PassOptionsToPackage{#1}{amsthm}}
158\def\mt@opt#1{\mkparse{mdwthm:opt}{#1}}
159\DeclareOption*{\expandafter\mt@opt\expandafter{\CurrentOption}}
160\ProcessOptions
86f6a31e 161\RequirePackage{amsthm}
162% \end{macrocode}
163%
164% \subsection{The simple bits}
165%
166% \begin{environment}{theorem}
167%
168% Do the right thing with the numbering rules.
169%
170% \begin{macrocode}
48c66928 171\edef\next@{\noexpand\newtheorem{theorem}{Theorem}\mt@within}\next@
86f6a31e 172\newtheorem*{theorem*}{Theorem}
173% \end{macrocode}
174%
175% \end{environment}
176%
177% \begin{environment}{lemma}
178% \begin{environment}{proposition}
179% \begin{environment}{corollary}
180% \begin{environment}{claim}
181% \begin{environment}{definition}
182% \begin{environment}{example}
183% \begin{environment}{fact}
184% \begin{environment}{remark}
185%
186% Most of this is very easy.
187%
188% \begin{macrocode}
189\theoremstyle{plain}
190\newtheorem{lemma}[theorem]{Lemma}
191\newtheorem*{lemma*}{Lemma}
192\newtheorem{proposition}[theorem]{Proposition}
193\newtheorem*{proposition*}{Proposition}
194\newtheorem{corollary}[theorem]{Corollary}
195\newtheorem*{corollary*}{Corollary}
196\newtheorem{fact}[theorem]{Fact}
197\newtheorem*{fact*}{Fact}
198\newtheorem{claim}{Claim}
199\newtheorem*{claim*}{Claim}
200% \end{macrocode}
201%
202% \begin{macrocode}
203\theoremstyle{definition}
204\newtheorem{definition}[theorem]{Definition}
205\newtheorem*{definition*}{Definition}
206\newtheorem{example}[theorem]{Example}
207\newtheorem*{example*}{Example}
208% \end{macrocode}
209%
210% \begin{macrocode}
211\theoremstyle{remark}
212\newtheorem{remark}[theorem]{Remark}
213\newtheorem*{remark*}{Remark}
214% \end{macrocode}
215%
216% \end{environment}
217% \end{environment}
218% \end{environment}
219% \end{environment}
220% \end{environment}
221% \end{environment}
222% \end{environment}
223% \end{environment}
224%
225% \begin{environment}{note}
226%
227% Someone else might also have a \env{note} environment. Be careful.
228%
229% \begin{macrocode}
230\ifx\note\@@undefined
231 \newtheorem{note}[theorem]{Note}
232 \newtheorem*{note*}{Note}
233\fi
234% \end{macrocode}
235%
236% \end{environment}
237%
fe474f79 238% \begin{macro}{\@qedhack}
239%
240% Make |\qed| idempotent.
241%
242% \begin{macrocode}
243\newif\if@qedsw
244\def\@qedhack{%
245 \let\@qed@\qed%
246 \global\@qedswtrue%
247 \def\qed{\if@qedsw\global\@qedswfalse\expandafter\@qed@\fi}%
248}
249% \end{macrocode}
250%
251% \end{macro}
252%
86f6a31e 253% \begin{environment}{proof}
254%
255% Now to hack the proof environment.
256%
257% \begin{macrocode}
258\renewenvironment{proof}[1][\proofname]{%
259 \setcounter{claim}{0}%
260 \par\normalfont%
fe474f79 261 \ifdim\topsep<\parskip\topsep\parskip\fi%
262 \ifdim\@topsepadd<\z@\@topsepadd\z@\fi%
263 \trivlist\advance\itemindent\labelsep\let\makelabel\proofstyle%
86f6a31e 264 \advance\@topsep-\parskip%
265 \advance\@topsepadd-\parskip%
fe474f79 266 \@qedhack%
267 \item[#1]%
86f6a31e 268}{%
269 \qed\endtrivlist%
270}
86f6a31e 271% \end{macrocode}
272% \end{environment}
273%
fe474f79 274% \begin{macro}{\proofstyle}
275%
276% The |\proofstyle| macro is just a style hook for typesetting the `Proof'
277% label.
278%
279% \begin{macrocode}
280\providecommand\proofstyle[1]{\textit{#1.}}
281% \end{macrocode}
282%
283% \end{macro}
284%
86f6a31e 285% Done.
286%
287% \begin{macrocode}
288%</package>
289% \end{macrocode}
290%
291%^^A-------------------------------------------------------------------------
292% \section{Implementation of the theorem style}
293%
294% \begin{macrocode}
295%<*thmstyle>
296% \end{macrocode}
297%
298% \begin{macro}{\thmhead@margin}
299%
300% Firstly, a macro to typeset the theorem environment header, with the number
301% in the margin.
302%
303% \begin{macrocode}
304\def\thmhead@margin#1#2#3{%
305 \thmnumber{\llap{#2{\normalsize\quad}}}%
306 \thmname{#1}%
307 \thmnote{ \the\thm@notefont(#3)}%
308}
309% \end{macrocode}
310% \end{macro}
311%
312% \begin{macro}{\thm@headfont@margin}
313%
314% Now to decide on the header font. Definitely we want boldface; if the
315% documentclass (or \package{mdwfonts}) has decided on a different font
316% family for the headings, then we use that.
317%
318% \begin{macrocode}
319\def\thm@headfont@margin{%
fe474f79 320 \fontseries{\bfdefault}%
86f6a31e 321 \ifx\headdefault\@@undfined\else\fontfamily\headdefault\fi%
322 \selectfont%
323}
324% \end{macrocode}
325% \end{macro}
326%
327% \begin{macro}{\qedsymbol}
328%
329% Use the nice symbol if available.
330%
331% \begin{macrocode}
332\AtBeginDocument{\ifx\square\@@undefined\else\def\qedsymbol{$\square$}\fi}
333% \end{macrocode}
334% \end{macro}
335%
fe474f79 336% \begin{macro}{\proofstyle}
86f6a31e 337%
fe474f79 338% Typeset `Proof' in bold face.
86f6a31e 339%
340% \begin{macrocode}
fe474f79 341\def\proofstyle#1{{\thm@headfont@margin#1}}
342% \end{macrocode}
343%
344% \end{macro}
345%
346% \begin{macro}{\th@base}
347% \begin{macro}{\@endtheorem}
348%
349% The |\th@base| macro provides the basis for our theorem style. The
350% argument is something to do at the end of the environment.
351%
352% \begin{macrocode}
353\def\th@base#1{%
354 \let\thmhead\thmhead@margin%
355 \thm@headfont{\thm@headfont@margin}%
356 \thm@headpunct{}%
357 \advance\thm@postskip-\parskip%
358 \@qedhack%
359 \def\after@thm{#1}%
360 \normalfont%
86f6a31e 361}
fe474f79 362% \end{macrocode}
363%
364% Ah, but nobody actually does anything with |\after@thm|. Let's fix that.
365%
366% \begin{macrocode}
48c66928 367\AtEndOfPackage{\def\@endtheorem{\after@thm\endtrivlist\@endpefalse}}
fe474f79 368% \end{macrocode}
369% \end{macro}
370% \end{macro}
371%
372% \begin{macro}{\th@plain}
373% \begin{macro}{\th@definition}
374% \begin{macro}{\th@remark}
375%
376% Now this is easy. The space hacking in |\th@remark| is straight from
377% \package{amsthm}.
378%
379% \begin{macrocode}
380\AtBeginDocument{
381 \def\th@plain{\th@base\relax\itshape}
382 \def\th@definition{\th@base\qed}
383 \def\th@remark{%
384 \th@base\qed%
385 \thm@preskip\topsep\divide\thm@preskip\tw@%
386 \thm@postskip\thm@preskip%
387 }
388}
86f6a31e 389%</thmstyle>
390% \end{macrocode}
391% \end{macro}
fe474f79 392% \end{macro}
393% \end{macro}
86f6a31e 394%
395% \hfill Mark Wooding, \today
396% \Finale
397%
398\endinput