summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/ncctools/source/nccsect.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/ncctools/source/nccsect.dtx')
-rw-r--r--macros/latex/contrib/ncctools/source/nccsect.dtx3036
1 files changed, 3036 insertions, 0 deletions
diff --git a/macros/latex/contrib/ncctools/source/nccsect.dtx b/macros/latex/contrib/ncctools/source/nccsect.dtx
new file mode 100644
index 0000000000..f1521679e7
--- /dev/null
+++ b/macros/latex/contrib/ncctools/source/nccsect.dtx
@@ -0,0 +1,3036 @@
+% \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