% \iffalse meta-comment % % Copyright (C) 1993-2024 % The LaTeX Project and any individual authors listed elsewhere % in this file. % % This file is part of the LaTeX base system. % ------------------------------------------- % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3c % of this license or (at your option) any later version. % The latest version of this license is in % https://www.latex-project.org/lppl.txt % and version 1.3c or later is part of all distributions of LaTeX % version 2008 or later. % % This file has the LPPL maintenance status "maintained". % % The list of all files belonging to the LaTeX base distribution is % given in the file `manifest.txt'. See also `legal.txt' for additional % information. % % The list of derived (unpacked) files belonging to the distribution % and covered by LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % % \fi % % % \iffalse % \section{Identification} % % % This document class can only be used with \LaTeXe, so we make % sure that an appropriate message is displayed when another \TeX{} % format is used. % \begin{macrocode} %<+letter>\NeedsTeXFormat{LaTeX2e}[1996/06/01] % \end{macrocode} % % Announce the Class name and its version. % \begin{macrocode} %<+letter>\ProvidesClass{letter} %<*driver> \ProvidesFile{letter.drv} % [2024/08/12 v1.3c %<+letter> Standard LaTeX document class] % \end{macrocode} % % \section{The documentation driver file} % % We have our own document class to format the \LaTeXe{} % documentation. % \fi % \changes{v1.0}{1993/12/07}{Use class ltxdoc document class} % \iffalse % \begin{macrocode} %<*driver> ] \documentclass{ltxdoc} % \end{macrocode} % % We don't want everything to appear in the index. % \begin{macrocode} \DoNotIndex{\@Alph,\@alph,\@arabic,\@badmath} \DoNotIndex{\@centercr} \DoNotIndex{\@empty,\@ignoretrue} \DoNotIndex{\@ixpt} \DoNotIndex{\@M,\@minus,\@ne,\@plus} \DoNotIndex{\\,\addtolength} \DoNotIndex{\advance} \DoNotIndex{\ast,\begin,\begingroup,\bfseries,\bgroup,\box} \DoNotIndex{\bullet} \DoNotIndex{\cdot,\cr,\day,\DeclareOption} \DoNotIndex{\def,\DocInput,\documentclass} \DoNotIndex{\DoNotIndex,\egroup,\ifx,\else,\fi,\endtrivlist} \DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup} \DoNotIndex{\endlist,\everycr,\ExecuteOptions} \DoNotIndex{\filedate,\filename,\fileversion} \DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule} \DoNotIndex{\hsize,\hskip,\hspace,\hss,\ifcase,\or,\fi} \DoNotIndex{\ifvmode,\fi,\ifnum,\fi,\input} \DoNotIndex{\kern,\leavevmode,\let,\leftmark} \DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark} \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment} \DoNotIndex{\NeedsTeXFormat,\newdimen} \DoNotIndex{\newpage,\nobreak,\noindent,\number} \DoNotIndex{\p@} \DoNotIndex{\pagestyle,\par} \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions} \DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright} \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font} \DoNotIndex{\rightmargin,\rlap,\rmfamily} \DoNotIndex{\setbox,\setcounter,\setlength} \DoNotIndex{\skip,\slshape,\space} \DoNotIndex{\trivlist,\typeout,\tw@} \DoNotIndex{\vskip,\vspace,\year,\z@} % \CodelineNumbered \CodelineIndex \EnableCrossrefs \RecordChanges % \end{macrocode} % We use so many \file{docstrip} modules that we set the % \texttt{StandardModuleDepth} counter to 1. % \begin{macrocode} \setcounter{StandardModuleDepth}{1} % \end{macrocode} % The following command retrieves the date and version information % from the file. % \begin{macrocode} \GetFileInfo{letter.drv} % \end{macrocode} % Some commonly used abbreviations % \begin{macrocode} \newcommand*\Lopt[1]{\textsf {#1}} \newcommand*\file[1]{\texttt {#1}} \newcommand*\Lcount[1]{\textsl {\small#1}} \newcommand*\pstyle[1]{\textsl {#1}} % \end{macrocode} % We also want the full details. % \begin{macrocode} \begin{document} \DocInput{letter.dtx} \PrintIndex % ^^A\PrintChanges \end{document} % % \end{macrocode} % \fi % % \changes{v1.1}{1993/12/18}{Changes to make it work with % compatibility mode.} % \changes{v1.1a}{1993/12/19}{Removed float parms} % % \changes{v1.1c}{1994/01/17}{Moved definition of \cs{@textop} to % initialization section, to counteract setting of \cs{@texttop} in % \cs{raggedbottom}.} % % \changes{v1.1d}{1994/01/20}{Corrected margins: Now computed from % \cs{paperwidth} and \cs{textwidth}, so that the text is % horizontally centered.} % \changes{v1.1e}{1994/02/03}{Corrected checksum} % % \changes{v1.2a}{1994/02/12}{Removed onecolumn and twocolumn options.} % \changes{v1.2a}{1994/02/12}{Changed label producing commands in .aux % file.} % % \changes{v1.2b}{1994/02/28}{Moved driver further up.} % % \changes{v1.2c}{1994/03/08}{Always write .aux file.} % \changes{v1.2f}{1994/04/29}{Use LaTeX instead of LaTeX2e in messages} % \changes{v1.2f}{1994/04/29}{Removed \cs{typeout} message} % \changes{v1.2g}{1994/05/01}{Removed the use of \cs{fileversion} % c.s.} % \changes{v1.2j}{1994/06/01}{Corrected driver code.} % \changes{v1.2k}{1994/06/17}{Various documentation enhancements} % \changes{v1.2p}{1994/12/11}{Use \cs{newcommand*} to define % user-level commands that take an argument} % \changes{v1.2q}{1995/05/17}{cleaned up \cs{changes entries}} % \changes{v1.2q}{1995/05/18}{replaced \cs{hbox to} by \cs{hb@xt@}} % \changes{v1.2r}{1995/05/23}{removed a superfluous brace} % \changes{v1.3a}{2020/03/07}{merged changes to classes.dtx into letter.dtx} % % \iffalse % Copyright (C) 1994 LaTeX Project, Frank Mittelbach % and Rainer Sch\"opf, all rights reserved. % \fi % % \author{Leslie Lamport and Frank Mittelbach and Rainer Sch\"opf} % % \title{Standard Letter Document Class for \LaTeX{} version 2e} % % % \MaintainedByLaTeXTeam{latex} % \maketitle % \tableofcontents % % \MaybeStop{} % % % \section{Initial Code} % % In this part we define a few commands that are used later on. % % \begin{macro}{\@ptsize} % This control sequence is used to store the second digit of the % pointsize we are typesetting in. So, normally, it's value is one % of 0, 1 or 2. % \begin{macrocode} %<*letter> \newcommand\@ptsize{} % \end{macrocode} % \end{macro} % % % % \subsection{Setting Paper Sizes} % % The variables |\paperwidth| and |\paperheight| should reflect the % physical paper size after trimming. For desk printer output this % is usually the real paper size since there is no post-processing. % \changes{v1.0a}{1993/12/14}{Corrected typo, A4 is not 279 mm high} % \begin{macrocode} \DeclareOption{a4paper} {\setlength\paperheight {297mm}% \setlength\paperwidth {210mm}} \DeclareOption{a5paper} {\setlength\paperheight {210mm}% \setlength\paperwidth {148mm}} \DeclareOption{b5paper} {\setlength\paperheight {250mm}% \setlength\paperwidth {176mm}} \DeclareOption{letterpaper} {\setlength\paperheight {11in}% \setlength\paperwidth {8.5in}} \DeclareOption{legalpaper} {\setlength\paperheight {14in}% \setlength\paperwidth {8.5in}} \DeclareOption{executivepaper} {\setlength\paperheight {10.5in}% \setlength\paperwidth {7.25in}} % \end{macrocode} % % \changes{v1.2o}{1994/08/26}{Added the option \textsf{landscape}} % The option \Lopt{landscape} switches the values of |\paperheight| % and |\paperwidth|, assuming the dimensions were given for portrait % paper. % \begin{macrocode} \DeclareOption{landscape} {\setlength\@tempdima {\paperheight}% \setlength\paperheight {\paperwidth}% \setlength\paperwidth {\@tempdima}} % \end{macrocode} % % \subsection{Choosing the type size} % % The type size options are handled by defining |\@ptsize| to % contain the last digit of the size in question and branching on % |\ifcase| statements. This is done for historical reasons to stay % compatible with other packages that use the |\@ptsize| variable % to select special actions. It makes the declarations of size % options less than 10pt difficult, although one can probably use % \texttt{9} and \texttt{8} assuming that a class won't define both % \Lopt{8pt} and \Lopt{18pt} options. % % \begin{macrocode} \DeclareOption{10pt}{\renewcommand\@ptsize{0}} \DeclareOption{11pt}{\renewcommand\@ptsize{1}} \DeclareOption{12pt}{\renewcommand\@ptsize{2}} % \end{macrocode} % % % \subsection{Two-side or one-side printing} % % Two-sided printing was not supported in the \LaTeX~2.09 version % of this document class. % \changes{v1.2e}{1994/04/28}{Added oneside option and twoside option % in native mode} % \begin{macrocode} \if@compatibility \DeclareOption{twoside}{\@latexerr{No `twoside' layout for letters}% \@eha} \else \DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} \fi % \end{macrocode} % % % \begin{macrocode} \DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} % \end{macrocode} % % \subsection{Draft option} % % If the user requests \Lopt{draft} we show any overfull boxes. % We could probably add some more interesting stuff to this option. % \begin{macrocode} \DeclareOption{draft}{\setlength\overfullrule{5pt}} \DeclareOption{final}{\setlength\overfullrule{0pt}} % \end{macrocode} % % % \subsection{Equation numbering on the left} % % The option \Lopt{leqno} can be used to get the equation numbers % on the left side of the equation. % \changes{v1.1c}{1994/01/17}{Option leqno now read from % \file{leqno.clo}.} % \begin{macrocode} \DeclareOption{leqno}{\input{leqno.clo}} % \end{macrocode} % % \subsection{Flush left displays} % % The option \Lopt{fleqn} redefines the displayed math environments % in such a way that they come out flush left, with an indentation % of |\mathindent| from the prevailing left margin. % \changes{v1.1}{1993/12/18}{Corrected typo in \cs{renewcommand}, % doubled hash marks.} % \changes{v1.1c}{1994/01/17}{Option fleqn now read from % \file{fleqn.clo}.} % \begin{macrocode} \DeclareOption{fleqn}{\input{fleqn.clo}} % \end{macrocode} % % % \section{Executing Options} % % Here we execute the default options to initialize certain % variables. % \changes{v1.2e}{1994/04/28}{Added execution of `oneside' option} % \begin{macrocode} \ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final} % \end{macrocode} % % The |\ProcessOptions| command causes the execution of the code % for every option \Lopt{foo} which is declared and for which the % user typed the \Lopt{foo} option in his |\documentclass| command. % For every option \Lopt{bar} he typed, which is not declared, the % option is assumed to be a global option. All options will be % passed as document options to any |\usepackage| command in the % document preamble. % \begin{macrocode} \ProcessOptions % \end{macrocode} % Now that all the options have been executed we can load the % chosen class option file that contains all size dependent code. % \begin{macrocode} \input{size1\@ptsize.clo} % \end{macrocode} % % % \section{Loading Packages} % % The standard class files do not load additional packages. % % % \section{Document Layout} % \label{sec:maincode} % % In this section we are finally dealing with the nasty typographical % details. % % \subsection{Paragraphing} % % \begin{macro}{\lineskip} % \begin{macro}{\normallineskip} % These parameters control \TeX's behavior when two lines tend to % come too close together. % \begin{macrocode} \setlength\lineskip{1\p@} \setlength\normallineskip{1\p@} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\baselinestretch} % This is used as a multiplier for |\baselineskip|. The default is % to {\em not\/} stretch the baselines. % \begin{macrocode} \renewcommand\baselinestretch{} % \end{macrocode} % \end{macro} % % \begin{macro}{\parskip} % \begin{macro}{\parindent} % |\parskip| gives extra vertical space between paragraphs and % |\parindent| is the width of the paragraph indentation. % Letters are typeset without paragraph indentation. % \begin{macrocode} \setlength\parskip{0.7em} \setlength\parindent{0\p@} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@lowpenalty} % \begin{macro}{\@medpenalty} % \begin{macro}{\@highpenalty} % The commands |\nopagebreak| and |\nolinebreak| put in penalties % to discourage these breaks at the point they are put in. % They use |\@lowpenalty|, |\@medpenalty| or |\@highpenalty|, % dependent on their argument. % \begin{macrocode} \@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\clubpenalty} % \begin{macro}{\widowpenalty} % These penalties are used to discourage club and widow lines. % Because we use their default values we only show them here, % commented out. % \begin{macrocode} % \clubpenalty 150 % \widowpenalty 150 % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\displaywidowpenalty} % \begin{macro}{\predisplaypenalty} % \begin{macro}{\postdisplaypenalty} % Discourage (but not so much) widows in front of a math display % and forbid breaking directly in front of a display. Allow break % after a display without a penalty. Again the default values are % used, therefore we only show them here. % \begin{macrocode} % \displaywidowpenalty 50 % \predisplaypenalty 10000 % \postdisplaypenalty 0 % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\interlinepenalty} % Allow the breaking of a page in the middle of a paragraph. % \begin{macrocode} % \interlinepenalty 0 % \end{macrocode} % \end{macro} % % % \begin{macro}{\brokenpenalty} % We allow the breaking of a page after a hyphenated line. % \begin{macrocode} % \brokenpenalty 0 % \end{macrocode} % \end{macro} % % % \subsection{Page Layout} % % All margin dimensions are measured from a point one inch from the % top and lefthand side of the page. % % \subsubsection{Vertical spacing} % % \begin{macro}{\headheight} % \begin{macro}{\headsep} % The |\headheight| is the height of the box that will contain the % running head. The |\headsep| is the distance between the bottom % of the running head and the top of the text. |\topskip| is the % |\baselineskip| for the first line on a page, its value depends % on the size option that was specified. Therefore it is % initialized in one of the \file{size1x.clo} files. % \begin{macrocode} \setlength\headheight{12\p@} \setlength\headsep {45\p@} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\footskip} % The distance from the baseline of the box which contains the % running footer to the baseline of last line of text is controlled % by the |\footskip|. % Bottom of page: % \begin{macrocode} \setlength\footskip{25\p@} % \end{macrocode} % \end{macro} % % \changes{v1.2n}{1994/07/13}{Setting of \cs{maxdepth} and % \cs{@maxdepth} already happens in the size.. files, removed % here} % % \subsubsection{The dimension of text} % % \begin{macro}{\textwidth} % When we are in compatibility mode we have to make sure that the % dimensions of the printed area are not different from what the % user was used to see. % % \changes{v1.2n}{1994/07/13}{Setting \cs{textwidth} to a fixed value % should only happen in compatibility mode} % \begin{macrocode} \if@compatibility \setlength\textwidth{365\p@} % \end{macrocode} % \end{macro} % % \begin{macro}{\textheight} % Now that we have computed the width of the text, we have to take % care of the height. The |\textheight| is the height of text % (including footnotes and figures, excluding running head and % foot). % \changes{v1.2n}{1994/07/13}{Setting \cs{textheight} to a fixed value % should only happen in compatibility mode} % \begin{macrocode} \setlength\textheight{505\p@} \fi % \end{macrocode} % In native mode we use the dimensions as they were computed by one % of the \Lopt{xxpt} options, together with one of the % \Lopt{..paper} options. % \end{macro} % % \subsubsection{Margins} % % \begin{macro}{\oddsidemargin} % \begin{macro}{\evensidemargin} % \begin{macro}{\marginparwidth} % \changes{v1.1d}{1994/01/20}{Corrected margins: Now computed from % \cs{paperwidth} and \cs{textwidth}.} The values of % |\oddsidemargin| and |\evensidemargin| are computed from those of % |\paperwidth| and |\textwidth|. % \changes{v1.2n}{1994/07/13}{Added fixed values for these parameters % in compatibility mode} % \begin{macrocode} \if@compatibility \setlength\oddsidemargin{53pt} \setlength\evensidemargin{53pt} \setlength\marginparwidth{90pt} \else \setlength\@tempdima{\paperwidth} \addtolength\@tempdima{-2in} \addtolength\@tempdima{-\textwidth} \setlength\oddsidemargin {.5\@tempdima} \setlength\evensidemargin {\oddsidemargin} \setlength\marginparwidth {90\p@} \fi % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\marginparsep} % \begin{macro}{\marginparpush} % The horizontal space between the main text and marginal notes is % determined by |\marginparsep|, the minimum vertical separation % between two marginal notes is controlled by |\marginparpush|. % \begin{macrocode} \setlength\marginparsep {11\p@} \setlength\marginparpush{5\p@} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\topmargin} % The |\topmargin| is the distance between the top of `the % printable area' --which is 1 inch below the top of the paper-- % and the top of the box which contains the running head. % % It can now be computed from the values set above. % \begin{macrocode} \setlength\topmargin{27pt} % \end{macrocode} % \end{macro} % % % \subsubsection{Footnotes} % % \begin{macro}{\footnotesep} % |\footnotesep| is the height of the strut placed at the beginning % of every footnote. It equals the height of a normal % |\footnotesize| strut in this % class, thus no extra space occurs between footnotes. % \begin{macrocode} \setlength\footnotesep{12\p@} % \end{macrocode} % \end{macro} % % \begin{macro}{\footins} % |\skip\footins| is the space between the last line of the main % text and the top of the first footnote. % \begin{macrocode} \setlength{\skip\footins}{10\p@ \@plus 2\p@ \@minus 4\p@} % \end{macrocode} % \end{macro} % % % \subsection{Page Styles} % % The page style \pstyle{foo} is defined by defining the command % |\ps@foo|. This command should make only local definitions. % There should be no stray spaces in the definition, since they % could lead to mysterious extra spaces in the output (well, that's % something that should be always avoided). % % \begin{macro}{\@evenhead} % \begin{macro}{\@oddhead} % \begin{macro}{\@evenfoot} % \begin{macro}{\@oddfoot} % The |\ps@...| command defines the macros |\@oddhead|, % |\@oddfoot|, |\@evenhead|, and |\@evenfoot| to define the running % heads and feet---e.g., |\@oddhead| is the macro to produce the % contents of the heading box for odd-numbered pages. It is called % inside an |\hbox| of width |\textwidth|. % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsubsection{Marking conventions} % % To make headings determined by the sectioning commands, the page % style defines the commands |\chaptermark|, |\sectionmark|, % \ldots, where |\chaptermark{|\meta{text}|}| is called by % |\chapter| to set a mark, and so on. % % The |\...mark| commands and the |\...head| macros are defined % with the help of the following macros. (All the |\...mark| % commands should be initialized to no-ops.) % % \LaTeX{} extends \TeX's |\mark| facility by producing two kinds % of marks, a `left' and a `right' mark, using the following % commands: % \begin{flushleft} % |\markboth{|\meta{left}|}{|\meta{right}|}|: Adds both marks. % % |\markright{|\meta{right}|}|: Adds a `right' mark. % % |\leftmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| % or |\@evenfoot| macros, it gets the current `left' % mark. |\leftmark| works like \TeX's |\botmark| % command. % % |\rightmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| % or |\@evenfoot| macros, it gets the current % `right' mark. |\rightmark| works like \TeX's % |\firstmark| command. % \end{flushleft} % % The marking commands work reasonably well for right marks % `numbered within' left marks--e.g., the left mark is changed by a % |\chapter| command and the right mark is changed by a |\section| % command. However, it does produce somewhat anomalous results if % two |\markboth|'s occur on the same page. % % % Commands like |\tableofcontents| that should set the marks in some % page styles use a |\@mkboth| command, which is |\let| by the % pagestyle command (|\ps@...|) to |\markboth| for setting the % heading or to |\@gobbletwo| to do nothing. % % % \subsubsection{Defining the page styles} % \label{sec:pagestyle} % % The pagestyles \pstyle{empty} and \pstyle{plain} are defined in % the \LaTeX{} kernel (\file{ltpage.dtx}), but these definitions % are changed to a simpler version for this document class. % % \begin{macro}{\ps@headings} % The definition of the page style \pstyle{headings} has to be % different for two sided printing than it is for one sided % printing. % % \changes{v1.2e}{1994/04/28}{Added twoside support} % \begin{macrocode} \if@twoside \def\ps@headings{% % \end{macrocode} % The running feet are empty in this page style. % \begin{macrocode} \let\@oddfoot\@empty\let\@evenfoot\@empty % \end{macrocode} % The running head contains some information about this letter. The % head is the same for even and odd pages. % \changes{v1.2i}{1994/05/12}{Made running heads the same on odd and % even pages} % \changes{v1.2k}{1994/06/17}{Added a missing brace} % \begin{macrocode} \def\@oddhead{\slshape\headtoname{} \ignorespaces\toname \hfil \@date \hfil \pagename{} \thepage}% \let\@evenhead\@oddhead} % \end{macrocode} % For one sided printing we don't need to define |\@evenhead| so % the definition is somewhat simpler. % \begin{macrocode} \else \def\ps@headings{% \let\@oddfoot\@empty \def\@oddhead{\slshape\headtoname{} \ignorespaces\toname \hfil \@date \hfil \pagename{} \thepage}} \fi % \end{macrocode} % \end{macro} % % % \begin{macro}{\ps@empty} % The definition of the page style \pstyle{empty} is simple: % No running head or foot at all. % \changes{v1.2e}{1994/04/28}{Also make even feet and head empty} % \begin{macrocode} \def\ps@empty{% \let\@oddfoot\@empty\let\@oddhead\@empty \let\@evenfoot\@empty\let\@evenhead\@empty} % \end{macrocode} % \end{macro} % % \begin{macro}{\ps@firstpage} % The page style \pstyle{firstpage} puts the telephone number % in the proper place for the letterhead. It should be adapted % to site conventions. The size of the number is determined % depending on the main size. % \begin{macrocode} \def\ps@firstpage{% \let\@oddhead\@empty \def\@oddfoot{\raisebox{-45\p@}[\z@]{% \hb@xt@\textwidth{\hspace*{100\p@}% \ifcase \@ptsize\relax \normalsize \or \small \or \footnotesize \fi \fromlocation \hfill \telephonenum}}\hss}} % \end{macrocode} % \end{macro} % % \begin{macro}{\ps@plain} % The definition of the page style \pstyle{plain} is again simple. % \changes{v1.2e}{1994/04/28}{Added definition of \cs{@evenfoot} % because of twoside option} % \changes{v1.2s}{1995/05/25}{replace \cs{rmfamily} with % \cs{normalfont} (PR 1578)} % \begin{macrocode} \def\ps@plain{% \let\@oddhead\@empty \def\@oddfoot{\normalfont\hfil\thepage\hfil}% \def\@evenfoot{\normalfont\hfil\thepage\hfil}} % \end{macrocode} % \end{macro} % % % % \section{Document Markup} % % \subsection{Global Declarations} % % \begin{macro}{\name} % \begin{macro}{\signature} % \begin{macro}{\address} % \begin{macro}{\location} % \begin{macro}{\telephone} % The following declarations, shown with examples, give information % about the sender: % \begin{itemize} % \item |\name{Dr. L. User}| : to be used for the return address on % the envelope. % \begin{macrocode} \newcommand*\name[1]{\def\fromname{#1}} % \end{macrocode} % \item |\signature{Larry User}| : goes after the closing. % \begin{macrocode} \newcommand*\signature[1]{\def\fromsig{#1}} % \end{macrocode} % \item |\address{3245 Foo St.\\Gnu York}| : used as the return % address in the % letter and on the envelope. If not declared, then an % institutional standard address is used. % \begin{macrocode} \newcommand*\address[1]{\def\fromaddress{#1}} % \end{macrocode} % \item |\location{Room 374}| : Acts as modifier to the standard % institutional address. % \begin{macrocode} \newcommand*\location[1]{\def\fromlocation{#1}} % \end{macrocode} % \item |\telephone{(415)123-4567}| : Just in case some style puts it % on the letter. % \changes{v1.2m}{1994/06/23}{Removed typo (\#[] instead of [1])} % \begin{macrocode} \newcommand*\telephone[1]{\def\telephonenum{#1}} % \end{macrocode} % \end{itemize} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\fromname} % \begin{macro}{\fromsig} % \begin{macro}{\fromaddress} % \begin{macro}{\fromlocation} % \begin{macro}{\telephonenum} % We make sure that the internal control sequences that are used to % store the information exist and are empty. % \begin{macrocode} \name{} \signature{} \address{} \location{} \telephone{} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\makelabels} % The |\makelabels| declaration causes mailing labels to be made. % \begin{macrocode} \newcommand*\makelabels{% % \end{macrocode} % At the beginning of the document, we need to activate the % |\@mlabel| and |\@startlabels| commands, as well as write % |\@startlabels| to the |.aux| file. % \begin{macrocode} \AtBeginDocument{% \let\@startlabels\startlabels \let\@mlabel\mlabel \if@filesw \immediate\write\@mainaux{\string\@startlabels}\fi}% % \end{macrocode} % At the end of the document we need to write |\clearpage| to the % |.aux| file. % \begin{macrocode} \AtEndDocument{% \if@filesw\immediate\write\@mainaux{\string\clearpage}\fi}} % \end{macrocode} % |\makelabels| is allowed only before the |\begin{document}| % command. % \begin{macrocode} \@onlypreamble\makelabels % \end{macrocode} % \end{macro} % % \subsection{The generic letter commands} % % \begin{environment}{letter} % The letter environment creates a new letter, starting from page % $1$, with footnotes starting from $1$ as well. % (The first page is unnumbered.) It has a single argument, which % is the addressee and his address, as in % \changes{v1.3c}{2024/08/12}{Alter sample address (gh/1439)} %\begin{verbatim} % \begin{letter}{Sam Jones \\ % Institute for Trivial Study\\ % Princeton, N.J.} %\end{verbatim} % Local declarations, such as |\address|, can follow the % |\begin{letter}|. % \changes{v1.2e}{1994/04/28}{When printing twosided a new letter % shouldn't start on the back of the previous one. Added insertion % of a blank page when necessary.} % \changes{v1.2z}{1999/04/29}{Reset footnote counter to 0, (PR 2957).} % \begin{macrocode} \newenvironment{letter}[1] {\newpage \if@twoside \ifodd\c@page \else\thispagestyle{empty}\null\newpage\fi \fi \c@page \@ne \c@footnote \z@ \interlinepenalty=200 % smaller than the TeXbook value % \end{macrocode} % The |\leavevmode| and |\ignorespaces| commands are there for % protecting against an empty argument. % \begin{macrocode} \@processto{\leavevmode\ignorespaces #1}} % \end{macrocode} % The end of the environment possibly writes the address % information on the \file{.aux} file. % \changes{v1.2p}{1994/12/11}{No longer redefine \cs{protect} but use % one of the available settings} % \begin{macrocode} {\stopletter\@@par\pagebreak\@@par \if@filesw \begingroup \let\\=\relax \let\protect\@unexpandable@protect \immediate\write\@auxout{% \string\@mlabel{\returnaddress}{\toname\\\toaddress}}% \endgroup \fi} % \end{macrocode} % \end{environment} % % % \begin{macro}{\@processto} % \begin{macro}{\@xproc} % \begin{macro}{\@yproc} % |\@processto| gets the |\toname| and |\toaddress| from the letter % environment's macro argument. |\@xproc| and |\@yproc| are auxiliary % macros. % \begin{macrocode} \long\def\@processto#1{% \@xproc #1\\@@@% \ifx\toaddress\@empty \else \@yproc #1@@@% \fi} % \end{macrocode} % % \begin{macrocode} \long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}} % \end{macrocode} % % \begin{macrocode} \long\def\@yproc #1\\#2@@@{\def\toaddress{#2}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % % \subsubsection{Page breaking control} % % \begin{macro}{\stopbreaks} % When the command |\stopbreaks| is issued no page breaks should % occur until |\startbreaks| is called. % \begin{macrocode} \newcommand*\stopbreaks{% \interlinepenalty\@M \def\par{\@@par\nobreak}% \let\\\@nobreakcr \let\vspace\@nobreakvspace} % \end{macrocode} % \end{macro} % % \begin{macro}{\nobreakvspace} % \changes{v1.2t}{1996/01/20}{Made robust pr/2049} % \begin{macro}{\@nobreakvspacex} % \begin{macro}{\@nobreakcr} % These are needed by |\stopbreaks| % \begin{macrocode} \DeclareRobustCommand\@nobreakvspace {\@ifstar\@nobreakvspacex\@nobreakvspacex} % \end{macrocode} % % \begin{macrocode} \def\@nobreakvspacex#1{% \ifvmode \nobreak\vskip #1\relax \else \@bsphack\vadjust{\nobreak\vskip #1}\@esphack \fi} % \end{macrocode} % % \changes{v1.2w}{1997/01/07} % {Simplify definition, for ltspace 1.2u. /2341} % \begin{macrocode} \def\@nobreakcr{\@ifstar{\@normalcr*}{\@normalcr*}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\startbreaks} % This cancels the effect of |\stopbreaks|. % \begin{macrocode} \newcommand*\startbreaks{% \let\\\@normalcr \interlinepenalty 200% \def\par{\@@par\penalty 200\relax}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\longindentation} % The size of the indent to use before the closing of the letter. % \begin{macrocode} \newdimen\longindentation \longindentation=.5\textwidth % \end{macrocode} % \end{macro} % % \begin{macro}{\indentedwidth} % The width of the closing of the letter. % \begin{macrocode} \newdimen\indentedwidth \indentedwidth=\textwidth \advance\indentedwidth -\longindentation % \end{macrocode} % \end{macro} % % \begin{macro}{\opening} % Text is begun with the |\opening| command, whose argument % generates the salutation, as in %\begin{verbatim} % \opening{Dear Henry,} %\end{verbatim} % This should produce everything up to and including the % `Dear Henry,' and a |\par| command that follows. % Since there's a |\vfil| at the bottom of every page, % it can add vertical fill to position a short letter. % It should use the following commands: % \begin{itemize} % \item |\toname| : name part of `to' address. % Will be one line long. % \item |\toaddress| : address part of `to' address. % The lines separated by |\\|. % \item |\fromname| : name of sender. % \item |\fromaddress| : argument of current |\address| % declaration-- null if none. Should use standard institutional % address if null. % \item |\fromlocation| : argument of current |\location| % declaration--null if none. % \item |\telephonenum| : argument of current |\telephone| % declaration--null if none. % \end{itemize} % \begin{macrocode} \newcommand*\opening[1]{\ifx\@empty\fromaddress \thispagestyle{firstpage}% {\raggedleft\@date\par}% \else % home address \thispagestyle{empty}% % \end{macrocode} % \changes{v1.2y}{1998/05/10}{Avoid space at right of tabular % (pr2794)} % \begin{macrocode} {\raggedleft\begin{tabular}{l@{}}\ignorespaces \fromaddress \\*[2\parskip]% \@date \end{tabular}\par}% \fi \vspace{2\parskip}% % \end{macrocode} % If the address field used \verb=\\[...]= then we have % \cs{toaddress} starting with the bracket argument as the split % was done simply at \verb=\\=. So we add \cs{expandafter} here so % that is will be used and not typeset. A better fix would be to do % a proper parsing but \ldots % % Other classes based on \texttt{letter.cls} could benefit from the same fix, e.g., % \texttt{akletter.cls}, % \texttt{bletter.cls}, % \texttt{letter.cls}, % \texttt{chletter.cls}, % \texttt{extletter.cls},\\ % \texttt{frletter.cls}, % \texttt{hletter.cls}, % \texttt{scrlttr2.cls} (change rejected), % \texttt{lettre.cls}, % \texttt{beletter.cls},\\ % \texttt{brief.cls} and perhaps others. % % \changes{v1.3c}{2020/12/28}{Add \cs{expandafter} (gh/427)} % \begin{macrocode} {\raggedright \toname \expandafter\\\toaddress \par}% \vspace{2\parskip}% #1\par\nobreak} % \end{macrocode} % \end{macro} % % \begin{macro}{\closing} % The body of the letter follows, ended by a |\closing| command, % as in %\begin{verbatim} % \closing{Yours truly,} %\end{verbatim} % This command generates the closing matter, and the signature. % An obvious thing to do is to use a |\parbox| for the closing % and the signature. Should use the following: % \begin{itemize} % \item |\fromsig| : argument of current |\signature| declaration % or, if null, the |\fromname|. % \item |\stopbreaks| : a macro that inhibits page breaking. % \end{itemize} % \begin{macrocode} \newcommand\closing[1]{\par\nobreak\vspace{\parskip}% \stopbreaks \noindent \ifx\@empty\fromaddress\else \hspace*{\longindentation}\fi \parbox{\indentedwidth}{\raggedright \ignorespaces #1\\[6\medskipamount]% \ifx\@empty\fromsig \fromname \else \fromsig \fi\strut}% \par} % \end{macrocode} % \end{macro} % % \begin{macro}{\smallskipamount} % \begin{macro}{\medskipamount} % \begin{macro}{\bigskipamount} % Of these three, only |\medskipmount| is actually used above. % \begin{macrocode} %\smallskipamount=.5\parskip \medskipamount=\parskip %\bigskipamount=2\parskip % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\cc} % \begin{macro}{\encl} % \begin{macro}{\ps} % After the |\closing| you can put arbitrary stuff, which is typeset % with zero |\parindent| and no page breaking. Commands designed % for use after the closing are: % \begin{verbatim} % \cc{Tinker\\Evers\\Chance} %\end{verbatim} % which produces:\\ % \begin{tabular}{ll} % cc: & Tinker\\ % & Evers\\ % & Chance % \end{tabular}\\ % Note the obvious use of |\parbox|. % \changes{v1.2s}{1995/05/25}{replace \cs{reset@font} with % \cs{normalfont}; remove \cs{rm}} % \begin{macrocode} \newcommand*\cc[1]{% \par\noindent \parbox[t]{\textwidth}{% \@hangfrom{\normalfont\ccname: }% \ignorespaces #1\strut}\par} % \end{macrocode} %\begin{verbatim} % \encl{Foo(2)\\Bar} %\end{verbatim} % which produces:\\ % \begin{tabular}{ll} % encl: & Foo(2)\\ % & Bar % \end{tabular} % \begin{macrocode} \newcommand*\encl[1]{% \par\noindent \parbox[t]{\textwidth}{% \@hangfrom{\normalfont\enclname: }% \ignorespaces #1\strut}\par} % \end{macrocode} % % The only thing |\ps| needs to do is call |\startbreaks|, % which allows page breaking again. % \begin{macrocode} \newcommand*\ps{\par\startbreaks} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % % \begin{macro}{\stopletter} % The |\stopletter| command is called by |\endletter| to do the % following: % \begin{itemize} % \item Add any desired fill or other material at the end of the % letter. % \item Define |\returnaddress| to be the return address for the % mailing label. % More precisely, it is the first argument of the |\mlabel| % command described below. It should be defined to null if the % return address doesn't appear on the labels. Any command, % other than |\\|, that should not be expanded until the |\mlabel| % command is actually executed must be preceded by |\protect|. % Whenever possible, |\protect| commands in the definition of % |\returnaddress|---it's much more efficient that way. In % particular, when the standard return address is used, you % should define |\returnaddress| to something like % |\protect\standardreturnaddress|. % \end{itemize} % \begin{macrocode} \newcommand*\stopletter{} % \end{macrocode} % \end{macro} % % \subsection{Customizing the labels} % % Commands for generating the labels are put on the \file{.aux} file, % which is read in and processed by the |\end{document}| command. % You have to define the following two commands: % \begin{itemize} % \item |\startlabels| : Should reset the page layout parameters if % necessary. % \item |\mlabel|\marg{return address}\marg{to address} : Command to % generate a single label. % \end{itemize} % % % % \begin{macro}{\returnaddress} % The return address for the mailing labels can be stored in this % macro. % \begin{macrocode} \newcommand*\returnaddress{} % \end{macrocode} % \end{macro} % % \begin{macro}{\labelcount} % A register to count the labels % \begin{macrocode} \newcount\labelcount % \end{macrocode} % \end{macro} % % \begin{macro}{\startlabels} % The following |\startlabels| command sets things up for % producing labels in two columns of five 2" $\times$ 4-1/4" % labels each, suitable for reproducing onto Avery brand number % 5352 address labels. % \changes{v1.2q}{1995/03/14}{changed value of \cs{columnsep} by 1pt} % \begin{macrocode} \newcommand*\startlabels{\labelcount\z@ \pagestyle{empty}% \let\@texttop\relax \topmargin -50\p@ \headsep \z@ \oddsidemargin -35\p@ \evensidemargin -35\p@ \textheight 10in \@colht\textheight \@colroom\textheight \vsize\textheight \textwidth 550\p@ \columnsep 26\p@ \ifcase \@ptsize\relax \normalsize \or \small \or \footnotesize \fi \baselineskip \z@ \lineskip \z@ \boxmaxdepth \z@ \parindent \z@ \twocolumn\relax} % \end{macrocode} % \end{macro} % % \begin{macro}{\@startlabels} % |\@startlabels| is the command name that is written to the |.aux| % file. It is a no-op at first, and defined to be the same as % |\startlabels| in the |\begin{document}| hook. % \begin{macrocode} \let\@startlabels=\relax % \end{macrocode} % \end{macro} % % \begin{macro}{\mlabel} % This command prints an address label; it is used when the user % specified |\makelabels| in the preamble of his document. The % command |\mlabel| takes two arguments; the second argument is % supposed to be the address; the first argument can be used to % print a return address. In this document class we ignore the % first argument. Also the labels are supposed to be 2~inch high % and 3.6~inch wide. When your address labels have a different you % will have to define your own |\mlabel| command. % \changes{v1.2p}{1994/12/11}{Redefined \cs{mlabel} to not use the % \cs{setbox} primitive} % \changes{v1.2q}{1995/03/14}{changed width of the labels slightly to % prevent \LaTeX\ stuffing two on each line} % \begin{macrocode} \newcommand*\mlabel[2]{% \parbox[b][2in][c]{262\p@}{\strut\ignorespaces #2}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\@mlabel} % The macro |\@mlabel| is written to the \file{.aux} file instead % of |\mlabel|. This allows us to make it a no-op by default, % and then activate it in the |\begin{document}| hook. % \begin{macrocode} \let\@mlabel=\@gobbletwo % \end{macrocode} % \end{macro} % % % \subsection{Lists} % % \subsubsection{General List Parameters} % % The following commands are used to set the default values for the % list environment's parameters. See the \LaTeX{} manual for an % explanation of the meanings of the parameters. Defaults for the % list environment are set as follows. First, |\rightmargin|, % |\listparindent| and |\itemindent| are set to 0pt. Then, for a % \texttt{K}th level list, the command |\@listK| is called, where % `\texttt{K}' denotes `\texttt{i}', `\texttt{ii}', ... , % `\texttt{vi}'. (I.e., |\@listiii| is called for a third-level % list.) By convention, |\@listK| should set |\leftmargin| to % |\leftmarginK|. % % \begin{macro}{\leftmargin} % \begin{macro}{\leftmargini} % \begin{macro}{\leftmarginii} % \begin{macro}{\leftmarginiii} % \begin{macro}{\leftmarginiv} % \begin{macro}{\leftmarginv} % \begin{macro}{\leftmarginvi} % For efficiency, level-one list's values are defined at top level, and % |\@listi| is defined to set only |\leftmargin|. % \begin{macrocode} \setlength\leftmargini {2.5em} % \end{macrocode} % The following three are calculated so that they are larger than % the sum of |\labelsep| and the width of the default labels (which % are `(m)', `vii.' and `M.'). % \begin{macrocode} \setlength\leftmarginii {2.2em} \setlength\leftmarginiii {1.87em} \setlength\leftmarginiv {1.7em} \setlength\leftmarginv {1em} \setlength\leftmarginvi {1em} % \end{macrocode} % Here we set the top level leftmargin. % \begin{macrocode} \setlength\leftmargin {\leftmargini} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\labelsep} % \begin{macro}{\labelwidth} % |\labelsep| is the distance between the label and the text of an % item; |\labelwidth| is the width of the label. % \begin{macrocode} \setlength \labelsep {5\p@} \setlength \labelwidth{\leftmargini} \addtolength\labelwidth{-\labelsep} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\partopsep} % When the user leaves a blank line before the environment an extra % vertical space of |\partopsep| is inserted, in addition to % |\parskip| and |\topsep|. % \begin{macrocode} \setlength\partopsep{0\p@} % \end{macrocode} % \end{macro} % % \begin{macro}{\@beginparpenalty} % \begin{macro}{\@endparpenalty} % These penalties are inserted before and after a list or paragraph % environment. They are set to a bonus value to encourage page % breaking at these points. % \begin{macro}{\@itempenalty} % This penalty is inserted between list items. % \begin{macrocode} \@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty -\@lowpenalty % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\@listI} % \begin{macro}{\@listi} % |\@listI| defines top level and |\@listi| values of % |\leftmargin|, |\parsep|, |\topsep|, and |\itemsep| % % \begin{macrocode} \def\@listI{\setlength\leftmargin{\leftmargini}% \setlength\parsep {0\p@}% \setlength\topsep {.4em}% \setlength\itemsep{.4em}} \let\@listi\@listI % \end{macrocode} % We have to initialize these parameters. % \begin{macrocode} \@listi % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@listii} % \begin{macro}{\@listiii} % \begin{macro}{\@listiv} % \begin{macro}{\@listv} % \begin{macro}{\@listvi} % Here are the same macros for the higher level lists. % \begin{macrocode} \def\@listii {\setlength \leftmargin{\leftmarginii}% \setlength \labelwidth{\leftmarginii}% \addtolength\labelwidth{-\labelsep}} \def\@listiii{\setlength \leftmargin{\leftmarginiii}% \setlength \labelwidth{\leftmarginiii}% \addtolength\labelwidth{-\labelsep}% \setlength \topsep {.2em}% \setlength \itemsep {\topsep}} \def\@listiv {\setlength \leftmargin{\leftmarginiv}% \setlength \labelwidth{\leftmarginiv}% \addtolength\labelwidth{-\labelsep}} \def\@listv {\setlength \leftmargin{\leftmarginv}% \setlength \labelwidth{\leftmarginv}% \addtolength\labelwidth{-\labelsep}} \def\@listvi {\setlength \leftmargin{\leftmarginvi}% \setlength \labelwidth{\leftmarginvi}% \addtolength\labelwidth{-\labelsep}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsubsection{Enumerate} % % The enumerate environment uses four counters: \Lcount{enumi}, % \Lcount{enumii}, \Lcount{enumiii} and \Lcount{enumiv}, where % \Lcount{enumN} controls the numbering of the Nth level % enumeration. % % \begin{macro}{\theenumi} % \begin{macro}{\theenumii} % \begin{macro}{\theenumiii} % \begin{macro}{\theenumiv} % The counters are already defined in the \LaTeX{} kernel % (\file{ltlists.dtx}), but their representation is changed here. % % \begin{macrocode} \renewcommand\theenumi{\@arabic\c@enumi} \renewcommand\theenumii{\@alph\c@enumii} \renewcommand\theenumiii{\@roman\c@enumiii} \renewcommand\theenumiv{\@Alph\c@enumiv} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\labelenumi} % \begin{macro}{\labelenumii} % \begin{macro}{\labelenumiii} % \begin{macro}{\labelenumiv} % The commands |\labelenumi| ... |\labelenumiv| generate the label % for each item. % \begin{macrocode} \newcommand\labelenumi{\theenumi.} \newcommand\labelenumii{(\theenumii)} \newcommand\labelenumiii{\theenumiii.} \newcommand\labelenumiv{\theenumiv.} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\p@enumii} % \begin{macro}{\p@enumiii} % \begin{macro}{\p@enumiv} % The expansion of |\p@enumN||\theenumN| defines the output of a % |\ref| command when referencing an item of the Nth level of an % enumerated list. % \begin{macrocode} \renewcommand\p@enumii{\theenumi} \renewcommand\p@enumiii{\theenumi(\theenumii)} \renewcommand\p@enumiv{\p@enumiii\theenumiii} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \subsubsection{Itemize} % % \begin{macro}{\labelitemi} % \begin{macro}{\labelitemii} % \changes{v1.2h}{1994/05/06}{Inserted \cs{normalfont}} % \changes{v1.2u}{1996/08/25}{replaced -{}- with \cs{textendash}} % \begin{macro}{\labelitemiii} % \begin{macro}{\labelitemiv} % Itemization is controlled by |\labelitemi|, % |\labelitemii|, |\labelitemiii|, and |\labelitemiv|, which define % the labels of the various itemization levels: the symbols used are % bullet, bold en-dash, asterisk and centered dot. % % \changes{v1.2n}{1994/07/11}{renamed \cs{labelitemiiii} to % \cs{labelitemiii}} % \changes{v1.2x}{1997/04/16}{Changed to \cs{textbullet}, % \cs{textasteriskcentered} and \cs{textperiodcentered}} % \begin{macrocode} \newcommand\labelitemi {\labelitemfont \textbullet} \newcommand\labelitemii {\labelitemfont \bfseries \textendash} \newcommand\labelitemiii{\labelitemfont \textasteriskcentered} \newcommand\labelitemiv {\labelitemfont \textperiodcentered} % \end{macrocode} % % \begin{macro}{\labelitemfont} % The default definition for \cs{labelitemfont} is to reset the % font to \cs{normalfont} so that always the same symbol is % produced regardless of surrounding conditions. % % \changes{v1.3a}{2020/03/07}{Normalize label fonts} % A possible alternative would be %\begin{verbatim} %\renewcommand\labelitemfont{% % \fontseries\seriesdefault % \fontshape\shapedefault\selectfont} %\end{verbatim} % which resets series and shape doesn't touch the family. % \begin{macrocode} \newcommand\labelitemfont{\normalfont} % \end{macrocode} % \changes{v1.3b}{2020/03/11}{Added a missing \cs{end{macro}} statement} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsubsection{Description} % % \begin{environment}{description} % The description environment is defined here -- while the itemize % and enumerate environments are defined in the \LaTeX{} kernel % (\file{ltlists.dtx}). % % \begin{macrocode} \newenvironment{description} {\list{}{\labelwidth\z@ \itemindent-\leftmargin \let\makelabel\descriptionlabel}} {\endlist} % \end{macrocode} % \end{environment} % % \begin{macro}{\descriptionlabel} % To change the formatting of the label, you must redefine % |\descriptionlabel|. % % \changes{v1.2q}{1995/03/14}{made command short} % \begin{macrocode} \newcommand*\descriptionlabel[1]{\hspace\labelsep \normalfont\bfseries #1} % \end{macrocode} % \end{macro} % % \subsection{Defining new environments} % % \subsubsection{Verse} % % \begin{environment}{verse} % The verse environment is defined by making clever use of the % list environment's parameters. The user types |\\| to end a line. % This is implemented by |\let|'ing |\\| equal |\@centercr|. % % \begin{macrocode} \newenvironment{verse} {\let\\=\@centercr \list{}{\setlength\itemsep{\z@}% \setlength\itemindent{-15\p@}% \setlength\listparindent{\itemindent}% \setlength\rightmargin{\leftmargin}% \addtolength\leftmargin{15\p@}}% \item[]} {\endlist} % \end{macrocode} % \end{environment} % % \subsubsection{Quotation} % % \begin{environment}{quotation} % The quotation environment is also defined by making clever use of % the list environment's parameters. The lines in the environment % are set smaller than |\textwidth|. The first line of a paragraph % inside this environment is indented. % % \begin{macrocode} \newenvironment{quotation} {\list{}{\setlength\listparindent{1.5em}% \setlength\itemindent{\listparindent}% \setlength\rightmargin{\leftmargin}}% \item[]} {\endlist} % \end{macrocode} % \end{environment} % % \subsubsection{Quote} % % \begin{environment}{quote} % The quote environment is like the quotation environment except % that paragraphs are not indented. % % \begin{macrocode} \newenvironment{quote} {\list{}{\setlength\rightmargin{\leftmargin}}% \item[]} {\endlist} % \end{macrocode} % \end{environment} % % \subsubsection{Theorem} % % This document class does not define it's own theorem environments, % the defaults, supplied by the \LaTeX{} kernel (\file{ltthm.dtx}) % are available. % % % \subsection{Setting parameters for existing environments} % % \subsubsection{Array and tabular} % % \begin{macro}{\arraycolsep} % The columns in an array environment are separated by % 2|\arraycolsep|. % \begin{macrocode} \setlength\arraycolsep{5\p@} % \end{macrocode} % \end{macro} % % \begin{macro}{\tabcolsep} % The columns in an tabular environment are separated by % 2|\tabcolsep|. % \begin{macrocode} \setlength\tabcolsep{6\p@} % \end{macrocode} % \end{macro} % % \begin{macro}{\arrayrulewidth} % The width of vertical rules in the array and tabular environments % is given by |\arrayrulewidth|. % \begin{macrocode} \setlength\arrayrulewidth{.4\p@} % \end{macrocode} % \end{macro} % % \begin{macro}{\doublerulesep} % The space between adjacent rules in the array and tabular % environments is given by |\doublerulesep|. % \begin{macrocode} \setlength\doublerulesep{2\p@} % \end{macrocode} % \end{macro} % % \subsubsection{Tabbing} % % \begin{macro}{\tabbingsep} % This controls the space that the |\'| command puts in. (See % \LaTeX{} manual for an explanation.) % \begin{macrocode} \setlength\tabbingsep{\labelsep} % \end{macrocode} % \end{macro} % % \subsubsection{Minipage} % % \begin{macro}{\@minipagerestore} % The macro |\@minipagerestore| is called upon entry to a minipage % environment to set up things that are to be handled differently % inside a minipage environment. In the current styles, it does % nothing. % \end{macro} % % \begin{macro}{\@mpfootins} % Minipages have their own footnotes; |\skip||\@mpfootins| plays % same r\^ole for footnotes in a minipage as |\skip||\footins| does % for ordinary footnotes. % % \begin{macrocode} \skip\@mpfootins = \skip\footins % \end{macrocode} % \end{macro} % % \subsubsection{Framed boxes} % % \begin{macro}{\fboxsep} % The space left by |\fbox| and |\framebox| between the box and the % text in it. % \begin{macro}{\fboxrule} % The width of the rules in the box made by |\fbox| and |\framebox|. % \begin{macrocode} \setlength\fboxsep{3\p@} \setlength\fboxrule{.4\p@} % \end{macrocode} % \end{macro} % \end{macro} % % \subsubsection{Equation and eqnarray} % % \begin{macro}{\theequation} % The equation counter will be typeset using arabic numbers. % \begin{macrocode} \renewcommand\theequation{\@arabic\c@equation} % \end{macrocode} % \end{macro} % % \begin{macro}{\jot} % |\jot| is the extra space added between lines of an eqnarray % environment. The default value is used. % \begin{macrocode} % \setlength\jot{3pt} % \end{macrocode} % \end{macro} % % \begin{macro}{\@eqnnum} % The macro |\@eqnnum| defines how equation numbers are to appear in % equations. Again the default is used. % % \begin{macrocode} % \def\@eqnnum{(\theequation)} % \end{macrocode} % \end{macro} % % \subsection{Font changing} % % Here we supply the declarative font changing commands that were % common in \LaTeX\ version 2.09 and earlier. These commands work % in text mode \emph{and} in math mode. They are provided for % compatibility, but one should start using the |\text...| and % |\math...| commands instead. These commands are redefined using % |\@renewfontswitch|, a command with three arguments: the user % command to be defined; \LaTeX\ commands to execute in text mode % and \LaTeX\ commands to execute in math mode. % % \begin{macro}{\rm} % \begin{macro}{\tt} % \begin{macro}{\sf} % The commands to change the family. % \changes{v1.0a}{1993/12/14}{Added compatibility mode support.} % \changes{v1.1}{1993/12/18}{Changed \cs{@newfontswitch} to % \cs{@renewfontswitch}, removed switch.} % \changes{v1.2d}{1994/04/14}{\cs{@renewfontswitch} has become % \cs{DeclareOldFontCommand}} % \begin{macrocode} \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\bf} % The command to change to the bold series. One should use % |\mdseries| to explicitly switch back to medium series. % \changes{v1.0a}{1993/12/14}{Added compatibility mode support.} % \changes{v1.1}{1993/12/18}{Changed \cs{@newfontswitch} to % \cs{@renewfontswitch}, removed switch.} % \begin{macrocode} \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} % \end{macrocode} % \end{macro} % % \begin{macro}{\sl} % \begin{macro}{\it} % \begin{macro}{\sc} % % And the commands to change the shape of the font. The slanted and % small caps shapes are not available by default as math alphabets, % so those changes do nothing in math mode. One should use % |\upshape| to explicitly change back to the upright shape. % \changes{v1.0a}{1993/12/14}{Added compatibility mode support.} % \changes{v1.1}{1993/12/18}{Changed \cs{@newfontswitch} to % \cs{@renewfontswitch}, removed switch.} % \changes{v1.1b}{1993/12/20}{Added forgotten re.} % \begin{macrocode} \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\relax} \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\relax} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\cal} % \changes{v1.0a}{1993/12/14}{Macro added} % \begin{macro}{\mit} % \changes{v1.0a}{1993/12/14}{Macro added} % % The commands |\cal| and |\mit| should only be used in math mode, % outside math mode they have no effect. Currently the New Font % Selection Scheme defines these commands to generate warning % messages. Therefore we have to define them `by hand'. % \changes{v1.2p}{1994/12/11}{Now define \cs{cal} and \cs{mit} using % \cs{DeclareRobustCommand*}} % \begin{macrocode} \DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}} \DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}} % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Footnotes} % % \begin{macro}{\footnoterule} % Usually, footnotes are separated from the main body of the text % by a small rule. This rule is drawn by the macro |\footnoterule|. % We have to make sure that the rule takes no vertical space (see % \file{plain.tex}) so we compensate for the natural height of the % rule of 0.4pt by adding the right amount of vertical skip. % % To prevent the rule from colliding with the footnote we first add % a little negative vertical skip, then we put the rule and make % sure we end up at the same point where we begun this operation. % \begin{macrocode} \renewcommand\footnoterule{% \kern-\p@ \hrule \@width .4\columnwidth \kern .6\p@} % \end{macrocode} % \end{macro} % % \begin{macro}{\c@footnote} % A counter for footnotes. % \begin{macrocode} % \newcounter{footnote} % \end{macrocode} % \end{macro} % % \begin{macro}{\@makefntext} % \changes{v1.2c}{1994/03/08}{Always call \cs{@makefnmark}.} % The footnote mechanism of \LaTeX{} calls the macro |\@makefntext| % to produce the actual footnote. The macro gets the text of the % footnote as its argument and should use |\@makefnmark| to produce % the mark of the footnote. The macro |\@makefntext| is called when % effectively inside a |\parbox| of width |\columnwidth| (i.e., % with |\hsize| = |\columnwidth|). % % An example of what can be achieved is given by the following piece % of \TeX\ code. % \begin{verbatim} % \long\def\@makefntext#1{% % \@setpar{\@@par % \@tempdima = \hsize % \advance\@tempdima-10pt % \parshape \@ne 10pt \@tempdima}% % \par % \parindent 1em\noindent % \hb@xt@\z@{\hss\@makefnmark}#1} % \end{verbatim} % The effect of this definition is that all lines of the footnote % are indented by 10pt, while the first line of a new paragraph is % indented by 1em. To change these dimensions, just substitute the % desired value for `10pt' (in both places) or `1em'. The mark is % flush right against the footnote. % % In this document class we use a simpler macro, in which the % footnote text is set like an ordinary text paragraph, with no % indentation except on the first line of a paragraph, and the % first line of the footnote. Thus, all the macro must do is set % |\parindent| to the appropriate value for succeeding paragraphs % and put the proper indentation before the mark. % % \changes{v1.3b}{2020/03/11}{make the switch to the use of % \cs{newcommand} complete.} % \begin{macrocode} \newcommand\@makefntext[1]{% \noindent \hangindent 5\p@ \hb@xt@5\p@{\hss\@makefnmark}#1} % \end{macrocode} % \end{macro} % % \begin{macro}{\@makefnmark} % The footnote markers that are printed in the text to point to the % footnotes should be produced by the macro |\@makefnmark|. We use % the default definition for it. % \begin{macrocode} %\renewcommand\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}} % \end{macrocode} % \end{macro} % % \section{Initialization} % % \subsection{Words} % % \begin{macro}{\ccname} % \begin{macro}{\enclname} % \begin{macro}{\pagename} % \begin{macro}{\headtoname} % This document class is for documents prepared in the English % language. To prepare a version for another language, various % English words must be replaced. All the English words that % require replacement are defined below in command names. % \begin{macrocode} \newcommand*\ccname{cc} \newcommand*\enclname{encl} \newcommand*\pagename{Page} \newcommand*\headtoname{To} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Date} % % \begin{macro}{\today} % This macro uses the \TeX\ primitives |\month|, |\day| and |\year| % to provide the date of the \LaTeX-run. % \begin{macrocode} \newcommand*\today{\ifcase\month\or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\day, \number\year} % \end{macrocode} % \end{macro} % % \subsection{Two column mode} % % \begin{macro}{\columnsep} % This gives the distance between two columns in two column mode. % \begin{macrocode} \setlength\columnsep{10\p@} % \end{macrocode} % \end{macro} % % \begin{macro}{\columnseprule} % This gives the width of the rule between two columns in two % column mode. We have no visible rule. % \begin{macrocode} \setlength\columnseprule{0\p@} % \end{macrocode} % \end{macro} % % \subsection{The page style} % We have \pstyle{plain} pages in this document class by % default. We use arabic page numbers. % \begin{macrocode} \pagestyle{plain} \pagenumbering{arabic} % \end{macrocode} % % \subsection{Single or double sided printing} % % We don't try to make each page as long as all the others. % \begin{macrocode} \raggedbottom % \end{macrocode} % % \begin{macro}{\@texttop} % The document class letter sets |\@texttop| to |\vskip| 0pt % \texttt{plus} .00006fil on the first page of a letter, which % centers a short letter on the page. This fil value may have to be % changed for other letterheads. This setting has to be done after % |\raggedbottom| is executed, since the latter sets |\@texttop| to % |\relax|. % \begin{macrocode} \def\@texttop{\ifnum\c@page=1\vskip \z@ plus.00006fil\relax\fi} % \end{macrocode} % \end{macro} % % We always start in one column mode. % \begin{macrocode} \onecolumn % % \end{macrocode} % % % % \Finale % \endinput