% \iffalse
%%
%% File: nccsect.dtx Copyright (C) 2002--2006 by Alexander I. Rozhenko
%%
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{nccsect}
%<package>         [2006/01/20 v1.6 Extended Section, Caption, and TOC Handling (NCC)]
%
% \changes{v1.00}{2002/02/01}{This version is uploaded to CTAN}
% \changes{v1.01}{2002/02/08}{\NCC@thetocchapter hook added}
% \changes{v1.02}{2002/02/13}{Bug in using the \nosectiontag fixed}
% \changes{v1.02}{2002/03/19}{Test for caption with empty text added}
% \changes{v1.03}{2002/05/19}{Vskips in captions after style changes now}
% \changes{v1.04}{2002/05/22}{Centering in captions now works}
% \changes{v1.1}{2004/12/12}{Introduce |\NCC@sec@reset@controls|}
% \changes{v1.1}{2004/12/12}{Simplify making sections. The |\NCC@makesection| now
%                            incompatible with previous version!!!}
% \changes{v1.1}{2004/12/12}{Revised version: many internal changes}
% \changes{v1.1}{2004/12/12}{Documentation was prepared}
% \changes{v1.2}{2005/04/15}{Emulate |\@makecaption| for compatibility}
% \changes{v1.2}{2005/04/15}{Compatibility with the supertabular package added}
% \changes{v1.2}{2005/04/15}{Compatibility with the longtable package added}
% \changes{v1.2}{2005/05/20}{Introduce |\beforechapter| hook}
% \changes{v1.2}{2005/05/20}{Add |\StartFromTextArea| and |\StartFromHeaderArea|}
% \changes{v1.2}{2005/05/21}{Add |\epigraph| and |\epigraphparameters|}
% \changes{v1.2}{2005/05/22}{Add |\captionstyle| and related staff}
% \changes{v1.2}{2005/05/22}{Add |\TOCMarginDrift|}
% \changes{v1.2}{2005/05/22}{Add |\applystyle| command to TOC Entry style}
% \changes{v1.2}{2005/06/08}{Set |\@twocolumnfalse| in before-chapter hook}
% \changes{v1.2}{2005/06/08}{Allow sectioning in |\beforechapter| hook}
% \changes{v1.3}{2005/06/15}{Fixed bug with using |\applystyle| command}
% \changes{v1.4}{2005/12/26}{Conditionally define |\StartFromTextArea| and |\StartFromHeaderArea|}
% \changes{v1.4}{2005/12/28}{|\sectionstyle| now has a |type| parameter}
% \changes{v1.4}{2005/12/28}{New section styles: hangparindent, hangparindent*}
% \changes{v1.4}{2005/12/28}{|\NCC@makechapfinal| hook introduced}
% \changes{v1.4}{2005/12/28}{|\NCC@makeparttitle|, |\NCC@makechaptitle| hooks}
% \changes{v1.4}{2005/12/28}{The scope of declarations in |\@svsec| is localized}
% \changes{v1.4}{2005/12/28}{|\aftersectionvspace| introduced}
% \changes{v1.4}{2005/12/29}{Add |\DeclarePart| and |\DeclareTOCPart| commands}
% \changes{v1.4}{2005/12/30}{Make the package completely independent on standard commands}
% \changes{v1.4}{2005/12/31}{Add more hooks and fix |\MakeUppercase| related bugs}
% \changes{v1.4}{2006/01/01}{Introduce |\RunningSectionSuffux| command}
% \changes{v1.4}{2006/01/01}{Introduce |\NCC@preparesectag| hook}
% \changes{v1.4}{2006/01/01}{Remove |\NCC@defaultsectag| hook}
% \changes{v1.4}{2006/01/01}{|\NCC@nexttocnum|, |\NCC@preparetocnum| hooks}
% \changes{v1.4}{2006/01/03}{The |\norunningsuffix| modifier introduced}
% \changes{v1.5}{2006/01/06}{Introduce |\SetTOCStyle| and |\ChapterPrefixStyle|}
% \changes{v1.5}{2006/01/17}{Replace addtopackage to afterpackage}
% \changes{v1.5}{2006/01/17}{Remove \protect before \numberline, because it is robust now}
% \changes{v1.5}{2006/01/19}{Allow caption width be greater than a line width}
% \changes{v1.5}{2006/01/19}{Compatibility with the xtab package added}
% \changes{v1.5}{2006/01/19}{Add |\newplainsectionstyle|, |\newhangsectionstyle|}
% \changes{v1.5}{2006/01/19}{Add |\adjustsectionmargins|}
% \changes{v1.5}{2006/01/19}{Introduce |centerlast| section style}
% \changes{v1.5}{2006/01/19}{Introduce |\sectiontagsuffix| command}
% \changes{v1.5}{2006/01/19}{Introduce |\captiontagsuffix| command}
% \changes{v1.6}{2006/01/20}{Improve |\NCC@secflush| to work in |rightlast| style}
%
%<*driver>
\let\makeindex\relax
\documentclass{ltxdoc}
\usepackage{nccsect,nccboxes,desclist}
\GetFileInfo{nccsect.sty}
\newhangsectionstyle{margin}{2in}[r]{-2in}{0pt plus 1fil}
\newhangsectionstyle{list}{1in}{0pt}{1in plus 1fil}
\newplainsectionstyle{flushright}{0pt}[r]{1in plus 1fil}{0pt}
\begin{document}
\title{The \textsf{nccsect} package\thanks{This file
        has version number \fileversion, last
        revised \filedate.}\ \thanks{Great thanks to Denis G. Samsonenko
        \texttt{<d.g.samsonenko@gmail.com>} who proposed many significant
        improvements to the package.}}
