% \begin{meta-comment} % % $Id: mdwthm.dtx,v 1.5 2003/12/01 00:47:56 mdw Exp $ % % Standard theorem typesetting % % (c) 2001 Mark Wooding % % \end{meta-comment} % % \begin{meta-comment} %% %% mdwthm package -- standard theorem stuff %% Copyright (c) 2001 Mark Wooding %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software Foundation, %% Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. % \end{meta-comment} % % \begin{meta-comment} %<+package>\NeedsTeXFormat{LaTeX2e} %<+package>\ProvidesPackage{mdwthm} %<+package> [2001/09/16 1.0 theorem typesetting] %<+thmstyle>\ProvidesFile{mdwmargin.thm} %<+thmstyle> [2001/09/16 1.0 numbers-in-the-margin theorem style] % \end{meta-comment} % % \CheckSum{204} %% \CharacterTable %% {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 %% 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 %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% % % \begin{meta-comment} % %<*driver> \input{mdwtools} \describespackage{mdwthm} \mdwdoc % % % \end{meta-comment} % %^^A------------------------------------------------------------------------- % \section{User guide} % % \subsection{Environments provided} % % \DescribeEnv{theorem} % \DescribeEnv{lemma} % \DescribeEnv{proposition} % \DescribeEnv{corollary} % \DescribeEnv{definition} % \DescribeEnv{example} % \DescribeEnv{fact} % \DescribeEnv{remark} % \DescribeEnv{note} % The package defines a collection of theorem environments, declared in the % usual way. All of them except \env{claim} share the same counter. If the % document class has a |\chapter| command, then they are numbered within the % chapter; otherwise there is a single numbering system throughout the % document. % % Every environment has a $*$-version, which doesn't print a number. This % might be useful every now and then. % % The environments \env{theorem}, \env{lemma}, \env{proposition}, % \env{claim}and \env{corollary} are set using the `plain' style, with the % body text in \textit{italics}. The environments \env{definition} and % \env{example} are set in the `definition' style, with body text in roman. % The remaining environments, \env{fact}, \env{remark}, and \env{note} are % set in the `remark' style. % % \DescribeEnv{claim} % \DescribeEnv{proof} % The \env{claim} environment has its own counter, which is reset at the % beginning of the \env{proof} environment. If you say |\qed| in a % \env{proof} environment then it uses your symbol; otherwise it adds its own % at the end. % % \subsection{Options} % % The package takes an option \syntax{"within="} -- number theorems % within \. If this isn't given, a default is chosen -- either % numbering in chapters, or global numbering. The \lit*{notwithin} option % forces global numbering. % % \subsection{The \package{mdwmargin} style} % % This package also provides a pretty `number-hanging-in-the-margin' theorem % style collection, available under the name \env{mdwmargin}. % % \implementation % % %^^A------------------------------------------------------------------------- % \section{Implementation of the environments} % % \begin{macrocode} %<*package> \RequirePackage{mdwkey} \if1% \ifx\if@article\iftrue0 \else\ifx\chapter\@@undefined0 \else\ifx\chapter\relax0 \else1\fi\fi\fi \def\mt@within{[chapter]} \else \def\mt@within{} \fi \mkdef{mdwthm:opt}{within}{\def\mt@within{[#1]}} \mkdef{mdwthm:opt}{notwithin}*{\def\mt@within{}} \mkdef*{mdwthm:opt}{\PassOptionsToPackage{#1=#2}{amsthm}} \mkdef*{mdwthm:opt}*{\PassOptionsToPackage{#1}{amsthm}} \def\mt@opt#1{\mkparse{mdwthm:opt}{#1}} \DeclareOption*{\expandafter\mt@opt\expandafter{\CurrentOption}} \ProcessOptions \RequirePackage{amsthm} % \end{macrocode} % % \subsection{The simple bits} % % \begin{environment}{theorem} % % Do the right thing with the numbering rules. % % \begin{macrocode} \edef\next@{\noexpand\newtheorem{theorem}{Theorem}\mt@within}\next@ \newtheorem*{theorem*}{Theorem} % \end{macrocode} % % \end{environment} % % \begin{environment}{lemma} % \begin{environment}{proposition} % \begin{environment}{corollary} % \begin{environment}{claim} % \begin{environment}{definition} % \begin{environment}{example} % \begin{environment}{fact} % \begin{environment}{remark} % % Most of this is very easy. % % \begin{macrocode} \theoremstyle{plain} \newtheorem{lemma}[theorem]{Lemma} \newtheorem*{lemma*}{Lemma} \newtheorem{proposition}[theorem]{Proposition} \newtheorem*{proposition*}{Proposition} \newtheorem{corollary}[theorem]{Corollary} \newtheorem*{corollary*}{Corollary} \newtheorem{fact}[theorem]{Fact} \newtheorem*{fact*}{Fact} \newtheorem{claim}{Claim} \newtheorem*{claim*}{Claim} % \end{macrocode} % % \begin{macrocode} \theoremstyle{definition} \newtheorem{definition}[theorem]{Definition} \newtheorem*{definition*}{Definition} \newtheorem{example}[theorem]{Example} \newtheorem*{example*}{Example} % \end{macrocode} % % \begin{macrocode} \theoremstyle{remark} \newtheorem{remark}[theorem]{Remark} \newtheorem*{remark*}{Remark} % \end{macrocode} % % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % \end{environment} % % \begin{environment}{note} % % Someone else might also have a \env{note} environment. Be careful. % % \begin{macrocode} \ifx\note\@@undefined \newtheorem{note}[theorem]{Note} \newtheorem*{note*}{Note} \fi % \end{macrocode} % % \end{environment} % % \begin{macro}{\@qedhack} % % Make |\qed| idempotent. % % \begin{macrocode} \newif\if@qedsw \def\@qedhack{% \let\@qed@\qed% \global\@qedswtrue% \def\qed{\if@qedsw\global\@qedswfalse\expandafter\@qed@\fi}% } % \end{macrocode} % % \end{macro} % % \begin{environment}{proof} % % Now to hack the proof environment. % % \begin{macrocode} \renewenvironment{proof}[1][\proofname]{% \setcounter{claim}{0}% \par\normalfont% \ifdim\topsep<\parskip\topsep\parskip\fi% \ifdim\@topsepadd<\z@\@topsepadd\z@\fi% \trivlist\advance\itemindent\labelsep\let\makelabel\proofstyle% \advance\@topsep-\parskip% \advance\@topsepadd-\parskip% \@qedhack% \item[#1]% }{% \qed\endtrivlist% } % \end{macrocode} % \end{environment} % % \begin{macro}{\proofstyle} % % The |\proofstyle| macro is just a style hook for typesetting the `Proof' % label. % % \begin{macrocode} \providecommand\proofstyle[1]{\textit{#1.}} % \end{macrocode} % % \end{macro} % % Done. % % \begin{macrocode} % % \end{macrocode} % %^^A------------------------------------------------------------------------- % \section{Implementation of the theorem style} % % \begin{macrocode} %<*thmstyle> % \end{macrocode} % % \begin{macro}{\thmhead@margin} % % Firstly, a macro to typeset the theorem environment header, with the number % in the margin. % % \begin{macrocode} \def\thmhead@margin#1#2#3{% \thmnumber{\llap{#2{\normalsize\quad}}}% \thmname{#1}% \thmnote{ \the\thm@notefont(#3)}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\thm@headfont@margin} % % Now to decide on the header font. Definitely we want boldface; if the % documentclass (or \package{mdwfonts}) has decided on a different font % family for the headings, then we use that. % % \begin{macrocode} \def\thm@headfont@margin{% \fontseries{\bfdefault}% \ifx\headdefault\@@undfined\else\fontfamily\headdefault\fi% \selectfont% } % \end{macrocode} % \end{macro} % % \begin{macro}{\qedsymbol} % % Use the nice symbol if available. % % \begin{macrocode} \AtBeginDocument{\ifx\square\@@undefined\else\def\qedsymbol{$\square$}\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\proofstyle} % % Typeset `Proof' in bold face. % % \begin{macrocode} \def\proofstyle#1{{\thm@headfont@margin#1}} % \end{macrocode} % % \end{macro} % % \begin{macro}{\th@base} % \begin{macro}{\@endtheorem} % % The |\th@base| macro provides the basis for our theorem style. The % argument is something to do at the end of the environment. % % \begin{macrocode} \def\th@base#1{% \let\thmhead\thmhead@margin% \thm@headfont{\thm@headfont@margin}% \thm@headpunct{}% \advance\thm@postskip-\parskip% \@qedhack% \def\after@thm{#1}% \normalfont% } % \end{macrocode} % % Ah, but nobody actually does anything with |\after@thm|. Let's fix that. % % \begin{macrocode} \AtEndOfPackage{\def\@endtheorem{\after@thm\endtrivlist}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\th@plain} % \begin{macro}{\th@definition} % \begin{macro}{\th@remark} % % Now this is easy. The space hacking in |\th@remark| is straight from % \package{amsthm}. % % \begin{macrocode} \AtBeginDocument{ \def\th@plain{\th@base\relax\itshape} \def\th@definition{\th@base\qed} \def\th@remark{% \th@base\qed% \thm@preskip\topsep\divide\thm@preskip\tw@% \thm@postskip\thm@preskip% } } % % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \hfill Mark Wooding, \today % \Finale % \endinput