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