%% file: TXSsects.tex - Chapters and Sections - TeXsis version 2.18
%% @(#) $Id: TXSsects.tex,v 18.1 2000/05/16 22:47:23 myers Exp $
%======================================================================*
%
% These macros define chapters, sections, subsections, and
% appendices with appropriate formats and numbering. Note that tags
% are not automatically defined, but you can use \label.
%
% \chapter{
} causes a page break, prints the in
% "Title bold face" (\Tbf) (which defaults to \bf if it is undefined), and
% adds an entry in the table of contents (q.v.).
% \showchaptIDtrue (the default) causes the chapter number to be
% printed and also to be appended it to equation numbers, giving in general
% chapnum.sectnum.eqnum. \showchaptIDfalse turns off the display
% of chapter numbers.
%
% \section{} causes a skip but not a page break. It prints
% the section heading in small title bold face (\tbf) (which defaults to \bf).
% \showsectIDtrue (the default) causes the section number to be
% printed and to be appended to any equation numbers. \showsectIDfalse
% turns off the display of section numbers.
%
% \subsection{} is like \section but does not use title
% bold face. Subsection numbers are displayed if \showsectIDtrue, but
% subsection numbers do not appear in equation numbers.
%
% \subsubsection{} is a lower level than \subsection.
% Use it sparingly and only when appropritate.
%
% \Appendix{}{} creates an appendix, with the
% playing the role of the chapter number. The appears in the title
% and in equation numbers if \showchaptIDtrue.
%
% \appendix{}{} creates a section-like appendix.
%
% \nosechead{} produces a heading without begining a new section,
% and without an entry in the table of contents. This can be used for
% acknowledgements, etc.
%
% For books, theses, and other long documents \chapter should be
% used for the first level of subdivision. For preprints and other
% shorter documents, \section is generally more appropriate for the
% first level, and it may be desirable to use \showsectIDfalse.
%
% Note: The typestyles \Tbf and \tbf should be defined elsewhere,
% and will be used to print chapter and section titles.
% Source: Much modified from TechRpt by Eric Myers
%
% Dependencies: TXSmacs.tex -- general things
% TXStags.tex -- labeling and tagging
% TXSconts.tex -- Table of contents macros \addTOC
%======================================================================*
% (C) copyright 1991-1999 by Eric Myers and Frank E. Paige.
% This file is a part of TeXsis. Distribution and/or modifications
% are allowed under the terms of the LaTeX Project Public License (LPPL).
% See the file COPYING or ftp://ftp.texsis.org/texsis/LPPL
%======================================================================*
\message{Section and Chapter divisions.}
\catcode`@=11
% Counters, flags, and labels:
\newcount\chapternum \chapternum=\z@ % chapter number
\newcount\sectionnum \sectionnum=\z@ % section number
\newcount\subsectionnum \subsectionnum=\z@ % sub-section number
\newcount\subsubsectionnum \subsubsectionnum=\z@ % subsubsection number
\newif\ifshowsectID \showsectIDtrue % show sections?
\def\@sectID{} % section ID for eqns
\newif\ifshowchaptID \showchaptIDtrue % show chapters?
\def\@chaptID{} % chapt ID for eqns
% \sectionskip and \subsectionskip are the skips used in \section (and
% \appendix) and in \subsection (and \subsubsection):
\newskip\sectionskip \sectionskip=2\baselineskip
\newskip\subsectionskip \subsectionskip=1.5\baselineskip
% \sectionminspace is how much must be left on the page to prevent
% skipping to a new page at the begining of a section.
\newdimen\sectionminspace \sectionminspace = 0.20\vsize
%-------------------------------------*
% CHAPTER LEVEL: \chapter{} causes a page break, prints a
% chapter title, and resets important counters. The macro \label may be
% used to assign the chapter number to a name if it occurs in the title.
% #2 is lookahead for a \par (blank line), which is discarded, so that
% there is no indentation at the begining of a chapter.
\long\def\chapter#1#2 {% begin a new chapter in a document
\def\@aftersect{#2}%
\ifx\@aftersect\empty\let\@aftersect=\@eatpar
\else\def\@aftersect{\@eatpar #2 }\fi
\vfill\supereject % begin on a new page
\global\advance\chapternum by \@ne % increment chapt. #
\global\sectionnum=\z@ % reset section # to zero
\global\def\@sectID{}% % section ID is null
%
% Chapter ID:
%
\edef\lab@l{\ChapterStyle{\the\chapternum}}% % chapter ID for \label
\ifshowchaptID % show chapter id?
\global\edef\@chaptID{\lab@l.}% % yes: define chapter ID
\r@set % and reset most counters
\else\edef\@chaptID{}\fi % else chapt ID is null
\everychapter % user can customize here
%
% Print Title:
%
\ifx\Tbf\undefined\def\Tbf{\bf}\fi % If \Tbf undefined make it \bf
\ifshowchaptID % if chapter ID used
\leftline{\Tbf{Chapter\ \@chaptID}} % CHAPTER ##. on a line
\nobreak\smallskip\fi % with little space below
\begingroup %
\raggedright\pretolerance=2000\hyphenpenalty=2000 % no hyphenation
\parindent=\z@ {\Tbf{#1}\bigskip}% % title, in \Tbf
\endgroup % format
\nobreak\bigskip % skip down some more
%
% Running Headline and Table of Contents:
%
\begingroup % add to Table of Contents
\def\label##1{}% % disable \label
\xdef\ChapterTitle{#1}% % save title for user
\def\n{}\def\nl{}\def\mib{}% % now turn off \n, etc
\setHeadline{#1}% % make title the running head
\emsg{\@chaptID\space #1}% % announce in log file
\def\@quote{\string\@quote\relax}% % in case of \quoteon
\addTOC{0}{\TOCcID{\lab@l.}#1}{\folio}% % add to Table of Contents
\endgroup %
%
\@Mark{#1}% % page mark chapter heading
\s@ction % end of section processing
\afterchapter\@aftersect} % user can customize (\@aftersect is lookahead)
\def\everychapter{\relax}% user ``hook'' performed before every \chapter
\def\afterchapter{\relax}% user ``hook'' performed after every \chapter
% \ChapterStyle lets you change the style in which the chapter number
% is displayed (i.e. \romannumerals, \Romannumerals, or \arabic
\def\ChapterStyle#1{#1} % default is nothing
\def\setChapterID#1{\edef\@chaptID{#1.}} % so you can change \@chaptID
% \r@set restest all the counters for a new chapter or section
\def\r@set{% % resets counters for \theorem, \EQN, etc...
\global\subsectionnum=\z@ % subsection number = 0
\global\subsubsectionnum=\z@ % subsubsection number = 0
\ifx\eqnum\undefined\relax % is TXSeqns.tex loaded?
\else\global\eqnum=\z@\fi % yes: reset equation number
\ifx\theoremnum\undefined\relax % is TXSfigs.tex loaded?
\else % yes: reset counters
\global\theoremnum=\z@ \global\lemmanum=\z@
\global\corollarynum=\z@ \global\definitionnum=\z@
\global\fignum=\z@
\ifRomanTables\relax
\else\global\tabnum=\z@\fi % do not reset tables if Roman numeral counting
\fi}
\long\def\s@ction{% generic end processing common to chapters and sections
\checkquote % check for balanced quotes
\checkenv % check for balanced envmnt
\vskip -\parskip % eat skip to first paragraph
\nobreak\noindent}
\def\@aftersect{}
% TeXsperts note: the \@Mark \@noMark construction above is required because
% we are using a \mark which contains an \else, and the marking operation
% appears in conditional text (the \ifnum\chapternum ... \fi). -EAM
\def\@Mark#1{% put a \mark with conditional text on the page
\begingroup
\def\label##1{}% % disable \label
\def\goodbreak{}% % disable \goodbreak
\def\mib{}\def\n{}% % disable \mib and \n
\mark{#1\NX\else\lab@l}% % put mark on page
\endgroup}%
\def\@noMark#1{\relax}% % do nothing
%-------------------------*
% \setHeadline{text} sets the running headline to the text, but
% if the text is so long that the user breaks it with \n then
% only the first part up to the \n is used, followed by ...
% (Move this to TXShead.tex at some point...)
\def\setHeadline#1{\@setHeadline#1\n\endlist} % set the \HeadText
\def\@setHeadline#1\n#2\endlist{% #1 is everything up to first \n
\def\@arg{#2}\ifx\@arg\empty % Is there \n in text?
\global\edef\HeadText{#1}% % No: just use #1
\else % there was, so...
\global\edef\HeadText{#1\dots}% % use first part up to \n
\fi
}
%--------------------------------------------------*
% SECTION LEVELS: \section{} makes a section level break in
% text. It does *not* skip to a new page, but it will reset everything
% and display the title in the \tbf typestyle (which defaults to \bf if
% undefined). #2 is lookahead for a \par (blank line), which is
% discarded, so that there is no indentation at the begining of a \section.
\long\def\section#1#2 {% create a new section of a document
\def\@aftersect{#2}%
\ifx\@aftersect\empty\let\@aftersect=\@eatpar
\else\def\@aftersect{\@eatpar #2 }\fi
\vskip\parskip\vskip\sectionskip % make some space
\goodbreak\pagecheck\sectionminspace % new page if needed
\global\advance\sectionnum by \@ne % increment section counter
%
% Section ID:
%
\edef\lab@l{\@chaptID\SectionStyle{\the\sectionnum}}% For \label
\ifshowsectID % show section number?
\global\edef\@sectID{\SectionStyle{\the\sectionnum}.}% save for later
\global\edef\@fullID{\lab@l.\space\space}% % what we will use here
\r@set % and reset counters
\else\gdef\@fullID{}\def\@sectID{}\fi % otherwise section ID is empty
\everysection % user customization here
%
% Print the Section title:
%
\ifx\tbf\undefined\def\tbf{\bf}\fi % default \tbf is \bf
\vbox{% % keep heading in \vbox
\raggedright\pretolerance=2000\hyphenpenalty=2000 % no hyphenation
\setbox0=\hbox{\noindent\tbf\@fullID}% % find width of ID
\hangindent=\wd0 \hangafter=1 % ... for hanging indent
\noindent\unhbox0{\tbf{#1}\medskip}}% % number and title
\nobreak %
%
% Table of Contents and Running Headlines:
%
\begingroup % group for \contents, etc.
\def\label##1{}% % disable \label
\global\edef\SectionTitle{#1}% % or nothing
\def\n{}\def\nl{}\def\mib{}% % turn off \n, etc
\ifnum\chapternum=0\setHeadline{#1}\fi % no chapt. number -> set headine
\emsg{\@fullID #1}% % announce in log file
\def\@quote{\string\@quote\relax}% % in case of \quoteon
\addTOC{1}{\TOCsID{\lab@l.}#1}{\folio}% % Table of Contents entry
\endgroup % end group
\s@ction % checkenv, etc..
\aftersection\@aftersect} % user can customize (\@aftersect is lookahead)
\def\everysection{\relax}% user ``hook'' performed before every \section
\def\aftersection{\relax}% user ``hook'' performed after every \section
\def\setSectionID#1{\edef\@sectID{#1.}} % so you can set it
% \SectionStyle is style to display section number
\def\SectionStyle#1{#1} % default is nothing
%--------------------------------------------------*
% \subsection makes a subsection. #2 is lookahead for a \par (blank
% line), which is discarded, so that there is no indentation at the
% begining of a \subsection.
\long\def\subsection#1#2 {% create a subsection of a document
\def\@aftersect{#2}%
\ifx\@aftersect\empty\let\@aftersect=\@eatpar
\else\def\@aftersect{\@eatpar #2 }\relax\fi
\vskip\parskip\vskip\subsectionskip % make some space
\goodbreak\pagecheck\sectionminspace % new page if needed
\global\advance\subsectionnum by \@ne % increment subsection counter
\subsubsectionnum=\z@ % reset subsubsection number
%
% Subsection ID:
%
\edef\lab@l{\@chaptID\@sectID\SubsectionStyle{\the\subsectionnum}}%
\ifshowsectID % show section number?
\global\edef\@fullID{\lab@l.\space}% yes: define it
\else\gdef\@fullID{}\fi % otherwise it's empty
\everysubsection % user can customize
%
% Print the subsection title
%
\vbox{% % heading in \vbox
{\raggedright\pretolerance=2000\hyphenpenalty=2000 % no hyphenation
\setbox0=\hbox{\noindent\bf\@fullID}% find width...
\hangindent=\wd0 \hangafter=1 % ... for hanging indent
\noindent\unhbox0{\bf{#1}\nobreak\medskip}}}% number, title, and space
%
\begingroup % group for \contents, etc.
\def\label##1{}% % disable \label
\global\edef\SubsectionTitle{#1}% % or nothing
\def\n{}\def\nl{}\def\mib{}% % disable \n, etc
\emsg{\@fullID #1}% % announce in log file
\def\@quote{\string\@quote\relax}% % in case of \quoteon
\addTOC{2}{\TOCsID{\lab@l.}#1}{\folio}% Table of Contents entry
\endgroup % end \contents group
\s@ction % end of section
\aftersubsection\@aftersect}% room to customize (\@aftersect was lookahead)
\def\everysubsection{\relax}% user ``hook'' performed before every \subsection
\def\aftersubsection{\relax}% user ``hook'' performed after every \subsection
\def\SubsectionStyle#1{#1} % how to display number
%--------------------------------------------------*
% \subsubsection makes a subsubsection, mainly for use if there
% are no chapters in the document.
\long\def\subsubsection#1#2 {% create a sub-subsection of a document
\def\@aftersect{#2}%
\ifx\@aftersect\empty\let\@aftersect=\@eatpar
\else\def\@aftersect{\@eatpar #2 }\fi
\vskip\parskip\vskip\subsectionskip % make some space
\goodbreak\pagecheck\sectionminspace % new page if needed
\global\advance\subsubsectionnum by \@ne % increment counter
%
% Sub-subsection ID:
%
\edef\lab@l{\@chaptID\@sectID\SubsectionStyle{\the\subsectionnum}.%%
\SubsubsectionStyle{\the\subsubsectionnum}}% for \label
\ifshowsectID % show section number?
\global\edef\@fullID{\lab@l.\space\space}% % yes: define it
\else\gdef\@fullID{}\fi % else it's empty
\everysubsubsection % user can customize here
%
% Print the sub-subsection title
%
\vbox{% % heading in \vbox
{\raggedright\bf % Ragged \bf title
\setbox0=\hbox{\noindent\@fullID}% % find width
\hangindent=\wd0 \hangafter=1 % hanging indent after 1st line
\noindent\@fullID\relax % show subsection number
#1\nobreak\medskip}}% % print the title
%
\begingroup % group for \contents, etc.
\def\label##1{}% % disable \label
\global\edef\SubsectionTitle{#1}% % or nothing
\def\n{}\def\nl{}\def\mib{}% % turn off \n, etc
\emsg{\@fullID #1}% % announce in log file
\def\@quote{\string\@quote\relax}% % in case of \quoteon
\addTOC{3}{\TOCsID{\lab@l.}#1}{\folio}% % Table of Contents entry
\endgroup % end group
\s@ction % end of section
\aftersubsubsection\@aftersect} % room to customize
\def\everysubsubsection{\relax}% % user hook before every \subsubsection
\def\aftersubsubsection{\relax}% % user hook after every \subsubsection
\def\SubsubsectionStyle#1{#1} % how to display subsubsection number
%--------------------------------------------------*
% Appendecies:
% \Appendix{}{} creates an Appendix. The
% plays the role of the chapter number in equation numbers and the table
% of contents. Example: \Appendix{A}{How to create an Appendix}
% #3 is lookahead for a \par (blank line), which is discarded, so that
% there is no indentation at the begining of a chapter appendix.
\long\def\Appendix#1#2#3 {% begin a chapter level appendix
\def\@aftersect{#3}%
\ifx\@aftersect\empty\let\@aftersect=\@eatpar
\else\def\@aftersect{\@eatpar #3 }\fi
\def\@arg{#1}% % get the ID argument #1
\vfill\supereject % begin on a new page
\global\sectionnum=\z@ % reset section # to zero
%
% Chapter-like ID:
%
\edef\lab@l{#1}% % chapter ID for \label
\gdef\@sectID{}% % clear section ID
\ifshowchaptID % want to show chapter number?
\ifx\@arg\empty\else % if argument #1 not null
\global\edef\@chaptID{\lab@l.}\fi % set chapter ID to it
\r@set % reset counters to zero
\else\def\@chaptID{}\fi % else, no chapter ID
\everychapter % user customization
%
% Print Appendix Title:
%
\ifx\Tbf\undefined\def\Tbf{\bf}\fi % If \Tbf undefined make it \bf
\leftline{\Tbf{Appendix\ \@chaptID}}% % APPENDIX ##.
\begingroup %
\nobreak\smallskip % print title of chapter
\parindent=\z@\raggedright % with a ragged
{\Tbf{#2}\bigskip}% % in \Tbf
\endgroup %
\nobreak\bigskip % skip down some more
%
% Table of Contents/ Headlines:
%
\begingroup % add to Table of Contents
\def\label##1{}% % disable \label
\global\edef\ChapterTitle{#2}% % save title for user
\def\n{}\def\nl{}\def\mib{}% % now turn off \n, etc
\setHeadline{#2}% % make title the running head
\emsg{Appendix \@chaptID\space #2}% % announce in log file
\def\@quote{\string\@quote\relax}% % in case of \quoteon
\addTOC{0}{\TOCcID{\lab@l.}#2}{\folio}% % Table of Contents entry
\endgroup %
%
\@Mark{#2}% % mark chapter heading
\s@ction % end of section
\afterchapter\@aftersect}% more user customization
%--------------------------------------------------*
% \appendix makes a section-type appendix. #3 is lookahead for a \par
% (blank line), which is discarded, so that there is no indentation at
% the begining of an \appendix.
\long\def\appendix#1#2#3 {% begin a section level appendix
\def\@aftersect{#3}%
\ifx\@aftersect\empty\let\@aftersect=\@eatpar
\else\def\@aftersect{\@eatpar #3 }\fi
\vskip\parskip\vskip\sectionskip % make some space
\goodbreak\pagecheck\sectionminspace % new page if needed
\global\advance\sectionnum by \@ne % increment section counter
\def\@arg{#1}% % save ID argument #1
%
% Section-like ID:
%
\gdef\@sectID{}\gdef\@fullID{}% % assume null section ID
\edef\lab@l{#1}% % For use by \label
\ifshowsectID % want to show section number?
\r@set % yes: reset counters
\ifx\@arg\empty\else % was section ID given?
\global\edef\@sectID{\lab@l.}% % save it for later
\global\edef\@fullID{\lab@l.\space\space}\fi% this is what to show
\fi % else no section ID
\everysection % user customization
%
% Print appendix title:
%
\ifx\tbf\undefined\def\tbf{\bf}\fi % default \tbf is \bf
\vbox{% % keep heading in \vbox
{\raggedright\tbf % ragged \tbf title
\setbox0=\hbox{\tbf\@fullID}% % find width for indent
\hangindent=\wd0 \hangafter=1 % hanging indent after 1st line
\noindent\@fullID % which has section ID
{#2}\nobreak\medskip}}% % Print title
%
% Running Headlines, Table of Contents
%
\begingroup % group for \contents, etc.
\def\label##1{}% % disable \label
\global\edef\SectionTitle{#2}% % or nothing
\def\n{}\def\nl{}\def\mib{}% % turn off \n, etc
\ifnum\chapternum=0\setHeadline{#2}\fi % no chapter number -> headline
\emsg{appendix \@fullID #2}% % announce in log file
\def\@quote{\string\@quote\relax}% % in case of \quoteon
\addTOC{1}{\TOCsID{\lab@l.}#2}{\folio}% % Table of Contents entry
\endgroup % end \contents group
\s@ction % end of section
\aftersection\@aftersect}% user can customize
%--------------------------------------------------*
% \pagecheck will skip to a new page if there is less than
% the of space on the remainder of the page. For example,
% \pagecheck{0.333333\vsize} skips to a new page if there is less than
% 1/3 of the page left
\def\pagecheck#1{% skip to new page if less than #1 left on this one
\dimen@=\pagegoal % get total page size
\advance\dimen@ by -\pagetotal % get page space remaining
\ifdim\dimen@>0pt % is there some left, but
\ifdim\dimen@< #1\relax % not enough to look good?
\vfil\break \fi\fi % then skip to new page
}
%--------------------------------------------------*
% \nosechead produces a heading without a number, and without adding
% to the table of contents. Suitable for Acknowledgements, Remarks, etc...
% Use: \nosechead{heading text} See also \beginsection in The TeXbook
\def\nosechead#1{% section-like heading without a number
\vskip\subsectionskip % make some space
\goodbreak\pagecheck\sectionminspace % new page if needed
\checkquote\checkenv % check open quotes
\dosupereject % floating figures need to get out
%
% Print title:
%
\vbox{% % keep heading in \vbox
{\raggedright\bf\noindent % Ragged \bf title
{#1}%
\nobreak\medskip}}% % skip down some below title
}
%--------------------------------------------------*
% \checkenv checks for any unclosed environments (the kind defined
% in TXSenvmt.tex) and prints a warning message.
\def\checkenv{% check for balanced environments
\ifx\@envdepth\undefined\relax % is TXSenvmt.tex loaded?
\else\ifnum\@envdepth=\z@\relax % YES: check environment
\else\emsg{> Unclosed environment \@envname in the last section!}\fi
\fi} %
%>>> EOF TXSsects.tex <<<