diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:55:29 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:55:29 +0000 |
commit | 48243fdbbe15cb58c4136497707e37637e7d4100 (patch) | |
tree | 9de6f823e6a2520490bab3ea3f0828852d1a8db3 /Master/texmf-dist/source/latex/ncctools/nccthm.dtx | |
parent | f7ffde8f769cd6f1d473ae231d219b99b3fa5263 (diff) |
trunk/Master/texmf-dist/source/latex/ncctools
git-svn-id: svn://tug.org/texlive/trunk@408 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/ncctools/nccthm.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/ncctools/nccthm.dtx | 1109 |
1 files changed, 1109 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/ncctools/nccthm.dtx b/Master/texmf-dist/source/latex/ncctools/nccthm.dtx new file mode 100644 index 00000000000..033ec5d7d84 --- /dev/null +++ b/Master/texmf-dist/source/latex/ncctools/nccthm.dtx @@ -0,0 +1,1109 @@ +% \iffalse +%% +%% File: nccthm.dtx Copyright (C) 2002--2004 by Alexander I. Rozhenko +%% +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{nccthm} +%<package> [2004/12/16 v1.1 NCC Extention to Theorems (NCC)] +% +% \changes{v1.02}{2002/01/31}{This version is uploaded to CTAN} +% \changes{v1.03}{2002/02/17}{Break mode is turned off globally} +% \changes{v1.04}{2002/05/19}{An extra group added in theorem headers +% to scope font changes} +% \changes{v1.05}{2002/06/07}{Bug in referencing in APAR mode fixed} +% \changes{v1.06}{2003/01/13}{Spaces after label are ignored now} +% \changes{v1.07}{2004/04/08}{Improvements in interpreting spaces after label} +% \changes{v1.1}{2004/12/16}{In apar mode, ignore indent option if margin option used} +% \changes{v1.1}{2004/12/16}{Documentation was prepared} +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{desclist} +\usepackage[blackqed,whiteqed]{nccthm} +\countstyle[apar]{section} +\newtheorem{theorem}{Theorem} +\newtheorem*{atheorem}{Theorem} +\TheoremBreakStyle +\newtheorem{definition}{Definition}[remark] +\TheoremNoBreakStyle +\newtheorem{lemma}[theorem]{Lemma} +\newcommand\Line{\qef\hrule height .4pt width \linewidth\nobreak + \qef} +\GetFileInfo{nccthm.sty} +\begin{document} +\title{The \textsf{nccthm} package\thanks{This file + has version number \fileversion, last + revised \filedate.}} +\author{Alexander I. Rozhenko\\rozhenko@oapmg.sscc.ru} +\date{\filedate} +\maketitle +\DocInput{nccthm.dtx} +\end{document} +%</driver> +% \fi +% +% \section{Overview} +% +% This is yet another extension of the \LaTeX\ theorem making +% environment. Further, we'll call the \textit{theorem\/} +% any mathematical statement consisting of one or more paragraphs, +% and starting with a header containing an optional number. +% A theorem is set off from the main text with an extra space. +% Its title and body are often emphasized with a font change. +% +% In comparison with the |theorem| package by Frank Mittelbach and the +% |amsthm| package by American Mathematical Society, the +% |nccthm| package is distinct in the following: +% +% \paragraph{1} All new theorem environments generated with the +% |nccthm| package use the \textit{dynamic counters\/} (see |dcounter| +% package from this bungle for more details). As a result, this allows +% a package writer to generate predefined theorems +% and do not think on how they will be numbered, because the +% decision is later made by a user. +% For example, if you want all theorems to have enumeration +% subordinated to sections, you need to write down the command +% \begin{quote} +% |\countstyle{section}| +% \end{quote} +% in the preamble. In this case, counters of all new theorems will be +% set to zero at the beginning of every section and their enumeration +% will be composed from the section number and the theorem counter number +% itself. You can also change a enumeration style for concrete +% counters (not only for dynamic counters) with the |\countstyle| +% command specifying the list of counters in its optional parameter. +% For example, if you prepare a book and want to subordinate +% the equation and table counters to sections (they are subordinated to +% chapters by default), write down in the preamble the following +% \begin{quote} +% |\countstyle[equation,table]{section}| +% \end{quote} +% The last example: to make a plain enumeration of sections +% and reject their dependance on any other counter, write down +% in the preamble |\countstyle[section]{}|. +% +% \paragraph{2} We have divided all theorem modification features into +% three orthogonal groups. +% +% A \textit{type\/} defines font shapes used in the theorem. +% Two types are predefined: \textit{theorem\/} and \textit{remark}. +% You can define more types or redefine existing types. +% +% A \textit{mode\/} defines the precedence of number in the header. +% In standard mode, a number goes after a theorem title. +% The reverse mode (number starts header), named here the +% \textit{APAR\/} mode, is special. All theorems using this mode +% are counted with the same |apar| counter. To generate theorems +% in the standard mode, the |\newtheorem| command is used. +% The |\newtheorem*| command is used for generation \textit{apar\/} +% theorems. +% +% A \textit{style\/} specifies the appearance of theorems. +% It consists of three modifiers: \textit{breaking}, +% \textit{indentation}, +% and \textit{marginal numbering}. The breaking modifier determines +% the separation of theorem header from theorem body (run-in header +% or line break after header). The indentation modifier has two +% values: \textit{noindent\/} and \textit{parindent}. It +% defines an indentation style of a theorem header. +% The marginal numbering modifier affects on apar theorems: +% in \textit{margin\/} style, the number of an apar theorem +% is typed on margins; in \textit{nomargin\/} +% style, the number starts a paragraph. +% +% The breaking modifier is controlled with special commands but other +% modifiers are specified with package options. +% +% \paragraph{3} We do not base the implementation of theorems +% on the |trivlist| environment. This allows us to use two methods +% of theorem markup: environment-like markup (|\begin{theorem}| \ldots\ +% |\end{theorem}|) or command-like markup (|\theorem| \ldots |\qef|). +% The |\qef| command is used as the end of any theorem. It resets the +% font to the normal font and produces a vertical skip. +% The command-like markup is useful in apar theorems. +% +% \paragraph{4} Service commands are introduced. Using package options +% you can select a type of Q.E.D.\ symbol: black or white. You can use +% both of them. The |\proof| command starts a proof of statement. +% We have no |proof| environment, because the proof is prepared in +% the normal font. To complete a proof, use |\qed| or |\qef| +% (the first one additionally prints the right adjusted Q.E.D. symbol). +% You can easy customize delimiters of theorem and proof headers. +% +% \section{Quod Erat Demonstrandum} +% +% The Q.E.D. symbol is usually used at the end of proof of a +% math statement. Sometimes, another symbol finishes a math +% statement itself. The package allows using two types of Q.E.D. +% symbols: black (\blackqedsymbol) and white (\whiteqedsymbol). +% +% \DescribeMacro\qedsymbol +% The default Q.E.D. symbol is white. It is printed with the +% |\qedsymbol| command. +% +% \DescribeMacro\qed +% \DescribeMacro\qef +% The |\qed| command is used to finish a proof. It prints +% right-adjusted Q.E.D. symbol and applies the |\qef| command +% (it finishes this paragraph). +% The |\qef| command finishes a paragraph, +% changes the current font to the normal font, and skips +% a |\paragraph|-like vertical space. +% \qed +% +% \DescribeMacro{\qed*} +% The star-form of |\qed| command prints the Q.E.D. symbol +% but not applies the |\qef| command. +% +% The usage of the above mentioned commands at the end of +% proof is the following: if the proof end with an ordinary +% paragraph, use the |\qed| command at its end; if the +% proof ends with a list, use the |\qed*| command at +% the end of the last list item and the |\qef| +% command after the end of list; and if the proof ends +% with a display formula, use the |\qedsymbol| command +% as its tag (|\tag*{\qedsymbol}| when use the +% |amsmath| package). +% +% +% \DescribeMacro{\blackqed} +% \DescribeMacro{\blackqedsymbol} +% If you load the package with the `|blackqed|' option, two +% additional commands are generated, |\blackqedsymbol| and |\blackqed|. +% The default |\qedsymbol| and |\qed| commands are let to be +% equal to their black versions. +% +% \DescribeMacro{\whiteqed} +% \DescribeMacro{\whiteqedsymbol} +% Analogously, the `|whiteqed|' option generates the +% |\whiteqedsymbol| and\linebreak |\whiteqed| commands and lets +% the default |\qedsymbol| and |\qed| commands to be +% equal to their white versions. +% +% If both these options are used, the default +% |\qedsymbol| and |\qed| commands are let to be equal +% the version loaded last. For example, the following command +% loads both versions of Q.E.D. and lets the white +% version to be the default version: +% \begin{quote} +% |\usepackage[blackqed,whiteqed]{nccthm}| +% \end{quote} +% +% \section{Other Package Options} +% +% The package loads options in the order they are written +% in the options list. Along with the `|blackqed|' and `|whiteqed|' +% options described above, the following options are available: +% \begin{desclist}{\tt}{\hfill}[nomargin] +% \item[noindent] theorems are typed without indentation; +% \item[indent] theorems are typed with paragraph indentation; +% \item[nomargin] numbers for theorems in apar mode are typed normally; +% \item[margin] numbers for theorems in apar mode are typed on margin. +% \end{desclist} +% +% The default options are |noindent| and |nomargin|. The following +% examples show how the combinations of |(no)indent| and |(no)margin| +% options interact. +% +% \liketheorem{Theorem}{1} The standard theorem in the |noindent + nomargin| style.\qef +% \likeremark*{Remark} The apar theorem in the |noindent + nomargin| style.\qef +% \makeatletter\NCC@thmindenttrue\NCC@thmmarginfalse\makeatother +% \liketheorem{Theorem}{2} The standard theorem in the |indent + nomargin| style.\qef +% \likeremark*{Remark} The apar remark in the |indent + nomargin| style.\qef +% \makeatletter\NCC@thmindentfalse\NCC@thmmargintrue\makeatother +% \liketheorem*{Theorem} The apar theorem in the |noindent + margin| style.\qef +% \makeatletter\NCC@thmindenttrue\NCC@thmmargintrue\makeatother +% \likeremark*{Remark} The apar remark in the |indent + margin| style.\qef +% \makeatletter\NCC@thmindentfalse\NCC@thmmarginfalse\makeatother +% +% As you can see, mixing of all these styles in the same document +% leads to bad results. This is the reason why these styles are +% implemented using options. +% +% As you can also see from the last example, +% the |indent| style is ignored for apar theorems typed in +% the |margin| style. +% +% \section{Structure and Types of Theorems} +% +% The structure of a theorem is the following: +% \begin{desclist}{}{\hfill}[\meta{normal-header}\quad] +% \item[\meta{theorem}] \meta{header} \meta{space-or-break} \meta{body} +% \item[\meta{header}] \meta{normal-header} \verb+|+ \meta{apar-header} +% \item[\meta{normal-header}] \meta{title} \oarg{number} \oarg{comment} \meta{after-char} +% \item[\meta{apar-header}] \meta{apar-tag} \meta{title} \oarg{comment} \meta{after-char} +% \end{desclist} +% A theorem type controls the appearance of the following elements +% of theorems: \meta{title}, \meta{comment}, and \meta{body}. +% The \meta{number} element inherits the style from \meta{title}. +% The \meta{after-char} element inherits either the style of \meta{comment} +% if it presents or the style of \meta{title} otherwise. The style of \meta{apar-tag} +% is controlled with the special way and will be described later. +% +% \DescribeMacro{\newtheoremtype} +% \DescribeMacro{\renewtheoremtype} +% The package provides the following theorem type generation commands: +% \begin{quote} +% |\newtheoremtype|\marg{type}\marg{title-style}\marg{comment-style}\marg{body-style}\\ +% |\renewtheoremtype|\marg{type}\marg{title-style}\marg{comment-style}\marg{body-style} +% \end{quote} +% The \meta{type} parameter is a type name. Other parameters +% specify fonts to be used in the corresponding parts of a +% theorem. +% Font style parameters are considered to be used after the +% |\normalfont| command. +% +% \DescribeMacro{\like...} +% When a new theorem type is generated, the |\like|\meta{type} command +% is created for it. It has two forms: normal and starred. The normal version +% prints a theorem in the standard mode and the starred version prints +% an apar theorem. The syntax: +% \begin{quote} +% |\like|\meta{type}\marg{title}\marg{number}\oarg{comment}\\ +% |\like|\meta{type}*\marg{title}\oarg{comment} +% \end{quote} +% The starred version of this command has no \meta{number} argument, because +% it is numbered using the |apar| counter. +% If the \meta{number} argument in the non-starred version of this command +% is empty, the number will be omitted in the theorem header. +% If the \meta{comment} argument presents, the comment is typed enclosed +% in round brackets. This behaviour can be changed with customization +% commands. +% +% Two theorem types, `|theorem|' and `|remark|', are predefined as follows: +% \begin{quote} +% |\newtheoremtype{theorem}{\bfseries}{}{\itshape}|\\ +% |\newtheoremtype{remark}{\itshape}{}{}| +% \end{quote} +% +% \DescribeMacro\liketheorem +% \DescribeMacro\likeremark +% Using the |\liketheorem| and |\likeremark| commands, you can +% produce a\linebreak theorem of the given type with arbitrary title without +% generation a special environment for it. It is very useful +% if a theorem with the given title appears in a document only once. +% +% \textbf{Note:} Type generation commands are available in the +% preamble only. +% +% \section{Generate New Theorems} +% +% \DescribeMacro\newtheorem +% A standard theorem environment is generated with the +% |\newtheorem| command: +% \begin{quote} +% |\newtheorem|\marg{env-name}\oarg{counter}\marg{title}\oarg{type} +% \end{quote} +% In comparison with the standard \LaTeX\ version of this command, +% the last optional +% parameter has another meaning: it specifies a theorem type. +% This is because its standard meaning (the base counter) +% useless here. If the \meta{type} parameter is omitted, +% the `|theorem|' type is used. The optional argument \meta{counter} +% is a counter this environment will be counted with. If it is +% omitted, the counter name equal to the \meta{env-name} is used. +% We do not test the \meta{counter} on existence when +% a new theorem environment is generated. The theorem counter is declared +% to be the dynamic counter. It is defined at the first use and +% inherits the style declared by the latest use of the command +% \begin{quote} +% |\countstyle|\marg{base-counter} +% \end{quote} +% Its argument contains a name of base-counter for all dynamically +% created counters. Dynamically created counter is set to zero when the +% base counter is stepped. Its |\the| command is the following: +% \begin{quote} +% |\the|\meta{base-counter}.|\arabic|\marg{dynamic-counter} +% \end{quote} +% If the \meta{base-counter} is empty, a dynamic counter will be +% numbered in the plain style. +% +% \qef +% \textbf{Note:} In contrast with the standard definition, +% the described |\newtheorem| command may be used with all +% four parameters. +% +% \qef +% \DescribeMacro{\newtheorem*} +% To generate a new apar theorem environment, the starred version of +% the |\newtheorem| command is applied: +% \begin{quote} +% |\newtheorem*|\marg{env-name}\marg{title}\oarg{type} +% \end{quote} +% All apar theorems are counted with the `|apar|' counter. +% +% \DescribeMacro{\renewtheorem} +% \DescribeMacro{\renewtheorem*} +% You can also redefine already defined theorem environments +% using the commands +% \begin{quote} +% |\renewtheorem|\marg{env-name}\oarg{counter}\marg{title}\oarg{type}\\ +% |\renewtheorem*|\marg{env-name}\marg{title}\oarg{type} +% \end{quote} +% While redefinition a theorem environment, you can change values of +% all other parameters after \meta{env-name}. +% +% \DescribeMacro\TheoremBreakStyle +% \DescribeMacro\TheoremNoBreakStyle +% When a theorem environment is defined or redefined, a decision +% what must be inserted after the theorem header (space or break) +% is made on the base of current break style. The +% |\TheoremBreakStyle| and |\TheoremNoBreakStyle| commands change +% this style to the `break' and `no-break' respectively. The default +% style is `no-break'. +% +% \textbf{Note:} Theorem generation commands are available in the preamble only. +% +% \section{Using Theorems} +% +% The syntax of using theorem environments is the following: +% \begin{quote} +% |\begin|\marg{env-name}\oarg{comment} \meta{body} +% |\end|\marg{env-name} +% \end{quote} +% You can also use the command-like syntax: +% \begin{quote} +% |\|\meta{env-name}\oarg{comment} \meta{body} |\qef| +% \end{quote} +% which is more likely for apar theorems. +% +% \DescribeMacro\breakafterheader +% \DescribeMacro\nobreakafterheader +% You can change a break style for a theorem applying +% the |\breakafterheader| and |\nobreakafterheader| commands +% just before using the theorem. +% +% Let us do the following in the preamble: +% \begin{quote} +% |\countstyle[apar]{section}|\\ +% |\newtheorem{theorem}{Theorem}|\\ +% |\newtheorem*{atheorem}{Theorem}|\\ +% |\TheoremBreakStyle|\\ +% |\newtheorem{definition}{Definition}[remark]|\\ +% |\TheoremNoBreakStyle|\\ +% |\newtheorem{lemma}[theorem]{Lemma}| +% \end{quote} +% This code generates 4 theorem environments: the `|theorem|' provides a +% standard Theorem statement; +% the `|atheorem|' provides a Theorem statement in the apar mode +% with per-section numbering; +% the `|definition|' provides a standard Definition statement +% prepared as a remark; and the `|lemma|' provides a standard +% Lemma statement counted with the |theorem| counter. Definitions +% are printed in the break style. +% +% \begin{quote} +% |\begin{theorem} A theorem. \end{theorem}|\\ +% |\begin{lemma} A lemma. \end{lemma}|\\ +% |\breakafterheader|\\ +% |\begin{theorem}[A comment] A theorem with break.\end{theorem}|\\ +% |\atheorem A theorem in apar mode. \qef|\\ +% |\begin{definition} A definition. \end{definition}| +% \end{quote} +% This code produces the following: +% \Line +% \begin{theorem} A theorem. \end{theorem} +% \begin{lemma} A lemma. \end{lemma} +% \breakafterheader +% \begin{theorem}[A comment] A theorem with break.\end{theorem} +% \atheorem A theorem in apar mode. \qef +% \begin{definition} A definition. \end{definition} +% \Line +% +% To prepare a theorem without number or having a special number, +% use the |\like|\meta{type} command. Examples: +% \begin{quote} +% |\liketheorem{Theorem}{A} Special theorem.\qef|\\ +% |\liketheorem{Proposition}{}[Comment] It has no number.\qef|\\ +% |\breakafterheader|\\ +% |\likeremark{Example}{2.3.5} An example.\qef|\\ +% |\likeremark*{Remark} An apar remark. \qef| +% \end{quote} +% This code produces the following: +% \Line +% \liketheorem{Theorem}{A} Special theorem.\qef +% \liketheorem{Proposition}{}[Comment] It has no number.\qef +% \breakafterheader +% \likeremark{Example}{2.3.5} An example.\qef +% \likeremark*{Remark} An apar remark. \qef +% \Line +% +% \DescribeMacro\proof +% The |\proof| command prints the proof of a math statement. Syntax: +% \begin{quote} +% |\proof|\oarg{of-theorem} \meta{body} |\qed| +% \end{quote} +% The optional parameter \meta{of-theorem} contains a +% text appended to the title of proof. The break-style change +% commands can be applied to this command. Examples: +% \begin{quote} +% |\proof An ordinary proof.\qed|\\ +% |\proof[of Theorem A] A special proof.\qed|\\ +% |\breakafterheader|\\ +% |\proof[of the Pythagor Theorem] A proof.\qed| +% \end{quote} +% This code produces the following: +% \Line +% \proof An ordinary proof.\qed +% \proof[of Theorem A] A special proof.\qed +% \breakafterheader +% \proof[of the Pythagor Theorem] A proof.\qed +% \Line +% +% \section{Apar Sections} +% +% Header of an apar theorem is similar to the header printed +% by the |\paragraph| or |\subparagraph| command (except +% paragraph numbering that is usually omitted). +% Moreover, from the logical point of view, the apar +% theorems are specially designed enumerated paragraphs. +% Therefore, it is a good idea to use apar markup +% as some kind of special sectioning. +% +% \DescribeMacro\apar +% The following command supports sectioning in the apar mode: +% \begin{quote} +% |\apar|\oarg{title} +% \end{quote} +% It produces a new paragraph starting with the \meta{apar-tag} +% element and having the optional title. The indentation style and +% marginal style of apar section is the same as for apar theorems. +% The vertical skip before +% the apar section is just the same as before theorems. +% If the |nccsect| package is loaded, the apar skip is equal +% to the skip produced with the |\paragraph| and |\subparagraph| +% commands. +% +% These properties of apar sections are useful in design of +% articles having short sections. For example, if an article +% consists of many short sections prepared with the |\subsection| +% command, it looks very loose, because subsections are produced +% in the display style. It will be better to allow subsections +% run-in paragraph. Using the |\apar| command, you can do this +% very easy: add the following command to the preamble +% \begin{quote} +% |\countstyle[apar]{section}| +% \end{quote} +% and prepare subsections with the |\apar| command. Example: +% \begin{quote} +% |\apar[Subsection title] Subsection body ...|\\ +% |\apar[Next title:] The body ...|\\ +% |\atheorem In fact, this is a special apar section ...|\\ +% |\apar Subsection without title ...|\\ +% |\breakafterheader|\\ +% |\apar[One more title] Break before its body| +% \end{quote} +% This code produces the following: +% \Line +% \apar[Subsection title] Subsection body ... +% \apar[Next title:] The body ... +% \atheorem In fact, this is a special apar section ... +% \apar Subsection without title ... +% \breakafterheader +% \apar[One more title] Break before its body +% \Line +% +% \section{Customization Commands} +% +% \DescribeMacro{\NCC@runskip} +% The vertical skips before and after theorems are identic. They are +% produced with the |\qef| command. The length of the skip is coded +% in the inner command |\NCC@runskip|. This command is also used in +% the |nccsect| package as a skip inserted before the |\paragraph| +% and |\subparagraph| commands. Its default value +% \begin{quote} +% |2.75ex plus 1ex minus 0.2ex| +% \end{quote} +% +% \DescribeMacro{\TheoremCommentDelimiters} +% The |\TheoremCommentDelimiters|\marg{left}\marg{right} command +% specifies delimiters inserted before and after a theorem comment. +% The default setting is: +% \begin{quote} +% |\TheoremCommentDelimiters{(}{)}| +% \end{quote} +% +% \DescribeMacro{\AfterTheoremHeaderChar} +% The |\AfterTheoremHeaderChar|\marg{after-char} command +% specifies an \meta{after-char} element that ends +% header of theorem and header of proof. The default setting is +% an empty element. +% +% \DescribeMacro{\AfterTheoremHeaderSkip} +% The |\AfterTheoremHeaderSkip|\marg{skip-command} command +% specifies a command inserted between theorem header and body. +% In break style, this command is ignored. +% The default setting is: +% \begin{quote} +% |\AfterTheoremHeaderSkip{\hskip 1em plus 0.2em minus 0.2em}| +% \end{quote} +% +% \DescribeMacro\ProofStyleParameters +% The |\ProofStyleParameters|\marg{style}\marg{title} command +% specifies style parameters used in the |\proof| +% command: the first one is a font style and the last one +% is a proof title. The default setting is: +% \begin{quote} +% |\ProofStyleParameters{\bfseries}{Proof}| +% \end{quote} +% +% \DescribeMacro\AparStyleParameters +% The |\AparStyleParameters|\marg{style}\marg{prefix}\marg{suffix} +% command specifies the style of apar sections: the \meta{style} +% is a style of apar section title; the tag of apar theorems +% and sections is prepared using \meta{prefix} and \meta{suffix} +% specified with this command as follows +% \meta{prefix}|\theapar|\meta{suffix}. The default setting is: +% \begin{quote} +% |\AparStyleParameters{\bfseries}{\bfseries}{\enskip}| +% \end{quote} +% +% \qef +% \textbf{Note:} All customization commands except the +% |\NCC@runskip| are allowed in the preamble only. +% \StopEventually{} +% +% \section{The Implementation} +% +% \begin{macro}{\NCC@secskip} +% \begin{macro}{\NCC@runskip} +% The package shares the following commands with the +% |nccsect| package: +% \begin{quote} +% |\NCC@secskip|\marg{skip} adds the \meta{skip} before a section,\\ +% |\NCC@runskip| is a skip inserted before run-in sections. +% \end{quote} +% We protect the definitions of these commands with testing +% the |nccsect| package to be already loaded. +% \begin{macrocode} +%<*package> +\@ifpackageloaded{nccsect}{}{% + \def\NCC@secskip#1{% + \if@noskipsec \leavevmode \fi \par + \if@nobreak \everypar{}\else + \addpenalty\@secpenalty + \addvspace{#1}% + \fi + } + \def\NCC@runskip{2.75ex \@plus 1ex \@minus .2ex} +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Q.E.D. Support} +% +% \begin{macro}{\NCC@qedsymbol} +% \begin{macro}{\qedsymbol} +% The |\NCC@qedsymbol| command is the base implementation +% of white Q.E.D. symbol. +% If no Q.E.D. selection options used, the +% |\qedsymbol| is equal to the base version. +% \begin{macrocode} +\DeclareRobustCommand{\NCC@qedsymbol}{% + \mbox{\normalsize\normalfont\thinlines \@tempdima 1.5ex + \advance\@tempdima-2\@wholewidth + \edef\@tempa{\the\@tempdima}% + \kern \@wholewidth + \raisebox\@wholewidth[1.5ex]{% + \frame{\rule\z@\@tempa\rule\@tempa\z@}}% + \kern \@wholewidth + }% +} +\let\qedsymbol\NCC@qedsymbol +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\qed} +% \begin{macro}{\qed*} +% The |\qed| command produces the flush-right Q.E.D. symbol +% and applies the |\qef| command in the non-starred case. +% \begin{macrocode} +\newcommand{\qed}{\NCC@qed{\qedsymbol}} +\def\NCC@qed#1{\unskip\allowbreak% + \hspace*{1em plus 1fill minus .2em}#1\@ifstar{}{\qef}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\qef} +% The |\qef| finishes a paragraph, adds the |\@secpenalty|, +% and produces the vertical skip of |\NCC@runskip| size. +% If also sets the normal font and removes the no-break +% condition suppressing indentation in the next +% paragraph. +% \begin{macrocode} +\newcommand{\qef}{\NCC@secskip{\NCC@runskip}\@nobreakfalse\normalfont} +% \end{macrocode} +% \end{macro} +% +% \subsection{Package Options} +% +% \begin{macro}{\whiteqedsymbol} +% \begin{macro}{\whiteqed} +% The `|whiteqed|' option: +% \begin{macrocode} +\DeclareOption{whiteqed}{% + \let\whiteqedsymbol\NCC@qedsymbol + \newcommand{\whiteqed}{\NCC@qed{\whiteqedsymbol}} + \let\qedsymbol\whiteqedsymbol +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\blackqedsymbol} +% \begin{macro}{\blackqed} +% The `|blackqed|' option: +% \begin{macrocode} +\DeclareOption{blackqed}{% + \DeclareRobustCommand{\blackqedsymbol}{% + \begingroup\normalsize\normalfont\thinlines + \rule{1.5ex}{1.5ex}\endgroup + } + \newcommand{\blackqed}{\NCC@qed{\blackqedsymbol}} + \let\qedsymbol\blackqedsymbol +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ifNCC@thmindent} +% \begin{macro}{\ifNCC@thmmargin} +% Theorem indentation and marginal numbering options +% are based on two if-macros: +% the |NCC@thmindent| controls the indentation of headers and +% the |NCC@thmmargin| controls the marginal numbering in +% the apar mode. +% \begin{macrocode} +\newif\ifNCC@thmindent +\newif\ifNCC@thmmargin +\DeclareOption{noindent}{\NCC@thmindentfalse} +\DeclareOption{indent}{\NCC@thmindenttrue} +\DeclareOption{nomargin}{\NCC@thmmarginfalse} +\DeclareOption{margin}{\NCC@thmmargintrue} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Set defaults and process all options in the order +% they appear in the options list. +% \begin{macrocode} +\ExecuteOptions{noindent,nomargin} +\ProcessOptions* +% \end{macrocode} +% +% \subsection{The Kernel} +% +% We use the |\@ifempty| command from the |amsgen| package +% and dynamic counters from the |dcounter| package. +% \begin{macrocode} +\RequirePackage{amsgen} +\RequirePackage{dcounter}[1998/12/19] +% \end{macrocode} +% +% \begin{macro}{\NCC@thmbrmode} +% \begin{macro}{\ifNCC@thmbr} +% A theorem break mode is controlled with the |\NCC@thmbrmode| +% macro and the |\ifNCC@thmbr|. The |\NCC@thmbrmode| can have +% three possible values: +% \begin{desclist}{}{\hfill}[\cs{relax}\ ] +% \item[\cs{relax}] undefined mode; +% \item[\cs{z@}] break mode; +% \item[\cs{@ne}] no-break mode. +% \end{desclist} +% If the break mode is undefined, the decision is made on the +% analyzes of the |NCC@thmbr| value: true value means break, +% false value means no-break. +% \begin{macrocode} +\let\NCC@thmbrmode\relax +\newif\ifNCC@thmbr +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\breakafterheader} +% \begin{macro}{\nobreakafterheader} +% The |\breakafterheader| and |\nobreakafterheader| +% commands test the current break mode and set an +% appropriate mode if it is undefined yet. As a result, +% usage of these commands before a theorem leads to +% overriding the default break mode specified in +% theorem's macro. +% \begin{macrocode} +\newcommand\breakafterheader{% + \ifx\NCC@thmbrmode\relax \global\chardef\NCC@thmbrmode\z@\fi +} +\newcommand\nobreakafterheader{% + \ifx\NCC@thmbrmode\relax \global\chardef\NCC@thmbrmode\@ne\fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\TheoremBreakStyle} +% \begin{macro}{\TheoremNoBreakStyle} +% \begin{macro}{\TheoremCommentDelimiters} +% \begin{macro}{\AfterTheoremHeaderChar} +% \begin{macro}{\AfterTheoremHeaderSkip} +% Theorem customization commands: +% \begin{macrocode} +\newcommand{\TheoremBreakStyle}{\NCC@thmbrtrue} +\newcommand{\TheoremNoBreakStyle}{\NCC@thmbrfalse} +\newcommand*{\TheoremCommentDelimiters}[2]{% + \def\NCC@thmcmt@##1{#1\ignorespaces##1\unskip#2}% +} +\newcommand*{\AfterTheoremHeaderChar}[1]{\def\NCC@thmchar{#1}} +\newcommand*{\AfterTheoremHeaderSkip}[1]{\def\NCC@thmskip{#1}} +\@onlypreamble\TheoremBreakStyle +\@onlypreamble\TheoremNoBreakStyle +\@onlypreamble\TheoremCommentDelimiters +\@onlypreamble\AfterTheoremHeaderChar +\@onlypreamble\AfterTheoremHeaderSkip +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\NCC@thmhdr} +% The |\NCC@thmhdr|\marg{style}\marg{header} prints a theorem header +% in the required \meta{style} and implements the current break mode. +% At the end of macro, the break mode is reset to |\relax|. +% The header is prepared in a group. +% \begin{macrocode} +\def\NCC@thmhdr#1#2{% + \qef +% \end{macrocode} +% Insert a negative low penalty to increase a chance of +% page break before the beginning of theorem. +% \begin{macrocode} + \addpenalty{-\@lowpenalty}% + \begingroup + #1% +% \end{macrocode} +% Test the break mode. If it is undefined, we set it basing +% on the value of |\ifNCC@thmbr| switch. +% \begin{macrocode} + \ifx\NCC@thmbrmode\relax + \ifNCC@thmbr \chardef\NCC@thmbrmode\z@ + \else \chardef\NCC@thmbrmode\@ne + \fi + \fi +% \end{macrocode} +% The break case: to implement the break in the vertical +% mode, it is enough to put the header in hbox. To allow +% multi-line header, we prepare it in inner vbox. +% \begin{macrocode} + \ifnum\NCC@thmbrmode=\z@ + \@tempdima\parindent + \hbox{\vbox{\hsize\linewidth\@parboxrestore + \ifNCC@thmindent\parindent\@tempdima\fi + \leavevmode\strut#2\strut + }}\nobreak\noindent +% \end{macrocode} +% The no-break case: The |\ncc@thmskip| command +% \begin{macrocode} + \else + \ifNCC@thmindent\else\noindent\fi + \leavevmode{#2\normalfont\NCC@thmskip}\nobreak + \fi + \endgroup +% \end{macrocode} +% Reset the break mode to the initial value: +% \begin{macrocode} + \global\let\NCC@thmbrmode\relax +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NCC@thmcmt} +% The |\NCC@thmcmt|\marg{comment-style}\marg{comment} tests +% a comment to be nonempty and produces it in corresponding style. +% \begin{macrocode} +\def\NCC@thmcmt#1#2{% + \@ifempty{#2}{}{\/\space\normalfont#1\NCC@thmcmt@{#2}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NCC@lthm} +% Standard mode basic command: +% \begin{quote} +% |\NCC@lthm|\marg{header-style}\marg{comment-style}\marg{body-style}\marg{title}\\ +% | |\marg{number}\oarg{comment} +% \end{quote} +% \begin{macrocode} +\def\NCC@lthm#1#2#3#4#5{% + \@ifnextchar[{\NCC@lthm@{#1}{#2}{#3}{#4}{#5}}% + {\NCC@lthm@{#1}{#2}{#3}{#4}{#5}[]}% +} +\def\NCC@lthm@#1#2#3#4#5[#6]{% +% \end{macrocode} +% Prepare theorem header. +% \begin{macrocode} + \NCC@thmhdr{}{% + #1#4\@ifempty{#5}{}{\space#5}% + \NCC@thmcmt{#2}{#6}\NCC@thmchar + }% +% \end{macrocode} +% Set the body style and do a small skip to avoid extra +% space after the |\label| command. +% \begin{macrocode} + #3\hskip 0.001\p@ \ignorespaces +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NCC@thxhdr} +% The |\NCC@thxhdr|\marg{style}\marg{header} produces an apar theorem +% header. +% \begin{macrocode} +\def\NCC@thxhdr#1#2{% + \refstepcounter{apar}% + \NCC@thmhdr{% +% \end{macrocode} +% In margin style, the indent style is turned off for apar theorems: +% \begin{macrocode} + \ifNCC@thmmargin \NCC@thmindentfalse \fi + #1% + }{% +% \end{macrocode} +% Put the \meta{apar-tag} (prepared in the |\NCC@thmapar| command) +% before the header using |\llap| or |\hbox|. Then put the header. +% \begin{macrocode} + \ifNCC@thmmargin \llap{\NCC@thmapar}\else \hbox{\NCC@thmapar}\fi + #2% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NCC@lthx} +% Apar mode basic command: +% \begin{quote} +% |\NCC@lthx|\marg{header-style}\marg{comment-style}\marg{body-style}\marg{title}\\ +% | |\oarg{comment} +% \end{quote} +% \begin{macrocode} +\def\NCC@lthx#1#2#3#4{% + \@ifnextchar[{\NCC@lthx@{#1}{#2}{#3}{#4}}% + {\NCC@lthx@{#1}{#2}{#3}{#4}[]}% +} +\def\NCC@lthx@#1#2#3#4[#5]{% + \NCC@thxhdr{}{% + \normalfont#1#4\NCC@thmcmt{#2}{#5}\NCC@thmchar + }% + #3\hskip 0.001\p@ \ignorespaces +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NCC@likethm} +% The base for |\like|\meta{type} commands. It passes the control +% to |\NCC@lthm| or |\NCC@lthx| depending on the star appearing +% after the third parameter: +% \begin{quote} +% |\NCC@likethm|\marg{header-style}\marg{comment-style}\marg{body-style}\marg{title}\\ +% | |\marg{number}\oarg{comment}\\ +% |\NCC@likethm|\marg{header-style}\marg{comment-style}\marg{body-style}|*|\marg{title}\\ +% | |\oarg{comment} +% \end{quote} +% \begin{macrocode} +\def\NCC@likethm#1#2#3{% + \@ifstar{\NCC@lthx{#1}{#2}{#3}}{\NCC@lthm{#1}{#2}{#3}}% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Apar Sections} +% +% The counter used in the apar mode is dynamic: +% \begin{macrocode} +\DeclareDynamicCounter{apar} +% \end{macrocode} +% +% \begin{macro}{\AparStyleParameters} +% Apar style parameters provider: +% \begin{macrocode} +\newcommand*{\AparStyleParameters}[3]{% + \def\NCC@thmaparstyle{#1}% + \def\NCC@thmapar{#2\theapar#3}% +} +\@onlypreamble\AparStyleParameters +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\apar} +% The |\apar|\oarg{title} command starts a new apar-numbered +% paragraph. If the \meta{title} is omitted or empty, +% we must ignore the |\NCC@thmskip|. +% \begin{macrocode} +\newcommand*{\apar}[1][]{% + \NCC@thxhdr{\NCC@thmaparstyle} + {\@ifempty{#1}{\let\NCC@thmskip\@empty}{\ignorespaces#1\unskip}}% + \hskip 0.001\p@ \ignorespaces +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Proof of Theorem} +% +% \begin{macro}{\ProofStyleParameters} +% Proof style parameters provider: +% \begin{macrocode} +\newcommand*{\ProofStyleParameters}[2]{% + \def\NCC@thmproofstyle{#1}% + \def\NCC@thmproof{#2}% +} +\@onlypreamble\ProofStyleParameters +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\proof} +% The |\proof|\oarg{of-theorem} command: +% \begin{macrocode} +\newcommand*{\proof}[1][]{% + \NCC@thmhdr{\NCC@thmproofstyle}{% + \NCC@thmproof + \@ifempty{#1}{}{\space\ignorespaces#1\unskip}% + \NCC@thmchar + }% + \hskip 0.001\p@ \ignorespaces +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Generate New Theorem Types} +% +% \begin{macro}{\like...} +% New theorem type generation means definition a |\like|\meta{type} +% command preparing theorems of corresponding type. +% The syntax of a |\like|\meta{type} command is +% the following: +% \begin{quote} +% |\like|\meta{type}\marg{title}\marg{number}\oarg{comment}\\ +% |\like|\meta{type}|*|\marg{title}\oarg{comment} +% \end{quote} +% The first one produces a standard theorem and the last one produces +% an apar theorem. +% \end{macro} +% +% \begin{macro}{\newtheoremtype} +% \begin{macro}{\renewtheoremtype} +% Theorem type generation commands: +% \begin{quote} +% |\newtheoremtype|\marg{type}\marg{title-style}\marg{comment-style}\marg{body-style}\\ +% |\renewtheoremtype|\marg{type}\marg{title-style}\marg{comment-style}\marg{body-style} +% \end{quote} +% \begin{macrocode} +\newcommand*{\newtheoremtype}[1]{% + \edef\@tempa{\noexpand\newcommand*{\expandafter\noexpand + \csname like#1\endcsname}}\NCC@nthmtype +} +\newcommand*{\renewtheoremtype}[1]{% + \edef\@tempa{\noexpand\renewcommand*{\expandafter\noexpand + \csname like#1\endcsname}}\NCC@nthmtype +} +\def\NCC@nthmtype#1#2#3{\@tempa{\NCC@likethm{#1}{#2}{#3}}} +\@onlypreamble\newtheoremtype +\@onlypreamble\renewtheoremtype +\@onlypreamble\NCC@nthmtype +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Generate New Theorems} +% +% \begin{macro}{\NCC@thmdef} +% Basic theorem generation command: +% \begin{quote} +% |\NCC@thmdef|\marg{env-name}\marg{action}\marg{parameters}\oarg{type} +% \end{quote} +% The |\@tempa| command must contain either |\noexpand\newenvironment| or +% |\noexpand\renewenvironment| before the call. +% The \meta{action} is an action applied at the beginning +% of theorem. The \meta{parameters} contains parameters passed +% to the |\like|\meta{type} command. +% \begin{macrocode} +\def\NCC@thmdef#1#2#3{% + \@ifnextchar[{\NCC@thmdef@{#1}{#2}{#3}}% + {\NCC@thmdef@{#1}{#2}{#3}[theorem]}% +} +\def\NCC@thmdef@#1#2#3[#4]{% +% \end{macrocode} +% Generate an error if the given type is unknown. +% \begin{macrocode} + \@ifundefined{like#4}{% + \PackageError{nccthm}{Unknown theorem type `#4'}{}% + }% +% \end{macrocode} +% |\@tempa := \[re]newenvironment|\marg{env-name}|{#1\like|\meta{type}|#2}| +% \begin{macrocode} + \edef\@tempa##1##2{% + \@tempa{#1}{##1\expandafter\noexpand\csname like#4\endcsname##2}% + }% +% \end{macrocode} +% Generate a theorem envirinment: +% \begin{macrocode} + \ifNCC@thmbr + \@tempa{#2\breakafterheader}{#3}{\qef\ignorespacesafterend}% + \else + \@tempa{#2\nobreakafterheader}{#3}{\qef\ignorespacesafterend}% + \fi +} +\@onlypreamble\NCC@thmdef +\@onlypreamble\NCC@thmdef@ +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newtheorem} +% \begin{macro}{\renewtheorem} +% \begin{macro}{\newtheorem*} +% \begin{macro}{\renewtheorem*} +% Theorem generation commands: +% \begin{quote} +% |\newtheorem|\marg{env-name}\oarg{counter}\marg{title}\oarg{type}\\ +% |\renewtheorem|\marg{env-name}\oarg{counter}\marg{title}\oarg{type}\\ +% |\newtheorem*|\marg{env-name}\marg{title}\oarg{type}\\ +% |\renewtheorem*|\marg{env-name}\marg{title}\oarg{type} +% \end{quote} +% \begin{macrocode} +\renewcommand*{\newtheorem}{\def\@tempa{\noexpand\newenvironment}% + \@ifstar{\NCC@nthx}{\NCC@nthm}} +\newcommand*{\renewtheorem}{\def\@tempa{\noexpand\renewenvironment}% + \@ifstar{\NCC@nthx}{\NCC@nthm}} +\def\NCC@nthx#1#2{\NCC@thmdef{#1}{}{*{#2}}} +\def\NCC@nthm#1{\@ifnextchar[{\NCC@nthm@{#1}}{\NCC@nthm@{#1}[#1]}} +\def\NCC@nthm@#1[#2]#3{% + \DeclareDynamicCounter{#2}% + \NCC@thmdef{#1}{\refstepcounter{#2}}{{#3}{\csname the#2\endcsname}}% +} +\@onlypreamble\newtheorem +\@onlypreamble\renewtheorem +\@onlypreamble\NCC@nthx +\@onlypreamble\NCC@nthm +\@onlypreamble\NCC@nthm@ +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Defaults} +% +% \begin{macrocode} +\newtheoremtype{theorem}{\bfseries}{}{\itshape} +\newtheoremtype{remark}{\itshape}{}{} +\TheoremNoBreakStyle +\TheoremCommentDelimiters{(}{)} +\AfterTheoremHeaderChar{} +\AfterTheoremHeaderSkip{\hskip 1em \@plus .2em \@minus .2em} +\AparStyleParameters{\bfseries}{\bfseries}{\enskip} +\ProofStyleParameters{\bfseries}{Proof} +%</package> +% \end{macrocode} +\endinput |