%
% (c) 1996 Straylight
%
-%----- Revision history -----------------------------------------------------
-%
-% $Log: strayman.dtx,v $
-% Revision 1.4 2003/11/07 11:32:53 mdw
-% Numbering-within macros added.
-%
-% Revision 1.3 2003/09/06 11:25:28 mdw
-% Various tweaks.
-%
-% Revision 1.2 2002/02/24 12:45:56 mdw
-% Fix banners.
-%
-% Revision 1.1 2002/02/19 23:27:57 mdw
-% Initial revision.
-%
-% Revision 1.8 1996/12/09 23:20:42 mdw
-% (\tab@setstrut): Fixed so that it uses \dimen\tw@ for the strut depth,
-% as advertised.
-%
-% Revision 1.7 1996/11/29 21:59:16 mdw
-% Fixed a little formatting mistake in a syntax diagram, and switched over
-% to the new syntax diagram commands on the grounds that they're slightly
-% less messy. Maybe.
-%
-% Revision 1.6 1996/11/19 20:54:33 mdw
-% Entered into RCS
-%
-%
% \end{meta-comment}
%
% \begin{meta-comment} <general public licence>
%<+strayman> [2003/09/04 1.10 Straylight document class]
% \end{meta-comment}
%
-% \CheckSum{2936}
+% \CheckSum{3058}
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% \begin{meta-comment} <driver>
%
%<*driver>
-\documentclass[10pt,a4paper,times,cmtt]{strayman}
+\documentclass[10pt,a4paper,book,nohyperref]{strayman}
\input{mdwtools}
\usepackage{mdwlist}
\describesclass{strayman}
+\errorcontextlines\maxdimen
\title[The \strayman\ document class]
{The \strayman\footnote{The \strayman\ document class is currently %
at version \mdwfileinfo{strayman.cls}{version}, dated %
%
% The standard \LaTeX\ document classes are all very well for simple
% documents, but the style isn't appropriate for works like manuals.
-% The \strayman\ document class is an attempt to recitfy this situataion,
+% The \strayman\ document class is an attempt to rectify this situation,
% providing an attractive and distinctive style for Straylight documents.
% The layout is based on an earlier style built for \emph{Impression}
% documents, although many improvements have been made. This document
% \item [\texttt{square} \| \texttt{rounded}] These options are passed
% directly to the \package{syntax} package, when it's loaded.
%
-% \item [\texttt{helvetica}] Typeset headings in the Helvetica font,
-% not in Computer Modern.
-%
-% \item [\texttt{palatino}] Typeset the main body text in Palatino, and
-% headings in Helvetica. The |\tt| font is changed to Courier, but
-% see the \texttt{cmtt} option.
-%
-% \item [\texttt{times}] Typeset the main body text in Times, and headings
-% in Helvetica. The |\tt| font is changed to Courier, but see the
-% \texttt{cmtt} option.
-%
% \end{description}
%
%
%<*strayman>
\newcommand\@ptsize{}
\newif\if@restonecol\@restonecolfalse
-\newif\if@titlepage\@titlepagetrue
+\newif\if@titlepage\@titlepagefalse
\newif\if@openright\@openrighttrue
\newif\if@openbib\@openbibfalse
\newif\if@appendix\@appendixfalse
-\newif\if@article\@articlefalse
+\newif\if@article\@articletrue
\newif\if@offsetpages\@offsetpagestrue
-\newif\if@numbering\@numberingfalse
-\newif\if@herefloats\@herefloatstrue
-\newif\if@runinsubsubsec\@runinsubsubsecfalse
+\newif\if@numbering\@numberingtrue
+\newif\if@herefloats\@herefloatsfalse
+\newif\if@runinsubsubsec\@runinsubsubsectrue
+\newif\if@hyperref\@hyperreftrue
+\newif\if@indentpar
\newdimen\pagesurround
\let\headfam\rmfamily
\let\pad@margin\@empty
\DeclareOption{fleqn}{\input{fleqn.clo}}
\DeclareOption{openbib}{\@openbibtrue}
\DeclareOption{article}{\@articletrue}
+\DeclareOption{noarticle}{\@articlefalse}
\DeclareOption{numbering}{\@numberingtrue}
\DeclareOption{nonumbering}{\@numberingfalse}
\DeclareOption{runinsubsubsec}{\@runinsubsubsectrue}
\DeclareOption{noruninsubsubsec}{\@runinsubsubsecfalse}
+\DeclareOption{indentpar}{\@indentpartrue}
+\DeclareOption{noindentpar}{\@indentparfalse}
+\DeclareOption{book}{\@titlepagetrue\@articlefalse}
+\DeclareOption{hyperref}{\@hyperreftrue}
+\DeclareOption{nohyperref}{\@hyperreffalse}
% \end{macrocode}
%
% \subsection{Set up the options}
% We set up some default options, and then read the user's.
%
% \begin{macrocode}
-\ExecuteOptions{a5paper,8pt,twoside,onecolumn,final,openright}
+\ExecuteOptions{a4paper,10pt,twoside,onecolumn,final}
\ProcessOptions
% \end{macrocode}
%
% If this is PDF\TeX\ then tell it the page bounds.
%
% \begin{macrocode}
-\@ifundefined{pdfpageheight}{
- \relax
-}{
+\newif\ifpdfing\pdfingfalse
+\if1\ifx\pdfoutput\@@undefined@@0\else\the\pdfoutput\fi
+ \pdfingtrue
+\fi
+\ifpdfing
\pdfpageheight\paperheight
\pdfpagewidth\paperwidth
-}
+\fi
+\if@hyperref
+ \AtEndOfClass{%
+ \RequirePackage[%
+ bookmarks = true, bookmarksnumbered = true, bookmarksdepth = 3,
+ colorlinks = true, linkcolor = blue, citecolor = blue, urlcolor = blue,
+ breaklinks = true]{hyperref}
+ }
+ \ifpdfing
+ \PassOptionsToPackage{pdftex}{hyperref}
+ \else
+ \PassOptionsToPackage{dvips}{hyperref}
+ \fi
+\fi
% \end{macrocode}
%
% \subsection{Read in the text size option}
% gap when we change font size. This macro does the job.
%
% \begin{macrocode}
+\newskip\@parskip
+\newdimen\@parshortfall
\def\@setparskip{%
- \relax\ifdim\parskip=\z@\else%
- \parskip.67\baselineskip\@plus\p@\relax%
- \fi%
+ \@parskip.67\baselineskip\@plus\p@\relax%
+ \ifdim\parskip=\z@\else\parskip\@parskip\relax\fi%
+ \@parshortfall\@parskip\advance\@parshortfall-\parskip%
}
+\def\set@vsep#1{#1\@parshortfall\advance#1}
% \end{macrocode}
% \end{macro}
%
%<*8pt>
\@setfontsize\normalsize\@viiipt{9.6\p@}%
\abovedisplayskip8\p@\@plus2\p@\@minus4\p@%
- \abovedisplayshortskip\z@\@plus3\p@%
- \belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus3\p@%
+ \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
%</8pt>
%<*9pt>
\@setfontsize\normalsize\@ixpt\@xipt%
\abovedisplayskip9\p@\@plus2\p@\@minus5\p@%
- \abovedisplayshortskip\z@\@plus3\p@%
- \belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus3\p@%
+ \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
%</9pt>
%<*10pt>
\@setfontsize\normalsize\@xpt\@xiipt%
\abovedisplayskip10\p@\@plus2\p@\@minus5\p@%
- \abovedisplayshortskip\z@\@plus3\p@%
- \belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus3\p@%
+ \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
%</10pt>
%<*11pt>
\@setfontsize\normalsize\@xipt{13.6}%
\abovedisplayskip11\p@\@plus3\p@\@minus6\p@%
- \abovedisplayshortskip\z@\@plus3\p@%
- \belowdisplayshortskip6.5\p@ \@plus3.5\p@\@minus3\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus3\p@%
+ \set@vsep\belowdisplayshortskip6.5\p@ \@plus3.5\p@\@minus3\p@%
%</11pt>
%<*12pt>
\@setfontsize\normalsize\@xiipt{14.5}%
\abovedisplayskip12\p@\@plus3\p@\@minus7\p@%
- \abovedisplayshortskip\z@\@plus3\p@%
- \belowdisplayshortskip6.5\p@ \@plus3.5\p@\@minus3\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus3\p@%
+ \set@vsep\belowdisplayshortskip6.5\p@ \@plus3.5\p@\@minus3\p@%
%</12pt>
%<*text>
\@setfontsize\normalsize\@xpt\@xiipt%
\abovedisplayskip10\p@\@plus2\p@\@minus5\p@%
- \abovedisplayshortskip\z@\@plus3\p@%
- \belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus3\p@%
+ \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
%</text>
\belowdisplayskip\abovedisplayskip%
\let\@listi\@listI%
\@setparskip%
}
\normalsize
-\parskip2ex\@plus\p@
+\if@indentpar
+ \parskip0pt\@plus\p@
+\else
+ \parskip2ex\@plus\p@
+\fi
% \end{macrocode}
% \end{macro}
%
%<*8pt>
\@setfontsize\small\@viipt{8.4}%
\abovedisplayskip8\p@\@plus2\p@\@minus4\p@%
- \abovedisplayshortskip\z@\@plus2\p@%
- \belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus2\p@%
+ \set@vsep\belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@%
%</8pt>
%<*9pt>
\@setfontsize\small\@viiipt{9.5}%
\abovedisplayskip8\p@\@plus2\p@\@minus4\p@%
- \abovedisplayshortskip\z@\@plus2\p@%
- \belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus2\p@%
+ \set@vsep\belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@%
%</9pt>
%<*10pt>
\@setfontsize\small\@ixpt{11}%
\abovedisplayskip8.5\p@\@plus3\p@\@minus4\p@%
- \abovedisplayshortskip\z@\@plus2\p@%
- \belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus2\p@%
+ \set@vsep\belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@%
%</10pt>
%<*11pt>
\@setfontsize\small\@xpt\@xiipt%
\abovedisplayskip10\p@\@plus2\p@\@minus5\p@%
- \abovedisplayshortskip\z@\@plus3\p@%
- \belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus3\p@%
+ \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
%</11pt>
%<*12pt>
\@setfontsize\small\@xipt{13.6}%
\abovedisplayskip11\p@\@plus3\p@\@minus6\p@%
- \abovedisplayshortskip\z@ \@plus3\p@%
- \belowdisplayshortskip6.5\p@ \@plus3.5\p@\@minus3\p@%
+ \set@vsep\abovedisplayshortskip\z@ \@plus3\p@%
+ \set@vsep\belowdisplayshortskip6.5\p@ \@plus3.5\p@\@minus3\p@%
%</12pt>
\def\@listi{%
\leftmargin\leftmargini%
- \topsep\z@%
- \parsep\parskip%
+ \topsep\@parshortfall%
+ \parsep\@parskip%
\itemsep\z@%
}%
\belowdisplayskip\abovedisplayskip%
\newcommand\footnotesize{%
%<*8pt>
\@setfontsize\footnotesize\@vipt\@viipt%
- \abovedisplayskip6\p@\@plus2\p@\@minus4\p@%
- \abovedisplayshortskip\z@\@plus\p@%
- \belowdisplayshortskip3\p@\@plus\p@\@minus2\p@%
+ \set@vsep\abovedisplayskip6\p@\@plus2\p@\@minus4\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus\p@%
+ \set@vsep\belowdisplayshortskip3\p@\@plus\p@\@minus2\p@%
%</8pt>
%<*9pt>
\@setfontsize\footnotesize\@viipt{8.4}%
- \abovedisplayskip6\p@\@plus2\p@\@minus4\p@%
- \abovedisplayshortskip\z@\@plus\p@%
- \belowdisplayshortskip3\p@\@plus\p@\@minus2\p@%
+ \set@vsep\abovedisplayskip6\p@\@plus2\p@\@minus4\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus\p@%
+ \set@vsep\belowdisplayshortskip3\p@\@plus\p@\@minus2\p@%
%</9pt>
%<*10pt>
\@setfontsize\footnotesize\@viiipt{9.5}%
- \abovedisplayskip6\p@\@plus2\p@\@minus4\p@%
- \abovedisplayshortskip\z@\@plus\p@%
- \belowdisplayshortskip3\p@\@plus\p@\@minus2\p@%
+ \set@vsep\abovedisplayskip6\p@\@plus2\p@\@minus4\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus\p@%
+ \set@vsep\belowdisplayshortskip3\p@\@plus\p@\@minus2\p@%
%</10pt>
%<*11pt>
\@setfontsize\footnotesize\@ixpt{11}%
- \abovedisplayskip8\p@\@plus2\p@\@minus4\p@%
- \abovedisplayshortskip\z@\@plus\p@%
- \belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@%
+ \set@vsep\abovedisplayskip8\p@\@plus2\p@\@minus4\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus\p@%
+ \set@vsep\belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@%
%</11pt>
%<*12pt>
\@setfontsize\footnotesize\@xpt\@xiipt
- \abovedisplayskip10\p@\@plus2\p@\@minus5\p@%
- \abovedisplayshortskip\z@\@plus3\p@%
- \belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
+ \set@vsep\abovedisplayskip10\p@\@plus2\p@\@minus5\p@%
+ \set@vsep\abovedisplayshortskip\z@\@plus3\p@%
+ \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@%
%</12pt>
\def\@listi{%
\leftmargin\leftmargini%
- \topsep\z@%
- \parsep\parskip%
+ \topsep\@parshortfall%
+ \parsep\@parskip%
\itemsep\z@%
}%
\belowdisplayskip\abovedisplayskip%
\renewcommand\baselinestretch{}
% \end{macrocode}
%
-% We don't indent paragraphs at all; instead, we separate them with blank
-% lines. The vertical gap is worked out in the size command; we just clear
-% |\parindent|.
-%
-% \begin{macrocode}
-\parindent\z@
-% \end{macrocode}
+% Paragraph indentation is set up later.
%
% Set up some standard penalty values.
%
% \begin{macrocode}
\marginparpush5\p@
% \end{macrocode}
-%
+%
% Footnotes need some setting up now.
%
% \begin{macrocode}
%
% \begin{environment}{titlepage}
%
-% The \env{titlepage} environment typesets its contents on a title page.
+% The \env{titlepage} environment typesets its contents on a title page.
% The implementation is fairly straightforward: we just need to do some
% fiddling with two-column layouts. We also add in some hacking to make
% title pages centred properly, a bit like the \env{central} environment.
\@tempswafalse%
\fi%
\hbox{}\vfil%
- \begin{centrepage}%
\secdef\@part\@spart%
}
% \end{macrocode}
\addcontentsline{toc}{part}{#1}%
\fi%
\markboth{}{}%
+ \begin{centrepage}%
\centering%
\interlinepenalty\@M%
\reset@font%
%
% \begin{macrocode}
\def\@spart#1{%
+ \begin{centrepage}%
\centering%
\interlinepenalty\@M%
\reset@font%
% descenders, although obviously we must lower the rule if the heading really
% is very deep indeed.
%
-%
+%
% We'll approach this a bit at a time.
%
% \begin{macrocode}
% introduced.
%
% \begin{macrocode}
-\newcommand\section{%
- \@startsection%
+\def\@defsection#1#2#3#4#5#6{%
+ \expandafter\newcommand\csname#1\endcsname{%
+ \skip@#4\advance\skip@\ifdim\skip@<\z@-\fi\@parshortfall%
+ \skip\tw@#5\relax\ifdim\skip\tw@>\z@\advance\skip\tw@\@parshortfall\fi%
+ \@startsection%
+ {#1}%
+ {#2}%
+ {#3}%
+ \skip@
+ {\skip\tw@}%
+ {\reset@font#6\bfseries\headfam}%
+ }%
+}
+\@defsection
{section}% % Section name (for contents)
{1}% % Level number (for numbering)
{-.5\sectindent}% % Indentation of title
{-1.5ex\@plus-1ex\@minus-.2ex}% % Space after title (vert/horiz)
{.3ex\@plus.2ex}% % Space before title
{\reset@font\Large\bfseries\headfam}% How to typeset the title
-}
-\newcommand\subsection{%
- \@startsection%
+\@defsection
{subsection}%
{2}%
{-.25\sectindent}%
{-1.25ex\@plus-1ex\@minus-.2ex}%
{\p@\@plus.2ex}%
{\reset@font\large\bfseries\headfam}%
-}
\if@runinsubsubsec
-\newcommand\subsubsection{%
- \@startsection%
+\@defsection
{subsubsection}%
{3}%
{\z@}%
{0pt\@plus1ex\@minus.2ex}%
{-1em}%
{\reset@font\normalsize\bfseries\headfam}%
-}
-\newcommand\paragraph{%
- \@startsection%
+\@defsection
{paragraph}%
{4}%
{\z@}%
{0pt\@plus.5ex\@minus.1ex}%
{-1em}%
{\reset@font\normalsize\bfseries\headfam}%
-}
-\newcommand\subparagraph{%
- \@startsection%
+\@defsection
{subparagraph}%
{5}%
{\parindent}%
{0pt\@plus.5ex\@minus.1ex}%
{-1em}%
{\reset@font\normalsize\bfseries\headfam}%
-}
\else
-\newcommand\subsubsection{%
- \@startsection%
+\@defsection
{subsubsection}%
{3}%
{\z@}%
{-1.25ex\@plus-1ex\@minus-.2ex}%
{\p@\@plus.2ex}%
{\reset@font\normalsize\bfseries\headfam}%
-}
-\newcommand\paragraph{%
- \@startsection%
+\@defsection
{paragraph}%
{4}%
{\z@}%
{0pt\@plus1ex\@minus.2ex}%
{-1em}%
{\reset@font\normalsize\bfseries\headfam}%
-}
-\newcommand\subparagraph{%
- \@startsection%
+\@defsection
{subparagraph}%
{5}%
{\parindent}%
{0pt\@plus.5ex\@minus.1ex}%
{-1em}%
{\reset@font\normalsize\bfseries\headfam}%
-}
\fi
% \end{macrocode}
%
\leftmarginvi1em
\fi
% \end{macrocode}
+% And now we can set the paragraph indent.
+% \begin{macrocode}
+\if@indentpar
+ \parindent1.2em
+\else
+ \parindent\z@
+\fi
+% \end{macrocode}
%
% Other spacing defaults:
%
% \begin{macrocode}
\def\@listI{%
\leftmargin\leftmargini%
- \parsep\parskip%
- \topsep\z@%
+ \parsep\@parskip%
+ \topsep\@parshortfall%
\itemsep\z@%
}
\let\@listi\@listI
-\@listi\topsep\parskip%
+\@listi%
\def\@listii{%
+ \topsep\z@\@plus\p@%
\leftmargin\leftmarginii%
\labelwidth\leftmarginii%
\advance\labelwidth-\labelsep%
% \begin{macro}{\@dottedtocline}
%
% This is actually a part of the \LaTeX\ kernel, although it's not quite
-% right the way it is. We've improved the handling of line breaks after the
+% right the way it is. We've improved the handling of line breaks after the
% title.
%
% \begin{macrocode}
%
% The |passim| encapsulator is used to typeset the word `\textit{passim}'
% after a page range.
-%
+%
% \begin{macrocode}
\def\passim#1{#1 \textit{passim}} % Passim encapsulator for indices
% \end{macrocode}
\@combinefloats
\ifvoid\footins \else
\setbox\@outputbox \vbox {%
- \boxmaxdepth \@maxdepth
+ \boxmaxdepth \@maxdepth
\unvbox \@outputbox
\vskip \skip\footins
\vfil
\parindent\z@ \parskip\z@
\everypar{\parskip\parboxparskip\everypar{}}%
\linewidth\hsize
- \@totalleftmargin\z@
+ \@totalleftmargin\z@
\leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip
\parfillskip\@flushglue \lineskip\normallineskip
\baselineskip\normalbaselineskip