% \iffalse meta-comment
%
% Copyright 1994 the LaTeX3 project and the individual authors.
% All rights reserved. For further copyright information see the file
% legal.txt, and any other copyright indicated in this file.
% 
% This file is part of the LaTeX2e system.
% ----------------------------------------
% 
%  This system is distributed in the hope that it will be useful,
%  but WITHOUT ANY WARRANTY; without even the implied warranty of
%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
% 
% 
% IMPORTANT NOTICE:
% 
% For error reports in case of UNCHANGED versions see bugs.txt.
% 
% Please do not request updates from us directly.  Distribution is
% done through Mail-Servers and TeX organizations.
% 
% You are not allowed to change this file.
% 
% You are allowed to distribute this file under the condition that
% it is distributed together with all files mentioned in manifest.txt.
% 
% If you receive only some of these files from someone, complain!
% 
% You are NOT ALLOWED to distribute this file alone.  You are NOT
% ALLOWED to take money for the distribution or use of either this
% file or a changed version, except for a nominal charge for copying
% etc.
% \fi
%
% \iffalse
%%% File: ltsect
%<*driver>
% \fi
\ProvidesFile{ltsect.dtx}[1994/05/25 v1.0e LaTeX Kernel (Sectioning)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltsect.dtx}
\title{\filename}
\date{\filedate}
 \author{%
  Johannes Braams\and
  David Carlisle\and
  Alan Jeffrey\and
  Leslie Lamport\and
  Frank Mittelbach\and
  Chris Rowley\and
  Rainer Sch\"opf}

\begin{document}
\maketitle
 \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
% \CheckSum{422}
%
% \section{Sectioning Commands}
%
% This file defines the declarations such as |\author| which are used by
% |\maketitle|. |\maketitle| itself is defined by each class, not in the
% \LaTeX\ kernel.
%
% The second part of the file defines the generic commands used for
% defining sectioning commands such as |\chapter|. Again the actual
% document level commands are defined in the class files, in terms of
% these commands.
%
% \StopEventually{}
%
%
% \changes{v1.0a}{1994/03/04}{Initial version, split from latex.dtx}
% \changes{v1.0b}{1994/03/28}{Split further from ltherest.dtx}
% \changes{v1.0d}{1994/05/21}{Use new error commands}
% 
%
%    \begin{macrocode}
%<*2ekernel>
\message{title,}
%    \end{macrocode}
%
% \subsection{The Title}
%
% \begin{oldcomments}
% The user defines the title, author, date by the declarations
% \title{NAME}, \author{NAME} and \date{DATE}.
% Inside these, he can use the \thanks
% command to make footnoted acknowledgements, notice of address, etc.
% The \maketitle command produces the actual title.
% Note: multiple authors are separated with the \and command.
% \end{oldcomments}
%
%  \begin{macro}{\title}
%  \begin{macro}{\@title}
% \changes{LaTeX2e}{1993/12/11}{Added default}
%    |\title| for use in |\maketitle|. If not given |\maketitle| will
%    produce an error message.
%    \begin{macrocode}
\def\title#1{\gdef\@title{#1}}
\def\@title{\@latex@error{No \noexpand\title given}\@ehc}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\author}
%  \begin{macro}{\@author}
% \changes{LaTeX2e}{1993/12/11}{Added default}
%    |\author| for use in |\maketitle|. If not given |\maketitle| will
%    produce a warning message.
%    \begin{macrocode}
\def\author#1{\gdef\@author{#1}}
\def\@author{\@latex@warning@no@line{No \noexpand\author given}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\date}
%  \begin{macro}{\@date}
%    |\date| for use in |\maketitle|. If not given |\maketitle| will
%    produce |\today| as the default.
%    \begin{macrocode}
\def\date#1{\gdef\@date{#1}}
\gdef\@date{\today}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
% \begin{oldcomments}
%    \begin{macrocode}
\def\thanks#1{\footnotemark\begingroup
\def\protect{\noexpand\protect\noexpand}\xdef\@thanks{\@thanks
  \protect\footnotetext[\the\c@footnote]{#1}}\endgroup}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\@thanks{}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\and{%%                             % \begin{tabular}
\end{tabular}\hskip 1em \@plus.17fil%
\begin{tabular}[t]{c}%% \end{tabular}
}
%    \end{macrocode}
%
%    \begin{macrocode}
\message{sectioning,}
%    \end{macrocode}
%
% \end{oldcomments}
%
% \subsection{Sectioning}
%
% \begin{oldcomments}
%
% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
%            optional * [ALTHEADING]{HEADING}
%    Generic command to start a section.
%    NAME      : e.g., 'subsection'
%    LEVEL     : a number, denoting depth of section -- e.g., chapter=1,
%                 section = 2, etc.
%    INDENT    : Indentation of heading from left margin
%    BEFORESKIP: Absolute value = skip to leave above the heading.
%                If negative, then paragraph indent of text following
%                heading is suppressed.
%    AFTERSKIP : if positive, then skip to leave below heading, else
%                negative of skip to leave to right of run-in heading.
%    STYLE     : commands to set style
%  If '*' missing, then increments the counter.  If it is present, then
%  there should be no [ALTHEADING] argument.
%  Uses the counter 'secnumdepth' whose value is the highest section
%  level that is to be numbered.
%
%  WARNING: The \@startsection command should be at the same or higher
%  grouping level as the text that follows it.  For example, you
%  should NOT do something like
%      \def\foo{ \begingroup ...
%                   \paragraph{...}
%                 \endgroup}
%
% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} ==
%    BEGIN
%     IF  @noskipsec = T  THEN  \leavevmode  FI  
%                               % true if previous section% had no body.
%                                                
%     \par
%     \@tempskipa  := BEFORESKIP
%     @afterindent := T
%     IF \@tempskipa < 0  THEN  \@tempskipa  := -\@tempskipa
%                               @afterindent := F
%     FI
%     IF @nobreak = true
%       THEN \everypar == null
%       ELSE \addpenalty{\@secpenalty}
%            \addvspace{\@tempskipa}
%     FI
%     IF * next
%       THEN \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
%       ELSE \@dblarg{\@sect
%                   {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}}
%     FI
% END
%
% \@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[ARG1]{ARG2}
%           ==
%   BEGIN
%    IF LEVEL > \c@secnumdepth
%      THEN \@svsec :=L null
%      ELSE \refstepcounter{NAME}
%           \@svsec :=L BEGIN \@seccntformat{#1} END
%    FI
%    IF AFTERSKIP > 0
%      THEN \begingroup
%              STYLE
%              \@hangfrom{\hskip INDENT\@svsec}
%              {\interlinepenalty 10000 ARG2\par}
%           \endgroup
%           \NAMEmark{ARG1}
%           \addcontentsline{toc}{NAME}
%              { IF  LEVEL > \c@secnumdepth
%                  ELSE \protect\numberline{\theNAME}  FI
%                ARG1 }
%      ELSE \@svsechd == BEGIN  STYLE
%                               \hskip INDENT\@svsec
%                               ARG2
%                               \NAMEmark{ARG1}
%                               \addcontentsline{toc}{NAME}
%                                  { IF  LEVEL > \c@secnumdepth
%                                      ELSE 
%                                        \protect\numberline{\theNAME}
%                                      FI
%                                    ARG1 }
%                        END
%    FI
%    \@xsect{AFTERSKIP}
% END
%
% \@xsect{AFTERSKIP} ==
%  BEGIN
%    IF AFTERSKIP > 0
%      THEN \par \nobreak
%           \vskip AFTERSKIP
%           \@afterheading
%      ELSE @nobreak :=G F
%           @noskipsec :=G T
%           \everypar{ IF @noskipsec = T
%                        THEN @noskipsec :=G F
%                             \clubpenalty :=G 10000
%                             \hskip -\parindent
%                             \begingroup
%                               \@svsechd
%                             \endgroup
%                             \unskip
%                             \hskip -AFTERSKIP \relax 
%                                           %% relax added 14 Jan 91
%                        ELSE \clubpenalty :=G \@clubpenalty
%                             \everypar := NULL
%                      FI
%                    }
%    FI
%
%   END
%
% \@seccntformat{NAME} ==
%   BEGIN
%    \theNAME
%    \hskip 1em
%   END
%
% \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{ARG} ==
%   BEGIN
%    IF AFTERSKIP > 0
%      THEN \begingroup
%             STYLE
%             \@hangfrom{\hskip INDENT}{\interlinepenalty 10000 ARG\par}
%           \endgroup
%      ELSE \@svsechd == BEGIN STYLE
%                              \hskip INDENT
%                              ARG
%                        END
%    FI
%    \@xsect{AFTERSKIP}
%   END
%
% \@afterheading ==
%  BEGIN
%    @nobreak :=G true
%    \everypar := BEGIN  IF @nobreak = T
%                          THEN @nobreak  :=G false
%                               \clubpenalty :=G 10000
%                               IF @afterindent = F
%                                 THEN remove \lastbox
%                               FI
%                          ELSE \clubpenalty :=G \@clubpenalty
%                               \everypar := NULL
%                       FI
%                 END
%  END
%
% \@secpenalty : The penalty (usually negative) put before a section
%                heading unless it immediately follows another one.
%
%    \begin{macrocode}
\newcount\@secpenalty
\@secpenalty = -300
%    \end{macrocode}
%
%    \begin{macrocode}
\newif\if@noskipsec \@noskipsectrue
%    \end{macrocode}
%
%
%    \begin{macrocode}
\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
   \par \@tempskipa #4\relax
   \@afterindenttrue
   \ifdim \@tempskipa <\z@
     \@tempskipa -\@tempskipa \@afterindentfalse
   \fi
   \if@nobreak \everypar{}\else
     \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi \@ifstar
     {\@ssect{#3}{#4}{#5}{#6}}%
     {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
%    \end{macrocode}
%
% \end{oldcomments}
% \begin{macro}{\@sect}
% \changes{LaTeX2.09}{1992/08/25}
%         {(FMi) replaced explicit setting of \cmd{\@svsec}
%               by call to \cmd{\@seccntformat}}
% \changes{LaTeX2.09}{1993/08/05}
%         {(RmS) Made sure that \cmd\protect works correctly in
%               expansion of \cmd\the<counter>}
%    \begin{macrocode}
\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
     \let\@svsec\@empty\else
     \refstepcounter{#1}%
     \let\@@protect\protect
     \def\protect{\noexpand\protect\noexpand}%
     \edef\@svsec{\@seccntformat{#1}}%
     \let\protect\@@protect\fi
     \@tempskipa #5\relax
      \ifdim \@tempskipa>\z@
        \begingroup #6\relax
          \@hangfrom{\hskip #3\relax\@svsec}%
                    {\interlinepenalty \@M #8\par}%
        \endgroup
       \csname #1mark\endcsname{#7}\addcontentsline
         {toc}{#1}{\ifnum #2>\c@secnumdepth \else
                      \protect\numberline{\csname the#1\endcsname}\fi
                    #7}\else
        \def\@svsechd{#6\hskip #3\relax  %% \relax added 2 May 90
                   \@svsec #8\csname #1mark\endcsname
                      {#7}\addcontentsline
                           {toc}{#1}{\ifnum #2>\c@secnumdepth \else
                           \protect\numberline{\csname the#1\endcsname}%
                                     \fi
                       #7}}\fi
     \@xsect{#5}}
%    \end{macrocode}
% \end{macro}
% \begin{oldcomments}
%
%    \begin{macrocode}
\def\@seccntformat#1{\csname the#1\endcsname\hskip 1em}
%    \end{macrocode}
%
% RmS 92/08/19: corrected bug: stretch and shrink in argument to \hskip
%               previously not negated
%    \begin{macrocode}
\def\@xsect#1{\@tempskipa #1\relax
      \ifdim \@tempskipa>\z@
       \par \nobreak
       \vskip \@tempskipa
       \@afterheading
    \else \global\@nobreakfalse \global\@noskipsectrue
       \everypar{\if@noskipsec \global\@noskipsecfalse
                   \clubpenalty\@M \hskip -\parindent
                   \begingroup \@svsechd \endgroup \unskip
                   \@tempskipa #1\relax
                   \hskip -\@tempskipa
                  \else \clubpenalty \@clubpenalty
                    \everypar{}\fi}\fi\ignorespaces}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
   \ifdim \@tempskipa>\z@
     \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}%
     \endgroup
   \else \def\@svsechd{#4\hskip #1\relax #5}\fi
    \@xsect{#3}}
%    \end{macrocode}
%
%    \begin{macrocode}
\newif\if@afterindent \@afterindenttrue
%    \end{macrocode}
%
%    \begin{macrocode}
\def\@afterheading{\global\@nobreaktrue
      \everypar{\if@nobreak
                   \global\@nobreakfalse
                   \clubpenalty \@M
                   \if@afterindent \else {\setbox\z@\lastbox}\fi
                 \else \clubpenalty \@clubpenalty
                    \everypar{}\fi}}
%    \end{macrocode}
%
% \end{oldcomments}
%
% \begin{macro}{\@hangfrom}
% |\@hangfrom{TEXT}| : Puts TEXT in a box, and makes a hanging 
% indentation of the following material up to the first |\par|.
% Should be used in vertical mode.
% \changes{v1.0a}{1994/03/07}{(DPC)Extra groups for colour}
%    \begin{macrocode}
\def\@hangfrom#1{\setbox\@tempboxa\hbox{{#1}}%
      \hangindent \wd\@tempboxa\noindent\box\@tempboxa}
%    \end{macrocode}
% \end{macro}
%
% \begin{oldcomments}
%
%    \begin{macrocode}
\newcount\c@secnumdepth
\newcount\c@tocdepth
%    \end{macrocode}
%
% \secdef{UNSTARCMDS}{STARCMDS} :
%    When defining a \chapter or \section command without using
%    \@startsection, you can use \secdef as follows:
%     \def\chapter { ... \secdef \CMDA \CMDB }
%     \def\CMDA    [#1]#2{ ... }  % Command to define \chapter[...]{...}
%     \def\CMDB    #1{ ... }      % Command to define \chapter*{...}
%
%    \begin{macrocode}
\def\secdef#1#2{\@ifstar{#2}{\@dblarg{#1}}}
%    \end{macrocode}
%
% Initializations
%
%    \begin{macrocode}
\def\sectionmark#1{}
\def\subsectionmark#1{}
\def\subsubsectionmark#1{}
\def\paragraphmark#1{}
\def\subparagraphmark#1{}
%    \end{macrocode}
%
%    \begin{macrocode}
\message{contents,}
%    \end{macrocode}
%
% \end{oldcomments}
%
% \subsection{Table of Contents etc}
%
% \begin{oldcomments}
%
% CONVENTIONS:
%   \tf@foo = file number for output for table foo.  The file is
%             opened only if @filesw = true.
%
%   \contentsline{TYPE}{ENTRY}{PAGE}
%       Macro to produce a TYPE entry in a table of contents, etc.
%       It will appear in the .TOC or other file.  For example,
%       The entry for subsection 1.4.3 in the table of contents might
%       be produced by:
%       \contentsline{subsection}
%               {\makebox{30pt}[r]{1.4.3} Gnats and Gnus}{22}
%       The \protect command causes command sequences to be written
%       without expanding them.
%
%   \l@TYPE{ENTRY}{PAGE}
%       Macro defined by document style for making an entry of
%       type TYPE in a table of contents, etc.  E.g., the document
%       style should define \l@chapter, \l@section, etc.
%
%   \addcontentsline{TABLE}{TYPE}{ENTRY}
%     User command for adding his own entry to a table of contents, etc.
%     It adds the entry
%         \contentsline{TYPE}{ENTRY}{page}
%     to the .TABLE file.
%
%   \addtocontents{TABLE}{TEXT} : Adds TEXT to the .TABLE file, with no
%      page number.
%
%  Note: When used in the ENTRY or TEXT of one of the above commands,
%  \protect causes the following control sequence to be written
%  on the file without being expanded.  The sequence will be expanded
%  when the table of contents entry is processed.
%
%  SURPRISE: \index, \glossary,  and \label are no-ops inside an
%  \addcontentsline or \addtocontents command argument.  This could
%  cause a problem if the user puts an \index or \label into one of the
%  commands he writes, or into the optional 'short version' argument of
%  a \section or \caption command.
%
% \addcontentsline{TABLE}{TYPE}{ENTRY}  ==
%   BEGIN
%     if @filesw = true
%       then  \begingroup
%               \index == \label == \glossary == \@gobble
%               \protect{ARG} == 
%                   \string\string\string ARG \string\space\space
%               \@temptokena := \thepage
%               \@tempa  == write \string\contentsline
%                              {TYPE}{ENTRY}{\the\@temptokena}
%               \@tempa
%               IF vmode and @nobreak = true  THEN  \nobreak FI
%              \endgroup
%     fi
%   END
%
% \@starttoc{EXT} : 
%      Used to define \tableofcontents, \listoffigures, etc.--
%      e.g., \@starttoc{lof} is used in \listoffigures.  This command
%      reads the .EXT file and sets up to write the new .EXT file.
%
% \@starttoc{EXT} ==
%   BEGIN
%     \begingroup
%        \makeatletter
%        read file \jobname.EXT
%        IF @filesw = true
%          THEN  open \jobname.EXT as file \tf@EXT
%        FI
%        @nobreak :=G FALSE  %% added 24 May 89
%     \endgroup
%   END
%
% RmS 92/01/14: added \immediate to \openout as all \write commands
%               are also executed \immediate
%    \begin{macrocode}
\def\@starttoc#1{\begingroup
  \makeatletter
  \@input{\jobname.#1}\if@filesw 
  \expandafter\newwrite\csname tf@#1\endcsname
             \immediate\openout
                 \csname tf@#1\endcsname \jobname.#1\relax
  \fi \global\@nobreakfalse \endgroup}
%    \end{macrocode}
%
%
% \changes{v1.0c}{1994/05/20}{Correct setting of \cs{protect}.}
%    \begin{macrocode}
\def\addcontentsline#1#2#3{\if@filesw \begingroup
\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
\let\protect\@unexpandable@protect
\@temptokena{\thepage}%
\edef\@tempa{\write \@auxout{\string\@writefile{#1}{\protect
     \contentsline{#2}{#3}{\the\@temptokena}}}}\@tempa
   \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
%    \end{macrocode}
%
% \changes{v1.0c}{1994/05/20}{Correct setting of \cs{protect}.}
%    \begin{macrocode}
\long\def\addtocontents#1#2{\if@filesw \begingroup
\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
\let\protect\@unexpandable@protect
\edef\@tempa{\write \@auxout {\string\@writefile{#1}{#2}}}\@tempa
  \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\contentsline#1{\csname l@#1\endcsname}
%    \end{macrocode}
%
% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE} :
%   Macro to produce a table of contents line with the following
%   parameters:
%     LEVEL    : If LEVEL > \c@tocdepth, then no line produced.
%     INDENT   : Total indentation from the left margin.
%     NUMWIDTH : Width of box for number if the TITLE has a
%                \numberline command.
%                As of 25 Jan 88, this is also the amount of extra
%                indentation added to second and later lines of a
%                multiple line entry. 
%     TITLE    : Contents of entry.
%     PAGE     : Page number.
%
%  Uses the following parameters, which must be set by the document
%  style. They should be defined with \def's.
%    \@pnumwidth : Width of box in which page number is set.
%    \@tocrmarg  : Right margin indentation for all but last line of
%                  multiple-line entries.
%    \@dotsep    : Separation between dots, in mu units.
%                  Should be \def'd to a number like 2 or 1.7
%
% \end{oldcomments}
% \begin{macro}{\@dottedtocline}
% \changes{LaTeX2.09}{1991/09/29}
%         {(RmS) added \cmd{\reset@font} for page number}
% \changes{v1.0e}{1994/05/25}{Put braces around argument 4
%          (the actual toc entry) to avoid font (and possibly other)
%           changes leaking out to the leaders.}
%    \begin{macrocode}
\def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else
  \vskip \z@ \@plus.2\p@
  {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
    \parindent #2\relax\@afterindenttrue
   \interlinepenalty\@M
   \leavevmode
   \@tempdima #3\relax
   \advance\leftskip \@tempdima \hbox{}\hskip -\leftskip
    {#4}\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep
       mu$}\hfill \nobreak
           \hbox to\@pnumwidth{\hfil\reset@font\rmfamily #5}\par}\fi}
%    \end{macrocode}
% \end{macro}
% \begin{oldcomments}
%
% Note: \nobreak's added 7 Jan 86 to prevent bad line break that
% left the page number dangling by itself at left edge of a new line.
%
% Changed 25 Jan 88 to use \leftskip instead of \hangindent so
% leaders of multiple-line contents entries would line up properly.
%
% \numberline{NUMBER} : For use in a \contentsline command.
%   It puts NUMBER flushleft in a box of width \@tempdima
%   (Before 25 Jan 88 change, it also added \@tempdima to the hanging
%   indentation.)
%
%    \begin{macrocode}
\def\numberline#1{\hbox to\@tempdima{#1\hfil}}
%</2ekernel>
%    \end{macrocode}
% \end{oldcomments}
%
% \Finale
%