\author{Alexander I. Rozhenko\\rozhenko@oapmg.sscc.ru}
\date{\filedate}
\maketitle
\DocInput{nccsect.dtx}
\end{document}
%</driver>
% \fi
%
% \tableofcontents
%
% \section{The Scope and Objectives}
%
% The package provides a new implementation of sections, captions,
% and toc-entries independent on the \LaTeX\ kernel. The reasons for this
% are concerned with the following disadvantages of the
% standard \LaTeX\ implementation:
%
% \paragraph{1} Standard \LaTeX\ sectioning commands can prepare
% display sections in the single style: justified paragraph
% with hang indented number. To change this style to another
% one (centered, par-indented, or else), you need
% to re-implement the internal |\@sect| command. It is no
% control for this style on user's level.
%
% \paragraph{2} If you want to customize the presentation a number in
% a section (for example, put a paragraph mark \S\ before a number
% or put a point after a number), you at least need to
% re-implement the |\@sect| command.
%
% \paragraph{3} The sectioning commands provide no straightforward
% control for running headings. The marking commands
% like the |\sectionmark| solve this problem partially.
% Using them within parameter of sectioning command,
% you can change the mark properly, but this solution does not work in
% complicated documents which use first and last marks
% appearing on a page. The safe solution consists in direct
% replacement a mark prepared within the |\@sect| command
% to a custom mark.
%
% \paragraph{4} Special efforts are required to pass a section
% without number to the header and to the toc-list. There is no simple
% solution providing this action.
%
% \paragraph{5} Captions for tables and figures are prepared in
% just the same way, although, they are usually used in different
% places of floating environments: table captions start
% \textit{before\/} a table, but figure captions go \textit{after\/}
% a figure. So, the vertical skip inserted before a caption is
% unnecessary for table captions. The right solution is to design
% captions for different float types in different ways.
%
% \paragraph{6} The star-form of captions is absent. It is useful
% when a document contains an alone figure or table. Moreover,
% in fiction books, unnumbered captions useful.
%
% \paragraph{7} The design of toc-entries is hard for modifications.
% It is much better to calculate the skips in toc-entries on the
% base of prototyping technique instead of hard-coding them
% with absolute values. Moreover, the skips for nested sections
% must depend on higher level skips. For example, if we
% change skips for a section entry, the skips for subsection entries
% should be adjusted automatically.
%
% \bigskip
% The package eliminates above-mention disadvantages of the standard
% \LaTeX\ implementation. The commands implemented in it are divided
% into two levels: user level and design level. The user-level commands
% are intended for use within a document and the design-level commands
% are directed to class and package writers.
%
% \section{User Interface}
%
% The table below shows sectioning commands provided with standard
% \LaTeX\ classes. Every section has a \textit{level\/} (an integer
% number). Sections can be printed in one of two modes:
% \textit{display\/} or \textit{running\/} mode. Display section is
% prepared as a separate justified paragraph having a hang indent if a
% section has a number. Running section starts a paragraph.
% \begin{center}\catcode`|=12
% \small\tabcolsep=10pt
% \renewcommand\cboxstyle{\footnotesize}
% \begin{tabular}{|l|c|c|}\hline
% \hfill\cbox{Command}\hfill\mbox{} &
% \hfill\cbox{Level}\hfill\mbox{} &
% \hfill\cbox{Mode}\hfill\mbox{}\\\hline
% \Strut/.8/
% \cs{part} & $-$1 or 0\footnotemark & display \\
% \cs{chapter} & 0\footnotemark & display \\
% \cs{section} & 1 & display \\
% \cs{subsection} & 2 & display \\
% \cs{subsubsection} & 3 & display \\
% \cs{paragraph} & 4 & running \\
% \cs{subparagraph} & 5 & running \\
% \hline
% \end{tabular}\footnotetext[1]{The \cs{part} command has zero level
% in article-like classes and has the negative level in book-like
% classes. In book-like classes a part is prepared on
% a separate page.}\footnotetext{The \cs{chapter} command is defined
% in book-like classes only.}
% \end{center}
%
% \DescribeMacro\startsection
% The package redefines all standard sectioning commands. Along with the
% commands shown in the table above, you can use the following
% uniform notations:
% \begin{quote}
% |\startsection|\marg{level}\oarg{toc-entry}\marg{title}\quad or\\
% |\startsection|\marg{level}|*|\marg{title}
% \end{quote}
% The \meta{level} is a level of section. A negative level produces
% a part. The first command
% produces a numbered section (if~the numbering depth allows this)
% and the last one produces a section without number.
% As for the standard \LaTeX\ sectioning, the first variant of
% the |\startsection| command additionally passes their arguments
% to the section mark command (if the mark command exists)
% and to the aux-file.
% The last variant does no additional actions.
%
% \bigskip
% \textbf{NOTE}: The package allows declaring additional section
% levels. They, of course, have no predefined alias names as
% standard section levels.
%
% \bigskip
% \DescribeMacro\sectionstyle
% The |\sectionstyle|\oarg{type}\marg{style} command allows change
% a style of subsequent display sections of the given \meta{type}:
% \begin{desclist}{\tt}{\quad}[subsubsection]\itemsep=0mm
% \item[main] the section of zero level (|\part| or |\chapter|);
% \item[section] the |\section|;
% \item[subsection] the |\subsection|;
% \item[subsubsection] the |\subsubsection|;
% \item[paragraph] the |\paragraph|;
% \item[subparagraph] the |\subparagraph|;
% \item[section@vi] the section of 6th level, and so on.
% \end{desclist}
% If the \meta{type} parameter is omitted, the command acts on
% all subsequent display sections expect those having a specialized style.
% The following styles are predefined:
% \begin{desclist}{\tt}{\quad}[hangparindent*]\itemsep=0mm
% \item[hangindent]  standard LaTeX style (default);
% \item[hangindent*] the same as |hangindent|, but ragged right;
% \item[parindent]   title indented on |\parindent|;
% \item[parindent*] the same as |parindent|, but ragged right;
% \item[hangparindent]  |\parindent| indented with hang number;
% \item[hangparindent*] the same as |hangparindent|, but ragged right;
% \item[center] centered title;
% \item[centerlast] justified title without indent whose last line is centered.
% \end{desclist}
% You can apply the |\sectionstyle| so many times in the document
% as you want. This command complies with standard \LaTeX\ scoping
% rules.
%
% \bigskip
% \textbf{NOTE}: The section style acts on display sections that were
% prepared with the dynamic alignment (see Section~\ref{s:decl}). By default,
% the sections of levels from 0 to 3 have the dynamic alignment. The
% section of zero level has no hang indentation.
%
% \bigskip
% \DescribeMacro\sectiontagsuffix
% The |\sectiontagsuffix|\oarg{type}\marg{style} command allows change
% a suffix inserted after number tag for sections of the given \meta{type}.
% If the \meta{type} parameter is omitted, the command acts on
% all subsequent sections expect those having a specialized tag suffix.
%
% \DescribeMacro\indentaftersection
% \DescribeMacro\noindentaftersection
% The paragraph indentation after a display section is controlled with
% the |\indentaftersection| and |\noindentaftersection| commands.
% The first one allows and the last one suppresses
% indentation after section. The commands act on the subsequent
% display sections in the scope of their use.
%
% \DescribeMacro\aftersectionvspace
% If a document contains two subsequent sectioning commands (for example,
% |\section| and |\subsection|) the distance between their titles is
% equal to the skip after the first sectioning command. Sometimes
% it is necessary to insert another vertical space here. To override
% the space inserted between sections, use the command
% \begin{quote}
% |\aftersectionvspace|\marg{distance}
% \end{quote}
% This command replaces the space inserted by a previous sectioning
% command with the |\vspace|\marg{distance}. It works in the only case when
% goes right after a command producing a display section. Otherwise, the
% specified \meta{distance}
% is ignored. The following example shows how to customize the
% |\subsection| command in such a way that the distance between it and
% a previous |\section| will be |3ex plus .5ex minus .2ex|:
% \begin{quote}
% |\renewcommand\subsection{%|\\
% |  \aftersectionvspace{3ex plus .5ex minus .2ex}%|\\
% |  \startsection{2}}|
% \end{quote}
%
% \DescribeMacro\adjustsectionmargins
% Margins of a display section can be adjusted using the command
% \begin{quote}
% |\adjustsectionmargins|\marg{left skip}\marg{right skip}
% \end{quote}
% The \meta{left skip} and \meta{right skip} are added to the left and
% right margins of the subsequent section if it is a display section.
% Otherwise, this command is ignored.
%
% \bigskip
% \textbf{Modifiers.} The customization of a number tag and running head of a particular
% section is provided with so-call \textit{modifiers}. A modifier
% is a command acting on the nearest sectioning command going after it.
% Usually, the modifiers are placed just before a sectioning command.
% All modifiers act on non-starred versions of sections.
% If the next sectioning command is starred, modifiers are ignored.
%
% \DescribeMacro\norunninghead
% The |\norunninghead| modifier suppresses generation of running head for the
% next non-starred section, i.e.\ it skips the call of section mark command
% in the next section.
%
% \DescribeMacro\runninghead
% The |\runninghead|\marg{running-title} modifier overrides a text going to the
% running head when a new non-starred section starts and an appropriate\linebreak
% |\pagestyle| is in use. This command has higher priority
% than the |\norunninghead|.
%
% \DescribeMacro\noheadingtag
% The |\noheadingtag| modifier suppresses a number tag in the next section,
% but all other attendant actions are executed (writing to the aux-file and
% updating the running head).
%
% \DescribeMacro\headingtag
% The |\headingtag|\marg{tag} modifier overrides a number tag in the next
% section. It has the higher priority than |\noheadingtag|. Overridden
% section tag can be referred with the |\label| command.
% All fragile commands in the overridden tag should be protected.
%
% \DescribeMacro{\headingtag*}
% The |\headingtag*|\marg{tag} modifier prepares a number tag as is, ignoring
% the tag style, prefix, and suffix. The aux-file and running head are not
% updated in this case.
%
% \DescribeMacro\skipwritingtoaux
% The |\skipwritingtoaux| suppresses writing to aux-file for the next section
% command.
%
% \bigskip
% \textbf{NOTE}: All modifiers use global settings.
%
% \bigskip
% \DescribeMacro\caption
% \DescribeMacro{\caption*}
% The captions are implemented in this package using the same technique as
% the sectioning commands. There are two versions of caption command
% allowed within floating environments:
% \begin{quote}
% |\caption|\oarg{toc-entry}\marg{title}\quad and\\
% |\caption*|\marg{title}
% \end{quote}
% The first one works in the same manner as the standard \LaTeX\ |\caption|
% command. Its starred version prepares a caption without number and preceding
% words `Figure' or `Table'.
%
% You can use line breaking commands in captions. But in this case,
% you need to set the optional \meta{toc-entry} parameter to avoid
% translation errors.
%
% Caption appearance can be customized. You can customize ether all caption
% types or only selected caption type. The following commands do this:
% \begin{quote}
% |\captionstyle|\oarg{type}\marg{style}\\
% |\captiontagstyle|\oarg{type}\marg{style}\\
% |\captiontagsuffix|\oarg{type}\marg{suffix}\\
% |\captionwidth|\oarg{type}\marg{length}
% \end{quote}
% If \meta{type} is omitted and these commands appear out of float
% environments, they are applied to all types.
% A command without \meta{type} applied within a float environment
% is considered as a command having the type of this environment. Typed
% version of a command has a precedence before a non-typed one.
%
% \medskip\noindent
% \DescribeMacro\captionstyle
% specifies a style
% the caption text will be formatted:
% \begin{desclist}{\tt}{\quad}[centerlast]\itemsep=0mm
% \item[default] standard \LaTeX's style,
% \item[para] simple paragraph without paragraph indent,
% \item[left] all lines are flushed left,
% \item[center] all lines are centered,
% \item[right] all lines are flushed right, or
% \item[centerlast] as |para|, but the last line is centered.
% \end{desclist}
%
% \medskip\noindent
% \DescribeMacro\captiontagstyle
% specifies a position of caption tag:
% \begin{desclist}{\tt}{\quad}[centerlast]\itemsep=0mm
% \item[para] tag is formatted together with text,
% \item[left] tag is adjusted to the left in a separate line,
% \item[center] tag is centered in a separate line, or
% \item[right] tag is adjusted to the right in a separate line.
% \end{desclist}
%
% \medskip\noindent
% \DescribeMacro\captiontagsuffix
% specifies a suffix after caption tag.
%
% \medskip\noindent
% \DescribeMacro\captionwidth
% specifies a width of caption.
%
% \medskip\noindent
% Defaults:
% \begin{quote}
% |\captionstyle{default}|\\
% |\captiontagstyle{para}|\\
% |\captiontagsuffix{:\hspace{0.7em plus 0.2em minus 0.1em}}|\\
% |\captionwidth{\linewidth}|
% \end{quote}
%
% \textbf{NOTE}: The above-described section modifiers can be used with non-starred
% captions. Although, the |\runninghead| and |\norunninghead| commands
% have no sense with captions, but you can do them working if define
% a |\figuremark{}| or |\tablemark{}| command.
%
% \bigskip
% \DescribeMacro\SetTOCStyle
% The |\SetTOCStyle|\marg{declarations} command allows customize
% the table of contents and other content lists. For example, the declaration
% \begin{quote}
% |\SetTOCStyle{\small}|
% \end{quote}
% specifies that content lists will be prepared with the |\small| font.
% This command is allowed in the preamble only.
%
% \DescribeMacro\ChapterPrefixStyle
% The appearance of Chapter/Appendix prefix in a table of contents and
% in a running head can be customized using the command
% \begin{quote}
% |\ChapterPrefixStyle|\marg{appearance list}
% \end{quote}
% The \meta{appearance list} can contain up to two words, namely
% |header| and/or |toc|, delimited with a comma. Using them, you can
% set a prefix-style for the header and/or the table of contents, respectively.
% By default, the prefix-style is specified for the header only. This command
% is allowed for book-like classes in which the |\chapter| command is
% defined. It can be used in the preamble only.
%
% \section{Create New Section Styles}
%
% Along with 8 predefined section styles, you can easy create more styles.
%
% \DescribeMacro\newplainsectionstyle
% The command
% \begin{quote}
% |\newplainsectionstyle|\marg{name}\marg{indent}\oarg{pos}\\
% |                     |\marg{left skip}\marg{right skip}
% \end{quote}
% creates a new paragraph-like section style with the given \meta{name}.
% It has the \meta{indent} paragraph indent
% and margins specified with \meta{left skip} and \meta{right skip} lengths.
% To prepare a centered style, the optional \meta{pos} parameter
% should be equal to |[c]|. In this case, left and right margins must
% have an additional |1fil| glue. If optional parameter is |[r]|, the
% left margin must have an additional |1fil| glue.
%
% Four of predefined section styles are created using this command as follows:
% \begin{quote}
% |\newplainsectionstyle{parindent}{0pt}{\parindent}{0pt}|\\
% |\newplainsectionstyle{parindent*}{0pt}{\parindent}{0pt plus 1fil}|\\
% |\newplainsectionstyle{center}{0pt}[c]{0pt plus 1fil}{0pt plus 1fil}|\\
% |\newplainsectionstyle{centerlast}{0pt}[c]{0pt plus 1fil}{0pt plus -1fil}|
% \end{quote}
% Analogously to the |centerlast| style, the |rightlast| style (last line is adjusted
% to the right) can be easy created:
% \begin{quote}
% |\newplainsectionstyle{rightlast}{0pt}[r]{0pt plus 1fil}{0pt plus -1fil}|
% \end{quote}
%
% \DescribeMacro\newhangsectionstyle
% The command
% \begin{quote}
% |\newhangsectionstyle|\marg{name}\marg{min tag width}\oarg{pos}\\
% |                    |\marg{left skip}\marg{right skip}
% \end{quote}
% creates a new hang-indented section style with the given \meta{name}.
% The \meta{min tag width} length specifies a minimum width of the section
% tag. If a width of section tag is less than this parameter value,
% a white space will be inserted surround the tag to have the required
% width. The method of inserting a white space is the same as in the
% |\makebox| command. It is controlled with the optional \meta{pos}
% parameter (|l|, |c|, or |r|; |l| default). Other parameters have
% the same meaning as in the previous command.
%
% Four of predefined section styles are created using this command as follows:
% \begin{quote}
% |\newhangsectionstyle{hangindent}{0pt}{0pt}{0pt}|\\
% |\newhangsectionstyle{hangindent*}{0pt}{0pt}{0pt plus 1fil}|\\
% |\newhangsectionstyle{hangparindent}{0pt}{\parindent}{0pt}|\\
% |\newhangsectionstyle{hangparindent*}{0pt}{\parindent}{0pt plus 1fil}|
% \end{quote}
%
% The following examples shows possibilities of these commands:
%
% \skipwritingtoaux
% \sectionstyle[subsection]{margin}
% \subsection{This subsection was prepared in the margin style}
%
% The definition of the |margin| style is the following:
% \begin{quote}
% |\newhangsectionstyle{margin}{2in}[r]{-2in}{0pt plus 1fil}|
% \end{quote}
%
% \skipwritingtoaux
% \sectionstyle[subsection]{list}
% \subsection{This subsection was prepared in the list style}
%
% The definition of the |list| style is the following:
% \begin{quote}
% |\newhangsectionstyle{list}{1in}{0pt}{1in plus 1fil}|
% \end{quote}
%
% \skipwritingtoaux
% \sectionstyle[subsection]{flushright}
% \subsection{This subsection was prepared in the flushright style}
%
% The definition of the |flushright| style is the following:
% \begin{quote}
% |\newplainsectionstyle{flushright}{0pt}[r]{1in plus 1fil}{0pt}|
% \end{quote}
% \sectionstyle[subsection]{hangindent}
%
% \section{Declare Sections and Captions\label{s:decl}}
%
% \DescribeMacro\DeclareSection
% To define or redefine a section or caption command, you can use
% in the preamble of your document the
% following command:
% \begin{quote}
% |\DeclareSection|\marg{level}\marg{type}\oarg{indent}\marg{prefix}\marg{beforeskip}\\
% |               |\marg{afterskip}\marg{style}
% \end{quote}
% \begin{desclist}{}{}[\meta{beforeskip}]
% \item[\meta{level}] a section level number. Zero and negative values
%      are interpreted as follows:
%      0 means declaring the |\chapter| or |\part| command depending on a
%        class used; a negative value means declaring a caption.
%
% \item[\meta{type}] a section type. For zero level, this
%      parameter is ignored. For negative level, it defines a float type
%      (i.e., |figure| or |table|). For positive level, it defines
%      a counter name. The name of marking command is composed from
%      the type as |\|\meta{type}|mark|.
%
% \item[\meta{indent}] indentation of heading from the left margin
%      (zero is default). Ignored for negative levels.
%
% \item[\meta{prefix}] a prefix inserted before a section-number tag
%      (usually empty). In chapter, part, or caption declaration commands,
%      it is inserted right before the tag name, e.g., before the |\@chapapp|,
%      |\partname|, |\figurename|, or |\tablename| command.
%
% \item[\meta{beforeskip}] the skip to leave above the heading.
%
% \item[\meta{afterskip}] if positive, then the skip to leave below
%      the heading, else negative of skip to leave to right of running
%      heading. The negative value is allowed for positive section levels
%      only.
%
% \item[\meta{style}] commands to set a style. The last command in
%      this argument may be a command such as |\MakeUppercase| that
%      takes an argument. The section heading will be supplied as the
%      argument to this command. So setting it to, say,
%      |\bfseries\MakeUppercase| would produce bold, uppercase headings.
% \end{desclist}
% Sections having nonnegative \meta{level} and positive \meta{afterskip}
% are display sections. They are declared with the |hangindent| style
% and do not obey the |\sectionstyle| command.
%
% \DescribeMacro{\DeclareSection*}
% To declare a display section having dynamic alignment controlled with the
% |\sectionstyle| command, use the star-version of the previous command:
% \begin{quote}
% |\DeclareSection*|\marg{level}\marg{type}\marg{prefix}\marg{beforeskip}\\
% |                |\marg{afterskip}\marg{style}
% \end{quote}
% A negative \meta{afterskip} has no meaning in this case.
%
% \DescribeMacro\bff
% To prepare bold section headings,
% you can use the |\bff| command in the \meta{style} parameter.
% It tries to set everything bold. Its definition is the following:
% \begin{quote}
% |\newcommand{\bff}{\normalfont\bfseries\mathversion{bold}}|
% \end{quote}
%
% Examples of section and caption declarations:
% \begin{quote}
% |\DeclareSection{-2}{table}{}{0pt}{10pt}{}|\\
% |\DeclareSection{-1}{figure}{}{10pt}{0pt}{}|\\
% |\DeclareSection*{1}{section}{}%|\\
% |                {3.5ex plus 1ex minus .2ex}%|\\
% |                {2.3ex plus .2ex}{\Large\bff}|
% \end{quote}
% Here we declare the table caption command with zero skip
% before it and |10pt| skip after it. On contrary, the
% figure caption command produces |10pt| skip before it
% and zero skip after it. The |\section| command is declared with
% dynamic horizontal alignment. It is prepared in the |\Large|
% font with everything bold.
%
% \DescribeMacro\SectionTagSuffix
% The |\SectionTagSuffix|\marg{suffix} command specifies a default suffix
% inserted after a section number tag. For example, the command
% \begin{quote}
% |\SectionTagSuffix{.\quad}|
% \end{quote}
% sets the decimal point after every section number tag.
% Sections of 0th level ignore this suffix. The default tag is |\quad|.
% The command can be used in the preamble only.
%
% \DescribeMacro\RunningSectionSuffix
% The |\RunningSectionSuffix|\marg{suffix} command specifies a suffix
% inserted after a running section title right before the skip after
% section. It can be used in the preamble only.
% The default value is an empty suffix.
%
% \DescribeMacro\norunningsuffix
% To remove the suffix after a running section, put the
% |\norunningsuffix| modifier in the parameter of running section.
%
% \DescribeMacro\CaptionTagSuffix
% The |\CaptionTagSuffix|\marg{suffix} command specifies a default suffix
% inserted after a caption number tag. It can be used in the preamble only.
% The default caption tag is:
% \begin{quote}
% |\CaptionTagSuffix{:\hspace{0.7em plus 0.2em minus 0.1em}}|
% \end{quote}
%
% \section{Declare TOC-Entries}
%
% \DescribeMacro\DeclareTOCEntry
% To declare an entry of table of contents or other lists
% (list of figures or list of tables), use the following command
% (in the preamble only):
% \begin{quote}
% |\DeclareTOCEntry|\marg{level}\marg{action}\marg{prefix}\marg{prototype}\\
% |                |\marg{style}\oarg{next}
% \end{quote}
% \begin{desclist}{}{\hfill}[\meta{prototype}]
% \item[\meta{level}] a section level number.
%      For zero and negative level the following commands are created:
%      0 means |\l@chapter| or |\l@part| depending on class used;
%      $-1$ means |\l@figure|; $-2$ means |\l@table|. If level
%      is greater than 5, the name of toc-entry command is
%      generated as |\l@section@|\meta{level-in-roman},
%      i.e., the toc-entry of 6th level is |\l@section@vi|.
%
% \item[\meta{action}] commands applied before entry is produced (usually empty).
%
% \item[\meta{prefix}] text inserted before the section number (usually empty).
%
% \item[\meta{prototype}] prototype of number for alignment the toc-entry body.
%      The hang indent of this toc-entry will be equal to the width of
%      \begin{quote}
%      \meta{style}|{|\meta{prefix}\meta{prototype}\meta{numberline-suffix}|}|
%      \end{quote}
%
% \item[\meta{style}] commands to set a style. The last command in this argument
%      may be a command such as |\MakeUppercase| that takes an
%      argument. The produced entry will be supplied as the
%      argument to this command. So setting it to, say,
%      |\bfseries\MakeUppercase| would produce bold,
%      uppercase entry. This style is applied to the number also and to the
%      page number.
%      To apply different styles to the text of entry and to its page
%      number, use in this parameter the command
%      \begin{quote}
%      |\applystyle|\marg{text-style}\marg{number-style}
%      \end{quote}
%
% \item[\meta{next}] prototype for left margin adjustment for an entry of the
%      next level. Default is the hang indent of the current toc-entry.
% \end{desclist}
% A toc-entry is produced within a group.
%
% \DescribeMacro\NumberlineSuffix
% The |\NumberlineSuffix|\marg{calc-suffix}\marg{actual-suffix}
% command allows customize a skip inserted after
% numbers in TOC-like entries. The \meta{calc-suffix} parameter
% is used in calculations of hang indent of toc-entries and the
% \meta{actual-suffix} is really inserted at the end of number.
% The \marg{calc-suffix} is usually wider than the \meta{actual-suffix}.
% The default is |\NumberlineSuffix{\quad}{\enskip}|.
% This command is available in the preamble only.
%
% \DescribeMacro\PnumPrototype
% The |\PnumPrototype|\marg{prototype} command is used for adjustment
% the right margin of the text of toc-entries in toc-lists.
% Default is |\PnumPrototype{99}|.
% If your document has more than 99 pages, use
% |\PnumPrototype{999}|.
% This command is available in the preamble only.
%
% \DescribeMacro\TOCMarginDrift
% The |\TOCMarginDrift|\marg{increment} command specifies a value of
% right-margin drift in TOCs. The increment is applied after the |\@plus|
% token in definition of right margin. Empty argument means no drift.
% Examples:
% \begin{quote}
% |\TOCMarginDrift{2em}|\\
% |\TOCMarginDrift{1fil}|
% \end{quote}
% The command can be use anywhere in the document.
%
% \DescribeMacro\runinsectionskip
% This command is useful in the \meta{action} parameter of the
% toc-entry declaration to produce the skip before a toc-entry
% equal to the skip before run-in sections.
%
% The following example shows how toc-entries are declared in books:
% \begin{quote}
% |\DeclareTOCEntry{-2}{}{}{9.9}{}% table|\\
% |\DeclareTOCEntry{-1}{}{}{9.9}{}% figure|\\
% |\DeclareTOCEntry{0}{\runinsectionskip\def\@dotsep{1000}%|\\
% |  \aftergroup\penalty\aftergroup\@highpenalty}{}{9}{\bff}% chapter|\\
% |\DeclareTOCEntry{1}{}{}{9.9}{}[9.9]% section|\\
% |\DeclareTOCEntry{2}{}{}{9.9.9}{}[9.9.9]% subsection|\\
% |\DeclareTOCEntry{3}{}{}{}{}[\qquad]% subsubsection|
% \end{quote}
% The number prototype for figures and tables is `9.9' here.
% The |\l@chapter| entry applies the run-in section skip before it and
% redefines the |\@dotsep| command to remove dot leaders.
% Using the |\aftergroup| command, it inserts the |\@highpenalty|
% after this toc-entry to avoid a page break at this point.
% The left margin adjustment after section and nested toc-entries
% is calculated here using the prototype of widest section number.
% This produces the following nesting:
% \begin{flushleft}
% {\bf 1\quad Chapter}\\
% \jhbox{{\bf 1\quad}}{}1.1\quad Section\\
% \jhbox{{\bf 1\quad}1.1}{}1.1.1\quad Subsection\\
% \jhbox{{\bf 1\quad}1.11.1.1}{}Subsubsection
% \end{flushleft}
%
% \section{Declare New Float Types}
%
% The standard \LaTeX\ classes provide two types of floating environments:
% figures and tables. If you have prepared a new floating
% environment in some way (i.e., using the |float| package by Anselm
% Lingnau), you can declare a caption for the new float
% with the commands described in previous sections.
%
% \DescribeMacro\RegisterFloatType
% In books, when a new chapter starts, the |\chapter| command
% puts a special vertical skip to the contents of list of figures and
% of list of tables. This behaviour can be easy extended to new float types
% if you register them within this package. The registration is
% provided with the following command:
% \begin{quote}
% |\RegisterFloatType|\marg{float-type}
% \end{quote}
% After the float type is registered, you can declare a toc-entry
% for it using the negation of its registration number in the
% \meta{level} parameter. The
% first new float type is registered third (after the figure and table).
% So, you must
% use \meta{level} = $-3$ for it, $-4$ for the next registered float
% type and so on.
%
% In the following example, we define a new float type, |program|,
% and prepare the caption and toc-entry commands for it.
% The caption of programs
% is supposed to be used at the beginning of program.
% So, we make it in the same manner as the table caption.
% \begin{quote}
% |\documentclass{book}|\\
% |\usepackage{float,nccsect}|\\
% |\newfloat{program}{tp}{lop}[chapter]|\\
% |\floatname{program}{Program}|\\
% |\RegisterFloatType{program}|\\
% |\DeclareSection{-3}{program}{}{0pt}{10pt}{}|\\
% |\DeclareTOCEntry{-3}{}{}{9.9}{}|
% \end{quote}
%
% To produce a list of programs, you can then use the |\listof|
% command from the |float| package as follows:
% \begin{quote}
% |\listof{program}{List of Programs}|
% \end{quote}
% \StopEventually{}
%
% \section{Epigraphs and Related Staff}
%
% \DescribeMacro\beforechapter
% \DescribeMacro\epigraph
% To put epigraph before any chapter, you can use two methods:
% low-level |\beforechapter|\marg{anything} hook or
% user-level command
% \begin{quote}
% |\epigraph|\oarg{width}\marg{text}\marg{author}
% \end{quote}
% The last one applies a special formatting to epigraph and
% calls the first one. The |\beforechapter| hook inserts its
% contents at the beginning of page just before a chapter
% instead of spacing specified in the chapter declaration.
%
% \DescribeMacro\epigraphparameters
% Formatting of user-level epigraph is provided with the
% following command
% \begin{quote}
% |\epigraphparameters|\marg{style}\marg{width}\marg{height}\marg{author-style}\\
% |                   |\marg{after-action}
% \end{quote}
% Here \meta{style} is a style applied to the whole epigraph
% (font selection, spacing and positioning, etc.), the \meta{width}
% is the default epigraph width (can be changed in an epigraph),
% the \meta{author-style} is the style applied to the author's
% signature, and the \meta{after-action} is an action applied after
% the epigraph (usually a vertical spacing). All styles and actions
% are applied in the vertical mode. An \meta{author-style} can finish with
% one-argument macro getting the author of epigraph and formatting it.
%
% \DescribeMacro\epigraphwidth
% In |\epigraphparameters|, you can use the |\epigraphwidth| macro
% which contains a selected epigraph width.
%
% The default style is:
% \begin{quote}
% |\epigraphparameters{\StartFromHeaderArea\small\raggedleft}|\\
% |                   {.45\linewidth}{5\baselineskip}|\\
% |                   {\raggedleft\itshape}{\vspace{2ex}}|
% \end{quote}
%
% \DescribeMacro\StartFromTextArea
% The |\vspace*| command applied at the beginning of page has one serious
% disadvantage: it skips more space that specified in its parameter.
% To remove this disadvantage, we introduce the |\StartFromTextArea|
% command that
% inserts a zero-height strut and allows use the |\vspace| command after it
% without troubles.
%
% \DescribeMacro\StartFromHeaderArea
% You can also extend the text area on the header if apply the
% |\StartFromHeaderArea| command at the beginning of page.
% Such action is useful in epigraphs: the first chapter's page usually
% has an empty header and positioning an epigraph from the header
% is the good practice.{\sloppy\par}
%
% \section{Declare Part}
%
% The |\part| command in book-like classes is the only sectioning command
% that cannot be prepared with the |\DeclareSection| command. So, we add
% special declarations to provide parts in books with features of other
% sectioning commands.
%
% \DescribeMacro\DeclarePart
% To redefine the |\part| in books, use the following declaration:
% \begin{quote}
% |\DeclarePart|\marg{before}\marg{after}\marg{prefix}\marg{style}
% \end{quote}
% \begin{desclist}{}{}[\meta{before}]
% \item[\meta{before}] an action applied before a part at the beginning of
%      page. It usually specifies a vertical skip |\vfil| and a
%      paragraph style to be applied to the part number tag and title.
% \item[\meta{after}] an action applied after the part. It usually contains
%      |\vfil| and page finishing commands.
% \item[\meta{prefix}] a prefix inserted before a part tag. It contains
%      style commands to be applied to the tag and the |\vspace| command
%      specifying a distance between the part tag and title.
%      The |\partname| command goes right after the prefix.
% \item[\meta{style}] a style to be applied to the part title. It can end
%      with |\MakeUppercase|.
% \end{desclist}
%
% The default declaration of the |\part| is the following:
% \begin{quote}
% |\DeclarePart{\StartFromTextArea\vfil\centering}%|\\
% |            {\vfil\newpage \if@twoside\if@openright|\\
% |               \mbox{}\thispagestyle{empty}\newpage\fi\fi}%|\\
% |            {\vspace{4ex}\huge\bff}{\Huge\bff}|
% \end{quote}
% The |\StartFromTextArea| command prevents ignoring a vertical space
% at the beginning of page. All paragraphs of part title are centered
% horizontally using the |\centering| declaration, and the title
% is centered vertically using |\vfil| commands
% before and after it. A page after the part is made empty in two-side
% mode if it is even. The space after the part tag is set to |4ex|.
%
% In Russian typesetting tradition, the part can be prepared in the
% same manner as a chapter, i.e.\ a text going after a part is prepared
% on the same page with the part title. It is easy to re-declare
% the part in such style.
% Let us start a part from the header and delimit it from the text
% with a decorative line. The following declaration does this:
% \begin{quote}
% |\DeclarePart{\StartFromHeaderArea\centering}|\\
% |            {\vspace{2mm}\noindent\hrulefill\par|\\
% |             \addvspace{5mm}}|\\
% |            {\vspace{.5em}\LARGE\bff}{\Huge\bff}|
% \end{quote}
% But when a chapter goes right after a part, we need to place the part and
% chapter titles together
% on the same page. This can be applied using the |\beforechapter| hook:
% \begin{quote}
% |\beforechapter{\part|\marg{part title}|}|\\
% |\chapter|\marg{chapter title}
% \end{quote}
% Modifiers stored in the parameter of |\beforechapter| hook will act on
% the |\part| command. Modifiers outside of |\beforechapter| will act on
% the |\chapter| command.
%
% \DescribeMacro\DeclareTOCPart
% To produce a toc-entry command for a part, the following declaration is
% specified for book-like classes:
% \begin{quote}
% |\DeclareTOCPart|\marg{action}\oarg{afterskip}\marg{prefix}\marg{prototype}\marg{style}
% \end{quote}%
% \begin{desclist}{}{}[\meta{afterskip}]
% \item[\meta{action}] an action applied before the part toc-entry. It usually
%      a skip before part. It is recommended to prepare it with |\NCC@secskip|
%      command.
% \item[\meta{afterskip}] a skip after this entry. If it is omitted,
%      the default |\NCC@runskip| value is applied after this entry.
% \item[\meta{prefix}] a prefix inserted before a part tag (usually empty).
% \item[\meta{prototype}] a prototype of part tag used for calculation the
%      hang indent in this entry.
% \item[\meta{style}] a style applied to the whole text of entry and to
%      the page number. The |\MakeUppercase| is allowed to finish this
%      parameter. The |\applystyle| command can be used inside it to
%      apply different styles to the toc-entry and the page number.
% \end{desclist}
%
% The default declaration of the part toc-entry is the following:
% \begin{quote}
% |\DeclareTOCPart{\NCC@secskip{4ex \@plus .2ex}%|\\
% |                \def\@dotsep{1000}}%|\\
% |               {}{\partname\ II}{\large\bff}|\\
% \end{quote}
%
% \section{The Implementation}
%
% The \textbf{afterpackage} package is used to add compatibility
% commands.
%    \begin{macrocode}
%<*package>
\RequirePackage{afterpackage}
%    \end{macrocode}
%
% \begin{macro}{\NCC@secskip}
% \begin{macro}{\NCC@runskip}
% The package shares the following commands with the
% |nccthm| 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 |nccthm| package to be already loaded.
%    \begin{macrocode}
\@ifpackageloaded{nccthm}{}{%
  \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}
%
% \begin{macro}{\runinsectionskip}
% This command is useful in toc-entries:
%    \begin{macrocode}
\newcommand{\runinsectionskip}{\NCC@secskip{\NCC@runskip}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{The Kernel}
%
% We start with declaring the section controls (modifiers):
% \begin{desclist}{\tt}{\hfill}[NCC@secstartag]\raggedright
% \item[NCC@nosectag] is true if |\noheadingtag| is applied;
% \item[NCC@secstartag] is true if |\headingtag*|\marg{tag} is applied;
% \item[\cs{NCC@sectag}] saves a value of the |\headingtag| parameter;
% \item[NCC@nosecmark] is true if |\norunninghead| is applied;
% \item[\cs{NCC@secmark}\rm\marg{mark-command}] executes the \meta{mark-command}
% with the parameter of |\runninghead| command;
% \item[NCC@noaux] is true if |\skipwritingtoaux| is applied.
% \end{desclist}
%    \begin{macrocode}
\newif\ifNCC@nosectag
\newif\ifNCC@secstartag
\newif\ifNCC@nosecmark
\newif\ifNCC@noaux
%    \end{macrocode}
%
% \begin{macro}{\NCC@global}
% We reset all controls globally, but in the |\beforechapter|
% hook we need to reset them locally. So, we reset all controls
% using the |\NCC@global| modifier which value is |\global| by default.
%    \begin{macrocode}
\let\NCC@global\global
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@sec@reset@controls}
% This command resets all controls to default values.
% It must be applied at the end of every section command.
%    \begin{macrocode}
\def\NCC@sec@reset@controls{%
  \NCC@global\NCC@nosectagfalse
  \NCC@global\NCC@secstartagfalse
  \NCC@global\let\NCC@sectag\relax
  \NCC@global\NCC@nosecmarkfalse
  \NCC@global\let\NCC@secmark\relax
  \NCC@global\NCC@noauxfalse
}
\NCC@sec@reset@controls
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\norunninghead}
% \begin{macro}{\runninghead}
% \begin{macro}{\noheadingtag}
% \begin{macro}{\headingtag}
% \begin{macro}{\headingtag*}
% \begin{macro}{\skipwritingtoaux}
% User interface to section controls:
%    \begin{macrocode}
\newcommand{\norunninghead}{\NCC@global\NCC@nosecmarktrue}
\newcommand*{\runninghead}[1]{\NCC@global\def\NCC@secmark##1{##1{#1}}}
\newcommand{\noheadingtag}{\NCC@global\NCC@nosectagtrue}
\newcommand{\headingtag}{%
  \@ifstar{\NCC@global\NCC@secstartagtrue\NCC@setsectag}{\NCC@setsectag}%
}
\def\NCC@setsectag#1{\NCC@global\def\NCC@sectag{#1}}
\newcommand{\skipwritingtoaux}{\NCC@global\NCC@noauxtrue}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\NCC@makesection}
% The |\NCC@makesection|\marg{type}\marg{level}\marg{toc-entry}\marg{toc-action}
% produces a section or caption. It analyzes the modifiers and customizes
% sections or captions. The \meta{toc-action} parameter contains an
% attendant action that must be applied at the end of macro.
% It writes a toc-entry to aux-file.
%
% The command uses the following hooks that must be prepared
% before its call:
% \begin{desclist}{}{}[\cs{NCC@make}\marg{action}]
% \item[\cs{NCC@makesectag}\marg{value}] produces a tag in |\@svsec|
%      using the given value;
%
% \item[\cs{NCC@make}\marg{action}] makes a section or caption heading
%      and applies the \meta{action} after heading. Before the call
%      of this command, the |\@svsec| macro is prepared (it contains a
%      prepared tag).
% \end{desclist}
% We start from the case when the |\headingtag*|\marg{tag} modifier was
% applied and the section tag was saved in the |\NCC@sectag| macro.
% We apply the |\NCC@make| procedure with the given section tag.
% Attendant actions are ignored for this case.
%    \begin{macrocode}
\def\NCC@makesection#1#2#3#4{%
  \ifNCC@secstartag
    \let\@svsec\NCC@sectag
    \NCC@make{}%
  \else
%    \end{macrocode}
% Prepare a tag creation command in the |\the|\meta{type} macro.
% We can do some temporary changes here that will be restored
% at the end of macro. The restore hook is prepared in the
% |\NCC@restsec| command.
%    \begin{macrocode}
    \ifx\NCC@sectag\relax
%    \end{macrocode}
% The |\noheadingtag| case: we temporary set the |secnumdepth|
% counter to very low negative value. This prevents numbering
% this section:
%    \begin{macrocode}
      \ifNCC@nosectag
        \edef\NCC@restsec{%
          \noexpand\c@secnumdepth \the\c@secnumdepth\relax
        }%
        \c@secnumdepth -1000
%    \end{macrocode}
% The ordinary case: No restore actions is necessary here.
%    \begin{macrocode}
      \else
        \let\NCC@restsec\relax
        \ifnum#2>\c@secnumdepth \else\refstepcounter{#1}\fi
      \fi
%    \end{macrocode}
% The |\headingtag|\marg{tag} case: we temporary let the
% |\the|\meta{type} macro to be equal to the |\NCC@sectag|
% command produced by the |\headingtag|,
% save the original value in the |\NCC@thesec| command,
% and prepare the |\NCC@restsec| macro.
%    \begin{macrocode}
    \else
      \expandafter\let\expandafter\NCC@thesec\csname the#1\endcsname
      \def\NCC@restsec{%
        \expandafter\let\csname the#1\endcsname\NCC@thesec
      }%
      \expandafter\let\csname the#1\endcsname\NCC@sectag
      \protected@edef\@currentlabel{\NCC@sectag}%
    \fi
%    \end{macrocode}
%
% Prepare section tag in the |\@svsec| command:
%    \begin{macrocode}
    \ifnum #2>\c@secnumdepth
      \let\@svsec\@empty
    \else
      \protected@edef\@svsec{%
        \protect\NCC@makesectag{\csname the#1\endcsname}%
      }%
    \fi
%    \end{macrocode}
%
% We cannot do the marking right now because the producing of section
% can be suspended to the beginning of the nearest paragraph
% (in run-in sections). So, we need to prepare a mark action
% in a command that will save its state as long as necessary.
% This command is |\NCC@makemark|.
%    \begin{macrocode}
    \let\NCC@makemark\@empty
    \@ifundefined{#1mark}{}{%
      \ifx\NCC@secmark\relax
%    \end{macrocode}
% Ordinary case: prepare the section mark with the
% \meta{toc-entry} parameter.
%    \begin{macrocode}
        \ifNCC@nosecmark \else
          \def\NCC@makemark{\csname #1mark\endcsname{#3}}%
        \fi
%    \end{macrocode}
% The |\runninghead|\marg{heading} case:
% pass the mark command in the parameter of |\NCC@secmark|.
% We need to save the |\NCC@secmark| value in some command
% and pass this command within |\NCC@makemark| because
% the |\NCC@secmark| could be removed before the use.
%    \begin{macrocode}
      \else
        \let\NCC@savesecmark\NCC@secmark
        \def\NCC@makemark{%
          \NCC@savesecmark{\csname #1mark\endcsname}%
          \let\NCC@savesecmark\relax
        }%
      \fi
    }%
%    \end{macrocode}
%
% Make the section. We must apply the restore action at
% the end action of |\NCC@make| command by the same reason that
% the section making may be suspended:
%    \begin{macrocode}
    \ifNCC@noaux
      \NCC@make{\NCC@makemark \NCC@restsec}%
    \else
      \NCC@make{\NCC@makemark #4\NCC@restsec}%
    \fi
%    \end{macrocode}
%
% Reset modifiers:
%    \begin{macrocode}
  \fi
  \NCC@sec@reset@controls
}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Section Making Commands}
%
% \begin{macro}{\indentaftersection}
% \begin{macro}{\noindentaftersection}
% Introduce macros controlling indentation after display sections:
%    \begin{macrocode}
\newcommand{\indentaftersection}{\@afterindenttrue}
\newcommand{\noindentaftersection}{\@afterindentfalse}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\SectionTagSuffix}
% The |\SectionTagSuffix|\marg{suffix} sets a default suffix after
% a section tag.
%    \begin{macrocode}
\newcommand*{\SectionTagSuffix}[1]{\def\NCC@asecnum{#1}}
\@onlypreamble\SectionTagSuffix
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\sectiontagsuffix}
% |\sectiontagsuffix|\oarg{type}\marg{suffix} changes a suffix after section
% tag that will be used for sections of the given
% \meta{type}. If \meta{type} is omitted, the specified suffix will be used
% in text flow for all sections having no special suffix.
%    \begin{macrocode}
\newcommand*\sectiontagsuffix[2][]{%
  \expandafter\def\csname NCC@asecnum@#1\endcsname{\def\NCC@asecnum{#2}}%
}
\let\NCC@asecnum@\@empty
\def\NCC@setsectionsuffix#1{%
  \edef\@tempa{NCC@asecnum@\NCC@secname{#1}}%
  \@ifundefined{\@tempa}{%
    \let\NCC@asecnumset\NCC@asecnum@
  }{%
    \expandafter\let\expandafter\NCC@asecnumset\csname\@tempa\endcsname
  }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\RunningSectionSuffix}
% The |\RunningSectionSuffix|\marg{suffix} sets a suffix after a title
% of a running section:
%    \begin{macrocode}
\newcommand*{\RunningSectionSuffix}[1]{\def\NCC@asectitle{\unskip#1}}
\@onlypreamble\RunningSectionSuffix
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@preparesectag}
% The |\NCC@preparesectag|\marg{style}\marg{before} hook prepares the
% |\NCC@makesectag| command:
%    \begin{macrocode}
\def\NCC@preparesectag#1#2{\def\NCC@makesectag##1{#1#2##1\NCC@asecnum}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@secname}
% The |\NCC@secname|\marg{level} command generates section name
% (|main|, |section|, |subsection|, \ldots,
% or |section@vi|, |section@vii|, \ldots\ for new section levels).
% This name is used as the second parameter of the |\addcontentsline|
% command, in the declarations of toc-entries, and in the style
% selection command.
%    \begin{macrocode}
\def\NCC@secname#1{%
  \ifcase#1main\or section\or subsection\or subsubsection\or
    paragraph\or subparagraph\else section@\romannumeral#1\fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@startsection}
% The |\NCC@startsection| command
% has the same syntax as its non-NCC prototype:
% \begin{quote}
% |\NCC@startsection|\marg{type}\marg{level}\marg{indent}\marg{beforeskip}\\
% |                 |\marg{afterskip}\marg{style}
% \end{quote}
% but works in a bit different way: it ignores the sign of
% \meta{beforeskip}. In the original version the testing
% was applied to set an appropriate |afterindent| mode.
% But we change this mode using |\indentaftersection| and
% |\noindentaftersection| macros.
%    \begin{macrocode}
\def\NCC@startsection#1#2#3#4#5#6{%
  \@tempskipa #4\relax
  \ifdim \@tempskipa <\z@ \@temskipa -\@tempskipa \fi
  \NCC@secskip \@tempskipa
  \secdef{\NCC@sect{#1}{#2}{#3}{#4}{#5}{#6}}{\NCC@ssect{#3}{#4}{#5}{#6}}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makesec}
% The interface of |\NCC@ssect| and |\NCC@sect| commands is similar to their
% \LaTeX's prototypes. They are based on the following
% command:
% \begin{quote}
% |\NCC@makesec|\marg{indent}\marg{style}\marg{heading}\marg{afterskip}\marg{action}
% \end{quote}
% In fact, there are two versions of this command:
% the traditional version, |\NCC@makesect|, and the
% version with dynamic control of section style,\linebreak |\NCC@makesecx|.
% One of them should be selected before applying the |\NCC@ssect| and |\NCC@sect|
% commands.
% \end{macro}
%
% \begin{macro}{\NCC@ssect}
% The starred form of section:
% \begin{quote}
% |\NCC@ssect|\marg{indent}\marg{beforeskip}\marg{afterskip}\marg{style}\marg{heading}
% \end{quote}
%    \begin{macrocode}
\def\NCC@ssect#1#2#3#4#5{%
  \let\@svsec\@empty
  \NCC@makesec{#1}{#4}{#5}{#3}{}%
  \NCC@sec@reset@controls
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@sect}
% The base form of section:
% \begin{quote}
% |\NCC@sect|\marg{type}\marg{level}\marg{indent}\marg{beforeskip}\marg{afterskip}\marg{style}\\
% |         |\oarg{toc-entry}\marg{heading}
% \end{quote}
%    \begin{macrocode}
\def\NCC@sect#1#2#3#4#5#6[#7]#8{%
  \def\NCC@make{\NCC@makesec{#3}{#6}{#8}{#5}}%
  \NCC@makesection{#1}{#2}{#7}{%
    \addcontentsline{toc}{\NCC@secname{#2}}{%
      \ifnum #2>\c@secnumdepth \else
        \numberline{\csname the#1\endcsname}%
      \fi
      #7%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makesect}
% The traditional section making command:
% \begin{quote}
% |\NCC@makesect|\marg{indent}\marg{style}\marg{heading}\marg{afterskip}\marg{action}
% \end{quote}
%    \begin{macrocode}
\def\NCC@makesect#1#2#3#4#5{%
  \@tempskipa #4\relax
  \ifdim \@tempskipa>\z@
    \begingroup \normalfont
      \NCC@asecnumset
%    \end{macrocode}
% The |\NCC@secttitle|\marg{style}\marg{tag}\marg{title} hook prepares
% traditional display section:
%    \begin{macrocode}
      \NCC@secttitle{#2}{\NCC@hangfrom{\hskip #1\relax\@svsec}}%
        {\interlinepenalty \@M\ignorespaces #3\@@par}
    \endgroup
    #5%
  \else
%    \end{macrocode}
% The |\NCC@secptitle|\marg{style}\marg{tag}\marg{title} hook prepares
% running section. The |\norunningsuffix| modifier applied in the
% parameter of running section removes a suffix after section title.
%    \begin{macrocode}
    \def\@svsechd{{\normalfont
      \NCC@asecnumset
      \def\norunningsuffix{\protect\NCC@nosecsuffix}%
      \NCC@secptitle{#2}{\hskip #1\relax{\@svsec}}%
        {\ignorespaces #3\NCC@asectitle}#5}}%
  \fi
  \@xsect{#4}%
}
\def\NCC@secttitle#1#2#3{#1{#2#3}}
\def\NCC@secptitle#1#2#3{#1{#2#3}}
\newcommand*\norunningsuffix{}
\def\NCC@nosecsuffix{\let\NCC@asectitle\@empty}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Create Section Styles}
%
% \begin{macro}{\NCC@hangfrom}
% |\NCC@hangfrom|\marg{section tag} works as
% the \LaTeX's |\@hangfrom| command, but its margins can be adjusted
% with the |\adjustsectionmargins| command.
%    \begin{macrocode}
\def\NCC@hangfrom{%
  \NCC@setsecmargins{\z@skip}{\z@skip}\NCC@hangsecstyle{\z@}{}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@setsecmargins}
% |\NCC@setsecmargins|\marg{left skip}\marg{right skip} sets
% section margins and applies the hook that can be defined by the
% |\adjustsectionmargins| command.
%    \begin{macrocode}
\def\NCC@setsecmargins#1#2{%
  \leftskip\z@skip \rightskip\z@skip
  \parfillskip\@flushglue
  \let\\\@normalcr
  \NCC@adjsecmargins{#1}{#2}%
  \NCC@secmarginshook
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@adjsecmargins}
% |\NCC@adjsecmargins|\marg{left skip}\marg{right skip} adjusts
% section margins. The |\parfillskip| value is also adjusted to
% a difference between stretchabilities of the \meta{left skip}
% and the \meta{right skip}. Using this trick, we can easy specify
% the |centerlast| style just setting the stretchability of the
% \meta{right skip} as a negation of the \meta{left skip} stretchability.
% To extract a stretchability from a skip, we simply add it multiplied
% by |-1| (while multiplication the stretchability is removed!).
%    \begin{macrocode}
\def\NCC@adjsecmargins#1#2{%
  \setlength\@tempskipa{#1}\advance\leftskip\@tempskipa
  \setlength\@tempskipb{#2}\advance\rightskip\@tempskipb
  \advance\@tempskipa -1\@tempskipa \advance\@tempskipb -1\@tempskipb
  \advance\@tempskipa -\@tempskipb \advance\parfillskip\@tempskipa
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@hangsecstyle}
% |\NCC@hangsecstyle|\marg{min tag width}\marg{pos}\marg{section tag}
% starts a hang paragraph and prints its tag. The \meta{min tag width}
% specifies a minimum width of hang indent and \meta{pos} specifies
% an alignment of \meta{section tag} (|l|, |c|, |r|) if its width
% is less than the minimum width.
%    \begin{macrocode}
\def\NCC@hangsecstyle#1#2#3{%
  \setlength\@tempdima{#1}%
  \setbox\@tempboxa\hbox{#3}%
  \ifdim \wd\@tempboxa > \@tempdima
    \hangindent\wd\@tempboxa \noindent \box\@tempboxa
  \else
    \hangindent\@tempdima
    \noindent \makebox[\@tempdima][#2]{\unhbox\@tempboxa}%
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\adjustsectionmargins}
% |\adjustsectionmargins|\marg{left skip}\marg{right skip}
% defines the |\NCC@secmarginshook| macro to be applied after
% margins are set. To be sure this hook will be applied only once,
% we release it in the |\NCC@sec@reset@controls| hook.
%    \begin{macrocode}
\newcommand*\adjustsectionmargins[2]{%
  \NCC@global\def\NCC@secmarginshook{\NCC@adjsecmargins{#1}{#2}}
}
\g@addto@macro\NCC@sec@reset@controls{%
  \NCC@global\let\NCC@secmarginshook\@empty
}
\let\NCC@secmarginshook\@empty
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@sec}
% A style of sections having dynamic control is defined by the
% |\NCC@sec|\marg{tag} hook. This hook is applied inside a group
% preparing a heading. All section style commands redefine this hook.
% \end{macro}
%
% \begin{macro}{\newplainsectionstyle}
% |\newplainsectionstyle|\marg{name}\marg{indent}\oarg{pos}\marg{left skip}\marg{right skip}
%    \begin{macrocode}
\newcommand*\newplainsectionstyle[2]{%
  \@ifnextchar[{\NCC@newplainsec{#1}{#2}}{\NCC@newplainsec{#1}{#2}[l]}%
}
\def\NCC@newplainsec#1#2[#3]#4#5{%
  \def\@tempa{#3}\def\@tempb{c}%
  \ifx\@tempa\@tempb
    \expandafter\newcommand\csname NCC@sec@#1\endcsname
      {\def\NCC@sec{\NCC@setsecmargins{#4}{#5}%
        \let\\\@centercr \advance\parfillskip -\@flushglue
        \setlength\parindent{#2}}}%
  \else
    \def\@tempb{r}%
    \ifx\@tempa\@tempb
      \expandafter\newcommand\csname NCC@sec@#1\endcsname
        {\def\NCC@sec{\NCC@setsecmargins{#4}{#5}%
          \let\\\@centercr \advance\parfillskip -\@flushglue
          \advance\parfillskip -\@flushglue
          \setlength\parindent{#2}}}%
    \else
      \expandafter\newcommand\csname NCC@sec@#1\endcsname
        {\def\NCC@sec{\NCC@setsecmargins{#4}{#5}\setlength\parindent{#2}}}%
    \fi
  \fi
}
\@onlypreamble\newplainsectionstyle
\@onlypreamble\NCC@newplainsec
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\newhangsectionstyle}
% |\newhangsectionstyle|\marg{name}\marg{min tag width}\oarg{pos}\marg{left skip}\marg{right skip}
%    \begin{macrocode}
\newcommand*\newhangsectionstyle[2]{%
  \@ifnextchar[{\NCC@newhangsec{#1}{#2}}{\NCC@newhangsec{#1}{#2}[l]}%
}
\def\NCC@newhangsec#1#2[#3]#4#5{%
  \expandafter\newcommand\csname NCC@sec@#1\endcsname
    {\def\NCC@sec{\NCC@setsecmargins{#4}{#5}\NCC@hangsecstyle{#2}{#3}}}%
}
\@onlypreamble\newhangsectionstyle
\@onlypreamble\NCC@newhangsec
%    \end{macrocode}
% \end{macro}
%
% Specify predefined section styles. The |\@flushglue| is equal to |0pt plus 1fil|.
%    \begin{macrocode}
\newhangsectionstyle{hangindent}{\z@}{\z@skip}{\z@skip}
\newhangsectionstyle{hangindent*}{\z@}{\z@skip}{\@flushglue}
\newhangsectionstyle{hangparindent}{\z@}{\parindent}{\z@skip}
\newhangsectionstyle{hangparindent*}{\z@}{\parindent}{\@flushglue}
\newplainsectionstyle{parindent}{\z@}{\parindent}{\z@skip}
\newplainsectionstyle{parindent*}{\z@}{\parindent}{\@flushglue}
\newplainsectionstyle{center}{\z@}[c]{\@flushglue}{\@flushglue}
\newplainsectionstyle{centerlast}{\z@}[c]{\@flushglue}{-\@flushglue}
%    \end{macrocode}
%
% \subsection{Make Sections with Dynamic Control}
%
% \begin{macro}{\sectionstyle}
% The |\sectionstyle|\oarg{type}\marg{style} changes a style
% for display sections of the given \meta{type}.
%    \begin{macrocode}
\newcommand*{\sectionstyle}[2][]{%
  \@ifundefined{NCC@sec@#2}{%
    \PackageError{nccsect}{Unknown section style `#2'}{}%
  }{%
    \expandafter\def\csname NCC@secstyle@#1\endcsname{%
      \csname NCC@sec@#2\endcsname
    }%
  }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@setsectionstyle}
