% $Id: tdsguide.cls,v 1.19 2004/03/28 14:21:10 karl Exp $
% LaTeX document class tdsguide
% (history at end)
%
% This class provides markup & layout for the TDS report.
%
\NeedsTeXFormat{LaTeX2e}[1994/12/01] % star-form of \CheckCommand, etc.
% The code below is explained in the implementation documentation of the
% rcs package.
% We can select to use Roman for METAFONT/METAPOST logos by the
% nomflogo option. That should be done if no current logo fonts (with
% `P' & `S') are available. Of course, it would be best to install
% current fonts.
% The mflogo options is provided for upward compatibility.
\RequirePackage{url} % file names & email addresses
\RequirePackage{mflogo} % MF & MP logos (but see below)
%\RequirePackage{hyperref} % navigation specials in .dvi
\RequirePackage{fancyhdr} % rev. no & draft notice in headers
% Put hypertext links in the DVI file on the URL's:
% \def\UrlLeft#1\UrlRight{\special{html:<a href="#1">}#1\special{html:</a>}}
% Don't do this because xdvi doesn't know what do with ftp url's, which
% is the vast majority of links; also because we use the url package for
% mere directory names.
% \abbr may be called with lowercase & uppercase letters, actually all
% abbreviations are to be typeset with reduced-size uppercase letters.
% (That lowercase letters are used as arguments was a half-hearted
% attempt by Norm who did use small caps at this time.) `Reduced size'
% means one point smaller than the current size. If the reduced size
% is larger than 12pt, we issue a warning; if no font-generating
% driver is used, this situation will lead to character replacements
% most probably.
%
% This macro may be written to an auxilliary file, we must not use
% underscores in its name.
\DeclareRobustCommand\tds@reduced@size{%
\dimen@\f@size\p@
\advance \dimen@ -\p@ % dimen@ = font_size - 1
\ifdim \dimen@ >12\p@
\@font@warning{%
Using font size `\the\dimen@' for abbreviations. That might lead%
\MessageBreak
to character replacements if you don't use a driver that\MessageBreak
generates fonts.}%
\fi
\math@fontsfalse
\fontsize{\the\dimen@}\z@
\selectfont
}
\def\abbr#1{{\tds@reduced@size \uppercase{#1}}}
% references
\let\xref\relax
\let\citetitle=\textit
% aliases for LaTeX markup
\let\emphasis=\emph
% environment `legalnotice', part of front matter
\let\legalnotice=\par
\let\endlegalnotice=\par
% environment `ttdisplay', used to explicate some fact. Basically,
% it's the alltt environment without parskip and with an additional
% level of indentation.
% Code below is from alltt.dtx. I don't understand why it's not part
% of the LaTeX kernel.
\def\g@remfrom@specials#1{%
\def\@new@specials{}%
\def\@remove##1{%
\ifx ##1#1%
\else
\g@addto@macro\@new@specials{\do ##1}%
\fi
}%
\let\do\@remove \dospecials
\let\dospecials\@new@specials
}
% Actually, I should use my logos package for the rest... [-js]
% The AmS definition is from AmS-LaTeX, that's more stable in this
% document's context than the one from AmS-TeX.
\def\AmS{%
\begingroup
\protect\usefont{OMS}{cmsy}{m}{n}%
A\kern-.1667em \lower.5ex\hbox{M}\kern-.125em S%
\endgroup
}
\def\AMSTeX{\AmS-\TeX}
% If we don't use logo fonts, both the Metafont and the MetaPost logo
% is typeset in the current font, as shown in this comment. The macros
% `\MF' & `\MP' expand to two \textfont macros, with uppercase
% syllables as arguments. We check for the syllable `FONT', this has
% to be typeset in lowercase. All other syllables are capitalized.
% Use a small caps fake for BibTeX's `ib'. This way we can typeset it
% in bold face or sans-serif, too. The code is copied from the LaTeX
% logo definition, from ltlogos.dtx.
\DeclareRobustCommand\tds@smsize{%
$\m@th$% % force math size calculation
\csname S@\f@size\endcsname
\fontsize\sf@size\z@
\math@fontsfalse \selectfont
}
% Typeset a figure that shows the TeX directory layout. The layout is
% input with optical markup:
%
% \begin{tdsSummary}
% dir/ explanation of dir
% . subdir/ explanation of subdir
% . . subsubdir/ next subdir level
% . dir/dir/ more than one dir in one line
% . <category>/ explanation of category
% \end{tdsSummary}
%
% Directories and category names don't have dots.
% We transform that input into a table. The first table column (the
% directory spec) is terminated by a slash that's followed by white
% space. Directory names are typeset in monocase. <categories> are
% tagged with \replaceable. Subdirectory levels are indented by one
% quad. A quad is placed between columns. The explanation text
% is typeset in one line.
% As this is a special implementation for a special document, these
% design decisions are hardwired, no protected interface is available.
% Design changes will be realized by changes to the macro code.
% The environment is realized as a trivlist to behave correctly in list
% environments. I don't use a tabular environment, since I don't know
% exactly how the first column is tokenized. Instead a halign is used.
% IMO it does not matter, as tdsSummary does not use table markup
% anyhow. If somebody wants to use longer explanations and if they must
% be broken then, I have to use one of the tabulars of the tools bundle.
% The first column (the directory names) is typeset in typewriter type. The
% font chosen hereby must have the underscore at its ASCII position. If
% that is not the case, one has to generalize \tds_dir_tags below.
% Namely, this macro sets up the special lexical convention for this
% column. As TeX will look at the first token of the column to check for
% the table end, \cr, or \omit before \tds_dir_tags is evaluated, the
% redefinition of the lexical analysis will not have happened for that
% token. So we have to check this token specially if it's one of the
% special optical markup chars.
% After we started the trivlist, we need to supply the item (as this
% macro really adds the vertical space). But it does not actually
% start an item, it sets up the everypar register to do so. We fake
% the item start as we don't want to go in horizontal mode, \halign
% needs to be evaluated in vertical mode.
%
% \par is not evaluated by \endtrivlist and \end, so we don't need
% another group around its redefinition.
\def\tdsSummary{%
\trivlist \item\relax
\vskip\parskip
\global\@inlabelfalse \global\@newlistfalse \global\everypar{}%
\tabskip 0pt
\let\par\crcr \obeylines % can't use \obeycr, redefined by LaTeX
% redefine \obeylines to do nothing; url.sty v3.0 calls it, and the
% ^^M character therein causes a `Missing \endgroup inserted' error
% at a \path|...| within a tdsSummary, if it's already defined as \par.
\let\obeylines=\relax
\halign\bgroup
\ttfamily \tds_dir_tags \tds_first_token ##\unskip\hfil &%
\quad ##\unskip\hfil \cr
}
\def\endtdsSummary{%
\crcr
\egroup
\endtrivlist
}
% Our special lexical conventions are: `.' denotes the next directory
% level, `<...>' denotes a directory category, and `/' is a column
% separator if it is followed by space or tab, a typeset slash
% otherwise. Underscores don't have any special meaning.
\chardef\tds_dir_sep=`\/ % typeset a directory separator
% The slash has to check the stuff behind. If it's a space or a tab,
% \next is bound to the action `blank-space' (the binding of all
% '(space . #\Space) tokens). A tab is usually tokenized to the same
% token, but we care for redefinitions below.
%
\def\tds_slash{%
\futurelet\next \tds_check_dir_end
}
% For colons in the examples.
%
\def\tds_colon{:&}
% We need two control sequencess that are bound to the actions currently
% bound to '(space . #\Space) and (tex:parse "\t"). A direct \let
% evaluation is difficult as the lexical analysis collapses subsequent
% spaces to one token. But we need one space token behind the equal
% sign, to be able to \let our cseq to the next space token. The first
% token is stored in the replacement list of a macro, the second token
% comes as its argument.
% We're almost finished with the tdsSummary setup. The stuff above is
% not used for the first column token, as it's already tokenized when
% the catcode changes take effect. So let's check and remap this token
% by hand. Actually, I'm sloppy here; I assume that `/' won't be a
% used as a directory name and that no directory name starts with an
% underscore. But then, I know that this won't happen in TDS... :-)
% We use the same height as article's default, but increase the width.
\textwidth=35pc
\oddsidemargin = \paperwidth
\advance\oddsidemargin by -\textwidth
\divide\oddsidemargin by 2
\evensidemargin = \oddsidemargin
\hoffset = -1in
% spacing
\parindent=0pt % no paragraph indentation
\emergencystretch=2em % fewer overfull hboxes, only a memo
\parskip=1ex plus 1ex minus .5ex % between paragraphs; if you change it,
% change the spacing in section headers
% below, too!
% Our spacing for lists is very simplistic, but uniform: We use (almost)
% parskip everywhere, and don't distinguish vertical spacing for
% different list levels. Actually, the latter is the thing we might want
% to introduce later again.
\labelsep=1.1em % increase distance between item & text
\topsep=0pt % no extra skip above list in paragraph
\partopsep=0pt % no extra skip above list starting par.
\itemsep=0pt % no extra space between items
\parsep=.9\parskip % between paragraphs in items
% Redefine section headers, different spacing and other fonts.
\newskip\TdsPreSubSectionSkip
\TdsPreSubSectionSkip = 2.5ex plus 0.5ex minus 0.2ex
\def\section{%
\@startsection{section}{1}% % name and level
{\z@}% % indentation
{-3ex plus-.75ex minus-.2ex}% % skip above and don't indent next par
{1.5ex plus.2ex}% % skip below
{\reset@font \Large \sffamily}% % type
}
\def\subsection{%
\@startsection{subsection}{2}% % name and level
{\z@}% % indentation
{-\TdsPreSubSectionSkip}% % skip above and don't indent next par
\parskip % skip below
{\reset@font \large \sffamily}% % type
}
\def\subsubsection{%
\@startsection{subsubsection}{3}% % name and level
{\z@}% % indentation
{-\TdsPreSubSectionSkip}% % skip above and don't indent next par
\parskip % skip below
{\reset@font \normalsize \sffamily}% % type
}
\def\paragraph{%
\@startsection{paragraph}{4}% % name and level
{\z@}% % indentation
\TdsPreSubSectionSkip % skip above and indent next par
{-1.5em}% % skip after, run in text
{\reset@font \normalsize \scshape}% % type
}
% Table of contents
\setcounter{tocdepth}{2} % only sections on first two levels
% Less space between TOC entries, discard the parskip. For that, we
% have to redefine \@starttoc, since no hook is available.
\let\tds_orig_starttoc=\@starttoc
\def\@starttoc#1{%
\begingroup
\parskip\z@skip
\tds_orig_starttoc{#1}%
\endgroup
}
% Section TOC entries in sans serif, and less space above. The code
% below is copied from the article view on classes.dtx, I have changed
% space and font. But let's first assure that we shouldn't use a newer
% version of this code.
\CheckCommand*\l@section[2]{%
\ifnum \c@tocdepth >\z@
\addpenalty\@secpenalty
\addvspace{1.0em \@plus\p@}%
\setlength\@tempdima{1.5em}%
\begingroup
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode \bfseries
\advance\leftskip\@tempdima
\hskip -\leftskip
#1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
\endgroup
\fi}
\def\l@section#1#2{%
\ifnum \c@tocdepth >\z@
\addpenalty\@secpenalty
\addvspace{.75ex \@plus\p@ \@minus\p@}% % was: 1em plus 1pt
\setlength\@tempdima{1.5em}%
\begingroup
\parindent \z@
\rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode \sffamily % was: \bfseries
\advance\leftskip\@tempdima
\hskip -\leftskip
#1\nobreak \hfil \nobreak \hbox to\@pnumwidth{\hss #2}%
\par
\endgroup
\fi}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% $Log: tdsguide.cls,v $
% Revision 1.19 2004/03/28 14:21:10 karl
% (\tdsSummary): \let\obeylines=\relax after we set
% it, so url.sty v3.0's usage of \obeylines does not
% cause errors.
%
% Revision 1.18 1998/01/26 21:26:10 karl
% (\TeXinfo): Remove unused and incorrect name.
% (\parsep): Decrease slightly.
% (\l@section): Decrease section spacing for toc slightly.
% (\@maketitle): Remove word `draft'.
%
% Revision 1.17 1997/02/07 20:47:16 karl
% Fix : in tdsSummary, more doc.
%
% Revision 1.16 1996/11/16 14:23:58 karl
% fancyhdr requires different commands.
%
% Revision 1.13 1995/11/21 18:57:35 schrod
% Add description-squeeze environment.
%
% Revision 1.12 1995/11/14 18:33:18 schrod
% Drop draft hint in legalnotice environment, make title more
% squeezed. Changes by Karl, to make title & toc fit on one page.
%
% Revision 1.11 1995/11/14 12:36:54 schrod
% Use url.sty instead of path.sty. (On request of Karl, better input
% syntax and different line breaks [0.103].)
% Rename environment explicate to ttdisplay. (Proposal of Karl.)
%
% Revision 1.10 1995/11/11 16:29:01 schrod
% Identify version of class in log file.
% Change layout of table of contents. Implementation of a discussion
% between Karl Berry and myself.
%
% Revision 1.9 1995/11/11 15:43:34 schrod
% Replace alltt environment by explicate environment. Change
% requested by Karl at 09 Nov 95.
%
% Revision 1.8 1995/11/02 10:52:29 schrod
% Add option nomflogo, mflogo is default now.
% Don't need provision for slanted typewriter type any more,
% replacable texts are set in italics now.
% Add logos \texmf and \CTAN:. [kb]
% Set margins in addition to \textwidth. It's a bit wider, too. [kb]
% Wider distance between item label and item text. [kb]
% New environment itemize-squeeze, without space between items. [kb]
%
% Revision 1.7 1995/05/18 09:06:39 schrod
% Don't parse arguments unnecessarily early, one might change
% catcodes in them.
% Use \tds_tt to switch to typewriter, also typesets backslashs and
% underscores [kb].
% Increase width to 33pc [kb].
%
% Revision 1.6 1995/05/12 23:19:07 schrod
% \f@size may be a fraction, so use dimension register to compute
% the reduced size for abbreviations [dc].
% In summary tables, terminate the directory names with slashes [kb, nw].
%
% Revision 1.5 1995/05/09 01:46:24 schrod
% Typeset abbreviation one point smaller than surrounding font [uv,
% kb, bb], use always uppercase letters for them. Rename the tag from
% \acronym to \abbr [kb, nw].
%
% Revision 1.4 1995/05/09 00:39:57 schrod
% Repair vertical spacing around tdsSummary environment.
%
% Revision 1.3 1995/05/08 17:14:52 schrod
% For TDS 0.72 Norm changed the document to use \abbr (argument with
% lowercase letters) instead of \acronym. It's not looking better, of
% course; small caps is not really a good font for abbreviations. This
% revision just tracks his change, I'll look later if I can improve the
% rendering.
%
% Revision 1.2 1995/05/07 18:22:53 schrod
% In environment tdsSummary: Next directory level indented by one
% quad, without dots for indentation [kb, !uv, js].
% Renamed Draft flag to TdsDraft, to keep namespace clean.
% Headline now features a centered short title [kb, uv, nw]. It's
% still ruled.
% \replaceable used spurious \selectfont [uv]. \dir & \ext are not
% used [uv].
% Subsubsections are also numbered and not indented [uv]. But they
% are still not added to the table of contents. Actually, we have only
% _one_ subsubsection...
% Set erroneously counter `secnumdepth' when I wanted fewer section
% headings in the table of contents. That's controlled by counter
% `tocdepth' [uv].
% Inherit tdsguide from article class, not from ltxguide. The tags
% of the latter class are not appropriate and we define our layout
% ourselves.
%
%
% pre-CVS Log:
%
% 19 Apr 95 js Made a LaTeX2e class.
% Use mflogo option to select MF/MP logo typesetting,
% support configuration file.
% 1994-1995 nw Initial revision.