%%\message{} %% Lines commented by Aditya Mahajan start with two %% %% \ProvidesPackage{QED}[2003/06/11 right-justified end-of-proof mark]% %\ProvidesFile{QED.sty}% I don't understand what this is for %%======================================================================== %************************************************************************% %* *% %* Maybe you already have a \qed macro to put a little square *% %* on the right hand side at the end of a mathematical proof? *% %* *% %* IT'S PROBABLY MINE! *% %* *% %* Please compare yours with \parag@pushright below. *% %* *% %* This new file is compatible, it fixes the bugs, has extra *% %* features, and is maintained and portable. Please use it! *% %* *% %* NEW FEATURE \WillHandleQED and \HandleQED for environments *% %* which do not give access to the right hand side of the page. *% %* *% %* Now also available: \DefineStandardTheorems or *% %* \usepackage[define-standard-theorems]{QED} *% %* *% %************************************************************************% %========================================================================% % COPYRIGHT (C) 1993-2003 Paul Taylor. % You may use this file for any purpose. You may copy it on condition that % you do so in exactly the form in which it was supplied, make no charge % for the copy and impose the same conditions on the recipient. % This software is supplied ``as is'' without warranty, express or implied, % including but not limited to merchantability and fitness for any particular % purpose. No liability is accepted by the author, Queen Mary and Westfield % College, Imperial College or any third party for any direct or consequential % damages, however caused. % In all cases you must keep several backup versions of your files in a place % to which your machine cannot write, and you must check documents visually % before submitting the final version to a publisher or expensive printer. % WARNING: If you use this with Frank Mittlebach's "theorem.sty" you % MUST load theorem first, then QED, then do the \newtheorem commands. % Authoritative version: /pub/tex/contrib/pt/proofs/QED.sty % by anonymous FTP from: ftp.dcs.qmw.ac.uk % also CTAN: macros/generic/proofs/taylor/QED.sty % author/maintained by: Dr Paul Taylor % BUGS % ! You can't use `\unskip' in vertical mode. % from isolated \qed (ie as paragraph on its own) %========================================================================= % USER INTERFACE AND EXAMPLES (see also OPTIONS below) % LaTeX2e \usepackage options: see \DeclareOption commands below % theorems-as-commands roman-theorems italic-theorems % auto-QED explicit-QED number-theorems dont-number-theorems % black-square open-square % \begin{Proof} ... \end{Proof} % or \Proof ... \endProof % or \Proof ... \endproof % or \Proof ... \qed also \QED \QEF and \QEI % WARNING: \qed which doesn't follow \Proof will not print the square. % Each properly nested Proof/endProof pair gets a single % \qedsymbol at the end, on the far right hand side. % Unfortunately, this may still be in the wrong place % if the proof ends with a display or itemisation. % To solve this, \qed may be put *inside* the last substantive % environment; the \qedsymbol will be put at that point % (the visual end) and suppressed at the logical end of proof. % Examples: % \begin{Proof} \begin{Proof} % ... ... % \begin{eqnarray} \begin{itemize} % ... &=& ... \\ \item ... % .. &=& ... &\qed \item ... \qed % \end{eqnarray} \end{itemize} % \end{Proof} \end{Proof} % also works with $$...$$ and \[...\] displays, including fleqn.sty. % Unfortunately some environments, such as picture, do not allow this at all. % See the section "centering environments" below for the mechanism for % passing \qed to such an environment for special processing. % In fact \qed will only work in those environments which provide access to % the right hand side of the page. In other words, wherever you think % "\hfill\square" ought to work then \qed will; of course it is just because % that naive method doesn't work that this macro file is needed at all. % The macro was designed to solve the problem in the case of "unrestricted % horizontal mode" (ie at the end of a paragraph); it also works in $$ % displays by pretending to be an equation number. In most other cases it % basically does "\hfill\square" or "\hfill$\square$" and hopes for the best. % If you have to put \qed outside the environment, it may be appropriate to % put \vskip-\baselineskip before it, unless of course this would over-print. % There is, however, still a danger that TeX will break the page here. % This seems to be unavoidable if the environment ends with a \penalty. % The eqnarray example above does not in fact work: if you try it you'll % get "! Paragraph ended before \llap was complete" with LaTeX in a mess. % This is a very common place where you might want to put the end of proof % mark, and I also consider that the fourth column should be available for % "reasons" for equational steps. The following substitute for \eqnarray % allows this, whilst being compatible with automatic numbering. I have % proposed it to Rainer Sch\"opf for inclusion in LaTeX. If you want to % use it, please copy it to another file rather than uncommenting it here. % Don't forget to use \makeatletter or put it in a documentstyle (.sty) file. % % \def\eqnarray{\stepcounter{equation}\let\@currentlabel\theequation % \global\@eqnswtrue\m@th\global\@eqcnt\z@\tabskip\@centering\let\\\@eqncr % $$\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering$\displaystyle % \tabskip\z@{##}$&\global\@eqcnt\@ne\hskip 2\arraycolsep \hfil${##}$\hfil % &\global\@eqcnt\tw@\hskip2\arraycolsep$\displaystyle\tabskip\z@{##}$\hfil % \tabskip\@centering&% % \global\@eqcnt\thr@@\hbox to\z@\bgroup\hss##%*** instead of "\llap{##}" % \tabskip\z@\cr}% % \def\@@eqncr{\let\@tempa\relax % \ifcase\@eqcnt \def\@tempa{& & &}\or \def\@tempa{& &}% % \or\def\@tempa{&}\else\@eqnswfalse%*** instead of "\else\def\@tempa{&}" % \fi\@tempa\if@eqnsw\@eqnnum\stepcounter{equation}\fi % \egroup%*** added, to match \bgroup in fourth cell of preamble % \global\@eqnswtrue\global\@eqcnt\z@\cr} % Why can't we do all of this with \endProof? Because by that stage % the damage has been done: the environments, paragraphs or % displays have already been closed and their \hbox'es added % to the current vertical list, and cannot be removed for % alteration if this is the current page. % Even if you don't need to put \qed inside an inner environment % to avoid a blank line, it's still a good idea to do so, because % otherwise it's possible that intervening end-of-environment % material may allow TeX to put the mark on the next page. % This file may be called QED.sty, QED.tex, qed.sty or qed.tex. % It may be loaded using \input, \usepackage or as a \documentstyle option, % as it is careful to handle the \catcode of @ appropriately. % If you don't use theorem.sty, this file instead provides options to use % commands to begin theorems, instead of enclosing them in environments, % and to suppress numbering and italicisation. A rudimentary version of % \newtheorem for plain TeX is also implemented (always using commands % rather than environments). % At the end of the file some useful \newtheorem % commands are listed but not executed. % NB \Theorem\Proof\endProof\qed will print the second square, whereas % \begin{Theorem}\end{Theorem}\begin{Proof}\end{Proof}\qed will not. %========================================================================= % Make @ letter, saving its old code to restore at the end of this file. % Look for this towards the end of the file if you think something's missing! % "plain.tex" defines \lq as a synonym for back quote (character constant); % I use it to avoid corruption when sending TeX files by email via BITNET. % \edef\qedrestoreat{\noexpand\catcode\lq\noexpand\@=\the\catcode\lq\@}%% % \catcode\lq\@=11 % in LaTeX, \protect the user commands; % in plain TeX, ensure that it is defined. % \ifx\protect\undefined\let\protect\relax\fi %========================================================================= % OPTIONS % These are the user commands. \unprotect %% \def\qed{\protect\@qed{$\qedsymbol$}}% suppressible printing of \qedsymbol %% % \pushright takes an argument, which it always prints %% % it is (re)defined by \WillHandleQED and \UnHandleQED below (12.4.94) %% %% % theoremata in Euclid needed proof: "which was to be shown" %% \def\QED{\protect\@qed{{\rm Q.E.D.}}}% "quod erat demonstrandum" %% %% % but problemata needed construction: "which was to be found" %% \def\QEI{\protect\@qed{{\rm Q.E.I.}}}% "quod erat inveniendum" %% %% % alternatively: "which was to be done/made" %% \def\QEF{\protect\@qed{{\rm Q.E.F.}}}% "quod erat faciendum" %% %% % a LaTeX environment %% \def\Proof{\protect\@Proof}\def\endProof{\protect\@endProof}% %% \let\proof\Proof\let\endproof\endProof %% %% %% % These are the user-settable parameters. %% %% % The actual (maths) symbol used by \qed %% \def\qedsymbol{\square}% PLEASE NOTE: this is in the AMS symbols font. %% %\def\qedsymbol{\blacksquare}% use one of these instead %% %\def\qedsymbol{\hbox{\rm Q.E.D.}}% if you prefer %% %\def\qedsymbol{\dashv}% this is what the Journal of Symbolc Logic likes. %% %% % This is the text used by \Proof. %% % A new paragraph is begun without indentation. %% % Change it to {\kern\parindent\sc D\'emonstration: } if you like. %% \def\TheWordProof{\bf Proof\enskip} %% %% % This is the font command used for the text of proofs %% \def\ProofFont{} %% %% % The command \AutoQEDtrue causes a \qed in \end{Theorem}, so you do %% % \begin{Theorem} ... \begin{Proof} ... \end{Proof} \end{Theorem} %% % but if you omit the proof, the statement gets a little square at the end. %% \newif\ifAutoQED\AutoQEDfalse %% %% % The remaining options are redundant with theorem.sty %% % so are not defined if this has been loaded. %% \newif\ifNumberResults %% \ifx\theorem@style\undefined %% % %% % How to print the name (#1), number (#2) and attribution (#3) of a theorem. %% \NumberResultstrue %% % If the number (#2) is absent, "\unskip" removes the %% % unwanted space "\ " from before it (16 Feb 1993). %% \def\TheoremHeader#1#2#3{\bf #1\ifNumberResults\ #2\unskip\fi#3} %% % %% % This is the font command used for the text of theorem enunciations %% % change to {\rm} or {\small} if you like. %% \def\TheoremFont{\it} %% % %% % The command \NumberResultsfalse will suppress theorem numbering. %% % %% % The command \TheoremsAsCommands will allow you to write %% % \Theorem instead of \begin{Theorem} ... \end{Theorem}. %% % In this case italicisation is suppressed by default. %% % To do this with theorem.sty would involve rewriting the substyles. %% % %% % WARNING: if you subsequently redefine \TheoremFont, and use the command %% % instead of the environment, the font will remain in force afterwards! %% \fi %% %% % The document style option "theorems-as-commands" will allow you to %% % write \Theorem instead of \begin{Theorem} ... \end{Theorem}. %% % Moved here from further down. 10 Jan 1994 %% \def\TheoremsAsCommands{% %% \def\TheoremFont{}% suppress italicised theorems. %% \def\begin@theorem##1{% %% \thmbreak %% \save@set@qed % enable \qed %% \noindent{##1}% the name %% %\TheoremFont % italicise at your own risk! %% }% %% %\def\thmbreak{\par\removelastskip\smallskip}% %% \def\thmbreak{\par\bigskip}% %% \def\@endtheorem{\ifAutoQED\qed\fi\restore@qed}% %% }% %% %% %\expandafter\let\csname ds@theorems-as-commands\endcsname\TheoremsAsCommands %% %========================================================================= % If you already have a macro called \qed, \endproof or \pushright % which is laid out in a similar way to the following two definitions % (but with \hbox@pushright incorporated) then it is almost certainly % my code, which has been copied anonymously via numerous people since % my Cambridge PhD thesis in August 1986. Belated acknowledgements to % Chris Thompson of the Cambridge University Computing Service for his % help with my early attempts at TeX, in particular this problem. % The complexity of the macro necessary to get a little box on the % right-hand-side at the end of a proof is amazing. It really does % have to be this long! Otherwise you're liable to get it at the % beginning of the next line, or even on the next page. \def\parag@pushright#1{{% set up \parfillskip=0pt % so \par doesnt push \square to left \widowpenalty=10000 % so we dont break the page before \square \displaywidowpenalty=10000 % ditto \finalhyphendemerits=0 % TeXbook exercise 14.32 % % horizontal %\leavevmode % not needed since we now only use it in hmode \hbox@pushright % this used to be incorporated #1% % the end-of-proof mark (or whatever) % % vertical \par}}% % build paragraph with the above parameters \def\hbox@pushright{% horizontal \unskip % remove previous space or glue \nobreak % don't break lines \hfil % ragged right if we spill over \penalty50 % discouragement to do so \hskip.2em % ensure some space \null % anchor the following \hfill \hfill % push \square to right }% % Ideally \endProof should do all this. We should be able to add the symbol % to the last line after the paragraph, display or whatever other structure % has been completed and we've returned to vertical mode. This isn't possible % on the current page (outer vmode) because \lastbox doesn't work there. % But \ifinner is true inside a \vbox, \vadjust or \insert (LaTeX \parbox, % minipage, figure or table), and in these circumstances we can use \lastbox. % We would have to strip & restore glue & penalties (\insert, \mark and \write % are obstacles to this) to get access to the last line (box), which may % still not have the correct baseline. We could check its natural width % against the page width, but if we re-set it, centering and (right) % justification might be disturbed. Is this worth the trouble? \def\vbox@pushright#1{\expandafter\message % (2 Jan 1994) {QED.sty could be improved in this case (line \the\inputlineno): please ask}% \page@pushright{#1}}% % Using this method the Proof environment could be implemented by collecting % the entire proof in its own \vbox, modifying that and \unvbox'ing it to the % current page. This approach may lead to the following problems: % (i) footnotes, floats, marginpars, labels and index items may be lost; % (ii) overflow of TeX's main memory, especially if \end{Proof} is missing; % (iii) I don't know how page-breaking would be handled. %======================================================================== % Switch to enable/suppress \qedsymbol; since suppression may be done % within a nested scope it must be global, so we do our own save/restore % in a symbol which is local to the Proof environment. %% \newif\if@qed\@qedfalse %% \def\save@set@qed{\let\saved@ifqed\if@qed\global\@qedtrue}% %% \def\restore@qed{\global\let\if@qed\saved@ifqed} %% %% % prefer proofs with statements if possible - hence \penalty700 %% % the only essential part of this is \save@set@qed %% \def\@Proof{% %% \par\removelastskip\smallskip\penalty700 %% \save@set@qed %% \noindent\ProofFont{\TheWordProof\enskip}% %% }% %% %% \def\@endProof{% %% \qed\restore@qed %% \penalty-700 \smallskip %% } %% %% \def\@qed#1{\check@pt@fm@thm %% \if@qed % have we already done \qed? %% \global\@qedfalse\pushright{#1}% - no - do it now, but not again %% \else\ifhmode\ifinner\else\par\fi\fi% - yes - just end paragraph, if any %% \fi} % \pushright{text} always prints its argument, on the far right, in text mode \unexpanded\def\pushright#1{% \ifvmode \ifinner\vbox@pushright{#1}% vertical mode (see comments above) \else \page@pushright{#1}% \fi \else\ifmmode\maths@pushright{\hbox{#1}}% maths (force a text argument) \else\ifinner\hbox@pushright{#1}% inside an \hbox \else\parag@pushright{#1}% in a paragraph \fi \fi \fi }% (22 Feb 1993) removed extra {} which would destroy our \] below % In the \hbox and maths cases we are really at the mercy of the environment. % Assuming that we have $\qed$ simply embedded in a paragraph, the horizontal % processing by \hbox@pushright will at least make sure that the square isn't % at the beginning of the line, but we can't stop it being on the next page. % However it is more likely that the reason why we're in maths mode is that % we're inside an eqnarray or similar, in which case \hfill will do its best % to put the square on the right of the available space. (See \vadjust below.) \def\maths@pushright#1{% \ifinner \hbox@pushright{#1}% \else \eqno#1% use TeX's right equation number feature (\eqno) within $$. \def\]{$$\ignorespaces}% suppress LaTeX's error checking (HACK!) \fi }% (22 Feb 1993) removed extra {} which would destroy our \] above % outer vertical mode (the current page) % There's very little we can do in these circumstances! % Penalties still allow the page to be broken. % If the user has put negative glue in, leave it alone. (15 Feb 1994) \def\page@pushright#1{% 18 Jan 1994 %\unpenalty % ineffective \skip@\lastskip %% \ifdim\skip@>\z@ %% \unskip % remove \parskip, but only (15 Feb 1994) if it's positive %% % This causes and error (AM) %% \else\skip@\z@\relax %% %% \fi %\unpenalty % TeX won't let me do this \dimen@\baselineskip \advance\dimen@-\prevdepth % save \prevdepth to make a strut \nobreak % don't break the page here \nointerlineskip \hbox to\hsize{% \setbox\z@\null \ifdim\dimen@>\z@\ht\z@\dimen@\fi % simulate \baselineskip \box\z@ \hfill #1}% %% \vskip\skip@ % replace old \parskip }% % An idea that didn't work: see TeXbook p188. (16 Feb 1993) % Use \predisplaysize to find out the width of the previous box, % in the case where it has already been completed. % But this can only be used inside displays ($$), and a display in % vertical mode begins a paragraph first, so we end up with % \predisplaysize=\parindent+2em whatever happened in the previous % paragraph. % Another idea: it may be worth trying \vadjust, if only to insert \nobreak. % The problem with this is that if we are too deeply nested in horizontal % or maths lists, the adjustment may not be able to find its way out to the % enclosing vertical list. In the case of array-like environments, it will % appear (assuming it manages to get out) after the current row of the array. %=========================================================================== % We have to add to the theorem environments the commands to enable \qed. % This is done by re-defining \@thm#1#2. % Note that Mittelbach's theorem.sty re-defines \@thm and \@endtheorem, so % that must be loaded before us, otherwise our changes will get over-written % and \qed will never be enabled. % Paul.sty didn't use this method of gaining control inside a theorem, % whereas it did define \qed and \pushright, so here is the one place % where we can check for it. %% \ifx\nonqed@thm\undefined % otherwise double loading causes a loop 22 Feb 1993 %% \let\nonqed@thm\@thm % save original %% \let\nonqed@endthm\@endtheorem %% \fi %% %% \def\@thm{\save@set@qed\nonqed@thm}% %% \def\@endtheorem{\ifAutoQED\qed\fi\restore@qed\nonqed@endthm}% %=========================================================================== % "CENTERING" ENVIRONMENTS - % those which don't give their contents access to the right hand side % of the page, such as center, picture, ... (12 April 1994) % Each individual environment (both the standard ones and those defined % by the user) needs to co-operate in order to make \qed and \pushright work. % It is not the business of this package to rewrite LaTeX in this way, % but the following mechanism may be inserted in to other environments. % - put \WillHandleQED in the \begin part of the environment definition; % then if a \qed occurs in the body of the environment it is stored % in \QEDbox until... % - \HandleQED anywhere in the \end part of the environment definition % (even inside dollars, braces or another environment) prints it. % % For example: % \newenvironment{qedpicture}% % {\begin{picture}\WillHandleQED}% % {\put(0,0){\HandleQED}\end{picture}} % % To make this compatible with *not* loading QED.sty, % add the following to macro files which use \WillHandleQED and \HandleQED: % \ifx\WillHandleQED\undefined % \let\WillHandleQED\relax % \let\HandleQED\relax % \let\UnHandleQED\relax % if you use it % \let\QEDbox\voidb@x % must have \makeatletter here! % \fi % % \UnHandleQED restores normal processing; this may be useful for % the minipage environment, which has its own notion of "right hand side" % of the page. % % The width of the saved \qed is available for testing as \wd\QEDbox %% \newbox\qed@box % the box in which to save \qed for special handling %% %% \def\WillHandleQED{\relax %% \ifx\HandleQED\nohandle@qed %% % no enclosing environment has declared \WillHandleQED %% \def\pushright{\global\setbox\qed@box\hbox}% \qed will be saved %% \let\QEDbox\qed@box % point at the right box %% \def\HandleQED{\unhbox\QEDbox}% print it %% \aftergroup\check@handle@qed % check that this really gets done %% \else %% % an enclosing environment already wants to catch \qed %% % \HandleQED doesn't print anything - let the saved \qed pass through %% \let\QEDbox\voidb@x % by pointing at an empty box %% \fi} %% %% \def\nohandle@qed{% %% \errhelp{One of them is missing: see QED.sty.}% %% \errmessage{This environment uses \string\WillHandleQED\space and %% \string\HandleQED\space incorrectly}} %% %% \def\check@handle@qed{\relax %% \ifvoid\qed@box\else\expandafter\nohandle@qed\fi} %% %% \def\UnHandleQED{% %% \let\HandleQED\nohandle@qed %% \let\QEDbox\voidb@x %% \def\pushright{\protect\@pushright}}% %% %% \UnHandleQED %% %% %=========================================================================== %% % If theorem.sty hasn't been loaded, arrange to check it again in \@qed. %% % And check (then) whether you've actually defined \square. %% % changed 2 June 1993: don't define it now, as that would confuse amssymb.sty %% \ifx\theorem@style\undefined %% \def\check@pt@fm@thm{\relax %% \ifx\square\undefined %% \gdef\square{\bigcirc %% \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}% %% \errmessage{\string\square\space is an AMS symbol}% %% \global\let\square\bigcirc}% %% \fi %% \ifx\theorem@style\undefined %% \global\let\check@pt@fm@thm\relax %% \else\errhelp={The macros \@thm and \@endtheorem need to be re-defined.}% %% \errmessage{QED.sty must be loaded AFTER theorem.sty but before %% using \string\newtheorem}% %% \fi %% \global\let\check@pt@fm@thm\relax %% }% %% \else %% \def\check@pt@fm@thm{% %% \ifx\square\undefined %% \def\square{\bigcirc %% \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}% %% \errmessage{\string\square\space is an AMS symbol}% %% \global\let\square\bigcirc}% %% \fi %% \global\let\check@pt@fm@thm\relax %% }% %% \fi %% %% %=========================================================================== %% %% \def\goalbreak#1{% break unless there's #1 left on the page %% \par\removelastskip %% \dimen0\pagegoal\advance\dimen0-\pagetotal %% \ifdim\dimen0>0pt %% \ifdim\dimen0<#1\relax %% \newpage %% \fi\fi %% } %% %% \def\allowlines#1{\goalbreak{#1\baselineskip}} %% %% %=========================================================================== %% % Define some standard ``theorem'' types. %% %% \def\DefineStandardTheorems{% %% % %% % First set up uniform numbering in LaTeX; %% % don't use this in plain TeX because this usage of \newcommand is not %% % supported and we have already done by hand what it would do in LaTeX, %% % viz to define the macro \theResult and the count \c@Result. %% \relax\ifx\@@thm\undefined %% \newtheorem{Result}{Result}[subsection]% %% \@addtoreset{Result}{section}% %% \ifx\chapter\undefined\else\@addtoreset{Result}{chapter}\fi %% \fi %% % %% \let\theUnnumbered\relax\countdef\c@Unnumbered255 \def\p@Unnumbered{}% %% % %% \def\mkthm##1{\newtheorem{##1}[Result]{##1}}% %% % %% \mkthm{Answer} %% \mkthm{Answers} %% \mkthm{Axiom} %% \mkthm{Axioms}% %% \mkthm{Assumption}% %% \mkthm{Assumptions}% %% \mkthm{Conjecture}% %% \mkthm{Conjectures}% %% \mkthm{Construction}% %% \mkthm{Constructions}% %% \mkthm{Convention}% %% \mkthm{Conventions}% %% \mkthm{Corollary}% %% \mkthm{Corollaries}% %% \mkthm{Counterexample}% %% \mkthm{Counterexamples}% %% \mkthm{Definition}% %% \mkthm{Definitions}% %% \mkthm{Example}% %% \mkthm{Examples}% %% \mkthm{Exercise}% %% \mkthm{Exercises}% %% \mkthm{Fact}% %% \mkthm{Facts}% %% \mkthm{Lemma}% %% \mkthm{Lemmas}% %% \mkthm{Lemmata}% %% \mkthm{NB}% %% \mkthm{Notation}% %% \mkthm{Notations}% %% \mkthm{Note}% %% \mkthm{Observation}% %% \mkthm{Observations}% %% \mkthm{Problem}% %% \mkthm{Problems}% %% \mkthm{Proposition}% %% \mkthm{Propositions}% %% \mkthm{PS}% %% \mkthm{Remark}% %% \mkthm{Remarks}% %% \mkthm{Question}% %% \mkthm{Questions}% %% \mkthm{Theorem}% %% \mkthm{Theorems}% %% \mkthm{Thesis}% %% \mkthm{Theses}% %% \mkthm{Warning}% %% \mkthm{Warnings}% %% } %% %% %=========================================================================== %% % Interaction with LaTeX2e (2 Jan 1994) %% %% % \DeclareOption{roman-theorems}{\def\TheoremFont{\rm}}% %% % \DeclareOption{italic-theorems}{\def\TheoremFont{\it}}% %% % \DeclareOption{theorems-as-commands}{\TheoremsAsCommands}% %% % \DeclareOption{auto-QED}{\AutoQEDtrue}% %% % \DeclareOption{explicit-QED}{\AutoQEDfalse}% %% % \DeclareOption{number-theorems}{\NumberResultstrue}% %% % \DeclareOption{dont-number-theorems}{\NumberResultsfalse}% %% % \DeclareOption{black-square}{\def\qedsymbol{\blacksquare}}% %% % \DeclareOption{open-square}{\def\qedsymbol{\square}}% %% % \DeclareOption{define-standard-theorems}{\DefineStandardTheorems}% %% %% %=========================================================================== %% % If Mittelbach's theorem.sty is loaded, skip the rest of the file. %% \ifx\theorem@style\undefined\else %% \ProcessOptions %% \qedrestoreat %% \expandafter\endinput %% \fi %% %=========================================================================== %% %% % Allow the user to suppress italicisation and numbering. %% %% % The following two macros are called by LaTeX to begin a theorem %% % respectively with and without an optional (``attribution'') argument. %% % It is clear from latex.tex that they are intended to be customised. %% % The code common to the two has been taken out as \begin@theorem and %% % \TheoremHeader. Of these, the former is re-defined by \TheoremsAsCommands. %% %% \def\@opargbegintheorem#1#2#3{\begin@theorem{\TheoremHeader{#1}{#2}{ (#3)} }} %% %% \def\@begintheorem#1#2{\begin@theorem{\TheoremHeader{#1}{#2}{} }} %% %% \def\begin@theorem#1{% %% \trivlist\item[\hskip\labelsep {#1}]% % LaTeX likes this method. %% \TheoremFont % Italicise the enunciation %% \ifx\ProofFont\empty\def\ProofFont{\rm}\fi % but not any nested proof. %% }% %% %% %% %%% Here's what LaTeX (92/1/14) does: %% %%%% RmS 91/08/14 Moved \it after \item to make it work with NFSS %% %%\def\@begintheorem#1#2{\trivlist \item[\hskip \labelsep{\bf #1\ #2}]\it} %% %%\def\@opargbegintheorem#1#2#3{\trivlist %% %% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]\it} %% %%\def\@endtheorem{\endtrivlist} %% %% %=========================================================================== %% % If we're running under LaTeX, skip the rest of the file. %% \ifx\newtheorem\undefined\else %% \ProcessOptions %% \qedrestoreat %% \expandafter\endinput %% \fi %% %=========================================================================== %% %% % This implements a rudimentary version of \newtheorem for plain TeX. %% % Only the unattributed theorems and the %% % declarations \newtheorem{Theorem}[Result]{Theorem} and %% % \newtheorem{Convention}[Unnumbered]{Convention} are supported. %% % The numbering is based on the counts \chapternumber, \sectionnumber %% % and \subsectionnumber, which it is up to you to define with \newcount. %% % It's also up to you to reset \c@Result at the beginning of each section. %% %% % Form the number: (chapter).(section).(subsection).(#1) %% % where any of the first three parts which is zero %% % negative or undefined is omitted. %% \def\ther@sult#1{% %% \ifx\chapternumber\undefined\else %% \ifnum\chapternumber>0 \number\chapternumber.\fi\fi %% \ifx\sectionnumber\undefined\else %% \ifnum\sectionnumber>0 \number\sectionnumber.\fi\fi %% \ifx\subsectionnumber\undefined\else %% \ifnum\subsectionnumber>0 \number\subsectionnumber.\fi\fi %% \expandafter\number\csname c@#1\endcsname}% %% %% % plain version of LaTeX's \@thm %% \def\plain@thm#1#2{% #1=counter, #2=text %% \save@set@qed %% \expandafter\advance\csname c@#1\endcsname1 %% \@begintheorem{#2}{\csname the#1\endcsname}% %% }% %% %% % Rudimentary \newtheorem %% \def\newtheorem#1[#2]#3{% #1=command, #2=counter, #3=text %% % %% % \def\#1{\plain@thm{#2}{#3}} %% \expandafter\def\csname #1\endcsname{\plain@thm{#2}{#3}}% %% % %% % \def\end#1{\@endtheorem} %% \expandafter\def\csname end#1\endcsname{\@endtheorem}% %% % %% % if \c@#2 is not defined %% % \newcount\c@#2 %% % \def\the#2{\ther@sult{#2}} %% \expandafter\ifx\csname c@#2\endcsname\relax %% \expandafter\expandafter\csname newcount\endcsname %% \csname c@#2\endcsname %% \expandafter\def\csname the#2\endcsname{\ther@sult{#2}}% %% \fi %% }% %% %% \TheoremsAsCommands %% %% \qedrestoreat\endinput %% %% %=========================================================================== %% % BUGS %% % \item\qed\end{letterlist} puts the square above the item label. %% %% % ! You can't use `\unskip' in vertical mode. %% % from \qed in a paragraph on its own. %% \protect