% The |\NCC@setsectionstyle|\marg{level} set a style for the
% given section level. If a style for the given level is
% undefined, the default style is selected.
%    \begin{macrocode}
\def\NCC@setsectionstyle#1{%
  \edef\@tempa{NCC@secstyle@\NCC@secname{#1}}%
  \@ifundefined{\@tempa}{\NCC@secstyle@}{\csname\@tempa\endcsname}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makesecx}
% The dynamic section making command:
% \begin{quote}
% |\NCC@makesecx|\marg{indent}\marg{style}\marg{heading}\marg{afterskip}\marg{action}
% \end{quote}
% It prepares only display sections and ignores the \meta{indent} parameter.
%    \begin{macrocode}
\def\NCC@makesecx#1#2#3#4#5{%
  \begingroup\normalfont
    \NCC@asecnumset
%    \end{macrocode}
% The |\NCC@secxtitle|\marg{style}\marg{tag}\marg{title} hook prepares
% display section with dynamic control. The |\NCC@sec| macro is protected
% to prevent its expansion by |\MakeUppercase|.
%    \begin{macrocode}
    \NCC@secxtitle{#2}{\protect\NCC@sec{\@svsec}}
      {\interlinepenalty \@M\ignorespaces #3\@@par}%
  \endgroup #5%
  \par \nobreak \vskip #4\relax \@afterheading \ignorespaces
}
\def\NCC@secxtitle#1#2#3{#1{#2#3}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Make the Main Section}
%
% \begin{macro}{\partmark}
% Define the |\partmark| if it is undefined yet.
%    \begin{macrocode}
\providecommand*\partmark[1]{\markboth{}{}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@startmainsec}
% The main section is a section of zero level.
% It is prepared with the following command:
% \begin{quote}
% |\NCC@startmainsec|\marg{alignment}\marg{prefix}\marg{beforeskip}\\
% |                 |\marg{afterskip}\marg{style}
% \end{quote}
% It starts either a new chapter or a new part depending on the class
% loaded. To decide what version should be prepared, we test the
% |\chapter| command on existence.
%    \begin{macrocode}
\@ifundefined{chapter}{%
%    \end{macrocode}
%
% The case of an article-like class. Zero-level section is the |\part|.
%    \begin{macrocode}
  \def\NCC@startmainsec#1#2#3#4#5{%
    \NCC@preparesectag{\leavevmode#2}{\partname\nobreakspace}%
    \NCC@secskip{#3}%
    \secdef{\NCC@part{#1}{#4}{#5}}{\NCC@spart{#1}{#4}{#5}}%
  }
%    \end{macrocode}
%
% \begin{macro}{\NCC@spart}
% Prepare the starred version of part:
% \begin{quote}
% |\NCC@spart|\marg{alignment}\marg{afterskip}\marg{style}\marg{heading}
% \end{quote}
%    \begin{macrocode}
  \def\NCC@spart#1#2#3#4{%
    \let\@svsec\@empty
    \NCC@makepart{#1}{#3}{#4}{#2}{}%
    \NCC@sec@reset@controls
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@part}
% Prepare the non-starred version of part:
% \begin{quote}
% |\NCC@part|\marg{alignment}\marg{afterskip}\marg{style}\oarg{toc-entry}\marg{heading}
% \end{quote}
%    \begin{macrocode}
  \def\NCC@part#1#2#3[#4]#5{%
    \def\NCC@make{\NCC@makepart{#1}{#3}{#5}{#2}}%
    \NCC@makesection{part}{\z@}{#4}{%
      \addcontentsline{toc}{part}{%
        \ifnum \c@secnumdepth>\m@ne \numberline{\thepart}\fi
        #4%
      }%
    }%
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makepart}
% This command makes a part.
% \begin{quote}
% |\NCC@makepart|\marg{alignment}\marg{style}\marg{heading}\marg{afterskip}\marg{action}
% \end{quote}
% The |\@svsec| is either |\@empty| or contains a part tag.
%    \begin{macrocode}
  \def\NCC@makepart#1#2#3#4#5{%
    \begingroup \normalfont
      \NCC@asecnumset
      \NCC@makeparttitle{#1}{#2}{#3}%
    \endgroup
    #5%
    \par\nobreak \vskip #4\relax \@afterheading \ignorespaces
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makeparttitle}
% This command makes a part title itself. The |\NCC@secmain| hook contains
% the dynamic alignment style or nothing.
% \begin{quote}
% |\NCC@makeparttitle|\marg{alignment}\marg{style}\marg{heading}
% \end{quote}
%    \begin{macrocode}
  \def\NCC@makeparttitle#1#2#3{%
    \ifx\@svsec\@empty \else
      \NCC@secmain#1{\let\NCC@asecnum\@empty\@svsec\@@par}\nobreak
    \fi
    \interlinepenalty \@M \NCC@secmain#1{#2{#3\@@par}}%
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@partsection}
% Define the |\NCC@partsection| to be equal to the |\NCC@mainsection| command
% which will be specified later when a main section will be declared.
%    \begin{macrocode}
  \def\NCC@partsection{\NCC@mainsection}
}{
%    \end{macrocode}
% \end{macro}
%
% The case of a book-like class. Zero-level section is the |\chapter|.
%    \begin{macrocode}
  \def\NCC@startmainsec#1#2#3#4#5{%
    \NCC@startchap
    \NCC@preparesectag{\leavevmode#2}{\@chapapp\nobreakspace}%
    \secdef{\NCC@chapter{#1}{#3}{#4}{#5}}{\NCC@schapter{#1}{#3}{#4}{#5}}%
  }
%    \end{macrocode}
%
% \begin{macro}{\NCC@startchap}
% The start chapter hook:
%    \begin{macrocode}
  \def\NCC@startchap{%
    \if@openright\cleardoublepage\else\clearpage\fi
    \thispagestyle{plain}\global\@topnum\z@
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@schapter}
% Prepare the starred version of chapter:
% \begin{quote}
% |\NCC@schapter|\marg{alignment}\marg{beforeskip}\marg{afterskip}\marg{style}\marg{heading}
% \end{quote}
%    \begin{macrocode}
  \def\NCC@schapter#1#2#3#4#5{%
    \let\@svsec\@empty
    \NCC@makechapter{#1}{#2}{#4}{#5}{#3}{}%
    \NCC@sec@reset@controls
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@chapter}
% Prepare the non-starred version of chapter:
% \begin{quote}
% |\NCC@chapter|\marg{alignment}\marg{beforeskip}\marg{afterskip}\marg{style}\\
% |            |\oarg{toc-entry}\marg{heading}
% \end{quote}
% It uses the |\NCC@infloats|\marg{action} hook that applies the specified
% action for all registered float types.
%    \begin{macrocode}
  \def\NCC@chapter#1#2#3#4[#5]#6{%
    \@ifundefined{if@mainmatter}{}{\if@mainmatter\else\noheadingtag\fi}%
    \def\NCC@make{\NCC@makechapter{#1}{#2}{#4}{#6}{#3}}%
    \NCC@makesection{chapter}{\z@}{#5}{%
      \typeout{\@chapapp\space\thechapter.}%
      \addcontentsline{toc}{chapter}{%
        \ifnum \c@secnumdepth>\m@ne
          \numberline{\NCC@thetocchapter}\fi
        #5%
      }%
      \NCC@infloats{\addtocontents{\@nameuse{ext@\@captype}}%
                      {\protect\runinsectionskip}}%
    }%
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\beforechapter}
% The |\beforechapter|\marg{something} hook is applied to the nearest
% chapter. An empty value of its parameter means no hook.
%    \begin{macrocode}
  \newcommand\beforechapter[1]{\gdef\NCC@beforechapter{#1}}
  \beforechapter{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@thetocchapter}
% The following hook allows redefine the appearance of chapter name
% in the TOC:
%    \begin{macrocode}
  \def\NCC@thetocchapter{\thechapter}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makechapter}
% This command makes a chapter:
% \begin{quote}
% |\NCC@makechapter|\marg{alignment}\marg{beforeskip}\marg{style}\marg{heading}\\
% |                |\marg{afterskip}\marg{action}
% \end{quote}
% The |\@svsec| is either |\@empty| or contains a chapter tag.
%    \begin{macrocode}
  \def\NCC@makechapter#1#2#3#4#5#6{%
    \if@twocolumn
      \@topnewpage[\NCC@makechaphead{#1}{#2}{#3}{#4}{#5}]%
    \else
      \NCC@makechaphead{#1}{#2}{#3}{#4}{#5}%
    \fi
    \NCC@makechapfinal{#6}%
    \@afterheading
    \ignorespaces
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makechapfinal}
% \begin{macro}{\NCC@makechapfinalgobble}
% The |\NCC@makechapfinal| hook applies a final action which can contain the
% |\chaptermark| command. Its default value is to put the parameter as is.
% If you let this command to be equal to the |\NCC@makechapfinalgobble|, the
% chapter mark will contain no chapter name.
%    \begin{macrocode}
  \let\NCC@makechapfinal\@firstofone
  \def\NCC@makechapfinalgobble#1{%
    \let\NCC@makechapmark\NCC@makemark
    \def\NCC@makemark{%
      \let\NCC@temp\@chapapp
      \let\@chapapp\@gobble
      \NCC@makechapmark
      \let\@chapapp\NCC@temp
    }%
    #1%
  }
  \@onlypreamble\NCC@makechapfinalgobble
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\NCC@makechaphead}
% This command makes a chapter head:
% \begin{quote}
% |\NCC@makechaphead|\marg{alignment}\marg{beforeskip}\marg{style}\marg{heading}\\
% |                 |\marg{afterskip}
% \end{quote}
%    \begin{macrocode}
  \def\NCC@makechaphead#1#2#3#4#5{%
    \ifx\NCC@beforechapter\@empty
      \StartFromTextArea \vskip #2%
    \else
      \begingroup
        \@twocolumnfalse
        \let\NCC@global\@empty
        \NCC@sec@reset@controls
        \normalfont \NCC@beforechapter \par
      \endgroup
      \beforechapter{}%
    \fi
    \begingroup \normalfont
      \NCC@asecnumset
      \NCC@makechaptitle{#1}{#3}{#4}%
    \endgroup
    \par\nobreak \vskip #5\relax
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makechaptitle}
% This command makes a chapter title itself:
% \begin{quote}
% |\NCC@makechaptitle|\marg{alignment}\marg{style}\marg{heading}
% \end{quote}
% The |\NCC@secmain| hook contains the dynamic alignment style
% or nothing.
%    \begin{macrocode}
  \def\NCC@makechaptitle#1#2#3{%
    \ifx\@svsec\@empty \else
      \NCC@secmain#1{\let\NCC@asecnum\@empty\@svsec\@@par}%
    \fi
    \interlinepenalty \@M \NCC@secmain#1{#2{#3\@@par}}%
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\epigraph}
% \begin{macro}{\epigraphparameters}
% \begin{quote}
% |\epigraph|\oarg{width}\marg{text}\marg{author}\\
% |\epigraphparameters|\marg{style}\marg{width}\marg{height}\marg{author-style}\\
% |                   |\marg{after-action}
% \end{quote}
%    \begin{macrocode}
  \newcommand*\epigraph[1][\NCC@epigraphwidth]{\NCC@epigraph{#1}}
  \newcommand*\epigraphparameters[5]{%
    \def\NCC@epigraphwidth{#2}%
    \long\def\NCC@epigraph##1##2##3{
      \beforechapter{\def\epigraphwidth{##1}%
        #1\par
        \NCC@makeepigraph{#3}{##2}{#4{##3}}\par
        #5%
      }%
    }%
  }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\NCC@makeepigraph}
% \begin{quote}
% |\NCC@makeepigraph|\marg{height}\marg{text}\marg{author}
% \end{quote}
%    \begin{macrocode}
  \long\def\NCC@makeepigraph#1#2#3{%
    \@begin@tempboxa\vtop{\setlength{\hsize}{\epigraphwidth}%
        \@parboxrestore{#2\@@par}#3\@@par
      }%
      \setlength\@tempdima{#1}\advance\@tempdima -\totalheight
      \ifdim\@tempdima>\z@
        \advance\@tempdima\depth
        \dp\@tempboxa\@tempdima
      \fi
      \leavevmode\box\@tempboxa
    \@end@tempboxa
  }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection{Make Part in Book-like Classes}
%
% \begin{macro}{\NCC@startpart}
% The start-part hook:
%    \begin{macrocode}
  \def\NCC@startpart{%
    \if@openright\cleardoublepage\else\clearpage\fi
    \thispagestyle{plain}%
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@spart}
% Prepare the starred version of part:
% \begin{quote}
% |\NCC@spart|\marg{before}\marg{after}\marg{style}\marg{heading}
% \end{quote}
%    \begin{macrocode}
  \def\NCC@spart#1#2#3#4{%
    \let\@svsec\@empty
    \NCC@makepart{#1}{#3}{#4}{#2}{}%
    \NCC@sec@reset@controls
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@part}
% Prepare the non-starred version of part:
% \begin{quote}
% |\NCC@part|\marg{before}\marg{after}\marg{style}\oarg{toc-entry}\marg{heading}
% \end{quote}
%    \begin{macrocode}
  \def\NCC@part#1#2#3[#4]#5{%
    \def\NCC@make{\NCC@makepart{#1}{#3}{#5}{#2}}%
    \NCC@makesection{part}{\m@ne}{#4}{%
      \addcontentsline{toc}{part}{%
        \ifnum \c@secnumdepth>-2
          \numberline{\NCC@thetocpart}\fi
        #4%
      }%
    }%
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@thetocpart}
% The following hook allows redefine the appearance of part name
% in the TOC:
%    \begin{macrocode}
  \def\NCC@thetocpart{\thepart}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makepart}
% This command makes a part:
% \begin{quote}
% |\NCC@makepart|\marg{before}\marg{style}\marg{heading}\marg{after}\marg{action}
% \end{quote}
% The |\@svsec| is either |\@empty| or contains a part tag.
%    \begin{macrocode}
  \def\NCC@makepart#1#2#3#4#5{%
    \if@twocolumn \onecolumn \@tempswatrue \else \@tempswafalse \fi
    \begingroup\normalfont
      \NCC@asecnum@
      \NCC@makeparttitle{#1}{#2}{#3}%
    \endgroup
    \NCC@makepartfinal{#5}#4%
    \if@tempswa \twocolumn \fi
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makepartfinal}
% \begin{macro}{\NCC@makepartfinalgobble}
% The |\NCC@makepartfinal| hook applies a final action which can contain the
% |\partmark| command. Its default value is to put the parameter as is.
% If you let this command to be equal to the |\NCC@makepartfinalgobble|, the
% chapter mark will contain no chapter name.
%    \begin{macrocode}
  \let\NCC@makepartfinal\@firstofone
  \def\NCC@makepartfinalgobble#1{%
    \let\NCC@makepartmark\NCC@makemark
    \def\NCC@makemark{%
      \let\NCC@temp\partname
      \let\partname\@gobble
      \NCC@makepartmark
      \let\partname\NCC@temp
    }%
    #1%
  }
  \@onlypreamble\NCC@makepartfinalgobble
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\NCC@makeparttitle}
% This command makes a part title itself:
% \begin{quote}
% |\NCC@makeparttitle|\marg{before}\marg{style}\marg{heading}
% \end{quote}
%    \begin{macrocode}
  \def\NCC@makeparttitle#1#2#3{#1%
    \ifx\@svsec\@empty \else
      {\let\NCC@asecnum\@empty\@svsec\@@par}\nobreak \fi
    \interlinepenalty \@M #2{#3\@@par}
  }
}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Make Captions}
%
% \begin{macro}{\CaptionTagSuffix}
% |\CaptionTagSuffix|\marg{suffix} sets a default suffix after caption tag:
%    \begin{macrocode}
\newcommand*{\CaptionTagSuffix}[1]{\def\NCC@acapnum{#1}}
\@onlypreamble\CaptionTagSuffix
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\captiontagsuffix}
% |\captiontagsuffix|\oarg{type}\marg{suffix} changes a suffix after caption
% tag.
%    \begin{macrocode}
\newcommand*\captiontagsuffix[2][]{%
  \NCC@prepare@capkey{suffix}{#1}{\def\NCC@acapnum{#2}}%
}
\let\NCC@capsuffix@\@empty
%    \end{macrocode}
% \end{macro}

%
% \begin{macro}{\captionstyle}
% |\captionstyle|\oarg{type}\marg{style} selects a style to be applied
% to the caption text. Three styles are available now: |default|, |center|,
% and |centerlast|.
%    \begin{macrocode}
\newcommand*\captionstyle[1][]{%
  \NCC@set@capkey{style}{style}{#1}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\captiontagstyle}
% |\captiontagstyle|\oarg{type}\marg{style} selects a style of caption tag:
% |right| or |para|.
%    \begin{macrocode}
\newcommand*\captiontagstyle[1][]{%
  \NCC@set@capkey{tag}{tag style}{#1}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\captionwidth}
% The |\captionwidth|\oarg{type}\marg{length} specifies a caption width
% in |\@tempdima|. Default width is |\linewidth|.
%    \begin{macrocode}
\newcommand*\captionwidth[2][]{%
  \NCC@prepare@capkey{width}{#1}{\setlength{\@tempdima}{#2}}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@set@capkey}
% |\NCC@set@capkey|\marg{key}\marg{description}\marg{type}\marg{value}
%    \begin{macrocode}
\def\NCC@set@capkey#1#2#3#4{%
  \@ifundefined{NCC@makecap#1@#4}
  {\PackageError{nccsect}{Unknown caption #2 `#4'}{}%
  }{%
    \edef\@tempa{\noexpand\NCC@prepare@capkey{#1}{#3}{%
        \expandafter\noexpand\csname NCC@makecap#1@#4\endcsname
      }%
    }%
    \@tempa
  }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@prepare@capkey}
% |\NCC@prepare@capkey|\marg{key}\marg{type}\marg{definition}
%    \begin{macrocode}
\def\NCC@prepare@capkey#1#2{%
  \def\@tempa{#2}%
  \ifx\@tempa\@empty
    \ifx\@captype\@undefined \else \let\@tempa\@captype \fi
  \fi
  \expandafter\def\csname NCC@cap#1@\@tempa\endcsname
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@apply@cap}
% |\NCC@apply@cap|\marg{key}
%    \begin{macrocode}
\def\NCC@apply@cap#1{%
  \@ifundefined{NCC@cap#1@\@captype}%
    {\let\@tempa\@empty}{\let\@tempa\@captype}%
  \csname NCC@cap#1@\@tempa\endcsname
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@startcaption}
% This command starts a caption:
% \begin{quote}
% |\NCC@startcaption|\marg{beforeskip}\marg{afterskip}\marg{style}
% \end{quote}
%    \begin{macrocode}
\def\NCC@startcaption#1#2#3{%
  \secdef{\NCC@caption{#1}{#2}{#3}}{\NCC@scaption{#1}{#2}{#3}}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@scaption}
% Starred version of caption:
% \begin{quote}
% |\NCC@scaption|\marg{beforeskip}\marg{afterskip}\marg{style}\marg{text}
% \end{quote}
%    \begin{macrocode}
\long\def\NCC@scaption#1#2#3#4{%
  \let\@svsec\@empty
  \NCC@makecaption{#3}{#1}{#4}{#2}{}%
  \NCC@sec@reset@controls
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@caption}
% Non-starred version of caption:
% \begin{quote}
% |\NCC@caption|\marg{beforeskip}\marg{afterskip}\marg{style}\oarg{toc-entry}\marg{text}
% \end{quote}
%    \begin{macrocode}
\long\def\NCC@caption#1#2#3[#4]#5{%
  \def\NCC@make{\NCC@makecaption{#3}{#1}{#5}{#2}}%
  \NCC@makesection{\@captype}{\z@}{#4}{%
    \begingroup
      \let\centering\@empty
      \addcontentsline{\@nameuse{ext@\@captype}}{\@captype}{%
        \ifnum \c@secnumdepth>\m@ne
          \numberline{\@nameuse{the\@captype}}\fi
        #4%
      }%
    \endgroup
  }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecaption}
% This command makes a caption:
% \begin{quote}
% |\NCC@makecaption|\marg{style}\marg{beforeskip}\marg{text}\marg{afterskip}\marg{action}
% \end{quote}
% The |\@svsec| is either |\@empty| or contains a caption tag.
%    \begin{macrocode}
\long\def\NCC@makecaption#1#2#3#4#5{%
  \begingroup\par\normalfont
    #1{}\addvspace{#2}\noindent
%    \end{macrocode}
% Calculate in |\@tempcnta| caption variants:
% 0~-- no caption, 1~-- caption tag only, 2~-- caption text only,
% 3~-- both caption tag and text are nonempty.
%    \begin{macrocode}
    \ifx\@svsec\@empty \@tempcnta\z@ \else \@tempcnta\@ne \fi
    \def\@tempa{#3}%
    \ifx\@tempa\@empty \else \advance\@tempcnta\tw@ \fi
%    \end{macrocode}
% Put caption in a parbox aligned at the top line.
%    \begin{macrocode}
    \ifnum\@tempcnta=\z@ \else
      \NCC@apply@cap{suffix}%
      \NCC@apply@cap{width}%
      \NCC@vtopcap{\@parboxrestore\NCC@apply@cap{tag}{#3}\@@par}\par
%    \end{macrocode}
% We avoid insert zero skip after parbox to allow captions of
% side-by-side figures to be aligned at their top line.
%    \begin{macrocode}
      \setlength\@tempskipa{#4}%
      \ifdim\@tempskipa=\z@ \else \vskip \@tempskipa\fi
    \fi
  \endgroup
  #5%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@vtopcap}
% |\NCC@vtopcap|\marg{text} places a text in a vertical
% top-aligned box. Its width is prepared in |\@tempdima|
% before this macro. If its width is greater than the
% |\linewidth|, we allow overlap the box out of line.
% The overlapping directions are calculated from stretches of
% paragraph marginal skips.
%    \begin{macrocode}
\def\NCC@vtopcap#1{%
  \ifdim\@tempdima>\linewidth
    \@tempskipa \leftskip \advance\@tempskipa -1\@tempskipa
    \@tempskipb \rightskip \advance\@tempskipb \parfillskip
    \advance\@tempskipb -1\@tempskipb
    \vtop{\hb@xt@\linewidth{%
      \NCC@ifzeroskip\@tempskipa{}{\hss}%
      \vtop{\hsize\@tempdima#1}%
      \NCC@ifzeroskip\@tempskipb{}{\hss}%
    }}%
  \else
    \vtop{\hsize\@tempdima#1}%
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@ifzeroskip}
% |\NCC@ifzeroskip|\marg{register}\marg{true-clause}\marg{false-clause}
% executes the \meta{true-clause} if the value of skip register
% is exactly zero skip without stretchability. Otherwise, the
% \meta{false-clause} is executed.
%    \begin{macrocode}
\def\NCC@ifzeroskip#1{%
  \edef\@tempa{\the#1}\edef\@tempb{\the\z@skip}%
  \ifx\@tempa\@tempb
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecaptag@para}
% The |\NCC@makecaptag@para|\marg{text} prepares run-in tag.
%    \begin{macrocode}
\long\def\NCC@makecaptag@para#1{%
  \ifnum\@tempcnta<\thr@@ \let\NCC@acapnum\@empty\fi
  \NCC@apply@cap{style}{{\@svsec}\ignorespaces#1}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecaptag@left}
% The |\NCC@makecaptag@left|\marg{text} prepares flush-left tag.
%    \begin{macrocode}
\def\NCC@makecaptag@left{\NCC@separate@captag\raggedright}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecaptag@center}
% The |\NCC@makecaptag@center|\marg{text} prepares centered tag.
%    \begin{macrocode}
\def\NCC@makecaptag@center{\NCC@separate@captag\centering}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecaptag@right}
% The |\NCC@makecaptag@right|\marg{text} prepares flush-right tag.
%    \begin{macrocode}
\def\NCC@makecaptag@right{\NCC@separate@captag\raggedleft}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@separate@captag}
% The |\NCC@separate@captag|\marg{style}\marg{text} prepares a
% caption tag in a separate line.
%    \begin{macrocode}
\long\def\NCC@separate@captag#1#2{%
  \ifodd\@tempcnta
    {\let\NCC@acapnum\@empty #1\@svsec\@@par}%
  \fi
  \ifnum\@tempcnta>\@ne
    \ifnum\@tempcnta=\thr@@ \vskip .5ex\fi
    \NCC@apply@cap{style}{#2}%
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecapstyle@default}
% The |\NCC@makecapstyle@default|\marg{text} prepares caption text
% in default \LaTeX's style.
%    \begin{macrocode}
\long\def\NCC@makecapstyle@default#1{%
  \setbox\@tempboxa\vtop{\hsize\linewidth\@parboxrestore#1\@@par}%
  \ifdim\dp\@tempboxa<\baselineskip \centering#1%
  \else \box\@tempboxa \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecapstyle@para}
% The |\NCC@makecapstyle@para|\marg{text} prepares ordinary caption.
%    \begin{macrocode}
\long\def\NCC@makecapstyle@para#1{#1}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecapstyle@left}
% The |\NCC@makecapstyle@left|\marg{text} prepares flush-left caption.
%    \begin{macrocode}
\long\def\NCC@makecapstyle@left#1{\raggedright#1}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecapstyle@right}
% The |\NCC@makecapstyle@right|\marg{text} prepares flush-right caption.
%    \begin{macrocode}
\long\def\NCC@makecapstyle@right#1{\raggedleft#1}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecapstyle@center}
% The |\NCC@makecapstyle@center|\marg{text} prepares centered caption.
%    \begin{macrocode}
\long\def\NCC@makecapstyle@center#1{\centering#1}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@makecapstyle@centerlast}
% The |\NCC@makecapstyle@centerlast|\marg{text} prepares caption with
% last line centered.
%    \begin{macrocode}
\long\def\NCC@makecapstyle@centerlast#1{%
  \leftskip\@flushglue \rightskip -\@flushglue
  \parfillskip\z@\@plus 2fil\relax#1%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\RegisterFloatType}
% The |\RegisterFloatType|\marg{type} command registers a float type:
%    \begin{macrocode}
\newcommand*{\RegisterFloatType}[1]{%
  \edef\NCC@floatlist{\NCC@floatlist{#1}}%
}
\let\NCC@floatlist\@empty
\@onlypreamble\RegisterFloatType
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@infloats}
% The |\NCC@infloats|\marg{action} command applies the given \meta{action}
% to all registered float types. During the cycle,
% the |\@captype| contains a name of float and
% the |\@tempcnta| is equal to its registration number
% (1~for the figure float, 2~for the table float, and so on).
%    \begin{macrocode}
\def\NCC@infloats#1{%
  \@tempcnta\z@
  \let\NCC@temp \@captype
  \expandafter \@tfor \expandafter \@captype
    \expandafter :\expandafter =\NCC@floatlist \do
  {\advance\@tempcnta\@ne #1}%
  \let\@captype\NCC@temp
}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Declare Sections and Captions}
%
% \begin{macro}{\DeclareSection}
% Now we can implement the |\DeclareSection| command.
% It generates:
% \begin{desclist}{}{}
% \item[\cs{NCC@mainsection}] command if \meta{level} = 0;
% \item[\cs{NCC@section}\meta{level-in-roman}] command if \meta{level} $>$ 0;
% \item[\cs{NCC@cap@}\meta{float-type}] command if \meta{level} $<$ 0.
% \end{desclist}
%    \begin{macrocode}
\newcommand{\DeclareSection}{\@ifstar{\NCC@dsecx}{\NCC@dsec}}
\def\NCC@dsec#1#2{%
  \@ifnextchar[{\NCC@dsect{#1}{#2}}{\NCC@dsect{#1}{#2}[\z@skip]}%
}
\@onlypreamble\DeclareSection
\@onlypreamble\NCC@dsec
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@dsect}
% The non-starred version of section declaration command
% prepares display sections with traditional formatting:
% \begin{quote}
% |\NCC@dsect|\marg{level}\marg{type}\oarg{indent}\marg{prefix}\marg{beforeskip}\\
% |          |\marg{afterskip}\marg{style}
% \end{quote}
% It is also used for generation of run-in sections
% and captions.
%    \begin{macrocode}
\def\NCC@dsect#1#2[#3]#4#5#6#7{%
  \ifnum#1>\z@
    \expandafter\def\csname NCC@section\romannumeral#1\endcsname{%
      \NCC@setsectionsuffix{#1}%
      \NCC@preparesectag{#4}{}%
      \let\NCC@makesec\NCC@makesect
      \NCC@startsection{#2}{#1}{#3}{#5}{#6}{#7}}%
  \else
    \ifnum#1=\z@
      \def\NCC@mainsection{%
        \NCC@setsectionsuffix\z@
        \let\NCC@secmain\@empty
%    \end{macrocode}
% The empty |\NCC@secmain| means standard alignment of main section
%    \begin{macrocode}
        \NCC@startmainsec{%
          \NCC@hangfrom{\hskip #3}\NCC@adjsecmargins{}\@flushglue
          \ignorespaces}%
          {#4}{#5}{#6}{#7}%
      }%
    \else
      \NCC@dsecf{#2}{#4}{#5}{#6}{#7}%
    \fi
  \fi
}
\@onlypreamble\NCC@dsect
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@dsecx}
% The starred version of section declaration command
% prepares display sections with dynamic formatting:
% \begin{quote}
% |\NCC@dsecx|\marg{level}\marg{type}\marg{prefix}\marg{beforeskip}\marg{afterskip}\marg{style}
% \end{quote}
% It can also be used for generation of captions.
%    \begin{macrocode}
\def\NCC@dsecx#1#2#3#4#5#6{%
  \ifnum#1>\z@
    \expandafter\def\csname NCC@section\romannumeral#1\endcsname{%
      \NCC@setsectionsuffix{#1}%
      \NCC@setsectionstyle{#1}%
      \NCC@preparesectag{#3}{}%
      \let\NCC@makesec\NCC@makesecx
      \NCC@startsection{#2}{#1}{\z@}{#4}{#5}{#6}}%
  \else
    \ifnum#1=\z@
%    \end{macrocode}
% The non-empty |\NCC@secmain| hook means the dynamic alignment.
% We also redefine the dynamic section style |\NCC@sec| in such a way that the
% right skip stretchability will be |1fil| if the section style has
% no flush glue.
%    \begin{macrocode}
      \def\NCC@mainsection{%
        \NCC@setsectionsuffix\z@
        \NCC@setsectionstyle\z@
        \let\NCC@secsave\NCC@sec \let\NCC@sec\NCC@secflush
        \def\NCC@secmain{\protect\NCC@sec{}}%
        \NCC@startmainsec{}{#3}{#4}{#5}{#6}%
      }%
    \else
      \NCC@dsecf{#2}{#3}{#4}{#5}{#6}%
    \fi
  \fi
}
\@onlypreamble\NCC@dsecx
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@secflush}
% |\NCC@secflush|\marg{tag} applies a section style saved in the
% |\NCC@secsave| macro and adjusts |\rightskip| and |\parfillskip|
% if the left and right margins have no stretchability in sum.
%    \begin{macrocode}
\def\NCC@secflush#1{\NCC@secsave{#1}%
  \@tempskipa\leftskip \advance\@tempskipa\rightskip
  \advance\@tempskipa -1\@tempskipa
%    \end{macrocode}
% There are three general cases in which the
% correction of right margin is required:
% \begin{center}\small\catcode`|=12
% \begin{tabular}{|l|c|c|c|}\hline
% \tc{\cbox{Case}} & \cbox{\tt\string\leftskip} & \cbox{\tt\string\rightskip}
% & \cbox{\tt\string\parfillskip} \\\hline
% \Strut/.7/
% Left last   &\tt x &\tt y &\tt 0pt plus 1fil \\
% Center last &\tt x plus 1fil &\tt y plus -1fil &\tt 0pt plus 2fil \\
% Right last  &\tt x plus 1fil &\tt y plus -1fil &\tt 0pt plus 1fil \\\hline
% \end{tabular}
% \end{center}
% In all these cases the correction is simple: we need to add |\parfillskip|
% to the |\rightskip| and set |\parfillskip| to zero.
%    \begin{macrocode}
  \NCC@ifzeroskip\@tempskipa{%
    \advance\rightskip \parfillskip \parfillskip \z@skip
  }{}%
  \ignorespaces
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@dsecf}
% This command declares captions of floats:
% \begin{quote}
% |\NCC@dsecf|\marg{type}\marg{prefix}\marg{beforeskip}\marg{afterskip}\marg{style}
% \end{quote}
%    \begin{macrocode}
\def\NCC@dsecf#1#2#3#4#5{%
  \expandafter\def\csname NCC@cap@#1\endcsname{%
    \def\NCC@makesectag####1{#2{\csname #1name\endcsname}%
      \nobreakspace####1\NCC@acapnum}%
    \NCC@startcaption{#3}{#4}{#5}%
  }%
}
\@onlypreamble\NCC@dsectf
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DeclarePart}
% In book-like classes, a part is declared in a special way:
% \begin{quote}
% |\DeclarePart|\marg{before}\marg{after}\marg{prefix}\marg{style}
% \end{quote}
% Long parameters are allowed in this declaration.
%    \begin{macrocode}
\@ifundefined{chapter}{}{%
  \newcommand\DeclarePart[4]{%
    \def\NCC@partsection{%
      \NCC@startpart
      \NCC@preparesectag{\leavevmode#3}{\partname\nobreakspace}%
      \secdef{\NCC@part{#1}{#2}{#4}}{\NCC@spart{#1}{#2}{#4}}%
    }%
  }
  \@onlypreamble\DeclarePart
}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Caption Patches}
%
% \begin{macro}{\@makecaption}
% We emulate here the |\@makecaption{\fnum@|\meta{type}|}|\marg{caption}
% command to provide the compatibility with packages using it.
% It calls the |\NCC@cap@|\meta{type} command using the type specified
% in |\@captype| command. The counter is already stepped
% before this command and all necessary things are written
% to aux. Therefore, we turn off writing to aux and decrease a value of
% the float counter by |-1| because it will be stepped within again.
%    \begin{macrocode}
\long\def\@makecaption#1#2{%
  \begingroup
    \skipwritingtoaux
    \addtocounter\@captype\m@ne
    \csname NCC@cap@\@captype\endcsname[]{#2}%
  \endgroup
}
%    \end{macrocode}
% \end{macro}
%
% Add patch to the \textbf{supertabular} package:
%    \begin{macrocode}
\AfterPackage{supertabular}{%
  \long\def\ST@caption#1[#2]#3{\par%
    \addcontentsline{\csname ext@#1\endcsname}{#1}%
      {\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
    \begingroup\centering
      \def\@captype{#1}%
      \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
    \endgroup
  }
}
%    \end{macrocode}
%
% Add patch to the \textbf{xtab} package:
%    \begin{macrocode}
\AfterPackage{xtab}{%
  \long\def\ST@caption#1[#2]#3{\par%
    \@initisotab
    \addcontentsline{\csname ext@#1\endcsname}{#1}%
      {\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
    \begingroup\centering
      \def\@captype{#1}%
      \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
    \endgroup
    \global\advance\ST@pageleft -\PWSTcapht
    \ST@trace\tw@{Added caption. Space left for xtabular: \the\ST@pageleft}%
  }
}
%    \end{macrocode}
%
% Add patch to the \textbf{longtable} package:
%    \begin{macrocode}
\AfterPackage{longtable}{%
  \def\LT@makecaption#1#2#3{%
    \LT@mcol\LT@cols c{\hbox to\z@{\hss
      \parbox[t]\LTcapwidth{\centering\def\@captype{table}%
        \ifx#1\@gobble \NCC@cap@table*{#3}%
        \else \@makecaption{\fnum@table}{#3}%
        \fi
      }%
      \hss
    }}%
  }
}
%    \end{macrocode}
%
% \subsection{Declare TOC-Entries}
%
% \begin{macro}{\DeclareTOCEntry}
% The toc-entries declaration command:
% \begin{quote}
% |\DeclareTOCEntry|\marg{level}\marg{action}\marg{prefix}\marg{prototype}\\
% |                |\marg{style}\oarg{next}
% \end{quote}
%    \begin{macrocode}
\newcommand*{\DeclareTOCEntry}[5]{%
  \@ifnextchar[{\NCC@dtoc{#1}{#2}{#3}{#4}{#5}}%
               {\NCC@dtoc{#1}{#2}{#3}{#4}{#5}[\NCC@nexttocnum{#3}{#4}]}%
}
\def\NCC@dtoc#1#2#3#4#5[#6]{%
%    \end{macrocode}
% Declare a toc-entry command for a registered float.
% We scan the registration list and find the necessary
% float type comparing its registration number with the negation
% of level. The generated command is |\l@|\meta{float-type}:
%    \begin{macrocode}
  \ifnum#1<\z@
    \@tempswatrue
    \NCC@infloats{%
      \ifnum#1=-\@tempcnta
        \expandafter\def\csname l@\@captype\endcsname
          {\NCC@tocentry\z@{#2}{#3}{#4}{#5}}%
        \@tempswafalse
        \@break@tfor
      \fi
    }%
%    \end{macrocode}
% Incorrect level number. Generate an error.
%    \begin{macrocode}
    \if@tempswa
      \@tempcnta#1\relax
      \@tempcnta -\@tempcnta
      \PackageError{nccsect}%
        {Float type registration number \the\@tempcnta\space
         is out of range}{}%
    \fi
  \else
%    \end{macrocode}
% Prepare in |\@tempa| a command name: |\l@section| or |\l@subsection|
% or \ldots\ or |\l@subparagraph| or |\l@section@vi| or \ldots:
%    \begin{macrocode}
    \ifnum#1>\z@
      \edef\@tempa{\noexpand\def\expandafter\noexpand
                   \csname l@\NCC@secname{#1}\endcsname}%
%    \end{macrocode}
% or |\l@part| or |\l@chapter|:
%    \begin{macrocode}
    \else
      \@ifundefined{chapter}{\def\@tempa{\def\l@part}}%
                            {\def\@tempa{\def\l@chapter}}%
    \fi
%    \end{macrocode}
% Declare the toc-entry:
%    \begin{macrocode}
    \@tempa{\NCC@tocentry{#1}{#2}{#3}{#4}{#5}}%
%    \end{macrocode}
% Prepare in the |\l@tocskip@|\meta{next-level-in-roman} command
% the left margin adjustment command. The
% |\NCC@tocnumprototype|\marg{style}\marg{prototype} hook
% applies a style to the prototype of toc-entry number.
%    \begin{macrocode}
    \@tempcnta #1\relax \advance\@tempcnta\@ne
    \expandafter\def\csname l@tocskip@\romannumeral\@tempcnta
      \endcsname{\NCC@tocadj{\NCC@tocnumprototype{#5}{#6}}}%
  \fi
}
\@onlypreamble\DeclareTOCEntry
\@onlypreamble\NCC@dtoc
\def\NCC@nexttocnum#1#2{#1#2\NCC@atocnum}
\def\NCC@tocnumprototype#1#2{\let\applystyle\@firstoftwo#1{#2}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@tocadj}
% The command increases |\@tempdimb| on the width of the argument:
%    \begin{macrocode}
\def\NCC@tocadj#1{%
  \settowidth\@tempdima{\let\NCC@atocdo\@firstoftwo#1}%
  \advance\@tempdimb\@tempdima
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DeclareTOCPart}
% Part toc-entry declaration in book-like classes. If optional
% \meta{afterskip} is omitted, the default |\NCC@runskip| value
% is applied after this entry.
% \begin{quote}
% |\DeclareTOCPart|\marg{action}\oarg{afterskip}\marg{prefix}\marg{prototype}\marg{style}
% \end{quote}
%    \begin{macrocode}
\@ifundefined{chapter}{}{%
  \newcommand*\DeclareTOCPart[1]{%
    \@ifnextchar[{\NCC@dtocpart{#1}}{\NCC@dtocpart{#1}[\NCC@runskip]}%
  }
  \def\NCC@dtocpart#1[#2]#3#4#5{%
    \def\l@part##1##2{%
      \NCC@tocentry{-1}{%
%    \end{macrocode}
% We temporary add |1fil| to the toc right margin to prepare
% a ragged right toc-entry.
%    \begin{macrocode}
        \TOCMarginDrift{1fil}%
%    \end{macrocode}
% Breaks before part are preferred.
%    \begin{macrocode}
        \addpenalty{-\@highpenalty}#1%
      }{#3}{#4}{#5}{##1}{\hss##2}%
      \nobreak \vskip #2\relax
      \@nobreaktrue
      \everypar{\@nobreakfalse\everypar{}}%
    }%
  }
  \@onlypreamble\DeclareTOCPart
  \@onlypreamble\NCC@dtocpart
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@tocentry}
% This command makes a toc-entry:
% \begin{quote}
% |\NCC@tocentry|\marg{level}\marg{action}\marg{prefix}\marg{prototype}\\
% |             |\marg{style}\marg{entry}\marg{page-number}
% \end{quote}
%    \begin{macrocode}
\def\NCC@tocentry#1#2#3#4#5#6#7{%
  \ifnum #1>\c@tocdepth \else
    \par\begingroup\normalfont #2%
      \let\applystyle\@firstoftwo
%    \end{macrocode}
% Calculate the left margin in the |\@tempdimb| register
% applying the |\l@tocskip@i|, \ldots, |\l@tocskip@|\meta{level-in-roman}
% commands:
%    \begin{macrocode}
      \@tempdimb\z@ \@tempcnta #1\relax
      \@whilenum \@tempcnta >\z@\do
        {\@nameuse{l@tocskip@\romannumeral \@tempcnta}%
         \advance\@tempcnta\m@ne}%
%    \end{macrocode}
% The |\NCC@preparetocnum|\marg{style}\marg{prefix} hook prepares
% the |\NCC@maketocnum|\marg{tag} command creating
% a number-line tag:
%    \begin{macrocode}
      \NCC@preparetocnum{#5}{#3}%
%    \end{macrocode}
% Calculate the hang indent value in |\@tempdima|:
%    \begin{macrocode}
      \settowidth\@tempdima{\let\NCC@atocdo\@firstoftwo\NCC@maketocnum{#4}}%
%    \end{macrocode}
% Produce the toc-entry. The |\NCC@tocentrytitle|\marg{style}\marg{title}
% hook applies the style to the toc-entry title.
%    \begin{macrocode}
      \@dottedtocline{#1}{\@tempdimb}{\@tempdima}%
        {\let\NCC@atocdo\@secondoftwo\NCC@tocentrytitle{#5}{#6\unskip}}%
        {\let\applystyle\@secondoftwo#5{#7}}%
%    \end{macrocode}
% Allow break after toc-entry:
%    \begin{macrocode}
      \@nobreakfalse
    \endgroup
  \fi
}
\def\NCC@preparetocnum#1#2{%
  \def\NCC@maketocnum##1{\NCC@atocdo{#1}{}{#2##1\NCC@atocnum}}%
}
\def\NCC@tocentrytitle#1#2{#1{\ignorespaces#2}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\numberline}
% Redefine the |\numberline|\marg{tag} command to work correct
% if the width of tag is greater than |\@tempdima|. The
% tag is prepared with the |\NCC@maketocnum|\marg{tag} command.
%    \begin{macrocode}
\DeclareRobustCommand*\numberline[1]{%
  \setbox\@tempboxa\hbox{\NCC@maketocnum{#1}}%
  \ifdim \wd\@tempboxa > \@tempdima
    \box\@tempboxa
  \else
    \hb@xt@\@tempdima{\unhbox\@tempboxa\hfil}%
  \fi
  \ignorespaces
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NCC@maketocnum}
% The default implementation of the |\NCC@maketocnum|\marg{tag} command.
% We must define it because the |\numberline| command must
% work out of scope of toc-entries.
%    \begin{macrocode}
\def\NCC@maketocnum#1{#1\NCC@atocnum}
\let\NCC@atocdo\@secondoftwo
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NumberlineSuffix}
% The |\NumberlineSuffix|\marg{calc-suffix}\marg{actual-suffix}
% command saves suffices inserted after number tag in the |\numberline|
% command. It saves it in the |\NCC@atocnum| hook as parameters of
% |\NCC@atocdo| command. Letting the last one to |\@firstoftwo| or
% |\@secondoftwo|, we select the \meta{calc-suffix} or \meta{actual-suffix}
% respectively.
%    \begin{macrocode}
\newcommand*{\NumberlineSuffix}[2]{\def\NCC@atocnum{\NCC@atocdo{#1}{#2}}}
\@onlypreamble\NumberlineSuffix
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\TOCMarginDrift}
% The |\TOCMarginDrift|\marg{drift} specifies allowed drift of right margin
% in TOC.
%    \begin{macrocode}
\newcommand*\TOCMarginDrift[1]{%
  \def\@tempa{#1}%
  \ifx\@tempa\@empty \let\NCC@tocdrift\@empty
  \else \def\NCC@tocdrift{\@plus #1\relax}\fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\PnumPrototype}
% The |\PnumPrototype|\marg{prototype} command saves the page number
% prototype in the |\NCC@pnum| hook and applies the |\NCC@setpnum|
% command.
%    \begin{macrocode}
\newcommand*{\PnumPrototype}[1]{\def\NCC@pnum{#1}\NCC@setpnum}
\@onlypreamble\PnumPrototype
\def\NCC@setpnum{%
  \settowidth\@tempdima{\NCC@pnum}%
  \edef\@pnumwidth{\the\@tempdima}%
  \advance\@tempdima 1em
  \edef\@tocrmarg{\the\@tempdima \noexpand\NCC@tocdrift}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\SetTOCStyle}
% The toc-style hook is embedded into the |\@starttoc| command.
% We also recalculate the page number prototype and update
% margins when a toc starts.
%    \begin{macrocode}
\newcommand*{\SetTOCStyle}[1]{\def\NCC@tocstyle{#1}}
\@onlypreamble\SetTOCStyle
\let\NCC@latexstarttoc\@starttoc
\def\@starttoc#1{%
  \begingroup
    \normalfont \NCC@tocstyle \NCC@setpnum
    \NCC@latexstarttoc{#1}%
  \endgroup
}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Service and Defaults}
%
% \begin{macro}{\StartFromTextArea}
% \begin{macro}{\StartFromHeaderArea}
% These commands are applied at the beginning of page
% to set current position exactly at the first line
% of text area or at the header line, respectively.
% Both these commands are defined in two packages: in this one and in
% the \textbf{textarea}. To be sure that the commands are specified
% in these packages only, we mutually test packages to be loaded.
%    \begin{macrocode}
\@ifpackageloaded{textarea}{}{%
  \newcommand\StartFromTextArea{\par
    {\parskip\z@ \strut\par}\vskip -\baselineskip
  }
  \newcommand\StartFromHeaderArea{%
    \StartFromTextArea
    \vskip -\headsep \vskip -\ht\strutbox
  }
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\bff}
% The |\bff| command tries to set everything bold.
%    \begin{macrocode}
\newcommand{\bff}{\normalfont\bfseries\mathversion{bold}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\aftersectionvspace}
% This command eliminates a vertical space inserted after a previous
% section and inserts a vertical space specified.
%    \begin{macrocode}
\newcommand*\aftersectionvspace[1]{%
  \ifvmode \if@nobreak
    \vskip -\lastskip \vskip #1\relax
  \fi \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\startsection}
% Define the |\startsection| command. In article-class,
% both zero and negative levels refer to the same part section.
%    \begin{macrocode}
\newcommand*{\startsection}[1]{%
  \ifnum#1>\z@
    \def\@tempa{\csname NCC@section\romannumeral#1\endcsname}%
  \else
    \ifnum#1=\z@
      \def\@tempa{\NCC@mainsection}%
    \else
      \def\@tempa{\NCC@partsection}%
    \fi
  \fi
  \@tempa
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\part}
% \begin{macro}{\section}
% \begin{macro}{\subsection}
% \begin{macro}{\subsubsection}
% \begin{macro}{\paragraph}
% \begin{macro}{\subparagraph}
% Set aliases for almost all section levels, except chapter.
% The part is called here as a section of a negative level.
%    \begin{macrocode}
\def\part{\startsection\m@ne}
\def\section{\startsection\@ne}
\def\subsection{\startsection\tw@}
\def\subsubsection{\startsection\thr@@}
\def\paragraph{\startsection4}
\def\subparagraph{\startsection5}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\caption}
% Redefine the |\caption| command. We do this at the beginning
% of document to reject possible redefinitions of captions
% in other packages such as |float|. I think this is not the
% |float|'s responsibility to decide where a caption must go on:
% before or after the float body. And what about complicated
% floats consisting of side floats and etc.? We also reset to zero
% the |\abovecaptionskip| and |\belowcaptionskip| registers if they
% are specified to provide partial compatibility with the |float|
% package. If the registers are not specified (as in |ncc| class),
% they are emulated with macros.
%    \begin{macrocode}
\AtBeginDocument{%
  \def\caption{%
    \ifx\@captype\@undefined
      \@latex@error{\noexpand\caption outside float}\@ehd
      \expandafter\@gobble
    \else
      \expandafter\@firstofone
    \fi
    {\csname NCC@cap@\@captype\endcsname}%
  }%
  \@ifundefined{abovecaptionskip}{\def\abovecaptionskip{\z@}}%
               {\abovecaptionskip\z@}%
  \@ifundefined{belowcaptionskip}{\def\belowcaptionskip{\z@}}%
               {\belowcaptionskip\z@}%
}
%    \end{macrocode}
% \end{macro}
%
% Registration of standard floats:
%    \begin{macrocode}
\RegisterFloatType{figure}
\RegisterFloatType{table}
%    \end{macrocode}
%
% Declare all sections and captions except the part and chapter:
%    \begin{macrocode}
\DeclareSection{-2}{table}{}{\z@}{10pt}{}
\DeclareSection{-1}{figure}{}{10pt}{\z@}{}
\DeclareSection*1{section}{}%
                {3.5ex \@plus 1ex \@minus .2ex}%
                {2.3ex \@plus .2ex}{\Large\bff}
\DeclareSection*2{subsection}{}%
                {3.25ex \@plus 1ex \@minus .2ex}%
                {1.5ex \@plus .2ex}{\large\bff}
\DeclareSection*3{subsubsection}{}%
                {3ex \@plus 1ex \@minus .2ex}%
                {1.5ex \@plus .2ex}{\normalsize\bff}
\DeclareSection4{paragraph}{}%
                {\NCC@runskip}{-1em}{\normalsize\bff}
\DeclareSection5{subparagraph}[\parindent]{}%
                {\NCC@runskip}{-1em}{\normalsize\bff}
\@ifundefined{chapter}{
%    \end{macrocode}
%
% Declare the part and toc-entries for the article-like style:
%    \begin{macrocode}
  \DeclareSection*0{part}{\Large\bff}%
                  {5ex \@plus 1ex \@minus .2ex}%
                  {4ex \@plus .2ex}{\huge\bff}
  \DeclareTOCEntry{-2}{}{}{9}{}% table
  \DeclareTOCEntry{-1}{}{}{9}{}% figure
  \DeclareTOCEntry0{\runinsectionskip\def\@dotsep{1000}}{}{III}{\bff}[]
  \DeclareTOCEntry1{\runinsectionskip}{}{9}{}
  \DeclareTOCEntry2{}{}{9.9}{}
  \DeclareTOCEntry3{}{}{9.9.9}{}
}{
%    \end{macrocode}
%
% \begin{macro}{\ChapterPrefixStyle}
% Specify the appearance of chapter prefix in the toc and the header.
%    \begin{macrocode}
  \newcommand*{\ChapterPrefixStyle}[1]{%
    \def\NCC@thetocchapter{\thechapter}%
    \let\NCC@makechapfinal\NCC@makechapfinalgobble
    \@for\@tempa:=#1\do{%
      \@ifundefined{NCC@chapin@\@tempa}{%
        \PackageError{nccsect}{Unknown style `\@tempa'\MessageBreak
        Only the `toc' and `header' styles are allowed}{}%
      }{\csname NCC@chapin@\@tempa\endcsname}%
    }%
  }
  \def\NCC@chapin@toc{\def\NCC@thetocchapter{\@chapapp\ \thechapter}}
  \def\NCC@chapin@header{\let\NCC@makechapfinal\@firstofone}
  \@onlypreamble\ChapterPrefixStyle
  \@onlypreamble\NCC@chapin@toc
  \@onlypreamble\NCC@chapin@header
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\chapter}
% Declare the part, the chapter, toc-entries for the
% book-like style, and specify default epigraph parameters:
%    \begin{macrocode}
  \def\chapter{\startsection\z@}
  \DeclarePart{\StartFromTextArea\vfil\centering}%
              {\vfil\newpage \if@twoside\if@openright
                 \mbox{}\thispagestyle{empty}\newpage\fi\fi}%
              {\vspace{4ex}\huge\bff}{\Huge\bff}
  \DeclareSection*0{chapter}{\vspace{3ex}\huge\bff}{10ex}%
                  {8ex \@plus .2ex}{\Huge\bff}
  \DeclareTOCEntry{-2}{}{}{9.9}{}% table
  \DeclareTOCEntry{-1}{}{}{9.9}{}% figure
  \DeclareTOCPart{\NCC@secskip{4ex \@plus .2ex}\def\@dotsep{1000}}
                 {}{II}{\large\bff}
  \DeclareTOCEntry0{\runinsectionskip\def\@dotsep{1000}%
                    \aftergroup\penalty\aftergroup\@highpenalty}{}{9}{\bff}
  \DeclareTOCEntry1{}{}{9.9}{}[9.9]
  \DeclareTOCEntry2{}{}{9.9.9}{}[9.9.9]
  \DeclareTOCEntry3{}{}{}{}[\qquad]
  \epigraphparameters{\StartFromHeaderArea\small\raggedleft}%
                     {.45\linewidth}{5\baselineskip}%
                     {\raggedleft\itshape}{\vspace{2ex}}
}
%    \end{macrocode}
% \end{macro}
%
% Declare other toc-entries:
%    \begin{macrocode}
\DeclareTOCEntry4{}{}{}{}[\qquad]
\DeclareTOCEntry5{}{}{}{}[\qquad]
%    \end{macrocode}
%
% Set defaults:
%    \begin{macrocode}
\noindentaftersection
\sectionstyle{hangindent}
\SectionTagSuffix{\quad}
\RunningSectionSuffix{}
\captionwidth{\linewidth}
\captionstyle{default}
\captiontagstyle{para}
\CaptionTagSuffix{:\hskip .7em \@plus .2em \@minus .1em}
\NumberlineSuffix{\quad}{\enskip}
\PnumPrototype{99}
\TOCMarginDrift{}
\SetTOCStyle{}
%</package>
%    \end{macrocode}
\endinput
