diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:51:41 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:51:41 +0000 |
commit | 30dc0a83ed0059a279de826f732f4c70c2426d3d (patch) | |
tree | 8de910e779b259889ede421735cf0caecfaedf86 /Master/texmf-dist/source/latex/cdpbundl/cdpbundl.dtx | |
parent | 2f3f672bbb24f022f492d7c7d1b1cb8a1b6f819f (diff) |
trunk/Master/texmf-dist/source/latex/cdpbundl
git-svn-id: svn://tug.org/texlive/trunk@186 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/cdpbundl/cdpbundl.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/cdpbundl/cdpbundl.dtx | 5923 |
1 files changed, 5923 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/cdpbundl/cdpbundl.dtx b/Master/texmf-dist/source/latex/cdpbundl/cdpbundl.dtx new file mode 100644 index 00000000000..e74d31c7c6d --- /dev/null +++ b/Master/texmf-dist/source/latex/cdpbundl/cdpbundl.dtx @@ -0,0 +1,5923 @@ +% \iffalse +% (This is a META-COMMENT.) +% +% This is file `cdpbundl.dtx'. +% +% This file is part of a work named "C.D.P. Bundle". +% +% Copyright (C) 1999-2005 by Gustavo MEZZETTI <mezzetti@math.unipd.it>. +% +% The C.D.P. Bundle may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% The C.D.P. Bundle has the LPPL maintenance status +% "author-maintained". +% +% The file `manifest.txt' that comes along with this file specifies +% what the C.D.P. Bundle consists of; more precisely, it explains how +% the locutions "Work" and "Compiled Work", used in the LaTeX Project +% Public License, are to be interpreted in the case of this work. +% +% Note that the distribution of this file alone is "distribution of +% only part of the Work" in the sense of the LaTeX Project Public +% License, and is not allowed. +% +% (End of the META-COMMENT.) +% \fi +% +% \def\filename{cdpbundl.dtx} +% \def\fileversion{0.33} +% \def\filedate{2005/01/01} +% \def\docdate {2005/01/01} +% \def\doclongdate{January~1, 2005} +% +% \changes{0.30}{2001 Jul 01}{First release of the C.D.P. Bundle} +% \changes{0.31}{2001 Dec 01}{Added support for the \protect\opz{usePS} +% option in the \protect\packlass{\protect\cdpaddon} package} +% \changes{0.32}{2002 Jul 01}{Removed support for the \protect\opz{usePS} +% option in the \protect\packlass{\protect\cdpaddon} package} +% \changes{0.33}{2005 Jan 01}{Reorganized code of the +% \protect\packlass{\protect\articoletteracdp} class and of the +% \protect\packlass{\protect\cdpaddon} package to make it compatible +% with the \protect\packlass{\protect\hyperref} package} +% +% \CheckSum{4756} +%% \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \MakeShortVerb{\"} +% \DeleteShortVerb{\|} +% +% \DoNotIndex{\begin,\end,\def,\let,\else,\fi,\@ifdefinable,\@empty} +% \DoNotIndex{\newcommand,\renewcommand} +% \DoNotIndex{\newenvironment,\renewenvironment} +% \DoNotIndex{\z@,\z@skip,\p@,\@ne,\tw@,\thr@@,\@m,\@M,\m@ne} +% \DoNotIndex{\setlength,\setcounter,\addtolength} +% \DoNotIndex{\expandafter,\do,\relax,\advance,\multiply,\divide} +% \DoNotIndex{\DeclareOption,\ExecuteOptions,\ProcessOptions} +% \DoNotIndex{\",\.\@} +% +% \IndexPrologue{ +% \section{\indexname} +% Numbers in italics refer to the page where the corresponding entry +% is described, the ones underlined to the code line of the +% definition, the rest to the code lines where the entry is used. +% } +% +% \GlossaryPrologue{\section{Change History}} +% +% \setcounter{StandardModuleDepth}{1} +% +% \newcommand*{\DS}{\textsf{DocStrip}} +% \renewcommand*{\partname}{Part} +% \newcommand*{\cdpbundl}{cdpbundl} +% \newcommand*{\letteracdp}{letteracdp} +% \newcommand*{\articoletteracdp}{articoletteracdp} +% \newcommand*{\adiseal}{adiseal} +% \newcommand*{\lettcdpadi}{lettcdpadi} +% \newcommand*{\cdpaddon}{cdpaddon} +% \newcommand*{\hyperref}{hyperref} +% \newcommand*{\epsfig}{epsfig} +% \newcommand*{\example}{cdpshues-example.def} +% \newcommand*{\epson}{epson-stylus-740.def} +% \newcommand*{\hplj}{hp-laserjet-4500.def} +% \newcommand*{\cdpshues}{cdpshues.cfg} +% \newcommand*{\textoken}[1]{\( \langle\mbox{\normalfont #1}\rangle \)} +% \makeatletter +% \newcommand*{\myspecialindex}[2] +% {\special@index{#1\actualchar#2\encapchar main}} +% \makeatother +% \newcommand*{\counterindex}[1]{\myspecialindex{#1}{{\string\ttfamily +% \space #1} (counter)}\index{counters:\levelchar{\protect\ttfamily +% #1}\encapchar usage}} +% \newcommand*{\optuseindex}[1]{\SortIndex{#1}{\protect\opz{#1} +% (option)\encapchar usage}\index{options:\levelchar +% \protect\opz{#1}\encapchar usage}} +% \newcommand*{\opz}[1]{{\normalfont\ttfamily #1}} +% \newcommand*{\iopz}[1]{$\mbox{\opz{#1}}\optuseindex{#1}} +% \newcommand*{\eopz}[1]{\mathbin{|}\mbox{\opz{#1}}\optuseindex{#1}} +% \newcommand*{\fopz}{$} +% \newcommand*{\packlass}[1]{{\normalfont\ttfamily #1}} +% \newcommand*{\filedir}[1]{{\normalfont\ttfamily #1}} +% \newcommand*{\eqref}[1]{(\ref{#1})} +% +% \DeclareFixedFont{\lhnss}{OT1}{cmss}{m}{n} {12} +% \DeclareFixedFont{\lhbss}{OT1}{cmss}{m}{n} {17} +% \DeclareFixedFont{\lhrm} {OT1}{cmr} {m}{n} {9} +% \DeclareFixedFont{\lhit} {OT1}{cmr} {m}{it}{9} +% \DeclareFixedFont{\lhtt} {OT1}{cmtt}{m}{n} {9} +% +% +% +% \title{ +% The C.D.P.~Bundle\thanks{This file has version +% \fileversion, release date \filedate; +% last documentation update: \docdate. +% Copyright \copyright~1999--2005 by G.~Mezzetti +% (see page~\pageref{S:Copy}).} +% } +% \author{G. Mezzetti} +% \date{\doclongdate} +% +% \maketitle +% +% \begin{abstract} +% A bundle of \LaTeX\ (former \LaTeXe) classes and packages is +% described, which is used by the \emph{Coordinamento dei Dottorandi e +% dei Dottori di Ricerca dell'Universit\`{a} di Padova} (a free and +% informal association of Ph.D. students and Ph.D.'s at the +% university of Padua, Italy) to write its ``official'' letters. +% These classes and packages take care of formatting the letters as +% required by the standards of this association; in particular, they +% make it very easy to include its seal, both in black-and-white and +% in color, at the top of pages. +% \end{abstract} +% +% \tableofcontents +% \listoffigures +% +% \clearpage +% \begingroup +% +% \setlength{\parskip}{\medskipamount} +% \setlength{\parindent}{0pt} +% +% \section*{Copyright notice} +% \label{S:Copy} +% \vspace{-\parskip} +% +% Copyright \copyright~1999--2005 by Gustavo \textsc{Mezzetti}. All +% rights are reserved, except as noted below. +% +% This document has been produced by feeding to a \LaTeX\ typesetting +% engine the file \filedir{\filename} version \fileversion\ (\docdate). +% This file is part of a work named ``C.D.P. Bundle''. +% +% The C.D.P. Bundle may be distributed and/or modified under the +% conditions of the \LaTeX\ Project Public License, either version~1.3 +% of this license or (at your option) any later version. The latest +% version of this license is in +% \begin{list}{\setlength{\topsep}{0pt}}\item\relax +% \ttfamily +% http://www.latex-project.org/lppl.txt +% \end{list} +% and version~1.3 or later is part of all distributions of \LaTeX\ +% version 2003/12/01 or later. +% +% The C.D.P. Bundle has the LPPL maintenance status ``author-maintained''. +% +% The file \filedir{manifest.txt} included in the C.D.P. Bundle +% specifies what the C.D.P. Bundle consists of; more precisely, +% it explains how the locutions ``Work'' and ``Compiled Work'', +% used in the \LaTeX\ Project Public License, are to be interpreted +% in the case of this work. +% +% Permission is granted to make new printed copies of this document, +% by any means (\emph{e.g.}, photocopying, direct printing from the +% electronic version, and so on). +% +% Note, anyway, that the distribution of the file \filedir{\filename} +% alone is ``distribution of only part of the Work'' in the sense of +% the \LaTeX\ Project Public License, and is not allowed: you must +% distribute it together with all other files in the C.D.P. Bundle +% (see the file \filedir{manifest.txt}). +% +% See Subsection~\ref{sS:License} on page~\pageref{sS:License} for +% more information. +% +% \section*{Author's addresses} +% \vspace{-\parskip} +% +% The recommended way to contact the author is by e-mail; his address is: +% +% \begin{list}{\setlength{\topsep}{0pt}}\item\relax +% \ttfamily +% mezzetti@math.unipd.it +% \end{list} +% +% Please include the \emph{exact} phrase \verb*|C.D.P. Bundle| in the +% \emph{subject} of your message; otherwise, your message could be +% thrown away by a mail filter. In this regard, the weakness of the +% laws concerning the protection of privacy forces me to explicitly +% forbid the use of the above address for any kind of advertising, +% marketing, polling, or similar commercial or statistical contact. +% +% If you have no e-mail access, write to: +% +% \begin{list}{\setlength{\topsep}{0pt}}\item\relax +% Gustavo \textsc{Mezzetti}\\ +% Dip.\ di Matematica Pura e Applicata\\ +% Via G.~Belzoni, 7\\ +% I--35128\quad PADOVA\\ +% Italy +% \end{list} +% +% \endgroup +% +% +% +% \setcounter{secnumdepth}{0} +% +% +% +% \clearpage +% \section{Introduction} +% +% The \emph{Coordinamento dei Dottorandi e dei Dottori di Ricerca +% dell'Universit\`a di Padova} (henceforth simply referred to as +% ``\emph{Coordinamento}'') is a free association of Ph.D.'s and Ph.D. +% students who took their degree, or are still studying, at the +% University of Padova (Padua), Italy. Discussing its precise nature is +% completely outside the scope of this document;\footnote{Readers who +% are interested in learning precisely what the \emph{Coordinamento} +% is should refer to the following web page: +% \texttt{http://www.dei.unipd.it/\~{}assdott/}.} the only thing that +% concerns us here is that it writes letters of a somewhat +% ``official'' kind, which, for this reason, must bear its letterhead +% on the top of their first page. These classes and packages serve to +% prepare this kind of letters: they can print the letterhead, both in +% black-and-white and in color, depending on what the user requires, +% but they can do many, many other things too. +% +% \subsection{Credits and disclaimer} +% +% The \packlass{\letteracdp} document class was originally based on +% the \packlass{letter} standard \LaTeX\ class. During the time, it +% went through so many deep revisions, that by now it bears +% practically no relation with the original \packlass{letter} class; +% but we want to acknowledge the ``historical'' source anyway. The +% \packlass{\articoletteracdp} document class uses some ideas borrowed +% from the \packlass{article} standard \LaTeX\ class. +% +% The author thanks heartfully Alessandro Ambrosi and Roberto +% Strepparava, who tested the software and constantly stimulated +% improvements and refinements, and Paolo Cojazzi, who, besides this, +% also helped with the compression tools. +% +% As usual with computer software, no warranty is given that +% this code will work properly, or even that it will work at all. +% Using this code can even result in loss of data and/or damages +% to your disks and your storage media. +% If you use this code, you do so exclusively at your own risk! +% +% See Subsection~\ref{sS:License} and the \LaTeX\ Project Public +% License for more information. +% +% \subsection{About this document} +% +% This document, like many documentation files distributed for +% \LaTeX, is divided into two parts. +% +% The first part, \emph{User's Manual}, should contain all the +% documentation you need to succesfully \emph{use} the classes and +% packages that this document presents; but unfortunately (for you!), +% this document is still unfinished, so this information is \emph{not} +% given here; instead, you are referred to some other sources (all +% available through the world-wide web). The only pieces of +% information you will find in this part are how to install those +% classes and packages and how to generate this documentation. This +% part, however, specifies to what extent, and under which conditions, +% you are allowed to use and distribute the classes and packages +% presented in this document. +% +% The second part, \emph{Implementation}, can be omitted if you want +% (explanations on how to omit it are given at the beginning of the +% part itself), and contains information that concerns only +% ``hackers'' who want to learn how the macros that this document +% presents are \emph{implemented}. Actually, this part contains the +% complete listing of the \LaTeX\ code that implements the +% macros---unfortunately, almost without comments---in the usual \DS\ +% format; if you are not a \LaTeX\ hacker, this part will not mean +% anything to you. +% +% \subsubsection{English, of course!} +% +% This document, as you can see, is written in English, although the +% software it describes is intended mainly for Italian users, and was +% actually developed for a specific application limited to an Italian +% university (Padua). Previous versions of this document used to +% contain in this place a section that, in a somewhat apologetic tone, +% offered various reasons in support of the choice of English. Since +% the inclusion of the C.D.P. Bundle in the Comprehensive \TeX\ Archive +% Network, however, there is no longer need to justify what now looks +% simply an obliged choice, due to the international nature of the CTAN. +% +% +% +% \setcounter{secnumdepth}{3} +% +% +% +% \clearpage +% \part{User's Manual} +% +% \section{About this part} +% +% We shall only give instructions on how to install the bundle and +% how to generate this documentation; partial instructions on how to use +% the classes and packages contained in the bundle can be found +% in several documents written by the author +% \cite{tutti,esempi,etichette,novita,nts,ver028,adi,cdpaddon,ver031}, but +% a systematic user's manual is no longer foreseen.~\mbox{:-(}^^A ) match +% \spacefactor\sfcode`. \space +% Note that including in this document the instructions on how to generate +% the document itself may seem pretty useless, but actually isn't: +% you might be reading a copy obtained from another person. +% +% \section{Installing the C.D.P. Bundle and generating this documentation} +% +% As usual for \LaTeX\ distributions, the C.D.P. Bundle is +% distributed in the form of a \filedir{.dtx} file, namely +% \filedir{cdpbundl.dtx}, and an accompanying \filedir{.ins} file, +% namely \filedir{cdpbundl.ins}. +% +% \subsection{Installation} +% +% To install the bundle, run \LaTeX\ (or Plain \TeX) once on the file +% \filedir{cdpbundl.ins}. This will generate the following \LaTeX\ +% input files: +% \begin{quote} +% \ttfamily +% \adiseal.sty\\ +% \articoletteracdp.cls\\ +% \cdpaddon.sty\\ +% \example\\ +% \cdpshues\\ +% \epson\\ +% \hplj\\ +% \lettcdpadi.cls\\ +% \letteracdp.cls +% \end{quote} +% To finish the installation, move them into a \LaTeX\ input +% directory. (If you want, you can discard one, more, or all of the +% files whose name ends in \filedir{.def}, each of which contains color +% definitions for the seal appropriate for a particular printer. See +% Subsection~\ref{sS:config} for information about how these files +% are used for this purpose.) The above listing of all the files you +% need to move is also displayed on the terminal at the end of the run +% of the file \filedir{cdpbundl.ins}. The documentation of your \TeX\ +% installation should tell you how to find the \LaTeX\ input +% directory/ies, and probably also how to create new \LaTeX\ input +% directories reserved to hold your private classes and packages. If +% your \TeX\ installation offers you the chance of defining your +% private \LaTeX\ input directories, I recommend you exploit this +% possibility and place the generated files into such a directory. +% +% \subsection{Configuring the \packlass{\cdpaddon} package} +% \label{sS:config} +% +% The \packlass{\cdpaddon} package is the part of the C.D.P. Bundle +% that takes care of coloring the C.D.P. seal, which appears in +% black-and-white if you don't load this package. Experience by trial +% and error has shown that some configuration work may be necessary in +% order to obtain (more or less) correctly-\null looking colors in the +% seal. This happens because different printers can render color hues +% in different ways, sometimes producing surprising results. +% +% The configuration mechanism works as follows. For each printer +% you plan to use there should be a definition file that specifies what +% hues should be used to color the C.D.P. seal. To select which +% file to load, the user indicates its name in an option passed to the +% \packlass{\cdpaddon} package. If the user gives no such indication, +% the package reads from a configuration file the name of the default +% definition file, and uses that file. In both cases, if the +% designated definition file cannot be read, the package issues a +% warning and resorts, for the hues, to an emergency definition +% (which, as you can expect, is not very pleasant to the eye). +% +% \subsubsection{Writing color definition files} +% +% The task of a color definition file is simply to define two colors +% called "slight@col" and "strong@col" (when the definition file is +% read, the "@"~characters are treated as ordinary letters). +% "slight@col" is the color used to paint the inner of the D and of +% the P in the seal, "strong@col" is the color used to draw the lines. +% You define these colors by means of the "\definecolor" command: see +% \textsl{\LaTeX book} \cite[Section~7.3 and +% Subsection~C.14.3]{LaTeXbook} for information about colors and the +% "\definecolor" command. +% +% The file \filedir{\example}, too, contains comments which explain +% how to write new definition files for the \packlass{\cdpaddon} +% package. Indeed, this file is supplied only as a prototype: I suggest +% that you write a new file by making a copy of it (with the +% appropriate name) and modifying it with the help of the comments. +% The colors defined in this file are just an example, and indeed they +% are exactly the emergency colors used internally by the +% \packlass{\cdpaddon} package when it cannot load a definition +% file---that is, a completely useless definition! +% +% The file \filedir{\example} uses the \texttt{named} color model, +% but of course you can use any color model you want. Indeed, it is +% best to use ``direct'' color models like \texttt{rgb} or +% \texttt{cmyk}, that allow you to drive the printer with precision: +% after all, it is exactly for this purpose that you are writing the +% file! The other two definition files included in the C.D.P. Bundle +% illustrate the use of these color models. +% +% \subsubsection{Selecting a color definition file via an option} +% +% The first way to select a particular color definition file among the +% ones you have installed is to pass a suitable option to the +% \packlass{\cdpaddon} package. More precisely, the option name has +% the form \opz{printer:}\( \langle\textit{bare file name}\rangle \), +% all in a row without intervening spaces, where \( +% \langle\textit{bare file name}\rangle \) is the name of the +% definition file you want to load \emph{without} the extension +% \filedir{.def}. For example, to load a file called +% \filedir{acme-wylejet.def}, you pass the option +% \opz{printer:acme-wylejet}. Explicitly, you would write +% \begin{verbatim}\usepackage[printer:acme-wylejet]{cdpaddon}\end{verbatim} +% to load the \packlass{\cdpaddon} package and the color definitions +% suitable for the ACME WyleJet printer (the printer preferred by +% 8~coyotes out of~10). Similarly, to load the file +% \filedir{\example} you would write +% \begin{verbatim}\usepackage[printer:cdpshues-example]{cdpaddon}\end{verbatim} +% and so on. Of course, you can still specify, as well, the other +% options listed in~\cite{cdpaddon}: for instance, +% \begin{verbatim}\usepackage[hypertext,printer:acme-wylejet]{cdpaddon}\end{verbatim} +% activates the hyperlinks and selects the colors for the +% ACME WyleJet printer. +% +% When no \opz{printer:}\ldots\ option is specified, a default +% definition file is loaded, as explained in the next section. For +% elegance, you can explicitly request this default definition file with +% the \opz{printer:Default} option (note the capitalization). Of +% course, this implies that you cannot have a definition file called +% \filedir{Default.def}; but \filedir{default.def} is absolutely OK, +% and you can select it with \opz{printer:default}. Moreover, the +% \opz{printer:None} option forces the \packlass{\cdpaddon} package to +% ignore the configuration file and to use the emergency, built-in +% colors; again, \opz{printer:none}, instead, tries to load a color +% definition file called \filedir{none.def}. +% +% \subsubsection{Declaring the default color definition file} +% +% Most users will have only one printer, and even those users who +% have access to several printers will use one of them more often than +% the others. Therefore, it is wise to have a second way of selecting +% a definition file, to be used when the user does not specify one. +% This is done by indicating in a configuration file the name of a +% default color definition file. This configuration file is called +% \filedir{\cdpshues}. +% +% The \filedir{\cdpshues} file should contain only zero or one (but +% preferably one!) "\DeclareCDPSealHuesDefault" command. This command +% can be used only here, and only once, since it deactivates itself +% when executed, and also stops \LaTeX\ from reading any further in +% the configuration file. In its unique (mandatory) argument, one +% puts the name, \emph{without} the extension \filedir{.def}, of the +% default color definition file. Do not include any other command in +% your configuration file, because the effect of any other command is +% undefined. +% +% The \filedir{\cdpshues} file included in the C.D.P. Bundle contains +% comments that help you to modify it in order to declare your new +% default color definition file(s). The recommended way of doing this +% is: +% \begin{enumerate} +% ^^A ( paren match +% \renewcommand*{\labelenumi}{\theenumi)} +% \item +% make a backup copy (good idea indeed!) of the original configuration +% file under a convenient name, for example +% \filedir{\cdpshues.original}; +% \item +% modify the \filedir{\cdpshues} file following the advice given +% in its comments; +% \item +% if you want, delete all comments from the (new version of the) +% \filedir{\cdpshues} file, to save disk space. +% \end{enumerate} +% +% The obsolete version of the \packlass{\cdpaddon} package +% documented in~\cite{cdpaddon} was not configurable: it was +% programmed to read the color definitions from a file called +% \filedir{cdpshues.def}, and this name was hard-coded in the package. +% To maintain compatibility with this version, the file +% \filedir{\cdpshues} included in the C.D.P. Bundle designates as the +% default color definition file exactly a file named +% \filedir{cdpshues.def}. Consequently, if you install the supplied +% files without making any change to them, the \packlass{\cdpaddon} +% package will continue to exhibit the old behavior, reading the +% legacy \filedir{cdpshues.def} file if you have one installed, and +% adopting the emergency colors otherwise. Note that no actual +% \filedir{cdpshues.def} file is included in the C.D.P. Bundle. +% +% \subsection{The image of the ADI seal} +% +% The C.D.P. Bundle does \emph{not} include the file containing the +% image of the ADI seal. The reason for this is purely legal: I~do +% not own the copyright for the ADI seal, so I have no right to +% distribute it under a license of my choice. But of course, without +% this file it is impossible for the \packlass{\adiseal} package, the +% part of the C.D.P. Bundle that has this task, to print, or display, +% the seal. Since this is just a legal problem and not a \TeX nical one, I +% cannot foresee how long it will take to solve it; perhaps I'll +% never find a solution, because the problem does not depend on +% me. +% +% However, by default the \packlass{\adiseal} package does \emph{not} +% draw the ADI seal, but simply a placeholder; it will try to draw +% the seal only if explicitly requested via the \opz{usepixmap} option +% (see~\cite{adi}). This means that, by default, the package does +% \emph{not} need the file with the image of the ADI seal, and will +% try to access it only if invoked with the \opz{usepixmap} option; +% moreover, this option will be ignored if the file cannot be found. +% In conclusion, the \packlass{\adiseal} package can recover +% gracefully even if the file is absent. +% +% The \packlass{\adiseal} package expects to find the image of the ADI +% seal in a file in Encapsulated PostScript format called +% \filedir{\adiseal.eps}. The image should be exactly \( 60\,\mbox{bp} +% \) wide and \( 42\,\mbox{bp} \) tall; larger images will be clipped, +% smaller images will not be well aligned. The resolution is not +% fixed by the \packlass{\adiseal} package, but of course the best +% results are obtained when it matches the target printer resolution. +% I don't think that with this information you will be able to +% manifacture the correct image by yourself, but at least you can +% check if a file that you have does (not) fit! +% +% Of course, even if I cannot distribute it under the \LaTeX\ +% Project Public License, still I have prepared and made available on +% the Web an ``official'' \filedir{\adiseal.eps} file (why didn't you +% say it before, you'll say!): it can be found in +% \begin{quote} +% \ttfamily +% \noindent +% \rlap{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/adiseal.eps} +% \end{quote} +% Its resolution is \( 300\,\mbox{dpi} \), both vertical and +% horizontal; the image is 250 pixels wide and 175 pixels tall, which, +% at this resolution, correspond exactly to \( 60\,\mbox{bp} \) by \( +% 42\,\mbox{bp} \). Again, I am sorry that you need to download this +% file separately, but\ldots +% +% I have also prepared a special enhanced variation of the +% \filedir{\adiseal.eps} file for use with O\kern-.03em +% z\kern-.15em\TeX, Andrew Trevorrow's implementation of \TeX\ for the +% Macintosh. This enhanced file enables O\kern-.03em z\kern-.15em\TeX\ +% to display the seal on its integrated previewer, and to print it +% also on non-PostScript printers. To obtain this file, ask it +% directly to me by e-mail; my address is: +% \begin{quote} +% \ttfamily +% mezzetti@math.unipd.it +% \end{quote} +% Perhaps, in the future, I shall erect a mail filter to protect +% myself from junk-mail, so be sure to cite the word +% \texttt{\adiseal.eps} in the \emph{subject} of your message. +% +% \subsection{Documentation} +% +% To produce this documentation, run \LaTeX\ three times (for the +% table of contents to be correct) on the file \filedir{\cdpbundl.dtx}. +% This won't produce the index and the change history, however: for +% those, you have to run MakeIndex on the files \filedir{\cdpbundl.idx} +% and \filedir{\cdpbundl.glo}, produced during the previous \LaTeX\ +% run, with the styles \filedir{gind.ist} and \filedir{gglo.ist}, +% respectively (these styles are part of the standard \LaTeX\ +% distribution); then pass \filedir{\cdpbundl.dtx} through \LaTeX\ +% twice more. +% +% \section{How to use the C.D.P. Bundle} +% +% The C.D.P. Bundle contains three \LaTeX\ document classes, namely +% \packlass{\letteracdp}, \packlass{\articoletteracdp}, and +% \packlass{\lettcdpadi}, two \LaTeX\ packages, called +% \packlass{\adiseal} and \packlass{\cdpaddon}, and some definition +% and configuration files pertaining to the \packlass{\cdpaddon} +% package. As already said, the actual purpose of this section is not +% to explain you how to use these macro files, but only to give you +% references to documents where you can find the explanations. +% +% For instructions on how to use the \packlass{\letteracdp} class +% the reader is referred to \cite{tutti,esempi,etichette,nts,ver028,ver031}. +% Note, however, that the class is syntactically compatible with the +% \packlass{letter} standard \LaTeX\ class, in the sense that a +% document prepared for the \packlass{letter} class can be compiled +% without errors with the \packlass{\letteracdp} class; but the output +% will be different. +% +% As a minimal reference, fig.~\ref{fig:input} illustrates the typical +% structure of a simple input file for the \packlass{\letteracdp} +% document class. +% +% \iffalse +% Meta-comment: a <*gobble> guard is needed here to prevent the +% DocStrip program from putting the lines beginning with "%%" in the +% generated files. +%<*gobble> +% \fi +% \begin{figure}[tbp] +% \begin{verbatim}\documentclass[boldsubject,italicsignature,smartindent]{letteracdp} +%% Of course, the above options are a matter of personal taste... +% +%% Name, address and signature of the sender (the name is optional): +%\name{Revinu Jitis Drofnats} +%\address{ +% Revinu~J. \textsc{Drofnats}\\ +% Department of Farm Ecology\\ +% University of St.\thinspace Anford\\ +% Haga Alto, CA~94321 (U.S.A.) +%} +%\signature{R.~J.~Drofnats\\Professor} +%\date{January~1, 2005} % as usual, date is optional, default is \today +% +%% Since we are writing in English, we redefine a couple of words: +%\renewcommand*{\subjectname}{Subject:} +%\renewcommand*{\headtoname}{To:} +%% Uncomment the following declaration if you want running heads: +%% \pagestyle{headings} +% +% +% +%\begin{document} +% +%\begin{letterhead}[Brian~K. Reid]{ +% Prof.~Brian~K. \textsc{Reid}\\ +% Department of Electrical Engineering\\ +% Stanford University\\ +% Stanford, CA~94305 (U.S.A.) +%}[ +% This is the optional subject of the letter. +%] +% +%% A string to be prepended to the date can be specified in an optional +%% argument to the \opening command: +%\opening[St.\thinspace Anford,]{Dear Prof.~Reid,} +% +%this letter is typeset using a \texttt{letterhead} environment, so it +%will be printed with the letterhead of the \emph{Coordinamento} above +%it; if you don't want it, use the \texttt{letter} environment instead. +%You can also use the \texttt{foldedletterhead} environment in place +%of the \texttt{letterhead} environment (or \texttt{foldedletter} in +%place of \texttt{letter}) to obtain a letter prepared to be folded in +%three parts, as one usually does before putting it in an envelope. +%Experiment to see what happens. +% +%\closing{Sincerely,} +% +%\end{letterhead} +% +%\end{document}\end{verbatim} +% \caption{A sample input file for the \packlass{\letteracdp} +% document class} +% \label{fig:input} +% \end{figure} +% \iffalse +%</gobble> +% \fi +% +% For instructions on how to use the \packlass{\articoletteracdp} +% class, see~\cite{novita}. +% +% For instructions on how to use the \packlass{\adiseal} package and +% the \packlass{\lettcdpadi} class, see~\cite{adi}. +% +% For instructions on how to use the \packlass{\cdpaddon} package, +% see~\cite{cdpaddon}. Note, however, that this document describes an +% obsolete version, which lacks the ability to deal with several color +% definition files. +% +% Please note that before using the C.D.P. Bundle you must read the +% following license to see whether its terms are acceptable for you, +% especially for what concerns the lack of any warranty; if they are +% not, don't use this program. +% +% \subsection{License} +% \label{sS:License} +% +% The C.D.P. Bundle is \emph{not} in the public domain: its author, +% Gustavo \textsc{Mezzetti}, owns the copyright, and in general retains +% all the rights therein; but as a special exception, the author +% grants you the permissions indicated below. +% +% \subsubsection{Distribution and/or modification} +% +% The C.D.P. Bundle may be distributed and/or modified under the +% conditions of the \LaTeX\ Project Public License, either version~1.3 +% of this license or (at your option) any later version. The latest +% version of this license is in +% \begin{quote} +% \ttfamily +% http://www.latex-project.org/lppl.txt +% \end{quote} +% and version~1.3 or later is part of all distributions of \LaTeX\ +% version 2003/12/01 or later. +% +% The C.D.P. Bundle has the LPPL maintenance status ``author-maintained''. +% +% The file \filedir{manifest.txt} included in the C.D.P. Bundle +% specifies what the C.D.P. Bundle consists of; more precisely, +% it explains how the locutions ``Work'' and ``Compiled Work'', +% used in the \LaTeX\ Project Public License, are to be interpreted +% in the case of this work. +% +% \subsubsection{Use} +% +% The use of the C.D.P. Bundle is unrestricted, provided that you +% accept the terms and conditions of the \LaTeX\ Project Public +% License and of the following subsection for what concerns the absence +% of any warranty. +% +% \subsubsection{No warranty} +% +% There is absolutely no warranty for the C.D.P. Bundle. The +% Copyright Holder provides the C.D.P. Bundle ``as is'', without +% warranty of any kind, either expressed or implied, including, but +% not limited to, the implied warranties of merchantability and +% fitness for a particular purpose. The entire risk as to the quality +% and performance of the C.D.P. Bundle is with you. Should the +% C.D.P. Bundle prove defective, you assume the cost of all necessary +% servicing, repair, or correction. +% +% In no event will The Copyright Holder, or any other party who may +% distribute and/or modify the C.D.P. Bundle as permitted by the +% \LaTeX\ Project Public License, be liable to you for damages, +% including any general, special, incidental or consequential damages +% arising out of any use of the C.D.P. Bundle or out of inability to +% use it (including, but not limited to, loss of data, data being +% rendered inaccurate, or losses sustained by anyone as a result of any +% failure of the C.D.P. Bundle to operate with any other programs), +% even if The Copyright Holder or said other party has been advised of +% the possibility of such damages. +% +% \subsection{Options of the \packlass{\letteracdp} class} +% +% Of course, you load the \packlass{\letteracdp} class by means of the +% usual "\documentclass" declaration, which allows you to specify +% various options. For some reason, the complete list of all the +% options recognized by this class has never been given in any of the +% previous documents containing instructions about it; so, we give it +% here. +% +% We shall now list all the options recognized by the +% \packlass{\letteracdp} class, including the standard ones it can +% understand. If an option does not appear in the list given below, +% then that option is not recognized by the \packlass{\letteracdp} +% class, even if it is a standard one (that is, documented in the +% \textsl{\LaTeX book}~\cite{LaTeXbook}). +% +% We begin with the list of standard options. Since they are +% already described in the \textsl{\LaTeX book}~\cite{LaTeXbook}, we +% describe only the options that behave differently from the standard; +% the others are just listed without description. +% +% \begin{description} +% +% \item[\iopz{10pt}\eopz{11pt}\eopz{12pt}\fopz] +% +% \item[\iopz{letterpaper}\eopz{legalpaper}\eopz{executivepaper}\eopz +% {a4paper}\eopz{a5paper}\eopz{b5paper}\fopz] +% \hfil\null\linebreak +% Note that \packlass{\letteracdp} uses \opz{a4paper} as the default. +% +% \item[\iopz{landscape}\fopz] +% +% \item[\iopz{final}\eopz{draft}\fopz] +% +% \item[\iopz{oneside}\eopz{twoside}\fopz] +% +% \item[\iopz{onecolumn}\eopz{twocolumn}\fopz] The \opz{twocolumn} +% option is recognized, but triggers an error; the \opz{onecolumn} +% option is recognized, but it is ignored because in any case the +% document is typeset in one-column mode. Note, however, that +% requesting \opz{onecolumn} as a global option could make sense: +% precisely, it could serve to inform possible packages that the +% document has only one column. But, precisely for this reason, this +% option is requested by default during the class initialization; +% there is hence no reason to specify it, but it does no harm. +% +% \item[\iopz{leqn}\fopz] +% +% \item[\iopz{fleqn}\fopz] +% +% \end{description} +% +% We now list the option specific to the \packlass{\letteracdp} class. +% +% \begin{description} +% +% \item[\iopz{mediumsubject}\eopz{boldsubject}\fopz] +% The \opz{mediumsubject} option requests that the subject of the +% letters be typeset in medium weight, while the \opz{boldsubject} +% option makes it appear in boldface type. The default is +% \opz{mediumsubject}. +% +% \item[\iopz{uprightsignature}\eopz{italicsignature}\fopz] +% The \opz{uprightsignature} option requests that the signature of the +% letters be typeset in upright shape, while the \opz{italicsignature} +% option makes it appear in italic shape. The default is +% \opz{uprightsignature}. +% +% \item[\iopz{noPS}\eopz{usePS}\fopz] +% The \opz{noPS} option requests that the CDP seal be typest using +% only the standard \LaTeX\ fonts, so that the output be printable on +% any kind of printer, even without a PostScript interpreter. On the +% other hand, the \opz{usePS} option requests that it be printed using +% PostScript commands: this enhances its graphical quality, but +% printing the seal will require a PostScript interpreter. The +% default is \opz{noPS}. \emph{Warning:} If you use this option with +% the \packlass{\cdpaddon} package, parts of the seal will be +% incorrectly drawn in black. +% +% \item[\iopz{indent}\eopz{noindent}\eopz{smartindent}\eopz{shortindent}\fopz] +% These options are used to specify the paragraph indentation, but +% only for letters; any portion of text that is not included in a +% letter---but normally there is no such text---is not affected by +% these options. The \opz{indent} option sets the paragraph +% indentation, for letters, to one tenth of the text width, +% unless this amount looks too bad, in which case the indentation +% is set to 2~pica. The \opz{noindent} option completely +% suppressess paragraph indentation within letters. The \opz{smartindent} +% option sets the paragraph indentation, for letters, to the width +% of (the last line of) the salutation, unless this amount looks +% too bad, in which case it behaves like \opz{indent}. The \opz{shortindent} +% option maintains also for letters the same indentation used for +% text not included in letters (see below); its name, chosen to be +% more easily remembered, is due to the fact that normally it involves +% a shorter indentation than the default one. The default is \opz{indent}. +% I repeat that these options do not affect any text that should appear +% outside of letters, whose paragraphs will be always indented by +% 2~em, where the unit of 1~em is taken from the main document font; +% this is also the paragraph indentation for letters if the +% \opz{shortindent} option is specified. Paragraphs of +% postscripts are never indented. +% +% \item[\iopz{105x37labels}\eopz{70x37labels}\eopz{Avery5352labels}\fopz] +% These options indicate the format of the address labels. The +% first two options indicate address labels of mm~105\,$\times$\,37 +% and mm~70\,$\times$\,37, respectively. The third option +% indicates the address labels used by the standard \packlass{letter} +% class. Note the uppercase letter in \opz{Avery5352labels}. The +% default is \opz{105x37labels}. +% +% \end{description} +% +% \StopEventually{ +% \setcounter{secnumdepth}{0} +% \providecommand*\bysame{\leavevmode\hbox to3em{\hrulefill}\thinspace} +% +% \clearpage +% \begin{thebibliography}{9} +% \addcontentsline{toc}{section}{\refname} +% +% \setcounter{enumiv}{-1} +% +% \bibitem{LaTeXbook} +% L.~Lamport, \emph{\LaTeX---A Document Preparation System---User's +% Guide and Reference Manual}, 2nd~edition, Addison-Wesley, +% Reading, 1994. +% +% \bibitem{tutti} +% G.~Mezzetti, \emph{Breve presentazione d'una classe \LaTeX, denominata +% \packlass{\letteracdp}, utile nella preparazione delle lettere del +% Coordinamento}, technical note downloadable from:\\ +% \rlap{\texttt{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/presentazione.tex}} +% +% \bibitem{esempi} +% \bysame, \emph{Esempi d'uso della classe \packlass{\letteracdp}}, +% technical note downloadable from:\\ +% \rlap{\texttt{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/esempi.tex}} +% +% \bibitem{etichette} +% \bysame, \emph{Etichette degli indirizzi con la classe \packlass{\letteracdp}}, +% technical note downloadable from:\\ +% \rlap{\texttt{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/etichett.tex}} +% +% \bibitem{novita} +% \bysame, \emph{Grandi novit\`{a} per \packlass{\letteracdp}: +% arriva \packlass{\articoletteracdp}!}, technical note downloadable from:\\ +% \rlap{\texttt{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/novita.tex}} +% +% \bibitem{nts} +% \bysame, \emph{Forse non tutti sanno che\ldots}, +% technical note downloadable from:\\ +% \rlap{\texttt{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/nontuttisanno.tex}} +% +% \bibitem{ver028} +% \bysame, \emph{Annuncio delle versioni 0.28 della classe \packlass{\letteracdp} +% e 0.08 della classe \packlass{\articoletteracdp}}, +% technical note downloadable from:\\ +% \rlap{\texttt{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/ver0-28.tex}} +% +% \bibitem{adi} +% \bysame, \emph{Come usare il pacchetto \packlass{\adiseal} +% (e la classe \packlass{lettcdpadi})}, +% technical note downloadable from:\\ +% \rlap{\texttt{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/adisealistr.tex}} +% +% \bibitem{cdpaddon} +% \bysame, \emph{Il pacchetto \packlass{\cdpaddon}}, +% technical note downloadable from:\\ +% \rlap{\texttt{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/cdpaddonistr.tex}} +% +% \bibitem{ver031} +% \bysame, \emph{Annuncio della versione 0.31 del \emph{C.D.P. Bundle}}, +% technical note downloadable from:\\ +% \rlap{\texttt{http://www.math.unipd.it/\string~mezzetti/Gustavo/Ludic/CDP/ver0-31.tex}} +% +% \end{thebibliography} +% } +% +% +% +% \clearpage +% \part{Implementation} +% +% \section{About this part} +% +% This part is of interest only to \LaTeX\ hackers; to avoid +% having this part printed, look in the file \filedir{\filename} +% for a line that looks \emph{exactly} like this +% \begin{verbatim}%% \OnlyDescription % uncomment to discard Implementation part\end{verbatim} +% and remove the two leading percent signs ("%%"). +% +% \section{A driver for this document} +% +% This part of the file is \emph{not} included in any generated file: +% it is simply the driver. +% \begin{macrocode} +%<*driver> +% \end{macrocode} +% +% To begin with, we load the \packlass{ltxdoc} class. +% \begin{macrocode} +\documentclass[a4paper]{ltxdoc} +% \end{macrocode} +% We now set a few typesetting options. +% First of all, we want a history listing and a full index, the latter +% organized by line numbers. +% \begin{macrocode} +\RecordChanges +\EnableCrossrefs +\CodelineIndex +% \end{macrocode} +% A two-column index is better than a three-column one, because we +% have some rather long entries. +% \begin{macrocode} +\setcounter{IndexColumns}{2} +% \end{macrocode} +% If you don't want to include the second part of this document, +% \emph{Implementation}, uncomment the line containing the command +% "\OnlyDescription". +% \begin{macrocode} +%% \OnlyDescription % uncomment to discard Implementation part +% \end{macrocode} +% Finally, setting "\hfuzz" and "\vfuzz" to 0~points is only one +% of the many neurotic symptoms of the author! +% \begin{macrocode} +\hfuzz=0pt +\vfuzz=0pt +% \end{macrocode} +% Now input this same file, using \DS\ conventions. +% \begin{macrocode} +\begin{document} + \DocInput{cdpbundl.dtx} +% \end{macrocode} +% Then print the change list and the index. We put these commands in +% the driver, rather than in the comments of this file, because +% producing the change list and the index is somewhat cumbersome, and some +% users could prefer to omit them: such users should simply use a +% different driver. +% \begin{macrocode} + \clearpage \PrintChanges + \clearpage \PrintIndex +% \end{macrocode} +% When this file is read directly by \LaTeX\ without the intervention +% of \DS, the following line will make \TeX\ stop +% reading. +% \begin{macrocode} +\end{document} +% \end{macrocode} +% End of driver module. +% \begin{macrocode} +%</driver> +% \end{macrocode} +% +% \section{The code for the \packlass{\letteracdp} class} +% +% This part of the file goes into \filedir{\letteracdp.cls}. +% \begin{macrocode} +%<*letter> +% \end{macrocode} +% The reader must be warned that this is only a preliminary release +% of this code: a thorough reorganization of the macros has already +% been planned for future releases. Instead of putting all the code +% in a single file and giving it the form of a document class, +% in future releases the code will be split into several files, +% part of which will be packages, part definition and/or +% configuation files, and so on. +% +% \subsection{Identification} +% +% I don't remember exactly why I asked for the June 1997 release +% of \LaTeXe, but I am sure that there was a reason; so, let us +% continue to ask for it. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1997/06/01] % LaTeX2e is required! +% \end{macrocode} +% The usual identification; the string \texttt{(**incomplete**)} +% will eventually be removed, I hope! +% \begin{macrocode} +\ProvidesClass{letteracdp} + [2005/01/01 v0.33 (**incomplete**)] +% \end{macrocode} +% Print a copyright message on the terminal, just below the name +% of the class. +% \begin{macrocode} +\typeout{Copyright (C) 1999-2005 by Gustavo MEZZETTI, + all rights reserved.} +% \end{macrocode} +% +% \begin{macro}{\@letteracdp} +% Define a macro containing the name of the class; it will be used +% in error and warning messages. This is done for two reasons: +% first of all, to save tokens in macro definitions, but also to +% avoid the risk of mispelling the name of the class in some place. +% \begin{macrocode} +\@ifdefinable\@letteracdp{\def\@letteracdp{letteracdp}} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Initial code} +% +% \begin{macro}{\Coordinamento} +% Define the following macros near the beginning of the code, so +% it will be easy to change them. The first is the full name of +% the \emph{Coordinamento}: +% \begin{macrocode} +\newcommand*\Coordinamento{% + Coordinamento dei Dottorandi e dei Dottori di Ricerca + dell'Universit\`a di Padova% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\CoordinamentoWWW} +% The second is its web address: +% \begin{macrocode} +\newcommand*\CoordinamentoWWW{% + http://www.dei.unipd.it/\string~assdott/% +} +% \end{macrocode} +% \end{macro} +% +% Declare the fonts used to print the letterhead and the footer; +% they are declared as ``fixed fonts'' so that they are not +% affected by options (\emph{e.g.}, \opz{12pt}), packages +% (\emph{e.g.}, \opz{times}), and so on. +% \begin{macro}{\@lh@nss} +% Main font for letterhead is Computer Modern Sans Serif 12pt +% (LetterHead\slash Normal Sans Serif): +% \begin{macrocode} +\DeclareFixedFont\@lh@nss{OT1}{cmss}{m}{n} {12} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@lh@bss} +% A couple of initials are printed using a bigger font, that is, +% Computer Modern Sans Serif 17pt (LetterHead\slash Bigger Sans +% Serif): +% \begin{macrocode} +\DeclareFixedFont\@lh@bss{OT1}{cmss}{m}{n} {17} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@lh@rm} +% Main font for footer: Computer Modern Roman 9pt +% (LetterHead\slash RoMan): +% \begin{macrocode} +\DeclareFixedFont\@lh@rm {OT1}{cmr} {m}{n} {9} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@lh@it} +% The words ``World Wide Web'' are printed in italics +% (LetterHead\slash ITalics): +% \begin{macrocode} +\DeclareFixedFont\@lh@it {OT1}{cmr} {m}{it}{9} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@lh@tt} +% And finally, the web address is printed in teletype font +% (LetterHead\slash TeleType): +% \begin{macrocode} +\DeclareFixedFont\@lh@tt {OT1}{cmtt}{m}{n} {9} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ptsize} +% The following macro will be used later to decide which ``class +% layout'' file to load. +% \begin{macrocode} +\newcommand\@ptsize{} +% \end{macrocode} +% \end{macro} +% +% A couple of useful commands that are missing from the \LaTeX\ +% kernel; we leave this explicative comment in the code too. +% \begin{macrocode} +%% A couple of useful things that are missing from the LaTeX kernel: +% \end{macrocode} +% \begin{macro}{\@newrigidlength} +% The first is similar to "\newlength", but allocates a +% \textoken{dimen} rather than a \textoken{glue}. +% \begin{macrocode} +\@ifdefinable\@newrigidlength{\def\@newrigidlength#1{% + \@ifdefinable#1{\newdimen#1}% +}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@msetlength} +% The second can be used to say, for instance, +%\begin{verbatim} +%\@msetlength{\someRubberLength}{2}{\anotherRubberLength} +%\end{verbatim} +% to set "\someRubberLength" to twice the value of +% "\anotherRubberLength", without destroying the stretch and +% shrink components (recall that, on the contrary, +%\begin{verbatim} +%\setlength{\someRubberLength}{2\anotherRubberLength} +%\end{verbatim} +% only sets the \emph{natural length} of "\someRubberLength" to +% twice the \emph{natural length} of "\anotherRubberLength", and +% both the stretch and shrink components of "\someRubberLength" to +% zero). +% \begin{macrocode} +\@ifdefinable\@msetlength{\def\@msetlength#1#2#3{% + #1#3\multiply#1#2\relax +}} +% \end{macrocode} +% \end{macro} +% +% A number of counter, lengths, etc.\ are defined here, at the +% beginning of the class, to detect as soon as possible if any name +% conflicts with an already defined one. The idea is that, since the +% class is pretty long, it is better to avoid to discover near the end +% that it cannot be used because of a name that is already defined; +% but of course, with the speed of modern computers this is not at all +% a problem, so it is very likely that in future releases all +% declarations will be moved to the place they naturally belong to. +% Presently, however, they are almost all listed here; for many of +% them, some explanations are given here, and a more precise description +% is delayed to the spot where the corresponding entity is used. +% +% \counterindex{letter} +% First, we introduce a counter to keep track of the number of letters +% produced. \textbf{Warning:} {\em this counter is used also for +% internal bookkeeping, so don't change its value unless you know what +% you are doing!} +% \begin{macrocode} +\newcounter{letter} +% \end{macrocode} +% +% \counterindex{emptyaddrlabels} +% The following five counters are used in connection with the +% address labels optionally printed at the end of a compiled file. +% The \texttt{emptyaddrlabels} counter holds the number of labels to +% leave blank when starting to print (the first sheet of) the address +% labels; this is useful if some labels on the same sheet have already +% been peeled off. +% \begin{macrocode} +\newcounter{emptyaddrlabels} +% \end{macrocode} +% \counterindex{addrlabelrows} +% A single sheet of address labels contains many labels. For example, +% in the well-known (in the U.S.) Avery 5352 format each sheet contains +% ten labels, organized in two columns and five rows. Other formats +% contain different number of rows and columns of labels. To cope with +% all these different formats, the number of rows and columns of labels +% is kept in two counters: \texttt{addrlabelrows} holds the number of +% rows +% \begin{macrocode} +\newcounter{addrlabelrows} +% \end{macrocode} +% \counterindex{addrlabelcolumns} +% and \texttt{addrlabelcolumns} holds the number of columns. +% \begin{macrocode} +\newcounter{addrlabelcolumns} +% \end{macrocode} +% \counterindex{label} +% The \texttt{addrlabelrows} and \texttt{addrlabelcolumns} counters +% are usually set once for all by the code provided in a suitable +% "\DeclareOption" declaration, as the result of the user's request of +% one of the options devoted to specifying the address label format +% (\opz{105x37labels}, etc.). In some exceptional circumstances, +% they can also be reset by the user, but even in this case, once set +% they are not changed any more. They are therefore not real +% ``counters'', but rather (style) parameters. The following two +% counters, instead, are ``real'', \emph{running} counters: they hold a +% running index which identifies the current label. The \texttt{label} +% counter holds the index of a label inside a given letter +% \begin{macrocode} +\newcounter{label}[letter] +% \end{macrocode} +% \counterindex{totallabel} +% while the \texttt{totallabel} counter holds the global index of a +% label, that is, the index of the label in the whole document. +% \begin{macrocode} +\newcounter{totallabel} +% \end{macrocode} +% It is possible that a single letter has more than one label +% associated, because sometimes letters are sent to more than one +% addressee. +% +% \counterindex{equation} +% \counterindex{footnote} +% \counterindex{mpfootnote} +% In our document class, the letter is the main unit in which the +% document is organized. Therefore, we want that equations, footnotes, +% and footnotes inside minipages be numbered within letters. +% \begin{macrocode} +\@addtoreset{equation}{letter} +\@addtoreset{footnote}{letter} +\@addtoreset{mpfootnote}{letter} +% \end{macrocode} +% +% \begin{macro}{\@lh@left@margin} +% The second type of parameters we are going to define are rigid +% lengths (\textoken{dimen}'s). The first two govern the position of +% the CDP seal with respect to the text margins (see also +% fig.~\ref{fig:plo} on page~\pageref{fig:plo}). More precisely, +% "\@lh@left@margin" is the horizontal distance from the left margin of +% text to the \emph{right} edge of the seal\ldots +% \begin{macrocode} +\@newrigidlength\@lh@left@margin +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@lh@right@margin} +% \ldots and "\@lh@right@margin" is the distance from the right edge of +% the rule found in the rightmost part of the letterhead to the right +% margin of text. +% \begin{macrocode} +\@newrigidlength\@lh@right@margin +% \end{macrocode} +% \end{macro} +% A couple of lenghts used as internal registers, to hold +% values that must be passed to certain macros---we shall explain +% their use when we come to it. +% \begin{macrocode} +\@newrigidlength\@block@inden +\@newrigidlength\@block@width +% \end{macrocode} +% \begin{macro}{\longindentation} +% The following are style parameters used to govern the typesetting +% of the addresses and of the signature. Some of them, in turn, are +% defined in terms of another, crucial style parameter, the so-called +% ``long indentation''; this is the length by which items that appear +% in the right-hand half of the letter should be indented: roughly, it +% is equal to half the value of "\textsize", but it can be fine-tuned +% at ``"\begin{document}"-time'' for better alignment with some parts +% of the letterhead. +% \begin{macrocode} +\@newrigidlength\longindentation +% \end{macrocode} +% \end{macro} +% \begin{macro}{\senderindentation} +% The amount by which the sender address should be indented: +% \begin{macrocode} +\@newrigidlength\senderindentation +% \end{macrocode} +% \end{macro} +% \begin{macro}{\senderwidth} +% The width of the column in which the sender address should be +% typeset: +% \begin{macrocode} +\@newrigidlength\senderwidth +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addresseeindentation} +% The indentation\ldots +% \begin{macrocode} +\@newrigidlength\addresseeindentation +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addresseewidth} +% \ldots and column width for the addresse address: +% \begin{macrocode} +\@newrigidlength\addresseewidth +% \end{macrocode} +% \end{macro} +% \begin{macro}{\signatureindentation} +% Indentation\ldots +% \begin{macrocode} +\@newrigidlength\signatureindentation +% \end{macrocode} +% \end{macro} +% \begin{macro}{\signaturewidth} +% \ldots and width for the signature: +% \begin{macrocode} +\@newrigidlength\signaturewidth +% \end{macrocode} +% \end{macro} +% \begin{macro}{\foldedheight} +% There are macros that provide the ability to typeset letters that +% are going to be folded before being put into the envelopes; these +% macros assure that no text is typeset astride of the folding. The +% vertical distance from the upper edge of the \emph{paper} (not of +% the text) to the folding is kept in "\foldedheight". A value of +% zero or less (\emph{e.g.}, $-"\maxdimen"$) prohibits folded letters: +% this can be useful for certain paper sizes, and for safety it is set +% here as the default. For paper sizes that allow folded letters, the +% actual value of "\foldedheight" is set by the code given in the +% relevant "\DeclareOption". +% \begin{macrocode} +\@newrigidlength\foldedheight + \setlength\foldedheight{-\maxdimen} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@folding@ht} +% In general, the default setting of "\foldedheight" provided by the +% option handling mechanism should be sufficient. However, the user +% is allowed to change the value of "\foldedheight", preferably in the +% preamble, but also in the document body, if a certain simple +% precaution is taken. This can be useful if one wants to alter the +% default behavior, \emph{e.g.}, to have letters that are two-folded +% rather then three-folded, or to allow folded letters also when using +% a paper format, like A5, that normally does not allow it. Useful, +% sure, but it rises a problem: the algorithm that decides where to +% split the text between the part that must go above the folding +% and the part that must go below it requires that the value of +% "\foldedheight" lie within a certain range. Obviously we cannot ask +% the user to know what range is acceptable, so we adopt the +% following solution: we define an ``internal backup'' of +% "\foldedheight", called "\@folding@ht" for historical reasons; +% then, the user is asked to call the macro "\checkfoldedheight" +% (see below) whenever (s)he changes the value of "\foldedheight"; +% this macro check the new value and, if it is OK, copies it in the +% internal dimension "\@folding@ht" (actually, after some scaling +% conversions), otherwise it sets an internal flag which disables +% folded letters and issues a warning. A slight variant of +% "\checkfoldedheight", which differs only in the warning +% produced, is called automatically at the "\begin{document}", so +% the user is \emph{not} required to call "\checkfoldedheight" if +% the changes to "\foldedheight" are made in the preamble. +% \begin{macrocode} +\@newrigidlength\@folding@ht +% \end{macrocode} +% \end{macro} +% The following three dimensions will be described when we come to +% the point where they are used. +% \begin{macrocode} +\@newrigidlength\@lh@folding@ht +\@newrigidlength\@above@folding@margin +\@newrigidlength\@above@folding@shrink +% \end{macrocode} +% +% Now we pass to rubber lengths, \emph{i.e.}, \TeX's +% \textoken{skip}'s. The first two are something like internal +% registers used to pass certain style parameters back and forth +% between macros. +% \begin{macrocode} +\newlength\@block@space +\newlength\@block@andspace +% \end{macrocode} +% \begin{macro}{\@below@folding@skip} +% This is an internal style parameter which specifies the amount of +% vertical blank space that should be left, in folded letters, between +% the folding and the text that follows it. It can be redefined in +% packages or other classes, or, in an emergency, by the final user. +% It is a rubber length, but in this class it is assigned, as we shall +% see later, a value without stretch or shrink components. Note that +% the actual space left between the folding and the text will usually +% be greater than, or at most equal to, the value of +% "\@below@folding@skip", because lines of text are usually aligned to +% integer multiples of half the "\baselineskip". +% \begin{macrocode} +\newlength\@below@folding@skip +% \end{macrocode} +% \end{macro} +% +% The following ten (rubber) length are style parameters that affect +% the amount of vertical space left before and after certain building +% blocks, like addresses and signature. The user can freely change +% them with "\setlength". Note that all these spaces are added with +% "\addvspace", so only the largest one survives if two of them occur +% in a row. +% \begin{macro}{\aboveaddressvspace} +% The amount of vertical space above the sender's or addressee's +% address: +% \begin{macrocode} +\newlength\aboveaddressvspace +% \end{macrocode} +% \end{macro} +% \begin{macro}{\andaddressvspace} +% The amount of vertical space between two consecutive addresses +% separated with "\and" or "\andcc": +% \begin{macrocode} +\newlength\andaddressvspace +% \end{macrocode} +% \end{macro} +% \begin{macro}{\belowaddressvspace} +% The amount of vertical space below the sender's or addressee's +% address: +% \begin{macrocode} +\newlength\belowaddressvspace +% \end{macrocode} +% \end{macro} +% \begin{macro}{\abovesubjectvspace} +% The amount of vertical space above the subject: +% \begin{macrocode} +\newlength\abovesubjectvspace +% \end{macrocode} +% \end{macro} +% \begin{macro}{\presubjectvspace} +% The amount of vertical space between the text specified with +% "\presubject" (if any) and the main body of the subject: +% \begin{macrocode} +\newlength\presubjectvspace +% \end{macrocode} +% \end{macro} +% \begin{macro}{\belowsubjectvspace} +% The amount of vertical space below the subject: +% \begin{macrocode} +\newlength\belowsubjectvspace +% \end{macrocode} +% \end{macro} +% \begin{macro}{\abovesignaturevspace} +% The amount of vertical space above the signature: +% \begin{macrocode} +\newlength\abovesignaturevspace +% \end{macrocode} +% \end{macro} +% \begin{macro}{\abovesignatureshortvspace} +% The amount of vertical space above the signature when the +% \mbox{$*$-form} of the "\makesignature" command is used (this +% happens, for instance, when the \mbox{$*$-form} of the +% "\closing" command is used): +% \begin{macrocode} +\newlength\abovesignatureshortvspace +% \end{macrocode} +% \end{macro} +% \begin{macro}{\belowsignaturevspace} +% The amount of vertical space below the signature: +% \begin{macrocode} +\newlength\belowsignaturevspace +% \end{macrocode} +% \end{macro} +% \begin{macro}{\belowpresentationvspace} +% The amount of vertical space below the presentation as a whole +% (the presentation contains the sender address, the addressee +% address, and the optional subject); this also ends the block of +% these style parameters: +% \begin{macrocode} +\newlength\belowpresentationvspace +% \end{macrocode} +% \end{macro} +% +% Allocation of some other rigid lengths (\textoken{dimen}'s) +% follows: these concern the layout of the sheets of address +% labels that the user wants to employ. To save a few keystrokes, +% we define the "\do" macro to do the allocation and to initialize +% the value of the allocated length to zero. +% \begin{macrocode} +\def\do#1{\@newrigidlength #1\setlength #1\z@} +% \end{macrocode} +% Then we allocate and initialize the individual lengths. +% \begin{macro}{\addrlabelsleftmargin} +% This is the amount of horizontal space between the left edge of the +% sheet of address labels and the left edge of the leftmost column of +% labels on the sheet. +% \begin{macrocode} +\do\addrlabelsleftmargin +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addrlabelstopmargin} +% This is the amount of vertical space between the top edge of the +% sheet of address labels and the top edge of the upper row of labels +% on the sheet. +% \begin{macrocode} +\do\addrlabelstopmargin +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addrlabelshsep} +% This is the amount of horizontal space between two columns of labels +% on the sheet. +% \begin{macrocode} +\do\addrlabelshsep +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addrlabelsvsep} +% This is the amount of vertical space between two rows of labels on +% the sheet. +% \begin{macrocode} +\do\addrlabelsvsep +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addrlabelborder} +% Normally, you don't want to write into the labels starting from +% their physical border: you want to leave a little margin between the +% text inside the labels and their edges. The amount of margin is +% kept in this style parameter (sorry, no provision is made to specify +% different margins in the two directions). +% \begin{macrocode} +\do\addrlabelborder +% \end{macrocode} +% \end{macro} +% +% The following four lengths don't have reasonable default values, +% so they are not initialized here. The code for each individual +% address label option will initialize the first two, and the +% other two are computed later. +% \begin{macro}{\addrlabelwidth} +% The (horizontal) width of a single address label. +% \begin{macrocode} +\@newrigidlength\addrlabelwidth +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addrlabelheight} +% The (vertical) height of a single address label. +% \begin{macrocode} +\@newrigidlength\addrlabelheight +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addrlabeltrimwidth} +% This is a computed value, that the user should regard as +% read-only: it is the width of a single address label +% ("\addrlabelwidth"), diminished by twice the width of the +% border ("\addrlabelborder"). +% \begin{macrocode} +\@newrigidlength\addrlabeltrimwidth +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addrlabeltrimheight} +% Analogous: "\addrlabelheight" diminished by twice +% "\addrlabelborder". This ends this block of code. +% \begin{macrocode} +\@newrigidlength\addrlabeltrimheight +% \end{macrocode} +% \end{macro} +% +% Now, we just declare a few names we are going to use. The idea +% is to trigger an error message if one of them is already defined. +% \begin{macro}{\@cdp@reserved} +% This is a reserved name that will be used as a +% ``general-purpose'' container, much like "\reserved@a", etc. +% \begin{macrocode} +\@ifdefinable\@cdp@reserved{} +% \end{macrocode} +% \end{macro} +% Miscellaneous names, we shall describe them in a more +% appropriate place. +% \begin{macrocode} +\@ifdefinable\@empty@block{} +\@ifdefinable\@beginlabels{} +\@ifdefinable\@beginlabelgroup{} +\@ifdefinable\@mlabel{} +\@ifdefinable\@endlabelgroup{} +\@ifdefinable\@endlabels{} +\@ifdefinable\startaddrlabel{} +\@ifdefinable\startaddrlabel{} +\@ifdefinable\stopaddrlabel{} +\@ifdefinable\ifactuallabel{} +% \end{macrocode} +% +% \begin{macro}{\@lett@decl} +% We define a token register used to save declarations to execute +% when a letter begins (see below). +% \begin{macrocode} +\@ifdefinable\@lett@decl{\newtoks\@lett@decl} +% \end{macrocode} +% \end{macro} +% +% We finally arrive to something simple and clearly comprehensible. +% We initialize the addresses, the signature, etc. to empty strings. +% To do that, we define the "\do" macro as follows: +% \begin{macrocode} +\def\do#1{\@ifdefinable#1{\let#1\@empty}} +% \end{macrocode} +% \begin{macro}{\thesenderaddress} +% The address of the sender, \emph{including her/his name}: +% \begin{macrocode} +\do\thesenderaddress +% \end{macrocode} +% \end{macro} +% \begin{macro}{\thesendername} +% The name of the sender (essentially, this is provided only for +% compatibility with the \packlass{letter} standard \LaTeX\ class): +% \begin{macrocode} +\do\thesendername +% \end{macrocode} +% \end{macro} +% \begin{macro}{\thesendersignature} +% The signature of the sender: +% \begin{macrocode} +\do\thesendersignature +% \end{macrocode} +% \end{macro} +% \begin{macro}{\thesenderlocation} +% The room number, etc., of the sender: +% \begin{macrocode} +\do\thesenderlocation +% \end{macrocode} +% \end{macro} +% \begin{macro}{\thesenderphone} +% The phone number of the sender: +% \begin{macrocode} +\do\thesenderphone +% \end{macrocode} +% \end{macro} +% \begin{macro}{\theaddresseeaddress} +% The complete address of the addressee, \emph{including her/his +% name, title, etc.}: +% \begin{macrocode} +\do\theaddresseeaddress +% \end{macrocode} +% \end{macro} +% \begin{macro}{\theaddresseename} +% The name of the addressee (used in page headings): +% \begin{macrocode} +\do\theaddresseename +% \end{macrocode} +% \end{macro} +% \begin{macro}{\thesubject} +% The subject of the letter: +% \begin{macrocode} +\do\thesubject +% \end{macrocode} +% \end{macro} +% +% There are also some internal macros that need to be initialized to +% "\@empty". +% \begin{macro}{\@subject@style} +% The subject can be typeset either in medium weight or in +% boldface. This is achieved by inserting the "\@subject@style" +% token in front of it: its default definition given here makes +% this token a no-op (no font attributes are changed), but the code +% that implements options like \opz{mediumsubject} or +% \opz{boldsubject} can "\let" this token be equal to, say, +% "\mdseries" or "\bfseries", to obtain the desired changes in the +% font attributes. If more than one attribute needed to be +% changed (\emph{e.g.}, if somebody wanted to define a +% \opz{bolditalicsubject} option), then "\def" should be used +% instead of "\let"; for instance, one would write +% \begin{verbatim}\def\@subject@style{\bfseries\itshape}\end{verbatim} +% We don't make "\@subject@style" a token register because the +% ``"\let" case'' is the most common. +% \begin{macrocode} +\do\@subject@style +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@signature@style} +% This is analogous to "\@subject@style", but for the signature. +% The code for the \opz{uprightsignature} option "\let"s it equal to +% "\upshape", and the code for the \opz{italicsignature} option to +% "\itshape". +% \begin{macrocode} +\do\@signature@style +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@begin@letter@hook} +% This hook is executed when a letter starts, at the very end of the +% process of setting up the ``letter-making'' environment, just +% after the declarations stored in "\@lett@decl". It may turn out to +% be useful in packages and derived classes, and in fact it is used by +% the \packlass{articoletteracdp} class. It is not a token register +% because it is envisioned that many independent segments of code +% will want to store tokens in it, and this can easily be achieved +% with the "\g@addto@macro" function, which requires that its +% argument be a macro, not a token register. +% \begin{macrocode} +\do\@begin@letter@hook +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@end@letter@hook} +% This is analogous to "\@begin@letter@hook", but is executed at the +% end of every ``letter-making'' environment, after its last page has +% been finished off and ejected, but before writing to the +% \filedir{.aux} file the information for the associated address labels. +% Note that there is another hook, called "\stopletter" and described +% later, which is executed \emph{before} ejecting the last page of +% the letter. +% \begin{macrocode} +\do\@end@letter@hook +% \end{macrocode} +% \end{macro} +% +% The following macros are defined only inside a \texttt{subject} +% environment. We want that they cause an error if used outside of that +% environment, but we also want to be sure that their names are not +% already defined. We achieve this by calling "\@ifdefinable", and +% then "\let"ting the relevant token be "\@undefined". +% \begin{macrocode} +\def\do#1{\@ifdefinable#1{\let#1\@undefined}} +\do\presubject +\do\registered +\do\registeredRR +% \end{macrocode} +% +% The following are integer (numeric) style parameters: they are +% initialized later, and contain several penalty values used to assist +% \TeX\ in choosing sightful and meaningful page breaks, and also for +% other purposes that will be explained later. For now we content +% ourselves with the simple allocation with "\newcount". +% \begin{macrocode} +\def\do#1{\@ifdefinable#1{\newcount#1}} +% \end{macrocode} +% The first five parameters are actually ``constants'' analogous to +% "\@lowpenalty", "\@medpenalty", and "\@highpenalty"; they are +% typically assigned very high penalty values, and their names all +% begin with "\@fold@" because they are used in connection with the +% algorithm that takes care of ``folded presentations'' (explained +% later). +% \begin{macrocode} +\do\@fold@basepenalty +\do\@fold@lowpenalty +\do\@fold@medpenalty +\do\@fold@highpenalty +\do\@fold@toppenalty +% \end{macrocode} +% The real style parameters begin here. Their values are assigned +% later, in various spots of the code; indeed, the values assigned +% vary according to certain circumstances, for example, they are +% changed from the default when a ``presentation'' is entered. +% We'll discuss all this later on. +% \begin{macro}{\@b@frompenalty} +% This is the penalty inserted at the beginning of a +% \texttt{sender} environment---the environment used to typeset the +% sender address. +% \begin{macrocode} +\do\@b@frompenalty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@i@frompenalty} +% This is the penalty inserted before additional sender addresses +% separated with "\and". +% \begin{macrocode} +\do\@i@frompenalty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@e@frompenalty} +% This is the penalty inserted at the end of a \texttt{sender} +% environment. +% \begin{macrocode} +\do\@e@frompenalty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@b@topenalty} +% This is the penalty inserted at the beginning of an +% \texttt{addressee} environment---the environment used to typeset the +% addressee address. +% \begin{macrocode} +\do\@b@topenalty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@i@topenalty} +% This is the penalty inserted before additional addressee addresses +% separated with "\and" or "\andcc". +% \begin{macrocode} +\do\@i@topenalty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@e@topenalty} +% This is the penalty inserted at the end of an \texttt{addressee} +% environment. +% \begin{macrocode} +\do\@e@topenalty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@b@subjpenalty} +% This is the penalty inserted at the beginning of a \texttt{subject} +% environment---the environment used to typeset the subject. +% \begin{macrocode} +\do\@b@subjpenalty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@e@subjpenalty} +% This is the penalty inserted at the end of a \texttt{subject} +% environment. +% \begin{macrocode} +\do\@e@subjpenalty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@e@prespenalty} +% This is the penalty inserted at the end of a presentation as a +% whole. +% \begin{macrocode} +\do\@e@prespenalty +% \end{macrocode} +% \end{macro} +% The following are two internal registers, used to pass penalty +% values back and forth between macros. +% \begin{macrocode} +\do\@i@penalty +\do\@e@penalty +% \end{macrocode} +% \begin{macro}{\@cdp@gencount} +% We also take the opportunity to define a general-purpose numeric +% register, used for short-term storage when needed. This ends the +% block of count registers. +% \begin{macrocode} +\do\@cdp@gencount +% \end{macrocode} +% \end{macro} +% +% Four internal switches are defined next. +% \begin{macrocode} +\def\do#1{\@ifdefinable#1{\newif#1}} +% \end{macrocode} +% \begin{macro}{\if@use@eepic@} +% The user can request, through the \opz{usePS} option, that the +% \packlass{eepic} package be used to trace the lines that make up the +% CDP seal, for better graphical result; the user's indication, +% however, will be honored only if the \packlass{eepic} package is +% available on the system (of course!). This switch is set to ``true'' +% if the \packlass{eepic} package is present and should be used. +% \begin{macrocode} +\do\if@use@eepic@ +% \end{macrocode} +% \end{macro} +% \begin{macro}{\if@do@fold@} +% This switch is ``true'' when folded letters are allowed, and +% ``false'' when they are shunned; the setting is made by the +% "\checkfoldedheight" command, and also at +% ``"\begin{document}"-time''. +% \begin{macrocode} +\do\if@do@fold@ +% \end{macrocode} +% \end{macro} +% The other two switches cannot be explained here. They are defined +% differently, without using "\newif", so that they are always changed +% "\global"ly. +% \begin{macrocode} +\@ifdefinable\if@new@block@{ + \def\@new@block@true {\global\let\if@new@block@\iftrue } + \def\@new@block@false{\global\let\if@new@block@\iffalse} +} +\@ifdefinable\if@empty@and@{ + \def\@empty@and@true {\global\let\if@empty@and@\iftrue } + \def\@empty@and@false{\global\let\if@empty@and@\iffalse} +} +% \end{macrocode} +% +% We need the following box registers to hold precompiled parts of +% the letterhead and of the footer. +% \begin{macro}{\@logo@box@base} +% This holds the main part of the CDP seal; more precisely, that +% part that appears both in the \ldots\texttt{letterhead}\ldots\ and in +% the \texttt{logo}\ldots\ page styles. +% \begin{macrocode} +\newsavebox\@logo@box@base +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@logo@box@addS} +% This holds the part of the CDP seal that should be added to the +% part contained in "\@logo@box@base" in order to obtain the seal as +% it appears in the \texttt{logo}\ldots\ page styles. +% \begin{macrocode} +\newsavebox\@logo@box@addS +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@logo@box@addL} +% This holds the part of the CDP seal that should be added to the +% part contained in "\@logo@box@base" in order to obtain the seal as +% it appears in the \ldots\texttt{letterhead}\ldots\ page styles. +% \begin{macrocode} +\newsavebox\@logo@box@addL +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@oordinamento@box} +% This holds the writing ``oordinamento dei Dottorandi di Padova'' +% that appears in the letterhead, with the initial~``C'' being +% supplied by the seal. +% \begin{macrocode} +\newsavebox\@oordinamento@box +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@name@and@WWW@box} +% This holds the footer used in the \texttt{firstletterhead} and +% \texttt{foldedletterhead} page styles, which contains the full name +% of the \emph{Coordinamento} and its web address. This ends the +% block of box registers, too. +% \begin{macrocode} +\newsavebox\@name@and@WWW@box +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\and} +% It is possible to specify several addresses (both for the sender +% and the addressee) as well as several signatures; the various parts +% are separated by "\and" commands. Strictly speaking, it is an error +% to expand the token "\and" anywhere but inside the \texttt{sender}, +% \texttt{addressee}, and \texttt{signatureenv} environments (the +% environments used to produce the sender address, the addressee +% address, and the signature, repectively); hence, the correct thing +% to do here would be to initialize "\and" to produce an error +% message, and then redefine it in the various environments, as +% required in each case. But alas, the code for \packlass{\letteracdp} is +% still incomplete, and this is one of the things I still have to +% finish: I don't know exactly how to handle a misplaced "\and", so, +% for now, I simply decide to ignore it. +% \begin{macrocode} +\let\and\relax +% \end{macrocode} +% Of course, this definition will be changed inside the +% abovementioned environments, where "\and" must have a special +% meaning. +% \end{macro} +% \begin{macro}{\andcc} +% Only inside an \texttt{addressee} environment, the token "\andcc" +% can be used in place of "\and" to separate addresses of persons to +% which the letter is sent as a carbon copy. Its default definition, +% however, is to act as "\and". +% \begin{macrocode} +\@ifdefinable\andcc{\def\andcc{\and}} +% \end{macrocode} +% \end{macro} +% +% We need to save the definitions, as initialized by the \LaTeX\ +% kernel, of a couple of macros. +% \begin{macro}{\m@kel@bel} +% Saved definition of "\makelabel". +% \begin{macrocode} +\@ifdefinable\m@kel@bel{\let\m@kel@bel\makelabel} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@@vspace} +% Saved definition of "\vspace". +% \begin{macrocode} +\@ifdefinable\@@vspace{\let\@@vspace\vspace} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@indent@pref} +% This is a multi-way switch used to implement the \opz{indent}, +% \opz{noindent}, etc.\ options, which govern the way in which +% paragraphs of letters (except~P.S.) are indented. The code associated +% with the various options "\let"s this token equal to one of the +% following keys, which will be interpreted later as specified: +% \begin{description} +% \item[F (for ``fixed indent'').] +% Set "\parindent" to one tenth of "\textwidth", with a threshold +% value of 2~pica (that is, "\parindent" will be at least 2~pica, even +% if this is more than one tenth of "\textwidth"). +% \item[N (for ``no ident'').] +% Set "\parindent" to 0~points. +% \item[L (for ``leave indent'').] +% The value of "\parindent" that was in effect outside of the +% current \ldots\texttt{letter}\ldots\ environment is retained. +% \item[O (sorry, I don't remember for what).] +% Set "\parindent" to the width of the last line of the salutation +% (\emph{i.e.}, the argument of "\opening" or "\makeopening"); if the +% salutation is not given, this is the same as~``F''. +% \end{description} +% The default setting is the same as the one implied by the +% \opz{indent} option. +% \begin{macrocode} +\@ifdefinable\@indent@pref{\let\@indent@pref F} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\voidisOK} +% Sometimes, in a letter, you want to omit the sender or the +% addressee address, or the signature, and it is annoying to see a +% warning about an ``empty something'' that you left empty +% deliberately. For this reason, inside the environments that produce +% the addresses and the signature you are allowed to use the command +% "\voidisOK" to disable such warnings. The idea is that you say +% something like +%\begin{verbatim} +%\address{\voidisOK} +%\end{verbatim} +% when you want to declare that the address has intentionally be +% left void; when the address is actually typeset (and this happens +% inside an \texttt{addressee} environment), the command "\voidisOK" +% will be expanded, causing the warning to be suppressed. As for the +% command "\and", the right thing to do would be to define this +% command only inside the environments in which it can be used; but +% there are complications arising from the fact that the text +% specified inside an "\address" declaration can be expanded also at +% other times, for instance when typesetting the address labels. For +% this reason, we take the shortcut of "\let"ting this command equal +% to "\@empty", so that it will be ignored when it occurs out of place. +% (We do not "\let" it equal to "\relax" because the latter could +% confuse an "\ignorespaces"; on the contrary, "\@empty" disappears +% upon "\write" and "\mark" operations, and this is quite OK.) +% Where appropriate, "\voidisOK" will be redefined to achieve the +% desired effect. +% \begin{macrocode} +\@ifdefinable\voidisOK{\let\voidisOK\@empty} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\subjectnamegap} +% If present, the subject of a letter is typeset with hanging +% indentation, preceded by the text contained in the command +% "\subjectname" and separated from it by a certain amount of +% horizontal white space: the width of this white space is specified +% by the "\subjectnamegap" macro. This is a macro and not a +% \textoken{dimen} register to allow the length to be specified in +% terms of the font-dependent units like ``em''. Of course, the +% hanging indentation includes this horizontal space; note, +% however, that if "\subjectname" is empty than the +% "\subjectnamegap" space is not taken into account (older versions +% of the class left this space even when "\subjectname" was empty, +% but this bug has now been corrected). +% \begin{macrocode} +\newcommand*\subjectnamegap{.5em} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\closingindentation} +% As for the way of typesetting addresses, different countries have +% different uses about how to indent the closing of the letter: for +% instance, in Italy the closing is indented like any other, ordinary +% paragraph, whilst in anglo-saxon letters it is indented by the same +% amount by which the sender address is indented. To cope with this, +% the "\closingindentation" command is introduced, to hold the amount +% of indentation for the closing: its default definition is +% "\parindent", so that the closing is indented like an ordinary +% paragraph, but a ``letter-making'' environment can redefine it, +% if necessary. It is a command and not a length, because the +% value of "\parindent" can change, and actually does change, in +% the sequel. +% \begin{macrocode} +\newcommand*\closingindentation{\parindent} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\signaturealignment} +% Different countries have different conventions also about how the +% signature should be aligned; for instance, in the U.S. the +% signature is set ragged right, but with a hanging indentation equal +% to the hanging indentation of the sender address, which in the U.S. +% is printed on the right-hand half of the paper; in Italy, the +% signature is more or less centered between the margins, and if it +% contains more than one line, the lines are aligned at their +% midpoint. In order to accomodate the various conventions, the token +% "\signaturealignment" is inserted at the beginning of the +% \texttt{signatureenv} environment (the environment one uses to +% typeset the signature); it is the responsability of the surrounding +% \ldots\texttt{letter}\ldots\ environment to "\let" this token equal +% to "\raggedright", "\centering", etc., as required by the particular +% letter being produced. This makes it easy, for instance, to define +% an \texttt{asletter} (anglo-saxon letter) environment that prints +% letters that obey the U.S. conventions. The default setting given +% here has no special meaning: it just sets the signature ragged +% right. +% \begin{macrocode} +\newcommand*\signaturealignment{\raggedright} +% \end{macrocode} +% \end{macro} +% +% \subsection{Declaration of options} +% +% As a general rule, options pertaining to the same functional group +% are declared in reverse order of desirability, the default option of +% the group being declared last. This assures that if more than +% one option of the same group is erroneously asked for by the +% user, the ``most desirable'' one (whatever this means) is +% executed last, thereby remaining in effect. +% +% We begin with the options that support the usual page formats. +% For each such option, the associated code sets appropriate values +% for the "\paperheight" and "\paperwidth" parameters. The code also +% sets the "\foldedheight" parameter, which, as explained above, +% contains the height at which the sheets of paper should be folded in +% order to put them into an envelope; this parameter is set to more or +% less one third of "\paperheight". For some paper formats, folding +% is not adequate: for them, folded letters are disabled by setting +% "\foldedheight" to $-"\maxdimen"$. +% \begin{macrocode} +\DeclareOption{executivepaper} + {\setlength\paperheight {10.5in}% + \setlength\paperwidth {7.25in}% + \setlength\foldedheight{3.5in}} +\DeclareOption{legalpaper} + {\setlength\paperheight {14in}% + \setlength\paperwidth {8.5in}% + \setlength\foldedheight{4.7in}} +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% + \setlength\paperwidth {8.5in}% + \setlength\foldedheight{3.7in}} +\DeclareOption{b5paper} + {\setlength\paperheight {250mm}% + \setlength\paperwidth {176mm}% + \setlength\foldedheight{-\maxdimen}} +\DeclareOption{a5paper} + {\setlength\paperheight {210mm}% + \setlength\paperwidth {148mm}% + \setlength\foldedheight{-\maxdimen}} +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}% + \setlength\foldedheight{100mm}} +% \end{macrocode} +% +% The \opz{landscape} option is implemented as usual, by +% exchanging the values of "\paperheight" and "\paperwidth" (note that +% this option is executed after any one of the options that sets the +% paper dimensions); but we also disable folded letters by setting +% "\foldedheight" to $-"\maxdimen"$, because usually one does not want +% to fold a letter set in landscape orientation! +% \begin{macrocode} +\DeclareOption{landscape} + {\setlength\@tempdima {\paperheight}% + \setlength\paperheight {\paperwidth}% + \setlength\paperwidth {\@tempdima}% + \setlength\foldedheight{-\maxdimen}} +% \end{macrocode} +% +% These are the usual options for setting the main font size: they are +% copied from the standard \LaTeX\ classes. See, \emph{e.g.}, the +% documentation of the standard \packlass{letter} class for +% explanations. +% \begin{macrocode} +\DeclareOption{12pt}{\renewcommand\@ptsize{2}} +\DeclareOption{11pt}{\renewcommand\@ptsize{1}} +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +% \end{macrocode} +% +% The way of implementing the \opz{oneside}\slash\opz{twoside} +% options is again copied from the \packlass{letter} standard \LaTeX\ +% class. +% \begin{macrocode} +\if@compatibility + \DeclareOption{twoside}{% + \@latexerr{No `twoside' layout for letters}\@eha + } +\else + \DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +\fi +\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} +% \end{macrocode} +% +% The \opz{onecolumn}\slash\opz{twocolumn} options are not +% declared in the \packlass{letter} standard \LaTeX\ class, but I prefer +% to declare them. The \opz{twocolumn} options causes an error, +% because I have never seen letters typeset in two columns mode! +% \begin{macrocode} +\DeclareOption{twocolumn}{% + \@latexerr{No `twocolumn' layout for letters}\@eha +} +% \end{macrocode} +% The \opz{onecolumn} option is simply ignored, but it is +% declared, so that it is removed from the list of unused options. +% \begin{macrocode} +\DeclareOption{onecolumn}{} +% \end{macrocode} +% +% More options copied from the standard \LaTeX\ classes. +% \begin{macrocode} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{leqno}{\input{leqno.clo}} +\DeclareOption{fleqn}{\input{fleqn.clo}} +% \end{macrocode} +% +% Now we have four options for setting the way in which the subject +% of a letter (if present) and the signature are printed. As +% explained above, the setting is done by "\let"ting a conventional +% token equal to one of the usual NFSS commands used to set individual +% font attributes; if more than one attribute needed to be changed, +% "\def" would be used instead of "\let", but fortunately this is not +% necessary. +% +% Options for the subject: it can be set in boldface type\ldots +% \begin{macrocode} +\DeclareOption{boldsubject}{\let\@subject@style\bfseries} +% \end{macrocode} +% \ldots or in medium weight. +% \begin{macrocode} +\DeclareOption{mediumsubject}{\let\@subject@style\mdseries} +% \end{macrocode} +% +% Options for the signature: it can be set in italic shape\ldots +% \begin{macrocode} +\DeclareOption{italicsignature}{\let\@signature@style\itshape} +% \end{macrocode} +% \ldots or in upright (normal) shape. +% \begin{macrocode} +\DeclareOption{uprightsignature}{\let\@signature@style\upshape} +% \end{macrocode} +% +% Next, we have the options used to tell whether PostScript +% commands, inserted by means of the \packlass{eepic} package, should be +% used, or not, to draw the CDP seal. Here we simply set the internal +% switch according to the user's request; if we later find that the +% \packlass{eepic} package is not available, we shall force the switch +% to false. +% \begin{macrocode} +\DeclareOption{usePS}{\@use@eepic@true} +\DeclareOption{noPS}{\@use@eepic@false} +% \end{macrocode} +% (These mean ``use PostScript'' and ``don't use PostScript'', +% respectively.) +% +% Cheer up! We are almost over! (Just with the options, of +% course!) We are now to the options for the paragraph +% indentation within letters. They are implemented by setting an +% internal multi-value switch to a conventional key; the meaning of +% the keys has already been explained above. +% \begin{macrocode} +\DeclareOption{smartindent}{\let\@indent@pref O} +\DeclareOption{shortindent}{\let\@indent@pref L} +\DeclareOption{noindent}{\let\@indent@pref N} +\DeclareOption{indent}{\let\@indent@pref F} +% \end{macrocode} +% +% The last three options deal with the format of the address +% labels. As already said, the format is specified by +% initializing a number of \textoken{dimen} parameters which +% specify the ``geometry'' of the sheet of address labels. Many +% of these parameters have a default value of 0~points: when this +% default is appropriate, the parameter is not re-initialized in +% the code given below. +% +% We support the Avery 5352 address labels only for compatibility +% with the standard \packlass{letter} class. I have never seen a sheet +% of these labels, and the code for the \opz{Avery5352labels} +% option simply assigns values to the parameters in a way that tries to +% imitate the geometry described by the code found in the +% \packlass{letter} class. +% \begin{macrocode} +\DeclareOption{Avery5352labels}{% +% \end{macrocode} +% We have 5~rows of labels. +% \begin{macrocode} + \setcounter{addrlabelrows}{5}% +% \end{macrocode} +% Each row contains 2~labels, \emph{i.e.}, we have two columns of +% labels. +% \begin{macrocode} + \setcounter{addrlabelcolumns}{\tw@}% +% \end{macrocode} +% The left edge of the leftmost column is 35~points to the left of +% the \TeX\ origin, which in turn is 1~inch from the left edge of +% the paper. +% \begin{macrocode} + \setlength\addrlabelsleftmargin{-35\p@}% + \addtolength\addrlabelsleftmargin{1in}% +% \end{macrocode} +% The top edge of the topmost row is 50~points above +% the \TeX\ origin, which in turn is 1~inch from the top edge of +% the paper. +% \begin{macrocode} + \setlength\addrlabelstopmargin{-50\p@}% + \addtolength\addrlabelstopmargin{1in}% +% \end{macrocode} +% The two columns are separated by 26~points. +% \begin{macrocode} + \setlength\addrlabelshsep{26\p@}% +% \end{macrocode} +% Labels are 262~points wide by 2~inches high. +% \begin{macrocode} + \setlength\addrlabelwidth{262\p@}% + \setlength\addrlabelheight{2in}% +} +% \end{macrocode} +% +% The code for the labels I had the opportunity to actually see and +% measure is more elegant, and fits more naturally into the scheme. +% The following is the setting for the 70\,$\times$\,37 labels (the +% dimensions are given in~mm). +% \begin{macrocode} +\DeclareOption{70x37labels}{% +% \end{macrocode} +% 8~rows of labels. +% \begin{macrocode} + \setcounter{addrlabelrows}{8}% +% \end{macrocode} +% 3~columns, \emph{i.e.}, 3~labels in each row. +% \begin{macrocode} + \setcounter{addrlabelcolumns}{\thr@@}% +% \end{macrocode} +% Labels are 70\,mm wide by 37\,mm high. +% \begin{macrocode} + \setlength\addrlabelwidth{70mm}% + \setlength\addrlabelheight{37mm}% +% \end{macrocode} +% We leave 6\,mm of margin between the border of the labels and the +% actual printing. +% \begin{macrocode} + \setlength\addrlabelborder{6mm}% +} +% \end{macrocode} +% The setting for the 105\,$\times$\,37 labels (the default) is +% similar. +% \begin{macrocode} +\DeclareOption{105x37labels}{% + \setcounter{addrlabelrows}{8}% + \setcounter{addrlabelcolumns}{\tw@}% + \setlength\addrlabelwidth{105mm}% + \setlength\addrlabelheight{37mm}% + \setlength\addrlabelborder{6mm}% +} +% \end{macrocode} +% +% \subsection{Option processing} +% +% Nothing special to note here. +% \begin{macrocode} +\ExecuteOptions{a4paper,10pt,oneside,onecolumn,final,% +mediumsubject,uprightsignature,noPS,indent,105x37labels} +\ProcessOptions\relax +% \end{macrocode} +% +% \subsection{Package loading} +% +% In this version of the C.D.P. Bundle, all the original code is +% put in the file \filedir{\letteracdp.cls}, so in the normal operating +% mode no packages need to be loaded. This will change in future +% releases: the code will be split among several packages, to allow +% the final user to request only some features and not the others; +% when this happens, this section will become much longer, in order to +% load all those packages. However, even now it could be necessary to +% require the \packlass{eepic} package, if the user specified the +% \opz{usePS} option. At this stage, the presence of this option can +% be tested for by means of the "\if@use@eepic@" switch. +% \begin{macrocode} +\if@use@eepic@ +% \end{macrocode} +% We check whether the \packlass{eepic} package exists on the +% system: if it does, we load it, otherwise we force the +% "\if@use@eepic@" flag to false and issue a warning. +% \begin{macrocode} + \IfFileExists{eepic.sty}{% + \RequirePackage{eepic}% + }{% + \@use@eepic@false + \ClassWarningNoLine{\@letteracdp}{% + Can't find the eepic package;\MessageBreak + option usePS ignored (converted to noPS)% + }% + }% +\fi +% \end{macrocode} +% +% \subsection{Main code} +% +% ^^A ( paren match +% OK, boys, until now we have just set up a few things; now the real +% fun begins.~\mbox{:-)} Oh, well, actually it will begin in a few lines: +% for now we have to do a little more bit of tedious work.~\mbox{:-(} +% ^^A ) paren match +% +% \subsubsection{More initializations} +% +% The following initializations have not been put in the +% \emph{Initial code} section because it is traditional to put +% them here; moreover, some of them actually require that the code +% for the options has already been executed, so they must be put +% here! +% +% \begin{macro}{\date} +% I was ready to swear that I had copied the following +% redefinition of the "\date" command from the standard +% \packlass{letter} class\ldots{} Anyway, we redefine "\date" in +% order to make the changes to the date local instead of global: +% this is useful if one of the letters has a date which is +% different from the others. An explicative comments is left in +% the code too (because "\date" is a command defined in the +% \LaTeX\ kernel). +% \begin{macrocode} +%% Command \date redefined to make changes to date local. +\def\date#1{\def\@date{#1}} +% \end{macrocode} +% \end{macro} +% +% Usual loading of the suitable \filedir{.clo} file; see the +% documentation of, \emph{e.g.}, the standard \packlass{letter} +% class for explanations about the following three lines of code. +% \begin{macrocode} +\input{size1\@ptsize.clo} +\setlength\lineskip{\p@} +\setlength\normallineskip{\p@} +% \end{macrocode} +% \begin{macro}{\baselinestretch} +% This command can be redefined by the final user to obtain +% double-spaced, triple-spaced, etc.\ output. See the +% \textsl{\LaTeX book} \cite[Subsection~C.3.2]{LaTeXbook}. +% \begin{macrocode} +\renewcommand*\baselinestretch{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\thelabel} +% The printed form of the \texttt{label} counter is changed to include +% also the number of the letter it refers to. Note that we do not +% change "\p@label" (the prefix used only when printing +% \emph{references} to the counter), but actually the command used to +% print the counter itself. +% \begin{macrocode} +\renewcommand*\thelabel{\theletter\@alph\c@label} +% \end{macrocode} +% \end{macro} +% +% The following are the usual constants used to represent typical +% penalty values; again, see the documentation of the standard +% classes. +% \begin{macrocode} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +% \end{macrocode} +% We need five more constants of the same type, but with much +% higher penalty values. They are used in the algorithm that takes +% care of folded letters. +% \begin{macrocode} +\@fold@basepenalty 9000 +\@fold@lowpenalty 9101 +\@fold@medpenalty 9202 +\@fold@highpenalty 9303 +\@fold@toppenalty 9500 +% \end{macrocode} +% +% We now initialize the style parameters that contain the penalties +% inserted around the address blocks and the subject. This values +% will never be used in practice, because usually the address blocks +% and the subject are wrapped up in a \ldots\texttt{presentation} +% environment, and these environments completely redefine the values +% of these style parameters. The values given here will be used only +% when a \texttt{sender}, \texttt{addressee}, or \texttt{subject} +% environment is used without being wrapped in a presentation. These +% values allow a page break without penalty before each of the blocks +% and at the end of the subject, mildly discourage a break after the +% address blocks, and discourage rather strongly a break at an "\and" +% or "\andcc" token. +% \begin{macrocode} +\@b@frompenalty\z@ +\@i@frompenalty\@highpenalty +\@e@frompenalty\@lowpenalty +\@b@topenalty\z@ +\@i@topenalty\@highpenalty +\@e@topenalty\@lowpenalty +\@b@subjpenalty\z@ +\@e@subjpenalty\z@ +% \end{macrocode} +% Unlike the preceding ones, the following style parameter is not +% redefined elsewhere. It is the penalty inserted after +% presentations, and since a presentation typically ends with the +% subject, the following initialization seems quite natural. +% \begin{macrocode} +\@e@prespenalty\@e@subjpenalty +% \end{macrocode} +% +% \subsubsection{Page layout} +% +% The first thing one could begin to find interesting is the code +% for setting up the page layout. To help the reader to understand +% what is going on, fig.~\ref{fig:plo} summarizes the basic page +% layout parameters we are going to speak about.\footnote{If you are +% reading directly the comments in the \filedir{.dtx} file, instead of +% typesetting it with \LaTeX, you might find it difficult to follow +% the forthcoming discussion.} This figure shows the parameters used +% in the case of an A5~sheet of paper: this allows to fit the entire +% figure on the page without having to scale it. +% +% \begin{figure}[tbp] +% \centering +% \setlength{\unitlength}{1mm} +% \begin{picture}(108,200)(-10,0) +% \thinlines +% \put(-20,0) {\line(1,0){148}} +% \put(-20,210){\line(1,0){148}} +% \put(-20,0) {\line(0,1){210}} +% \put(128,0) {\line(0,1){210}} +% \put(10,185){\makebox(88,10)[bl]{\makebox[88mm][s]{^^A +% \kern -1cm +% \setlength\unitlength{.625mm}^^A +% \begin{picture}(32,16)(-3,7.87) +% \thinlines +% \put(8,16){\oval(10,10)[l]} +% \put(8,11){\line(0,1){10}} +% \put(9,11){\framebox(3,20){}} +% \put(18,16){\oval(10,10)[r]} +% \put(18,11){\line(0,1){10}} +% \put(14,1){\framebox(3,20){}} +% \thicklines +% \put(8,16){\oval(16,16)[l]} +% \put(8,8){\line(1,0){5}} +% \put(13,24){\line(1,0){10}} +% \put(8,16){\oval(14,14)[l]} +% \put(8,9){\line(1,0){5}} +% \put(13,23){\line(1,0){10}} +% \put(18,8){\line(1,0){10}} +% \put(18,9){\line(1,0){10}} +% \end{picture}^^A +% \lhnss oordinamento dei {\lhbss D}\kern-.033333em ottorandi di +% {\lhbss P}\kern-.1em adova\enspace\hrulefill\kern-1cm +% }}} +% \put(10,40){\makebox(88,130)[tl]{\begin{minipage}[t]{88mm} +% \vrule height 10pt depth 0pt width 0pt \relax +% Text text text text text text text text text text text text +% text text text text text text text text text text text text. +% \end{minipage}}} +% \put(10,25){\makebox(88,3.514598035146)[tl]{\parbox[t]{88mm}{^^A +% \setlength{\parfillskip}{0pt} +% \noindent\rule{0pt}{10pt}\kern-1cm\hrulefill\kern-1cm\par +% \setlength{\baselineskip}{11pt} +% \hbox to \hsize{\hss\lhrm +% Coordinamento dei Dottorandi e dei Dottori di Ricerca +% dell'Universit\`{a} di Padova +% \hss} +% \hbox to \hsize{\hss +% \lhit World Wide Web:\/ +% \lhtt http://www.dei.unipd.it/\string~assdott/^^A +% \hss} +% }}} +% \linethickness{0.1pt} +% \put(-27,210){\line(1,0){17}} +% \put(-27,195){\line(1,0){125}} +% \put(-27,185){\line(1,0){142}} +% \put(-27,170){\line(1,0){142}} +% \put(-27,40) {\line(1,0){142}} +% \put(-27,25) {\line(1,0){142}} +% \put(10,25) {\line(0,1){192}} +% \put(98,25) {\line(0,1){192}} +% \put(20,185){\line(0,1){37}} +% \put(5,215) {\vector(1,0){5}} +% \put(10,215){\line(1,0){10}} +% \put(55,215){\vector(-1,0){35}} +% \put(55,215){\makebox(0,35)[br]{\strut\ttfamily\bslash @lh@left@margin}} +% \put(63,215) {\vector(1,0){35}} +% \put(63,215){\makebox(0,35)[bl]{\strut\ttfamily\bslash @lh@right@margin}} +% \put(98,215){\line(1,0){10}} +% \put(113,215){\vector(-1,0){5}} +% \put(108,25){\line(0,1){197}} +% \put(0,25) {\line(0,1){12}} +% \put(-5,30){\vector(1,0){5}} +% \put(0,30) {\line(1,0){10}} +% \put(45,30){\vector(-1,0){35}} +% \put(45,30){\makebox(0,35)[br]{\strut\ttfamily\bslash @lh@right@margin}} +% \put(-15,35){\vector(1,0) {15}} +% \put(-5,35) {\vector(-1,0){15}} +% \put(-10,35){\makebox(0,0)[b]{\strut $2\,\mbox{cm}$}} +% \put(-20,200){\line(0,1){22}} +% \put(-10,220){\vector(1,0) {30}} +% \put(10,220) {\vector(-1,0){30}} +% \put(0,220){\makebox(0,0)[b]{\strut $4\,\mbox{cm}$}} +% \put(128,200){\line(0,1){22}} +% \put(113,220){\vector(1,0) {15}} +% \put(123,220){\vector(-1,0){15}} +% \put(118,220){\makebox(0,0)[b]{\strut $2\,\mbox{cm}$}} +% \put(113,195){\vector(0,1) {15}} +% \put(113,200){\vector(0,-1){15}} +% \put(113,197.5){\makebox(0,0)[l]{ $2.5\,\mbox{cm}$}} +% \put(113,175){\vector(0,1) {10}} +% \put(113,180){\vector(0,-1){10}} +% \put(113,177.5){\makebox(0,0)[l]{ $1.5\,\mbox{cm}$}} +% \put(113,30){\vector(0,1) {10}} +% \put(113,35){\vector(0,-1){10}} +% \put(113,32.5){\makebox(0,0)[l]{${}\ge1.5\,\mbox{cm}$}} +% \put(113,10){\vector(0,1) {15}} +% \put(113,15){\vector(0,-1){15}} +% \put(113,12.5){\makebox(0,0)[l]{ $2.5\,\mbox{cm}$}} +% \put(-25,200){\vector(0,1) {10}} +% \put(-25,205){\vector(0,-1){10}} +% \put(-25,202.5){\makebox(0,0)[r]{$\mbox{\ttfamily\bslash topmargin}+1\,\mbox{in}$ }} +% \put(-25,189){\vector(0,1) {6}} +% \put(-25,191){\vector(0,-1){6}} +% \put(-25,190){\makebox(0,0)[r]{{\ttfamily\bslash headheight} }} +% \put(-25,175){\vector(0,1) {10}} +% \put(-25,180){\vector(0,-1){10}} +% \put(-25,177.5){\makebox(0,0)[r]{{\ttfamily\bslash headsep} }} +% \put(-25,100){\vector(0,1) {70}} +% \put(-25,110){\vector(0,-1){70}} +% \put(-25,105){\makebox(0,0)[r]{{\ttfamily\bslash textheight} }} +% \put(-25,30){\vector(0,1) {10}} +% \put(-25,35){\vector(0,-1){10}} +% \put(-25,32.5){\makebox(0,0)[r]{{\ttfamily\bslash footskip} }} +% \put(-10,100){\vector(1,0) {20}} +% \put(0,100) {\vector(-1,0){20}} +% \put(-5,100) {\makebox(0,0)[b]{\parbox[b]{4cm}{\centering +% \strut\texttt{\bslash oddsidemargin}\\ +% or\\ +% \texttt{\bslash evensidemargin}\\ +% ${}+1\,\mbox{in}$\strut +% }}} +% \put(48,100){\vector(1,0) {50}} +% \put(60,100){\vector(-1,0){50}} +% \put(54,100){\makebox(0,0)[b]{\strut\ttfamily\bslash textwidth}} +% \end{picture} +% \caption{Basic page layout parameters} +% \label{fig:plo} +% \end{figure} +% +% Before discussing the page layout parameters, let us make a brief +% digression to illustrate what we are trying to achieve and what +% difficulties we need to solve. We would like that the seal and +% certain other details of the letterhead and the footer appeared in +% fixed positions with respect to the physical edges of the sheet: +% fig.~\ref{fig:plo} shows these fixed distances, explicitly given in +% centimeters, among the others, indicated by their symbolic name. +% This rises a little problem: we want to typeset the letterhead and +% the footer as standard \LaTeX\ headers and footers, but the +% subroutine for the header or the footer installed with a +% "\ps@"\ldots\ declaration is called inside a box of width +% "\textwidth" and aligned with the main body of text. In other +% words, when typesetting the header, or the footer, one has no direct +% means to refer to the page boundaries: the only available reference +% points are the margins of the main body of text. For this reason, +% it is necessary to precompute the offset from the text margins of +% the various points that we want to appear in fixed positions. For +% instance, looking at fig.~\ref{fig:plo}: if we know that the left +% margin of the text runs exactly at \( 3\,\mbox{cm} \) from the left +% border of the sheet, and we want the left edge of the writing +% ``oordinamento dei Dottorandi di Padova'' to lie at exactly \( +% 4\,\mbox{cm} \) from this border, we need to set the +% "\@lh@left@margin" parameter to \( 1\,\mbox{cm} \), to indicate that +% the left edge of the writing should lie \( 1\,\mbox{cm} \) to the +% right of the left text margin. +% +% But this is only half of the story; the other half is best +% illustrated with an example. Suppose you are typesetting on A4~paper, +% using 10 points fonts (these are precisely the settings chosen by +% default). If you calculate the text margins and the text width +% following the recommendations given by the authors of \LaTeX\ for +% this particular combination of paper and font sizes, you will +% discover that the left margin of the main text runs at, say, \( +% 4.2\,\mbox{cm} \) from the left border of the sheet. (I~don't want +% to compute the exact value just now, since this is only an example, +% but I know that the actual value is very close to this, so the +% example is meaningful.) If, according to what we have just said, you +% set "\@lh@left@margin" to \( -0.2\,\mbox{cm} \), you will end with +% the writing ``oordinamento\ldots'' that fails to be aligned with the +% main text by just \( 2\,\mbox{mm} \)---which is awful to see. +% Clearly, in a case like this it is better to foresee that +% "\@lh@left@margin" is going to receive a small value, and to adjust +% the left margin of the main body of text to \( 4\,\mbox{cm} \), so +% that "\@lh@left@margin" can be set to \( 0\,\mbox{pt} \). This is +% just what the class does, and the final visual effect is, let +% me say, pretty good indeed\ldots +% +% To sum up, the strategy for setting the page layout parameters +% should be as follows: +% +% \begin{enumerate} +% +% \item\label{plostep1} +% Compute the main text width and margins according to usual \LaTeX\ +% recommendations. +% +% \item\label{plostep2} +% Figure out whether the margins computed in step~\ref{plostep1} fall +% too close to some of the points of the letterhead that we want to +% stay in fixed position, and, if it is so, adjust them so that they +% are exactly aligned with those positions. +% +% \item\label{plostep3} +% Allow the user to change the values computed in step~\ref{plostep2}, +% in case (s)he needs to set the margins to some special value. +% +% \item\label{plostep4} +% Compute the offset of those fixed points from one of the text +% margin (\emph{e.g.}, "\@lh@left@margin" in the example above), using +% whatever values for the margins are in effect after +% step~\ref{plostep3}, in such a way to be able to correctly position +% the abovementioned points using only the text margins as a reference. +% +% \end{enumerate} +% +% Of course, step~\ref{plostep3} occurs in the preamble; this means +% that step~\ref{plostep4} must be performed during the +% "\AtBeginDocument" hook. +% +% As already said, the fixed distances of the layout design are all +% shown in fig.~\ref{fig:plo}; from this distances, from the relations +% shown in the figure, and from the additional information that the +% main body of text should be horizontally centered between the edges +% of the sheet, it is possible to deduce the values of almost all the +% basic page layout parameters once the value for "\textwidth" has +% been (cleverly) chosen. Some of these parameters are readily +% readable: for instance, fig.~\ref{fig:plo} clearly states that +% "\headsep" should be equal to \( 1.5\,\mbox{cm} \); other parameters +% may require some computations, and may even not be completely +% determined: for instance, from the figure you see that \( +% "\topmargin"+"\headheight" = 2.5\,\mbox{cm}-1\,\mbox{in} \), but you +% cannot tell what the single values of "\topmargin" and "\headheight" +% are. In the last case, the inherent uncertainty does no harm, +% because the "\headheight" parameter is not used to position any +% graphical element of the letterhead: it suffices to assure that it +% allows enough room for the other, ordinary running heads; in +% practice, that there is room for a line of text in the largest +% supported font size (\emph{i.e.}, 12~points). Setting "\headheight" +% to \( 1\,\mbox{cm} \) definitely satisfies this requisite, and has the +% nice additional aesthetical advantage that the lines delimiting the +% head run exactly along the outer strokes of the ``C'' in the seal. +% (Note that decreasing or increasing the value of "\headheight" does +% not alter the dimensions of the seal: the dimensions of the seal are +% fixed, and the seal appears as a box of null width and height.) +% +% We shall now discuss the parameters shown in fig.~\ref{fig:plo} +% one by one. Of course, many of them are standard \LaTeX\ page +% layout parameters, and do not require particular explanations. +% +% The first decision I took was to locate the lower right corner of +% the seal in a fixed position \( 4\,\mbox{cm} \) across and \( +% 2.5\,\mbox{cm} \) down from the upper left corner of the page. The +% value of \( 4\,\mbox{cm} \) was chosen because it was twice the +% design width of the seal; $2.5$~is the golden section of~$4$. I then +% placed the upper margin of the main body of text \( 4\,\mbox{cm} +% \) from the upper edge of the paper. Also, the rule found to the +% right of the letterhead extends up to a distance of \( 2\,\mbox{cm} +% \) from the right edge of the paper; the rule of the footer is +% aligned with that of the letterhead on the right, and on the left it +% extends to a symmetric distance. From these fixed setting, one +% deduces the other parameters: let us see how. +% +% \begin{description} +% +% \renewcommand*\makelabel[1]{\hspace\labelsep\normalfont +% \texttt{\bslash #1}.} +% +% \item[textwidth] +% This parameter is first of all initialized in the standard +% \filedir{.clo} files: this assures that the standard \LaTeX\ initial +% value is used (cf.~step~\ref{plostep1} above). Nevertheless, the +% value can be subsequently adjusted as explained in +% step~\ref{plostep2}, to achieve a better alignment with some points +% of the letterhead. +% +% \item[oddsidemargin] +% This is set to \( \frac{1}{2}("\paperwidth"-"\textwidth") - +% 1\,\mbox{in} \), to assure that the main body of text is +% horizontally centered on the page. Note that \LaTeX\ measures +% "\oddsidemargin" from the \TeX\ origin, and not from the left edge +% of the paper. +% +% \item[evensidemargin] +% This is set equal to "\oddsidemargin". +% +% \item[@lh@left@margin] +% This is set to \( 4\,\mbox{cm}-"\oddsidemargin"-1\,\mbox{in} \); +% this setting is done at ``"\begin{document}"-time'' +% (cf.~step~\ref{plostep4} above), to allow the user to change +% "\oddsidemargin" in the preamble (cf.~step~\ref{plostep3} above). +% It can be useful to remark that the amount shown in +% fig.~\ref{fig:plo} is positive when measured according to the +% sign convention used internally by the code. +% +% \item[@lh@right@margin] +% This is set to \( 2\,\mbox{cm}-"\oddsidemargin"-1\,\mbox{in} \); +% this setting is done at ``"\begin{document}"-time'' +% (cf.~step~\ref{plostep4} above), to allow the user to change +% "\oddsidemargin" in the preamble (cf.~step~\ref{plostep3} above). +% It can be useful to remark that the amounts shown in +% fig.~\ref{fig:plo} are negative when measured according to the sign +% convention used internally by the code. +% +% \item[topmargin] +% This is set to \( 2.5\,\mbox{cm}-1\,\mbox{in} \) (because \LaTeX\ +% measures "\topmargin" from the \TeX\ origin, and not from the +% upper edge of the paper). +% +% \item[headheight] +% This is set to \( 1\,\mbox{cm} \). +% +% \item[headsep] +% This is set to \( 1.5\,\mbox{cm} \). +% +% \item[textheight] +% To avoid underfull "\vbox"es when typesetting pages that contain +% no glue besides the "\baselineskip" glue (that usually has no +% ability to stretch or shrink), it is highly recommendable to +% set "\textheight" to an integer number of text lines, that is, +% to set it to \( "\topskip" + n\cdot"\baselineskip" \), where +% $n$~is a natural number. We do this, choosing $n$ to be the +% largest natural number such that +% \begin{equation} +% "\topskip" + n\cdot"\baselineskip" \le "\paperheight"-8\,\mbox{cm} +% \mbox{.} +% \label{eq:textheight} +% \end{equation} +% +% \item[footskip] +% This is set to \( "\paperheight" - "\textheight" - +% 6.5\,\mbox{cm} \): this assures that the baseline of the footer +% (along which the rule is traced) runs at \( 2.5\,\mbox{cm} \) +% from the bottom edge of the paper. +% +% \end{description} +% +% In the case of "\footskip", note that the baseline of the footer +% actually means\ldots\ the baseline of the footer! I mean, normal +% footers (like, for instance, page numbers) are typeset with the +% baseline at exactly \( 2.5\,\mbox{cm} \) from the bottom edge of the +% paper; but the footer containing the address of the +% \emph{Coordinamento} is treated differently, in that it is the +% horizontal rule which is aligned with the baseline. +% +% OK, after all this preliminary blather, we are now ready to return +% to the code. Since we have already given many explanations, the +% following comments will be rather terse. +% +% We begin to perform some of the initialization described above. +% \begin{macrocode} +\setlength\headheight{1cm} +\setlength\topmargin{1.5cm} +\addtolength\topmargin{-1in} +\setlength\headsep{1.5cm} +% \end{macrocode} +% The following settings pertaining to marginal notes and footnotes +% are simply copied from the standard \packlass{letter} class: we have +% no reason to change them. +% \begin{macrocode} +\setlength\marginparsep {11\p@} +\setlength\marginparpush{5\p@} +\setlength\footnotesep{12\p@} +\setlength{\skip\footins}{10\p@ plus 2\p@ minus 4\p@} +% \end{macrocode} +% +% Everything we have been saying above was for \LaTeXe\footnote{This +% term should no longer be used, however: what was once known as +% \LaTeXe\ has now become \LaTeX\ \emph{tout-court}.}. No attempt is +% made to support any users who happened to be still using the +% Palaeolithic \LaTeX~2.09: we simply honor the standard convention +% according to which certain basic page layout parameters must be set to +% fixed values in compatibility mode. Note that the alignment of +% those certain special points of the letterhead to fixed positions +% will still work even in this case, but the placement of the main +% body of text will be awful, in the best hypothesis. Note also that, +% in general, "\textheight" will not at all be of the form \( +% "\topskip" + n\cdot "\baselineskip" \). +% \begin{macrocode} +\if@compatibility + \setlength\oddsidemargin{53pt} + \setlength\evensidemargin{53pt} + \setlength\marginparwidth{90pt} + \setlength\textwidth{365\p@} + \setlength\textheight{505\p@} + \setlength\footskip{25\p@} +\else +% \end{macrocode} +% +% Very well, now that the have get rid of that bothersome +% parenthesis of compatibility mode, we can go on with our +% initialization code. We now take care of "\textwidth" and +% "\oddsidemargin". These parameters have already been initialized in +% a \filedir{.clo} file---and this was step~\ref{plostep1}, see above. +% Now we take care of step~\ref{plostep2}. Put +% \[ +% "\@tempdima" = \textit{total\_left\_margin} := +% {"\paperwidth"-"\textwidth"\over 2} +% \mbox{.} +% \] +% \begin{macrocode} + \setlength\@tempdima{\paperwidth} + \addtolength\@tempdima{-\textwidth} + \setlength\@tempdima{.5\@tempdima} +% \end{macrocode} +% If \( \textit{total\_left\_margin} < 3.25\,\mbox{cm} \), that is, +% if the left margin measured from the paper edge is too narrow, then +% we set "\oddsidemargin" to \( 3\,\mbox{cm} \), thereby aligning the +% left margin with the centre of the seal. +% \begin{macrocode} + \ifdim\@tempdima < 3.25cm % align to centre of logo + \setlength\oddsidemargin{3cm} +% \end{macrocode} +% If \( 3.25\,\mbox{cm} \le \textit{total\_left\_margin} < +% 4.5\,\mbox{cm} \), that is, if the left margin measured from the paper +% edge is sufficiently close to the predetermined position of the right +% edge of the seal, then we align the former to the latter, by +% setting "\oddsidemargin" to~\( 4\,\mbox{cm} \). +% \begin{macrocode} + \else\ifdim\@tempdima < 4.5cm % align to right edge of logo + \setlength\oddsidemargin{4cm} +% \end{macrocode} +% In all other cases, we set "\oddsidemargin" to the computed +% $\textit{total\_left\_margin}$. +% \begin{macrocode} + \else % keep the computed margin + \setlength\oddsidemargin{\@tempdima} + \fi\fi +% \end{macrocode} +% Whatever value we have set "\oddsidemargin" to, we reset +% "\textwidth" according to it. +% \begin{macrocode} + \setlength\textwidth{\paperwidth} + \addtolength\textwidth{-2\oddsidemargin} +% \end{macrocode} +% Of course, we must not forget to subtract \( 1\,\mbox{in} \) from +% "\oddsidemargin": we shall do this later. +% +% The following segment of code sets the width of marginal +% paragraphs (marginal notes). We first try to use up all the +% margin, leaving only a gap of "\marginparsep" (already +% initialized above) on the text side, and of \( 7\,\mbox{mm} \) +% from the paper edge. The latter should suffice with modern laser +% printers, but other printers might have more restrictive +% mechanical constraints that can affect their ability to print so +% close to the paper edge: let's hope everything works\ldots +% \begin{macrocode} + \setlength\marginparwidth{\oddsidemargin} + \addtolength\marginparwidth{-\marginparsep} + \addtolength\marginparwidth{-7mm} +% \end{macrocode} +% However, with some paper formats (\emph{e.g.}, with landscape +% orientation) the above setting may yield very wide marginal notes, +% which is undesirable. Therefore, if the value just set exceeds one +% third of "\textwidth", we cut it down to this value, provided that +% the latter is at least \( 90\,\mbox{pt} \). +% \begin{macrocode} + \setlength\@tempdima{.33333\textwidth} + \ifdim\marginparwidth > \@tempdima + \ifdim\@tempdima < 90pt\else + \setlength\marginparwidth{\@tempdima} + \fi + \fi +% \end{macrocode} +% +% All the main horizontal page layout parameters have been set. We +% can now convert "\oddsidemargin" into \TeX's coordinate system: we +% did not do this before to ease other computations. We also set +% "\evensidemargin". +% \begin{macrocode} + \addtolength\oddsidemargin{-1in} + \setlength\evensidemargin{\oddsidemargin} +% \end{macrocode} +% +% We turn now to vertical parameters. We set "\textheight" +% according to~\eqref{eq:textheight} and "\footskip" as stated above. +% First step: +% \[ +% "\@tempdima" = \textit{max\_desired\_text\_height} +% := "\paperheight"-8\,\mbox{cm} +% \mbox{.} +% \] +% \begin{macrocode} + \setlength\@tempdima{\paperheight} + \addtolength\@tempdima{-8cm} + \setlength\footskip{\@tempdima} +% \end{macrocode} +% Remove the first line, which is only "\topskip" high: +% \begin{macrocode} + \addtolength\@tempdima{-\topskip} +% \end{macrocode} +% Set "\textheight" to the largest possible integer multiple of +% "\baselineskip": +% \begin{macrocode} + \divide\@tempdima\baselineskip + \@tempcnta=\@tempdima + \setlength\textheight{\@tempcnta\baselineskip} +% \end{macrocode} +% Put in again the first line: +% \begin{macrocode} + \addtolength\textheight{\topskip} +% \end{macrocode} +% "\footskip" is still equal to \( "\paperheight"-8\,\mbox{cm} \); +% finish its initialization (cf.~above): +% \begin{macrocode} + \addtolength\footskip{-\textheight} + \addtolength\footskip{1.5cm} +% \end{macrocode} +% +% The following "\fi" goes with "\if@compatibility": +% \begin{macrocode} +\fi +% \end{macrocode} +% +% \begin{macro}{\computelongindentation} +% As explained above, "\longindentation" is a parameter that should +% set to roughly half the value of "\textwidth", with optional +% fine-tuning for better graphical results. The setting is made +% by the "\computelongindentation" macro, which is available also +% to the final user: if (s)he alters the value of "\textwidth", +% then (s)he should also call this macro to update the value of +% "\longindentation". The macro takes care of all the necessary +% fine-tuning. +% \begin{macrocode} +\newcommand*\computelongindentation{% +% \end{macrocode} +% More precisely, "\longindentation" is set as follows: the first +% attempt is to set it equal to the width of the writing +% ``oordinamento dei Dottorandi di Padova'' ("\@oordinamento@box" +% is initialized below), because this makes for a great visual +% effect\ldots +% \begin{macrocode} + \setlength\@tempdima{\wd\@oordinamento@box}% + \setlength\longindentation{\@tempdima}% +% \end{macrocode} +% \ldots but this ideal value will only be retained if it falls within +% the closed range \( [\frac{1}{2}"\textwidth"-2.5\,\mbox{mm}, +% \frac{1}{2}"\textwidth"+12.5\,\mbox{mm}] \), that is, sufficiently +% close to \( \frac{1}{2}"\textwidth" \) (which is the case for the +% most common page formats, like \opz{a4paper}); otherwise, \( +% \frac{1}{2}"\textwidth" \) will be used. +% \begin{macrocode} + \addtolength\@tempdima{2.5mm}% + \ifdim\@tempdima<.5\textwidth + \setlength\longindentation{.5\textwidth}% + \else + \addtolength\@tempdima{-12.5mm}% + \ifdim\@tempdima>.5\textwidth + \setlength\longindentation{.5\textwidth}% + \fi + \fi +% \end{macrocode} +% A final check is also made to assure that "\longindentation" falls +% within the closed range \( [\frac{4}{10}"\textwidth", +% \frac{6}{10}"\textwidth"] \). +% \begin{macrocode} + \ifdim\longindentation<.4\textwidth + \setlength\longindentation{.5\textwidth}% + \else\ifdim\longindentation>.6\textwidth + \setlength\longindentation{.5\textwidth}% + \fi\fi +} +% \end{macrocode} +% \end{macro} +% +% The following part of the code deals with initializations the have +% to be deferred until the "\begin{document}" hook. The most complex +% of these is the check about the "\foldedheight" parameter. Recall +% that this parameter, which is initialized to a default value by the +% code which handles the \ldots\opz{paper} options, can be altered by +% the user at any time, but has to be converted in an internal form +% afterwards; before making the conversion, we need to check that the +% value lies in the prescribed range. If this is not the case, we +% issue a warning and set the "\if@do@fold@" switch to false: the +% following two macros, which are used below, take care of this, +% providing two different types of warning. They take two arguments, +% used to modify the warning printed to the user: argument \#1 will be +% either the word ``short'' or the word ``tall'', and argument \#2 +% will contain text giving further help. +% +% \begin{macro}{\@folding@ht@warn} +% This macro is invoked when the value of "\foldedheight" is found +% to be wrong in the check that is made during the "\AtBeginDocument" +% hook. +% \begin{macrocode} +\@ifdefinable\@folding@ht@warn{\def\@folding@ht@warn#1#2{% + \ClassWarningNoLine{\@letteracdp}{% + \protect\foldedheight\space ignored: + it is too #1!\MessageBreak + (#2.)\MessageBreak + Folded letters will be shunned% + }% + \@do@fold@false +}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@folding@ht@NO} +% This macro is used by the "\checkfoldedheight" command. +% \begin{macrocode} +\@ifdefinable\@folding@ht@NO{\def\@folding@ht@NO#1#2{% + \ClassWarning{\@letteracdp}{% + Bad value of \protect\foldedheight: it is too #1!\MessageBreak + (#2.)\MessageBreak + Therefore, at present folded letters are _shunned_;\MessageBreak + warning issued% + }% + \@do@fold@false +}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@folding@ht@OK} +% The following, instead, is the macro used to inform the user that +% the value of "\foldedheight" is correct. It sets the "\if@do@fold@" +% switch to true, too. +% \begin{macrocode} +\@ifdefinable\@folding@ht@OK{\def\@folding@ht@OK{% + \ClassWarning{\@letteracdp}{% + Checked \protect\foldedheight, + current value is acceptable.\MessageBreak + Therefore, at present folded letters are _allowed_;\MessageBreak + warning issued% + }% + \@do@fold@true +}}% +% \end{macrocode} +% \end{macro} +% +% Uncommented code starts here. +% \begin{macrocode} +\@ifdefinable\@checkfoldedheight{\def\@checkfoldedheight#1#2{% + \ifdim\foldedheight>\z@ + \ifdim\foldedheight>.6\paperheight + #1{tall}{% action to take if value is bad + It must not exceed 0.6\protect\paperheight% + }% + \else + \setlength\@folding@ht{\foldedheight}% + \addtolength\@folding@ht{-1in}% + \addtolength\@folding@ht{-\topmargin}% + \addtolength\@folding@ht{-\headheight}% + \setlength\@lh@folding@ht{-\@folding@ht}% + \addtolength\@folding@ht{-\headsep}% + \ifdim\@folding@ht<2.5cm + #1{short}{% action to take if value is bad + At least 2cm _of_text_ and 0.5cm of margin\MessageBreak + must be allowed above the folding% + }% + \else + \setlength\@above@folding@margin{1cm}% + \setlength\@above@folding@shrink{5mm}% + \setlength\@below@folding@skip{5mm}% + \dimen4 .5\baselineskip + \dimen@ \@folding@ht + \advance\dimen@ \@below@folding@skip + \advance\dimen@ -\topskip + \dimen@ii -\dimen@ + \divide\dimen@ \dimen4% + \count@ \dimen@ + \advance\dimen@ii \count@\dimen4% + \addtolength\@below@folding@skip{\dimen@ii}% + \addtolength\@folding@ht{-\@above@folding@margin}% + #2% action to take if value is OK + \fi + \fi + \else + \@do@fold@false + \fi +}} +\newcommand*\checkfoldedheight{% + \@checkfoldedheight\@folding@ht@NO\@folding@ht@OK +} +\AtBeginDocument{% + \setlength\@lh@left@margin{4cm}% + \addtolength\@lh@left@margin{-1in}% + \addtolength\@lh@left@margin{-\oddsidemargin}% + \setlength\@lh@right@margin{\@lh@left@margin}% + \addtolength\@lh@right@margin{-2cm}% + \@checkfoldedheight\@folding@ht@warn\@do@fold@true + \let\@folding@ht@warn\@undefined +} +\sbox\@oordinamento@box{% + \@lh@nss oordinamento dei {\@lh@bss D}\kern-.033333em ottorandi di + {\@lh@bss P}\kern-.1em adova\enspace +} +\computelongindentation +\newcommand*\standardvertspaces{% + \setlength\aboveaddressvspace {\medskipamount}% + \@msetlength\andaddressvspace {2}{\medskipamount}% + \@msetlength\belowaddressvspace {3}{\medskipamount}% + \setlength\abovesubjectvspace {\medskipamount}% + \setlength\presubjectvspace {\medskipamount}% + \@msetlength\belowsubjectvspace {3}{\medskipamount}% + \@msetlength\abovesignaturevspace {6}{\medskipamount}% + \setlength\abovesignatureshortvspace{\bigskipamount}% + \setlength\belowsignaturevspace {\bigskipamount}% + \@msetlength\belowpresentationvspace{3}{\medskipamount}% +} +\setlength\senderindentation {\z@} +\setlength\senderwidth {\textwidth} +\setlength\addresseeindentation{\z@} +\setlength\addresseewidth {\textwidth} +\setlength\signatureindentation{\z@} +\setlength\signaturewidth {\textwidth} +\standardvertspaces +% \end{macrocode} +% +% \subsubsection{Page styles} +% +% \begin{macrocode} +\newcommand*{\automark}{\let\@mkboth\markboth} +\newcommand*{\usermark}{\let\@mkboth\@gobbletwo} +\automark % default is to put page no. and addressee in the header +%% We need to change even the definition of the standard page styles. +\def\ps@empty{% + \let\@oddhead\@empty + \let\@evenhead\@empty + \let\@oddfoot\@empty + \let\@evenfoot\@empty +} +\def\ps@plain{% + \let\@oddhead\@empty + \let\@evenhead\@empty + \let\@oddfoot\@centred@folio + \let\@evenfoot\@centred@folio +} +\def\ps@firstpage{% + \let\@oddhead\@empty + \let\@evenhead\@empty + \let\@oddfoot\@first@foot + \let\@evenfoot\@centred@folio +} +\def\ps@foldedpage{% + \def\@oddhead{\hfill\@folding@tag}% + \let\@evenhead\@empty + \let\@oddfoot\@first@foot + \let\@evenfoot\@centred@folio +} +\def\ps@letterhead{% + \let\@oddhead\@cdp@head + \let\@evenhead\@empty + \let\@oddfoot\@centred@folio + \let\@evenfoot\@centred@folio +} +\def\ps@firstletterhead{% + \let\@oddhead\@cdp@head + \let\@evenhead\@empty + \let\@oddfoot\@cdp@foot + \let\@evenfoot\@centred@folio +} +\def\ps@foldedletterhead{% + \def\@oddhead{\@cdp@head\@folding@tag}% + \let\@evenhead\@empty + \let\@oddfoot\@cdp@foot + \let\@evenfoot\@centred@folio +} +\def\ps@logo{% + \def\@oddhead{\@cdp@logo\hfill}% + \let\@evenhead\@empty + \let\@oddfoot\@centred@folio + \let\@evenfoot\@centred@folio +} +\def\ps@headings{% + \automark + \let\@oddhead\@r@head + \let\@evenhead\@l@head + \let\@oddfoot\@centred@folio + \let\@evenfoot\@centred@folio +} +\def\ps@logoheadings{% + \automark + \def\@oddhead{\@cdp@logo\@r@head}% + \let\@evenhead\@l@head + \let\@oddfoot\@centred@folio + \let\@evenfoot\@centred@folio +} +\def\ps@myheadings{% + \usermark + \let\@oddhead\@r@head + \let\@evenhead\@l@head + \let\@oddfoot\@centred@folio + \let\@evenfoot\@centred@folio +} +\def\ps@logomyheadings{% + \usermark + \def\@oddhead{\@cdp@logo\@r@head}% + \let\@evenhead\@l@head + \let\@oddfoot\@centred@folio + \let\@evenfoot\@centred@folio +} +\def\ps@letterheadnpn{% + \let\@oddhead\@cdp@head + \let\@evenhead\@empty + \let\@oddfoot\@empty + \let\@evenfoot\@empty +} +\def\ps@logonpn{% + \def\@oddhead{\@cdp@logo\hfill}% + \let\@evenhead\@empty + \let\@oddfoot\@empty + \let\@evenfoot\@empty +} +\@ifdefinable\@centred@folio{\def\@centred@folio{% + \reset@font\hfil\thepage\hfil +}} +\@ifdefinable\@l@head{\def\@l@head{% + \reset@font\slshape\hfil\ignorespaces\leftmark\unskip\/\hfil +}} +\@ifdefinable\@r@head{\def\@r@head{% + \reset@font\slshape\hfil\ignorespaces\rightmark\unskip\/\hfil +}} +\@ifdefinable\@first@foot{\def\@first@foot{% + \reset@font + \raisebox{-24\p@}[\z@]{% + \hb@xt@\textwidth{% + \ifcase \@ptsize\relax + \normalsize + \or + \small + \or + \footnotesize + \fi + \thesenderlocation \hfill \thesenderphone + }% + }\hss +}} +\@ifdefinable\@folding@tag{\def\@folding@tag{% + \if@do@fold@ + \raisebox{\@lh@folding@ht}[\z@][\z@]{% + \makebox[\z@][l]{% + \dimen@ -\@lh@right@margin + \advance\dimen@ 1cm% + \kern\dimen@ \vbox{% + \kern -.1\p@ + \hrule \@height .1\p@ \@depth .1\p@ \@width 5mm% + \kern -.1\p@ + }% + }% + }% + \fi +}} +% \end{macrocode} +% +% \subsubsection{Macros for drawing the CDP seal} +% +% \begin{macrocode} +\savebox\@logo@box@base[\z@][r]{\setlength\unitlength{.625mm}% + \begin{picture}(32,16)(-3,7.87)% + \put(8,16){\oval(10,10)[l]}% + \put(8,11){\line(0,1){10}}% + \put(9,11){\framebox(3,20){}}% + \put(18,16){\oval(10,10)[r]}% + \put(18,11){\line(0,1){10}}% + \put(14,1){\framebox(3,20){}}% + \thicklines + \put(8,16){\oval(16,16)[l]}% + \put(8,8){\line(1,0){5}}% + \put(13,24){\line(1,0){10}}% + \put(8,16){\oval(14,14)[l]}% + \put(8,9){\line(1,0){5}}% + \put(13,23){\line(1,0){10}}% + \end{picture}% +}% +\savebox\@logo@box@addS[\z@][r]{\setlength\unitlength{.625mm}% + \begin{picture}(32,16)(-3,7.87)% + \thicklines + \put(18,8){\line(1,0){8}}% + \put(18,9){\line(1,0){8}}% + \end{picture}% +}% +\savebox\@logo@box@addL[\z@][r]{\setlength\unitlength{.625mm}% + \begin{picture}(32,16)(-3,7.87)% + \thicklines + \put(18,8){\line(1,0){10}}% + \put(18,9){\line(1,0){10}}% + \end{picture}% +}% +\@ifdefinable\@logo@overlay{\def\@logo@overlay{% + \kern\@lh@left@margin + \copy\@logo@box@base \copy +}} +\@ifdefinable\@cdp@logo{\def\@cdp@logo{% + \@logo@overlay\@logo@box@addS +}} +\@ifdefinable\@cdp@head{\def\@cdp@head{% + \@logo@overlay\@logo@box@addL + \copy\@oordinamento@box \hrulefill \kern\@lh@right@margin +}} +\setbox\@name@and@WWW@box = \vtop{% + \baselineskip 11\p@ + \hb@xt@\z@{\hss \@lh@rm\Coordinamento \hss}% + \hb@xt@\z@{% + \hss + \@lh@it World Wide Web:\/ + \@lh@tt \CoordinamentoWWW + \hss + }% +} +\@ifdefinable\@cdp@foot{\def\@cdp@foot{% + \reset@font + \setlength\@tempdima{\textwidth}% + \addtolength\@tempdima{-2\@lh@right@margin}% + \hss\parbox[t]{\@tempdima}{% + \parfillskip\z@skip + \noindent\hrulefill\@@par + \baselineskip 11\p@ + \hb@xt@\hsize{\hfil\copy\@name@and@WWW@box\hfil}% + }\hss +}} +% \end{macrocode} +% +% \subsubsection{``Letter-making'' environments} +% +% \begin{macrocode} +\newcommand*\name [1]{\def\thesendername{#1}} +\newcommand \signature[1]{\def\thesendersignature{#1}} +\newcommand \address [1]{\def\thesenderaddress{#1}} +\newcommand \location [1]{\def\thesenderlocation{#1}} +\newcommand*\telephone[1]{\def\thesenderphone{#1}} +\newcommand*\makelabels{% + \AtBeginDocument{% + \def\@beginlabels{\begin{labels}}% + \def\@beginlabelgroup{\begin{labelgroup}}% + \let\@mlabel\basemlabel + \def\@endlabelgroup{\end{labelgroup}}% + \def\@endlabels{\end{labels}}% + \if@filesw + \immediate\write\@mainaux{\string\@beginlabels}\fi}% + \AtEndDocument{% + \if@filesw\immediate\write\@mainaux{\string\@endlabels}\fi}} +\@onlypreamble\makelabels +\newcommand*\cleardoubleemptypage{\par + \onecolumn + \if@twoside \ifodd\c@page \else + \thispagestyle{empty}\null\newpage + \fi\fi +} +\@ifdefinable\@safe@space{\def\@safe@space#1#2{% + \setbox\z@\hbox{\ignorespaces #1\unskip}% + \ifdim\wd\z@>\z@ + \unhbox\z@ #2% + \else + \unhbox\z@ + \fi +}} +% \end{macrocode} +% +% \begin{environment}{baseletter} +% \changes{0.31}{2001 Dec 01}{Reintroduced the first mandatory argument +% to hold local initializations} +% All the ``letter-making'' environments are based upon this one, +% which is the lowest-level one. Its purpose is to take the basic +% actions that are needed to begin and end every kind of letter. In +% this version of the code it takes two arguments (this has changed +% several times among different releases), which are meant to contain +% code that performs any custom initialization required by the +% higher-level environments (or by the user, if this environment is +% called directly by the user). The code passed in~"#1" is executed +% before the core initializations provided by "baseletter", but inside +% the group implied by this environment; the code passed in~"#2" is +% executed as the last thing. Other arguments will be picked up by the +% "\x@baseletter" or "\y@baseletter" macro. +% \begin{macrocode} +\newenvironment{baseletter}[2]{% + #1% +% \end{macrocode} +% Save~"#2" in a token register for later execution: +% \begin{macrocode} + \@lett@decl{#2}% +% \end{macrocode} +% Obvious initializations; note that "\cleardoubleemptypage" calls +% "\onecolumn". +% \begin{macrocode} + \cleardoubleemptypage + \c@page\@ne + \refstepcounter{letter}% + \typeout{Letter \number\c@letter}% + \interlinepenalty 200 % smaller than the TeXbook value + \parskip\medskipamount +% \end{macrocode} +% Set "\parindent" according to the option specified by the user. +% \begin{macrocode} + \ifx\@indent@pref L\else + \ifx\@indent@pref N% + \setlength\parindent{\z@}% + \else + \ifdim .1\textwidth>2pc + \setlength\parindent{.1\textwidth}% + \else + \setlength\parindent{2pc}% + \fi + \fi + \fi +% \end{macrocode} +% Continue initialization in two different ways, according to the +% presence or not of the first optional argument. +% \begin{macrocode} + \@ifnextchar[\x@baseletter\y@baseletter % ] bracket matching +}{% +% \end{macrocode} +% Code for ending letters. "\stopletter" is a hook reserved to the +% user; it is executed \emph{before} the last page of the letter is +% finished off. +% \begin{macrocode} + \stopletter +% \end{macrocode} +% Now ensure vertical mode and add a zero-cost page break \emph{above} +% the vertical glue (possibly) present at the end of the page: this +% allows to discard the glue after the signature if this is needed to +% fit the letter in the page, even if "\stopbreaks" is in effect after +% the signature. Should this be a ``"-\@M"''-cost page break instead? +% (Probably yes, but not sure of all implications, so leave it this +% way.) +% \begin{macrocode} + \@@par\addpenalty\z@ + \clearpage +% \end{macrocode} +% The following is a hook reserved to extensions of the +% \packlass{letteracdp} class; it is used, for instance, by +% \packlass{articoletteracdp}. Note that it is executed \emph{after} +% ejecting the last page of the letter. +% \begin{macrocode} + \@end@letter@hook +% \end{macrocode} +% Write to the \filedir{.aux} file the data for the address labels. +% This is rather tricky because we can have multiple addressees +% \emph{and} multiple senders. +% \begin{macrocode} + \if@filesw + \begingroup +% \end{macrocode} +% Assure that "\\", "~" and "\protect"'ed tokens are written literally +% instead of being expanded: +% \begin{macrocode} + \let\\\relax + \let ~\relax + \let\protect\@unexpandable@protect +% \end{macrocode} +% ^^A { bracket match +% The following hack causes "\and" (and "\andcc") to expand into +% "}\@gobble{" +% ^^A } bracket match +% \begin{macrocode} + \def\and{% + \iffalse{\fi}\expandafter\@gobble\expandafter{\iffalse}\fi + }% + \let\andcc\and +% \end{macrocode} +% "\returnaddress" contains the addresses of the senders, separated by +% "\and"; thanks to the above hack, only the first is saved into +% "\@cdp@reserved", and the others are "\@gobble"'d. +% \begin{macrocode} + \edef\@cdp@reserved{{\returnaddress}}% + \def\and{% + \iffalse{\fi}^^J% + \string\@mlabel{\@cdp@reserved}{\iffalse}\fi + }% + \let\andcc\and + \immediate\write\@auxout{% + \string\@beginlabelgroup ^^J% + \string\@mlabel + {\@cdp@reserved}{\theaddresseeaddress}^^J% + \string\@endlabelgroup + }% + \endgroup + \fi +} +% \end{macrocode} +% \end{environment} +% +% Back to uncommented code. +% \begin{macrocode} +\@ifdefinable\x@baseletter{\long\def\x@baseletter[#1]#2{% + \def\theaddresseename{#1}% + \def\theaddresseeaddress{#2}% + \@baseletter +}} +\@ifdefinable\y@baseletter{\long\def\y@baseletter#1{% + \@cut@andcc #1\andcc @@@% + \def\theaddresseeaddress{#1}% + \@baseletter +}} +\newcommand\@baseletter[1][]{% + \def\thesubject{#1}% + \if@twoside + \@mkboth{% + \noexpand\@safe@space\noexpand\headtoname\noexpand\enspace + \ignorespaces\theaddresseename\unskip \hfill \noexpand\@date + }{% + \noexpand\@date \hfill + \noexpand\@safe@space\noexpand\headtoname\noexpand\enspace + \ignorespaces\theaddresseename % \unskip put by \@?@head + }% + \else + \@mkboth{}{% + \noexpand\@safe@space\noexpand\headtoname\noexpand\enspace + \ignorespaces\theaddresseename\unskip \hfill \noexpand\@date + }% + \fi + \the\@lett@decl + \@begin@letter@hook +} +\@ifdefinable\@cut@andcc{\long\def\@cut@andcc#1\andcc#2@@@{% + \@cut@and #1\and @@@% +}} +\@ifdefinable\@cut@and{\long\def\@cut@and#1\and#2@@@{% + \@cut@nl #1\\@@@% +}} +\@ifdefinable\@cut@nl{\long\def\@cut@nl#1\\#2@@@{% + \@cut@par #1\par @@@% +}} +\@ifdefinable\@cut@par{\long\def\@cut@par#1\par#2@@@{% + \def\theaddresseename{#1}% +}} +\newcommand*\stopbreaks{% + \interlinepenalty\@M + \def\par{\ifvmode\else\@@par\nobreak\fi}% + \let\\\@nobreakcr + \let\vspace\@nobreakvspace +} +\DeclareRobustCommand\@nobreakvspace + {\@ifstar\@vspacer\@nobreakvspacex} +\@ifdefinable\@nobreakvspacex{\def\@nobreakvspacex#1{% + \ifvmode + \nobreak + \vskip #1% + \vskip\z@skip + \else + \@bsphack + \vadjust{\@restorepar + \nobreak + \vskip #1% + \vskip\z@skip + }% + \@esphack + \fi +}} +\@ifdefinable\@nobreakcr{\def\@nobreakcr{% + \@ifstar{\@normalcr*}{\@normalcr*}% +}} +\newcommand*\startbreaks{% + \interlinepenalty 200% + \let\par\@@par + \let\\\@normalcr + \let\vspace\@@vspace +} +\@ifdefinable\@par@stopbreaks{\def\@par@stopbreaks{% + \par\nobreak\stopbreaks +}} +\@ifdefinable\@@letter{\def\@@letter#1#2#3{% + \ifx#2N% + \renewcommand*\makepresentation{\makenormalpresentation}% + \renewenvironment*{presentation}{% + \normalpresentation + }{% + \endnormalpresentation + }% + \else\ifx#2F% + \renewcommand*\makepresentation{\makefoldedpresentation}% + \renewenvironment*{presentation}{% + \foldedpresentation + }{% + \endfoldedpresentation + }% + \fi\fi + \setlength\senderindentation {\z@}% + \setlength\senderwidth {#3}% + \setlength\addresseeindentation{#3}% + \setlength\addresseewidth {\textwidth}% + \addtolength\addresseewidth{-\addresseeindentation}% + \setlength\signatureindentation{.3\textwidth}% + \setlength\signaturewidth {.6\textwidth}% + \renewcommand*\closingindentation{\parindent} + \renewcommand*\signaturealignment{\centering}% + \standardvertspaces + \baseletter{}{% + #1% + }% +}} +\@ifdefinable\@letter{\def\@letter#1{% + \@@letter{\thispagestyle{#1}}% +}} +\newenvironment*{customletter}{% + \@@letter{}L% +}{\endbaseletter} +\newenvironment*{letter}{% + \@letter{firstpage}N{.5\textwidth}% +}{\endbaseletter} +\newenvironment*{foldedletter}{% + \@letter{foldedpage}F{.5\textwidth}% +}{\endbaseletter} +\newenvironment*{letter*}{% + \@letter{firstpage}N\longindentation +}{\endbaseletter} +\newenvironment*{foldedletter*}{% + \@letter{foldedpage}F\longindentation +}{\endbaseletter} +\newenvironment*{letterhead}{% + \@letter{firstletterhead}N\longindentation +}{\endbaseletter} +\newenvironment*{foldedletterhead}{% + \@letter{foldedletterhead}F\longindentation +}{\endbaseletter} +% \end{macrocode} +% +% \subsubsection{Addresses and subject} +% +% \begin{macrocode} +\@ifdefinable\@block@parshape{\def\@block@parshape{% + \parshape \@ne\@block@inden\@block@width +}} +\@ifdefinable\@block@@everypar{\def\@block@@everypar{% + \parskip\z@skip + \@nobreakfalse \@minipagefalse % these are already \global + \@new@block@false \@empty@and@false % these too + \everypar{\@block@parshape}% +}} +\@ifdefinable\@block@everypar{\def\@block@everypar{% + \@block@parshape + \@block@@everypar +}} +\@ifdefinable\x@custom@block{\def\x@custom@block#1#2#3#4#5#6#7#8#9{% + \@custom@block#1#4#5#6#8#9% + \@block@inden #2% + \@block@width #3% + \def\voidisOK{\global\let\@empty@block\@empty}% + \everypar{\@block@everypar}% + \@@custom@block #7% +}} +\@ifdefinable\y@custom@block{\def\y@custom@block#1#2#3#4#5#6#7#8{% + \@custom@block#1#3#4#5#7#8% + \sbox\@labels{\normalfont\ignorespaces #2\unskip}% + % We use \@labels to save a box register. + \@block@inden\wd\@labels + \ifdim\@block@inden>\z@ + \advance \@block@inden by \subjectnamegap \relax + \wd\@labels\@block@inden + \fi + \@block@width\textwidth \advance\@block@width -\@block@inden + \everypar{% + \parshape \tw@ \z@\textwidth \@block@inden\@block@width + \box\@labels + \@block@@everypar + }% + \@@custom@block #6% +}} +\@ifdefinable\@custom@block{\def\@custom@block#1#2#3#4#5#6{% + \if@inlabel \indent \fi + \let\par\@@par \par + \if@newlist \@noitemerr \fi + \let\makelabel\m@kel@bel + \@nobreakfalse + \@noskipsecfalse + \@totalleftmargin\z@ + \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip + \parfillskip\@flushglue + \ifx#1Y% + \parskip #2\relax + \ifdim\lastskip>\parskip + \parskip\z@skip + \else + \advance\parskip -\lastskip + \fi + \else + \parskip\z@skip + \fi + \parindent\z@ + \linewidth\textwidth + \hsize\textwidth + \@block@space #4% + \@block@andspace #3% + \@i@penalty #5% + \@e@penalty #6% + \stopbreaks + \@new@block@true \@empty@and@true +}} +\@ifdefinable\@@custom@block{\def\@@custom@block#1{% + \addpenalty #1% + \color@begingroup +}} +\def\end@custom@block#1{\par + \color@endgroup + \if@new@block@ + \@empty@block + \else + \if@empty@and@ + \@empty@and + \fi + \ifx#1Y% + \addpenalty\@e@penalty + \addvspace\@block@space + \fi + \fi + \everypar{}% +} +\newcommand*\makeandvspace{% + \addpenalty\@i@penalty + \addvspace\@block@andspace +} +\newcommand*\makeandcclabel[1][\andccname]{% + \makebox[\z@][r]{\normalfont\@safe@space{#1}\quad}% + \ignorespaces +} +\@ifdefinable\@block@nd{\def\@block@nd{\par + \if@empty@and@ + \@empty@and + \else + \makeandvspace + \fi + \@empty@and@true + \everypar{\@block@everypar}% +}} +\@ifdefinable\@empty@and{\def\@empty@and{% + \ClassWarning{\@letteracdp}{% + \protect\and\space with nothing inside% + }% +}} +\@ifdefinable\@empty@sender{\def\@empty@sender{% + \ClassWarning{\@letteracdp}{% + Empty sender address% + }% +}} +\@ifdefinable\@sender{\def\@sender#1{% + \let\@empty@block\@empty@sender + \let\and\@block@nd + \x@custom@block #1% + \senderindentation\senderwidth + \aboveaddressvspace\andaddressvspace\belowaddressvspace + \@b@frompenalty\@i@frompenalty\@e@frompenalty + \raggedright +}} +\newenvironment*{sender} {\@sender Y}{\end@custom@block Y} +\newenvironment*{sender*}{\@sender N}{\end@custom@block N} +\@ifdefinable\@empty@addressee{\def\@empty@addressee{% + \ClassWarning{\@letteracdp}{% + Empty addressee address% + }% +}} +\@ifdefinable\@addressee{\def\@addressee#1{% + \let\@empty@block\@empty@addressee + \let\and\@block@nd + \def\andcc{\@block@nd + \everypar\expandafter{\the\everypar + \makeandcclabel\relax + }% + }% + \x@custom@block #1% + \addresseeindentation\addresseewidth + \aboveaddressvspace\andaddressvspace\belowaddressvspace + \@b@topenalty\@i@topenalty\@e@topenalty + \raggedright +}} +\newenvironment*{addressee} {\@addressee Y}{\end@custom@block Y} +\newenvironment*{addressee*}{\@addressee N}{\end@custom@block N} +\@ifdefinable\@good@prsbj{\def\@good@prsbj#1{% + \@new@block@false \@empty@and@false + \let\presubject\@bad@prsbj + \vskip\parskip + \leftline{\normalfont\ignorespaces #1\unskip}% + \nobreak + \parskip\presubjectvspace +}} +\@ifdefinable\@bad@prsbj{\def\@bad@prsbj#1{% + \ClassError{\@letteracdp}{% + Misused \protect\presubject% + }{% + At the beginning of the subject of a letter + you can write something like\MessageBreak + \protect\presubject{A short phrase...} + in order to typeset "A short phrase..."\MessageBreak + just above the subject; but the \protect\presubject\space + command must come before\MessageBreak + any other text in the subject, + and it cannot be used twice.\MessageBreak + (If you are wondering where you used the + \protect\presubject\space command,\MessageBreak + recall that both \protect\registered\space and + \protect\registeredRR\space invoke + \protect\presubject.)\MessageBreak + The offending command will be ignored: + try to type \space <return> \space to proceed.% + }% +}} +\@ifdefinable\@subject{\def\@subject#1#2{% + \let\@empty@block\@empty + \y@custom@block #1% + {#2}% + \abovesubjectvspace\z@skip\belowsubjectvspace + \@b@subjpenalty\@M\@e@subjpenalty + \let\presubject\@good@prsbj + \def\registered {\presubject{\registeredname}}% + \def\registeredRR{\presubject{\registeredRRname}}% + \everypar\expandafter{\the\everypar + \let\presubject\@bad@prsbj + }% + \@subject@style +}} +\newenvironment*{subject} [1][\subjectname] + {\@subject Y{#1}}{\end@custom@block Y} +\newenvironment*{subject*}[1][\subjectname] + {\@subject N{#1}}{\end@custom@block N} +\newcommand*\ifemptyblock{% + \if@new@block@ + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} +\@ifdefinable\@makesender{\def\@makesender#1{% + \begin{sender#1}\thesenderaddress\end{sender#1}% +}} +\newcommand*\makesender{% + \@ifstar{\@makesender *}{\@makesender {}}% +} +\@ifdefinable\@makeaddressee{\def\@makeaddressee#1{% + \begin{addressee#1}\theaddresseeaddress\end{addressee#1}% +}} +\newcommand*\makeaddressee{% + \@ifstar{\@makeaddressee *}{\@makeaddressee {}}% +} +\newcommand*\x@makesubject[1][\subjectname]{% + \begin{subject}[#1]\thesubject\end{subject}% +} +\newcommand*\y@makesubject[1][\subjectname]{% + \begin{subject*}[#1]\thesubject\end{subject*}% +} +\newcommand*\makesubject{\@ifstar\y@makesubject\x@makesubject} +% \end{macrocode} +% +% \subsubsection{Presentations} +% +% \begin{macrocode} +\@ifdefinable\@setup@pres{\def\@setup@pres{% + \global\@topnum\z@ % prevents figures from going at top of page + \parskip\z@skip + \parindent\z@ + \@b@frompenalty \@M + \@i@frompenalty \@fold@toppenalty + \@e@frompenalty \@M + \@b@topenalty \@fold@toppenalty + \@i@topenalty \@fold@toppenalty + \@e@topenalty \@M + \@b@subjpenalty \@fold@toppenalty + \@e@subjpenalty \@M + \interlinepenalty\@M + \def\par{\ifvmode\else\@@par\penalty\@fold@toppenalty\fi}% + \let\\\@nobreakcr + \let\vspace\@nobreakvspace +}} +\newenvironment*{presentation}{% + \normalpresentation +}{% + \endnormalpresentation +} +\newenvironment*{normalpresentation}{% + \cleardoublepage + \@setup@pres +}{% + \par + \addpenalty\@e@prespenalty + \addvspace\belowpresentationvspace +} +\@ifdefinable\@nofoldwarning{\def\@nofoldwarning{% + \ClassWarning{\@letteracdp}{% + The paper format you chose does not allow\MessageBreak + folded letters; making normal presentation.\MessageBreak + (Modify \protect\foldedheight\space in the preamble\MessageBreak + if you want to alter the default behavior.)\MessageBreak + Warning issued% + }% +}} +\newenvironment*{foldedpresentation}{% + \if@do@fold@ + \cleardoublepage + \setbox\z@\vbox\bgroup + \@setup@pres + \color@begingroup + \penalty-\@M + \prevdepth\z@ + \else + \@nofoldwarning + \normalpresentation + \fi +}{% + \if@do@fold@ + \@@par + \color@endgroup + \global\dimen@i\prevdepth + \@f@ldingfilbreak\@fold@basepenalty + \vskip\maxdimen % "discourage" the break at the \penalty-10000 + \egroup + \splitmaxdepth\maxdepth + \splittopskip\topskip + \setbox\tw@\vsplit\z@ to\z@ + \splittopskip\baselineskip + \advance\splittopskip\@below@folding@skip + \advance\splittopskip\parskip + \setbox\tw@\vsplit\z@ to\@folding@ht + \nointerlineskip + \box\tw@ + {\baselineskip\@above@folding@margin \nobreak\null}% + \penalty\@highpenalty + \ifvoid\z@ + \vskip\@below@folding@skip + \else + \unvbox\z@ + \unskip % remove "\vskip\maxdimen" + \unpenalty % remove "\penalty\@fold@basepenalty" + \unskip % remove "\vskip \dimen@ plus 1fil minus ..." + \unskip % remove "\vskip -\skip@" + \unpenalty % remove "\penalty 10000" + \prevdepth\dimen@i + \addpenalty\@e@prespenalty + \addvspace\belowpresentationvspace + \ClassWarning{\@letteracdp}{% + Some text that did not fit into the folded flap\MessageBreak + was moved into the main text below the folding;\MessageBreak + warning issued% + }% + \fi + \else + \endnormalpresentation + \fi +} +\newcommand*\iffoldedallowed{% + \if@do@fold@ + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} +\newcommand*\makepresentation{\makenormalpresentation} +\newcommand*\makenormalpresentation{% + \begin{normalpresentation}% + \makesender\relax + \makeaddressee\relax + \makesubject\relax + \end{normalpresentation}% +} +\@ifdefinable\@f@ldingfilbreak{\def\@f@ldingfilbreak#1{% + \ifdim\prevdepth<\maxdepth + \dimen@ -\prevdepth + \else + \dimen@ -\maxdepth + \fi + \skip@ \lastskip + \nobreak + \vskip -\skip@ + \vskip \dimen@ \@plus 1fil\@minus \@above@folding@shrink + \penalty #1% +}} +\@ifdefinable\@foldingfilbreak{\def\@foldingfilbreak#1#2{\par + \@f@ldingfilbreak#1% + \vskip -\dimen@ \@plus -1fil\@minus -\@above@folding@shrink + \vskip \skip@ + \addvspace{#2}% +}} +\@ifdefinable\@fold@getpen{\def\@fold@getpen#1{% + \ifcase #1 \@fold@basepenalty \or \@fold@lowpenalty + \or \@fold@medpenalty \or \@fold@highpenalty + \else \@fold@toppenalty \fi +}} +\newcommand*\foldingbreak[1][\z@]{% + \ifvmode + \penalty\@fold@getpen{#1}% + \else + \@bsphack + \vadjust{\penalty\@fold@getpen{#1}}% + \@esphack + \fi +} +\newcommand*\foldingfilbreak[2][\z@]{% + \@foldingfilbreak{\@fold@getpen{#1}}{#2}% +} +\newcommand*\makefoldedpresentation{% + \if@do@fold@ + \begin{foldedpresentation}% + \renewcommand*\makeandvspace{% + \@foldingfilbreak\@fold@medpenalty\andaddressvspace + }% + \makesender\relax + \@foldingfilbreak\@fold@medpenalty\z@skip + \if@new@block@ + \aboveaddressvspace \z@\@plus1fil\relax + \nointerlineskip\null\nobreak + \fi + \makeaddressee\relax + \@foldingfilbreak\@fold@lowpenalty\z@skip + \makesubject\relax + \end{foldedpresentation}% + \else + \@nofoldwarning + \makenormalpresentation + \fi +} +% \end{macrocode} +% +% \subsubsection{Date, salutation, signature, enclosures\ldots} +% +% \begin{macrocode} +\@ifdefinable\@make@date{\def\@make@date#1#2#3{\par + \ifx#2Y% + \nobreak\medskip + \fi + \noindent\@safe@space{#1}\space\@date\par + \ifx#3Y% + \nobreak\medskip + \fi +}} +\newcommand*\makedate [1][]{\@make@date{#1}NN} +\newcommand*\maketopdate [1][]{\@make@date{#1}NY} +\newcommand*\makebottomdate[1][]{\@make@date{#1}YN} +\@ifdefinable\@empty@signature{\def\@empty@signature{% + \ClassWarning{\@letteracdp}{% + Empty signature% + }% +}} +\@ifdefinable\@signatureenv{\def\@signatureenv#1{\par + \let\@empty@block\@empty@signature + \let\and\@block@nd + \x@custom@block Y% + \signatureindentation\signaturewidth + #1#1\z@skip + \@M\@M\@M + \signaturealignment\@signature@style +}} +\def\end@signatureenv{% + \end@custom@block N% not "Y" for efficiency + \addvspace\belowsignaturevspace +} +\newenvironment*{signatureenv}{% + \@signatureenv\abovesignaturevspace +}{% + \end@signatureenv +} +\newenvironment*{signatureenv*}{% + \@signatureenv\abovesignatureshortvspace +}{% + \end@signatureenv +} +\@ifdefinable\x@msignature{\def\x@msignature#1{% + \begin{signatureenv#1}% + \ifx\thesendersignature\@empty + \thesendername + \else + \thesendersignature + \fi + \end{signatureenv#1}% +}} +\@ifdefinable\y@msignature{\def\y@msignature{% + \begin{signatureenv}% + \vskip\parskip \vskip\z@skip + \the\everypar + \end{signatureenv}% +}} +\newcommand*\makesignature{\@par@stopbreaks + \@ifstar{% + \x@msignature *% + }{% + \@ifnextchar -{% + \@firstoftwo\y@msignature + }{% + \x@msignature {}% + }% + }% +} +\newcommand*\makeopening{\par + \@ifnextchar +{\@firstoftwo\y@mopening}\x@mopening +} +\@ifdefinable\x@mopening{\def\x@mopening#1{% + \ifx\@indent@pref O% + \dimen@\prevdepth + \setbox\z@\vbox{\color@begingroup + \null + \prevdepth\dimen@ + \noindent\null\ignorespaces #1\par + \global\dimen@i\prevdepth + \color@endgroup}% + \setbox\tw@\vbox{% + \unvcopy\z@ + \setbox\z@\lastbox + \global\setbox\@ne\hbox{\unhbox\z@}% + }% + \ifdim\wd\@ne<2pc + \parindent 2pc\relax + \else\ifdim\wd\@ne>.4\textwidth + \parindent .1\textwidth\relax + \else + \parindent \wd\@ne + \fi\fi + \unvbox\z@ + \prevdepth\dimen@i + \else + \noindent\null\ignorespaces #1\par + \fi + \nobreak +}} +\@ifdefinable\y@mopening{\def\y@mopening{% + \@handwr@box\z@ \nobreak +}} +\newcommand*\opening{\par + \@ifnextchar +{% + \let\@cdp@reserved\y@mopening + \@firstoftwo\@opening + }{% + \let\@cdp@reserved\x@mopening + \@opening + }% +} +\newcommand*\@opening[1][]{% + \makepresentation + \maketopdate[#1]% + \@cdp@reserved +} +\newcommand*\makeclosing{\@par@stopbreaks + \@ifnextchar +{\@firstoftwo\y@mclosing}\x@mclosing +} +\@ifdefinable\x@mclosing{\def\x@mclosing#1{% + \noindent\hspace*{\closingindentation}\ignorespaces #1\par +}} +\@ifdefinable\y@mclosing{\def\y@mclosing{% + \@handwr@box\closingindentation +}} +\newcommand*\closing{\@par@stopbreaks + \@ifstar{% + \@closing{\x@msignature *}% + }{% + \@ifnextchar +{% + \@firstoftwo{\y@mclosing \y@msignature}% + }{% + \@ifnextchar -{% + \@firstoftwo{\@closing \y@msignature}% + }{% + \@closing{\x@msignature {}}% + }% + }% + }% +} +\@ifdefinable\@closing{\def\@closing#1#2{\x@mclosing{#2}#1}} +\@ifdefinable\@handwr@box{\def\@handwr@box#1{% + \vskip .5\baselineskip + \setbox\z@\vbox{% + \hrule\@height .1\p@ \@depth .1\p@ \@width 3\p@ + }% + \wd\z@\z@ \ht\z@\z@ \dp\z@\z@ \noindent\hspace*{#1}\box\z@\par + \vskip .5\baselineskip\vskip\z@skip +}} +\newcommand\@cc@encl[2]{\par + \noindent\parbox[t]{\textwidth}{% + \@hangfrom{\normalfont\@safe@space{#1}\enspace}% + \ignorespaces #2\strut + }\par +} +\newcommand*\cc [1][\ccname] {\@cc@encl{#1}} +\newcommand*\encl[1][\enclname]{\@cc@encl{#1}} +\newenvironment{enclosures}[1][\enclname]{% + \baseenclosures[#1]{}% +}{% + \endbaseenclosures +} +\newenvironment{baseenclosures}[2][\enclname]{\par + \addpenalty{-\@lowpenalty}% + \addvspace{\bigskipamount}% + \startbreaks + \parskip\z@skip + {\parindent\z@ #1\par}% + \list{\labelenumi}{% + \usecounter{enumi}% + \@beginparpenalty\@M + \@itempenalty-\@lowpenalty + \@endparpenalty-\@medpenalty +%% ( paren match + \renewcommand*\labelenumi{\theenumi)}% + #2% + }% +}{% + \endlist + \aftergroup\startbreaks +} +\newcommand*\ps{\par\startbreaks\parindent\z@} +\newcommand*\@PS@rigid [1][\PSname]{% + {\normalfont\@safe@space{#1}\enspace}\ignorespaces +} +\newcommand*\@PS@rubber[1][\PSname]{% + \@safe@space{#1}\space\ignorespaces +} +\newcommand*\PS{% + \ps\@ifstar{\@PS@rubber}{\@PS@rigid}% +} +\newcommand*\stopletter{} +% \end{macrocode} +% +% \subsubsection{Address labels} +% +% \begin{macrocode} +\newcommand*\returnaddress{\thesenderaddress} +\@ifdefinable\@emptyaddrlabels@err{\def\@emptyaddrlabels@err{% + \advance \@cdp@gencount \m@ne + \ClassError{\@letteracdp}{% + Counter emptyaddrlabels out of range% + }{% + The counter emptyaddrlabels holds + the number of labels\MessageBreak + to leave blank when starting to print + the address labels\MessageBreak + (e.g., because some labels + have already been peeled off).\MessageBreak + For the label format you chose, + it must lie in the range\MessageBreak + 0..\number\@cdp@gencount\space (inclusive), + but presently its value is \number\c@emptyaddrlabels.\MessageBreak + It will therefore be ignored; + type \space <return> \space to proceed.% + }% +}} +\newcommand*\skipemptylabels{% + \@cdp@gencount \c@addrlabelrows + \multiply \@cdp@gencount \c@addrlabelcolumns + \ifnum\c@emptyaddrlabels<\z@ + \@emptyaddrlabels@err + \else\ifnum\c@emptyaddrlabels<\@cdp@gencount + \begingroup + \let\ifactuallabel\@secondoftwo + \@whilenum\c@totallabel<\c@emptyaddrlabels\do{\@mlabel{}{}}% + \endgroup + \else + \@emptyaddrlabels@err + \fi\fi +} +\newenvironment*{baselabels}{% + \cleardoubleemptypage + \c@page\@ne + \typeout{Address Labels}% + \pagestyle{empty}% + \textwidth \c@addrlabelcolumns\addrlabelwidth + \count@ \c@addrlabelcolumns + \advance \count@ \m@ne + \ifnum\count@>\z@ + \advance \textwidth \count@\addrlabelshsep + \fi + \linewidth\textwidth \hsize\textwidth + \oddsidemargin -1in% + \advance \oddsidemargin \addrlabelsleftmargin + \evensidemargin \oddsidemargin + \@totalleftmargin\z@ + \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip + \parfillskip\@flushglue + \textheight \c@addrlabelrows\addrlabelheight + \count@ \c@addrlabelrows + \advance \count@ \m@ne + \ifnum\count@>\z@ + \advance \textheight \count@\addrlabelsvsep + \fi + \@colht\textheight \@colroom\textheight \vsize\textheight + \headsep \z@ + \headheight \z@ + \footskip \z@ + \topmargin -1in% + \advance \topmargin \addrlabelstopmargin + \ifcase \@ptsize\relax + \normalsize + \or + \small + \or + \footnotesize + \fi + \parindent \z@ + \baselineskip \z@skip + \lineskip \z@skip + \boxmaxdepth \z@ + \raggedright + \fboxrule \z@ + \fboxsep \addrlabelborder + \addrlabeltrimwidth \addrlabelwidth + \advance \addrlabeltrimwidth -2\addrlabelborder + \addrlabeltrimheight \addrlabelheight + \advance \addrlabeltrimheight -2\addrlabelborder + \setcounter{totallabel}{\z@}% + \setcounter{label}{\z@}% + \setcounter{letter}{\z@}% + \noindent + \skipemptylabels +}{% + \@killglue\clearpage +} +\newenvironment*{labels}{\baselabels}{\endbaselabels} +\let\@beginlabels=\relax +\let\@endlabels=\relax +\newenvironment*{labelgroup}{\stepcounter{letter}}{} +\let\@beginlabelgroup=\relax +\let\@endlabelgroup=\relax +\newcommand*\labeltab{\@killglue + \ifnum\c@totallabel>\z@ + \count@ \c@totallabel + \divide \count@ \c@addrlabelcolumns + \multiply \count@ -\c@addrlabelcolumns + \advance \count@ \c@totallabel + \ifnum\count@=\z@ + \par\vskip\addrlabelsvsep\noindent + \else + \hskip\addrlabelshsep + \fi + \fi + \stepcounter{totallabel}% + \stepcounter{label}% +} +\let\ifactuallabel\@firstoftwo +\newcommand\basemlabel[2]{% + \begingroup + \def\startaddrlabel{\par + \noindent \vrule\@height\topskip \@depth\z@ \@width\z@ \par + \vskip-\baselineskip \vskip\z@skip + }% + \def\stopaddrlabel{\par + \ifnum\prevdepth>\z@ + \kern -\prevdepth + \prevdepth\z@ + \fi + }% + \labeltab\mlabel{\ignorespaces #1}{\ignorespaces #2}% + \endgroup +} +\newcommand\mlabel[2]{% + \fbox{% + \parbox[c][\addrlabeltrimheight]{\addrlabeltrimwidth}{% + \raggedright\startaddrlabel #2\stopaddrlabel + }% + }% +} +\let\@mlabel=\@gobbletwo +% \end{macrocode} +% +% \subsubsection{Lists and other similar environments} +% +% \begin{macrocode} +\normalfont \normalsize +\setlength\leftmargini {2em} +\setlength\leftmarginii {2em} +\setlength\leftmarginiii{2em} +\setlength\leftmarginiv {1.75em} +\setlength\leftmarginv {1.5em} +\setlength\leftmarginvi {1.5em} +\setlength\leftmargin {\leftmargini} +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +\setlength\partopsep{\z@skip} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +\def\@listI{\leftmargin\leftmargini + \parsep \smallskipamount + \topsep \medskipamount + \itemsep\smallskipamount} +\let\@listi\@listI +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep\smallskipamount + \parsep\z@skip} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep} +\def\@listiv {\leftmargin\leftmarginiv + \labelwidth\leftmarginiv + \advance\labelwidth-\labelsep} +\def\@listv {\leftmargin\leftmarginv + \labelwidth\leftmarginv + \advance\labelwidth-\labelsep} +\def\@listvi {\leftmargin\leftmarginvi + \labelwidth\leftmarginvi + \advance\labelwidth-\labelsep} +\renewcommand*\theenumi{\@arabic\c@enumi} +\renewcommand*\theenumii{\@alph\c@enumii} +\renewcommand*\theenumiii{\@roman\c@enumiii} +\renewcommand*\theenumiv{\@Alph\c@enumiv} +\newcommand*\labelenumi{\theenumi.} +\newcommand*\labelenumii{(\theenumii)} +\newcommand*\labelenumiii{\theenumiii.} +\newcommand*\labelenumiv{\theenumiv.} +\renewcommand*\p@enumii{\theenumi} +\renewcommand*\p@enumiii{\theenumi(\theenumii)} +\renewcommand*\p@enumiv{\p@enumiii\theenumiii} +\newcommand*\labelitemi{\textbullet} +\newcommand*\labelitemii{\normalfont\bfseries \textendash} +\newcommand*\labelitemiii{\textasteriskcentered} +\newcommand*\labelitemiv{\textperiodcentered} +\newenvironment*{description} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} +\newenvironment*{verse} + {\let\\\@centercr + \list{}{\setlength\itemsep{\z@skip}% + \setlength\itemindent{-15\p@}% + \setlength\listparindent{\itemindent}% + \setlength\rightmargin{\leftmargin}% + \addtolength\leftmargin{15\p@}}% + \item[]} + {\endlist} +\newenvironment*{quotation} + {\list{}{\setlength\listparindent{1.5em}% + \setlength\itemindent{\listparindent}% + \setlength\rightmargin{\leftmargin}}% + \item[]} + {\endlist} +\newenvironment*{quote} + {\list{}{\setlength\rightmargin{\leftmargin}}% + \item[]} + {\endlist} +% \end{macrocode} +% +% \subsubsection{Miscellanea} +% +% \begin{macrocode} +\setlength\parindent{2em} +\setlength\parskip{\z@ plus \p@} +\setlength\columnsep{10\p@} +\setlength\columnseprule{\z@} +\setlength\arraycolsep{5\p@} +\setlength\tabcolsep{6\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} +\setlength\tabbingsep{\labelsep} +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +\renewcommand*\theequation{\@arabic\c@equation} +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\relax} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\relax} +\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}} +\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}} +\renewcommand*\footnoterule{% + \kern-\p@ + \hrule \@width .4\columnwidth + \kern .6\p@} +\long\def\@makefntext#1{% + \noindent + \hangindent 5\p@ + \hb@xt@5\p@{\hss\@makefnmark}#1} +% \end{macrocode} +% +% \subsubsection{Names and final setup} +% +% \begin{macrocode} +\newcommand*\subjectname {Oggetto:} +\newcommand*\registeredname {Raccomandata} +\newcommand*\registeredRRname{\registeredname~A.R.} +\newcommand*\andccname {e~p.~c.} +\newcommand*\ccname {P.~c.:} +\newcommand*\enclname {Allegati:} +\newcommand*\PSname {P.S.:} +\newcommand*\headtoname {A:} +\newcommand*\today{\number\day~\ifcase\month\or + gennaio\or febbraio\or marzo\or aprile\or maggio\or giugno\or + luglio\or agosto\or settembre\or ottobre\or novembre\or dicembre\fi + \space\number\year} +\let\do\@undefined +\pagestyle{plain} +\pagenumbering{arabic} +\raggedbottom +\onecolumn +% \end{macrocode} +% +% End of the module for the \packlass{\letteracdp} class. +% \begin{macrocode} +%</letter> +% \end{macrocode} +% +% \section{The code for the \packlass{\articoletteracdp} class} +% +% This part of the file goes into \filedir{\articoletteracdp.cls}. +% \begin{macrocode} +%<*artico> +% \end{macrocode} +% +% \subsection{Identification} +% +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1996/06/01] % LaTeX2e is required! +\ProvidesClass{articoletteracdp} + [2005/01/01 v0.33 (development)] +%% \typeout{Copyright (C) 1999-2005 by Gustavo MEZZETTI, +%% all rights reserved.} +% \end{macrocode} +% +% \subsection{Initial code} +% +% We check that some names are not already taken. +% \begin{macrocode} +\@ifdefinable\@out@table@list{} +\@ifdefinable\@in@table@list{} +\@ifdefinable\@do@tf{} +\@ifdefinable\@sec@head@size{} +% \end{macrocode} +% +% Definition of two switches that support the options about what to +% include in the table of contents. +% \begin{macrocode} +\def\do#1{\@ifdefinable#1{\newif#1}} +\do\if@toc@in@toc@ +\do\if@loX@in@toc@ +% \end{macrocode} +% +% Space above and below captions for figures and tables. +% \begin{macrocode} +\newlength\abovecaptionskip +\newlength\belowcaptionskip +% \end{macrocode} +% +% \subsection{Declaration of options} +% +% \begin{macrocode} +\DeclareOption{titlepage}{% + \@latexerr{No title page for letters}\@eha +} +\DeclareOption{notitlepage}{} +\DeclareOption{loXintoc}{% + \@toc@in@toc@false + \@loX@in@toc@true +} +\DeclareOption{tocintoc}{% + \@toc@in@toc@true + \@loX@in@toc@true +} +\DeclareOption{Hofstadter}{% + \ExecuteOptions{tocintoc}% +} +\DeclareOption{plaintoc}{% + \@toc@in@toc@false + \@loX@in@toc@false +} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{letteracdp}} +% \end{macrocode} +% +% \subsection{Option processing} +% +% \begin{macrocode} +\ExecuteOptions{plaintoc} +\ProcessOptions\relax +% \end{macrocode} +% +% \subsection{Class loading} +% +% \begin{macrocode} +\LoadClass{letteracdp}[2005/01/01] +% \end{macrocode} +% +% \subsection{Main code} +% +% Unfortunately, the code is not commented (yet). +% +% \subsubsection{More initializations} +% +% \begin{macrocode} +\newcounter{section}[letter] +\newcounter{paragraph}[section] +\newcounter{figure}[letter] +\newcounter{table}[letter] +% \end{macrocode} +% +% The \packlass{\hyperref} package generates references to paragraphs +% that include also the "\subsection" and the "\subsubsection" number, +% because it assumes that paragraphs are numbered within subsubsections. +% While, on one hand, it is not necessary to actually have subsections +% numbered within sections, subsubsections numbered within subsection, +% and paragraphs numbered within subsubsections, on the other, to assure +% compatibility with \packlass{\hyperref} one must at least +% \emph{define} the \texttt{subsection} and \texttt{subsubsection} +% counters, to assure that the \packlass{\hyperref} package may safely +% mention them. We do this here, so that \packlass{\articoletteracdp} +% can be used together with \packlass{\hyperref}. +% \begin{macrocode} +\newcounter{subsection} +\newcounter{subsubsection} +% \end{macrocode} +% +% \begin{macro}{\hyper@last} +% The following line is to deactivate the check that +% \packlass{\hyperref} makes against old files; this is necessary +% because otherwise, on the first \LaTeX\ run, it would overwrite our +% redefinition of "\@starttoc", possibly writing unwanted +% \filedir{.toc}, \filedir{.lof}, and \filedir{.lot} files, and (much +% worse) causing trouble if the letter happens to contain more than one +% "\tableofcontents", "\listoffigures", or "\listoftables". Of course, +% this means that the user must be informed that (s)he has to delete the +% old files by hand.~\mbox{:-(}^^A ) paren match +% \spacefactor\sfcode`. \space +% Note, anyway, that the automatic check made by \packlass{\hyperref} +% would not work with the C.D.P. Bundle in any case, so\ldots +% \begin{macrocode} +\@ifdefinable\hyper@last{\let\hyper@last\relax} +% \end{macrocode} +% \end{macro} +% +% Back to uncommented code. +% +% \begin{macrocode} +%% Command \title and \author redefined to make changes local. +\def\title#1{\def\@title{#1}} +\def\author#1{\def\@author{#1}} +% \end{macrocode} +% +% \subsubsection{Managing the \filedir{.toc}, \filedir{.lof}, and +% \filedir{.lot} files} +% +% \begin{macrocode} +%% Inner command \@starttoc redefined to make table of contents, etc. +%% local to letters (this is tricky!). +\def\@starttoc#1{% + \begingroup + \vskip\parskip + \parskip\z@skip + \makeatletter + \@input{\jobname.#1\number\c@letter}% + \if@filesw + \@ifundefined{tf@@#1}{% + \expandafter\newwrite\csname tf@@#1\endcsname + }\relax + \immediate\write\@out@table@list{\string\@do@tf{#1}}% + \fi + \@nobreakfalse + \endgroup +} +\g@addto@macro\@begin@letter@hook{% + \if@filesw + {\escapechar\m@ne + \immediate\write\@out@table@list{\string\}^^J\string\{}% + }% + \immediate\write\@auxout + {\string\@deferred@clopen{\number\c@letter}}% + \fi +} +\@ifdefinable\@deferred@open {\let\@deferred@open \@gobble} +\@ifdefinable\@deferred@close {\let\@deferred@close \@empty} +\@ifdefinable\@deferred@clopen{\let\@deferred@clopen\@gobble} +\newwrite\@out@table@list +\newread\@in@table@list +\AtBeginDocument{% + \if@filesw + \immediate\openout\@out@table@list = \jobname.summ\relax + {\escapechar\m@ne + \immediate\write\@out@table@list{\string\{}% + }% + \immediate\write\@auxout{\string\@deferred@open{0}}% + \def\@deferred@close{% + \def\@do@tf##1{% + \@restore@tf{##1}% + \immediate\closeout \csname tf@##1\endcsname + \global\expandafter\let\csname tf@##1\endcsname\@undefined + }% + \@temp@table@list + }% + \def\@deferred@open#1{% + \ifeof\@in@table@list\else + \read\@in@table@list to\@temp@table@list + \def\@do@tf##1{% + \@restore@tf{##1}% + \immediate\openout + \csname tf@##1\endcsname = \jobname.##1#1\relax + }% + \@temp@table@list + \fi + }% + \def\@deferred@clopen#1{% + \@deferred@close + \@deferred@open{#1}% + }% + \fi +} +\AtEndDocument{% + \if@filesw + {\escapechar\m@ne + \immediate\write\@out@table@list{\string\}}% + }% + \immediate\closeout\@out@table@list + \clearpage + \immediate\write\@auxout{\string\@deferred@close}% + \openin\@in@table@list = \jobname.summ\relax + \fi +} +\@ifdefinable\@restore@tf{\def\@restore@tf#1{% + \edef\@tempa{% + \let\csname tf@#1\endcsname\csname tf@@#1\endcsname + }% + \global\@tempa +}} +\@ifdefinable\@temp@table@list{\let\@temp@table@list\@empty} +% \end{macrocode} +% +% \subsubsection{Adding punctuation to titles} +% +% \begin{macrocode} +\@ifdefinable\@addfullstop{\long\def\@addfullstop#1{% + {\nonfrenchspacing\ignorespaces#1\unskip + \ifnum\spacefactor>\@m \else.\fi \/}% +}} +\newcommand*\nopunct{\spacefactor 1001\relax} +% \end{macrocode} +% +% \subsubsection{Floats} +% +% \begin{macrocode} +\setcounter{topnumber}{\tw@} +\renewcommand\topfraction{.7} +\setcounter{bottomnumber}{\@ne} +\renewcommand\bottomfraction{.3} +\setcounter{totalnumber}{\thr@@} +\renewcommand\textfraction{.2} +\renewcommand\floatpagefraction{.5} +\c@dbltopnumber\c@topnumber +\let\dbltopfraction\topfraction +\let\dblfloatpagefraction\floatpagefraction +\setlength \floatsep {\bigskipamount} +\@msetlength\textfloatsep {2}{\bigskipamount} +\setlength \intextsep {\bigskipamount} +\setlength \dblfloatsep {\bigskipamount} +\@msetlength\dbltextfloatsep {2}{\bigskipamount} +\setlength \@fptop {\z@ plus 1 fil} +\setlength \@fpsep {\bigskipamount} +\setlength \@fpbot {\z@ plus 1 fil} +\setlength \@dblfptop {\z@ plus 1 fil} +\setlength \@dblfpsep {\bigskipamount} +\setlength \@dblfpbot {\z@ plus 1 fil} +\setlength\abovecaptionskip{\medskipamount} +\setlength\belowcaptionskip{\z@skip} +% \end{macrocode} +% +% \subsubsection{Title, section heads, figures, bibliography\ldots} +% +% \begin{macrocode} +\newcommand*\maketitle{% + \begingroup + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\thesenderaddress{\@author}% + \def\thesubject{\leavevmode\@addfullstop\@title}% + \let\@empty@sender\@empty + \let\@thanks\@empty + \makepresentation + \@thanks + \endgroup + \setcounter{footnote}{\z@}% + \maketopdate +} +\setcounter{secnumdepth}{\tw@} +\def\@seccntformat#1{\csname the#1\endcsname .\enspace} +\ifcase \@ptsize\relax + \def\@sec@head@size{\@setfontsize\@sec@head@size\@xiipt{15}} +\or + \def\@sec@head@size{\@setfontsize\@sec@head@size\@xiipt{17.4}} +\or + \def\@sec@head@size{\@setfontsize\@sec@head@size\@xivpt{18.75}} +\fi +\newcommand*\section{\@startsection {section}{\@ne}% + {\z@}% + {-\bigskipamount}% + {\smallskipamount}% + {% + \normalfont + \noindent\null\@@par\nobreak\vskip-\baselineskip + \parskip\z@skip + \@sec@head@size\bfseries + }% +} +\newcommand*\paragraph{\@startsection{paragraph}{\tw@}% + {\z@}% + {-\medskipamount}% + {-.66667em}% + {\normalfont\normalsize\itshape\@addfullstop}% +} +\newcommand*\epilogue{% + \if@noskipsec \leavevmode \fi + \par + \if@nobreak + \everypar{}% + \else + \addpenalty\@secpenalty\addvspace\bigskipamount + \fi +} +\renewcommand*\thesection{\@arabic\c@section} +\renewcommand*\theparagraph{\thesection.\@arabic\c@paragraph} +\renewcommand*\thefigure{\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{\@ne} +\def\ext@figure{lof} +\def\fnum@figure{\figurename~\thefigure} +\newenvironment*{figure} + {\@float{figure}} + {\end@float} +\newenvironment*{figure*} + {\@dblfloat{figure}} + {\end@dblfloat} +\renewcommand*\thetable{\@arabic\c@table} +\def\fps@table{tbp} +\def\ftype@table{\tw@} +\def\ext@table{lot} +\def\fnum@table{\tablename~\thetable} +\newenvironment*{table} + {\@float{table}} + {\end@float} +\newenvironment*{table*} + {\@dblfloat{table}} + {\end@dblfloat} +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \sbox\@tempboxa{\itshape \@addfullstop{#1: #2}}% + \ifdim \wd\@tempboxa >\hsize + \unhbox\@tempboxa\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip +} +\newcommand*\@pnumwidth{1.55em} +\newcommand*\@tocrmarg{2.55em} +\newcommand*\@dotsep{4.5} +\setcounter{tocdepth}{\@ne} +\newcommand*\tableofcontents{% + \section*{\contentsname \sectionmark\contentsname} + \if@toc@in@toc@ + \addcontentsline{toc}{section}{\protect\contentsname}% + \fi + \@starttoc{toc}% +} +\newcommand*\l@section{\@dottedtocline{\@ne}{\z@}{2em}} +\newcommand*\l@paragraph[2]{% + \@dottedtocline{\tw@}{2em}{2.5em}{\small #1}{\small #2}% +} +\newcommand*\listoffigures{% + \section*{\listfigurename \sectionmark\listfigurename}% + \if@loX@in@toc@ + \addcontentsline{toc}{section}{\protect\listfigurename}% + \fi + \@starttoc{lof}% +} +\def\l@figure{\@dottedtocline{\@ne}{\z@}{2em}} +\newcommand*\listoftables{% + \section*{\listtablename \sectionmark\listtablename}% + \if@loX@in@toc@ + \addcontentsline{toc}{section}{\protect\listtablename}% + \fi + \@starttoc{lot}% +} +\let\l@table\l@figure +\newenvironment*{thebibliography}[1]{% + \startbreaks + \section*{\refname \sectionmark\refname}% + \addcontentsline{toc}{section}{\protect\refname}% + \vskip\parskip + \parskip\z@skip + \parindent\z@ + \list{\@biblabel{\@arabic\c@enumiv}}{% + \settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}% + }% + \sloppy + \clubpenalty 4000 + \@clubpenalty \clubpenalty + \widowpenalty 4000 + \sfcode`\.\@m +}{% + \def\@noitemerr{\@latex@warning{Empty `thebibliography' environment}}% + \endlist +} +\newcommand*\newblock{\hskip .11em\@plus.33em\@minus.07em} +\newcommand*\bysame{\leavevmode\hbox to3em{\hrulefill}\thinspace} +% \end{macrocode} +% +% \subsubsection{Names} +% +% \begin{macrocode} +\newcommand*\contentsname {Sommario} +\newcommand*\listfigurename{Indice delle figure} +\newcommand*\listtablename {Indice delle tabelle} +\newcommand*\refname {Testi citati} +\newcommand*\indexname {Indice analitico} +\newcommand*\figurename {Figura} +\newcommand*\tablename {Tabella} +% \end{macrocode} +% +% End of the module for the \packlass{\articoletteracdp} class. +% \begin{macrocode} +%</artico> +% \end{macrocode} +% +% \section{The code for the \packlass{\adiseal} package} +% +% This part of the file goes into \filedir{\adiseal.sty}. +% \begin{macrocode} +%<*adipk> +% \end{macrocode} +% +% \subsection{Identification} +% +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1998/06/01] % LaTeX2e is required! +\ProvidesPackage{adiseal} + [2005/01/01 v0.33 (development)] +\@ifdefinable\@adiseal{\def\@adiseal{adiseal}} +% \end{macrocode} +% +% \subsection{Initial code} +% +% This segment contains also code that could have been deferred to +% the Main Code segment, but which is handy to have here, right at +% the beginning. +% +% \begin{macro}{\ADIWWW} +% The web address of ADI-PD is stored in a macro accessible to the +% user. +% \begin{macrocode} +\newcommand*\ADIWWW{% + http://www.math.unipd.it/\string~favero/adipd/% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@seal@graph@file} +% The name of the file which contains the image of the ADI seal is +% also kept in a macro, to allow customization, but this macro is not +% made accessible to the user. Note the image must be contained in a +% file in Encapsulated PostScript format, and that it should be exactly \( +% 60\,\mbox{bp} \) wide and \( 42\,\mbox{bp} \) tall. +% \begin{macrocode} +\@ifdefinable\@seal@graph@file{\def\@seal@graph@file{% + adiseal.eps% must be an Encapsulated PostScript file +}} +% \end{macrocode} +% \end{macro} +% +% The following switch is used to implement the +% \iopz{nopixmap}\eopz{usepixmap}\fopz\space mutually exclusive +% options: see subsection~\ref{sS:adisealoptdec} for details. +% \begin{macrocode} +\@ifdefinable\if@use@pixmap@{\newif\if@use@pixmap@} +% \end{macrocode} +% +% \begin{macro}{\@temp@adiseal} +% A ``scratch'' macro, used as a temporary storage in the sequel. +% Here, we simply check that this name can be used as a macro name. +% \begin{macrocode} +\@ifdefinable\@temp@adiseal{} +% \end{macrocode} +% \end{macro} +% +% \subsection{Declaration of options} +% \label{sS:adisealoptdec} +% +% The \opz{nopixmap} option inhibits the printing of the seal; more +% precisely, it prevents the \packlass{\adiseal} package from trying to +% load the \packlass{\epsfig} package and the file containing the image +% of the seal. The \opz{usepixmap} option, on the contrary, tries to load +% the file containing the image and the \packlass{\epsfig} package, +% and, if both are succesfully loaded, causes the printing of the seal. +% Should the \packlass{\epsfig} package or the file containing the image +% of the seal be unavailable, the \opz{usepixmap} option will be +% converted to \opz{nopixmap} at package-loading time (actually, it is +% the "\if@use@pixmap@" switch that will be forced to ``false''). When, +% for either reason, the seal is not displayed, a placeholder is printed +% in its place. +% +% \begin{macrocode} +\DeclareOption{nopixmap}{\@use@pixmap@false} +\DeclareOption{usepixmap}{\@use@pixmap@true} +% \end{macrocode} +% +% \subsection{Option processing} +% +% We select the \opz{nopixmap} option by default, because the file +% containing the image of the seal is not included in the C.D.P. +% Bundle. +% \begin{macrocode} +\ExecuteOptions{nopixmap} +\ProcessOptions\relax +% \end{macrocode} +% +% \subsection{Package loading} +% +% \begin{macrocode} +\def\@temp@adiseal#1{% + \@use@pixmap@false + \PackageWarningNoLine{\@adiseal}{% + Can't find the #1;\MessageBreak + option usepixmap ignored (converted to nopixmap).\MessageBreak + The ADI seal will _not_ be printed% + }% +} +\if@use@pixmap@ + \IfFileExists{\@seal@graph@file}{% + \IfFileExists{epsfig.sty}{% + \RequirePackage{epsfig}% + }{% + \@temp@adiseal{epsfig package}% + }% + }{% + \@temp@adiseal{pixel map for the ADI seal}% + }% +\fi +\let\@temp@adiseal\@undefined +% \end{macrocode} +% +% \subsection{Main code} +% +% Unfortunately, the code is not commented (yet). +% +% \subsubsection{The two main commands} +% +% \begin{macrocode} +\@ifdefinable\@seal@box{\def\@seal@box#1{% + \parbox[t][42bp][c]{60bp}{\centerline{#1}}% +}} +\newcommand*\ADIconcert{\par\noindent + \emph\concertname + \ADIaddress +} +\DeclareRobustCommand*\ADIaddress{\par + \setbox\z@\vtop{% + \normalfont\normalsize + \leftline{% + \vtop{% + \hbox{% + \if@use@pixmap@ + \edef\@temp@adiseal{% + \noexpand\epsfig{file=\@seal@graph@file,% + height=42bp,width=60bp,clip=}% + }% + \@seal@box\@temp@adiseal + \let\@temp@adiseal\@undefined + \else + \setlength\fboxrule{.2pt}% + \setlength\fboxsep{-\fboxrule}% + \fbox{\@seal@box\substitutesealname}% + \fi + }% + }% + \kern\baselineskip + \vtop{% + \null\nointerlineskip + \hbox{% + \Large ADI% + \setbox\z@\hbox{\ignorespaces\seatacronym\unskip}% + \ifdim\wd\z@>\z@ + -\unhbox\z@ + \else + \unhbox\z@ + \fi + }% + \ialign{##\cr + \spaceskip \fontdimen\tw@\font + \@plus \@ne fil% + \@minus \fontdimen4\font + Associazione Dottorandi e\cr + Dottori di Ricerca Italiani\cr + }% + \hbox{% + \setbox\z@\hbox{\ignorespaces\seatname\unskip}% + \ifdim\wd\z@>\z@ + --- \unhbox\z@ + \else + \unhbox\z@ + \fi + }% + \global\dimen@i\prevdepth + }% + }% + \kern\p@ + \prevdepth \dimen@i + \leftline{\ttfamily\small\ADIWWW}% + \global\dimen@i\prevdepth + }% + \dimen@ \dp\z@ + \advance \dimen@ -\dimen@i + \dimen@ii .5\baselineskip + \divide \dimen@ \dimen@ii + \count@ \dimen@ + \advance \count@ 1 + \dimen@ \dp\z@ + \advance \dimen@ -\count@\dimen@ii + \box\z@ + \prevdepth\dimen@ +} +% \end{macrocode} +% +% \subsubsection{Names} +% +% Note that "\seatacronym" and "\seatname" can also be redefined as +% empty strings: in this case, the package automatically suppresses +% some of the surrounding printings that have no meaning when those +% strings are empty. +% +% \begin{macrocode} +\newcommand*\concertname {di concerto con} +\newcommand*\seatacronym {PD} +\newcommand*\seatname {Sede di Padova} +\newcommand*\substitutesealname{Logo ADI} +% \end{macrocode} +% +% End of the module for the \packlass{\adiseal} package. +% \begin{macrocode} +%</adipk> +% \end{macrocode} +% +% \section{The code for the \packlass{\lettcdpadi} class} +% +% This part of the file goes into \filedir{\lettcdpadi.cls}. +% \begin{macrocode} +%<*adicl> +% \end{macrocode} +% +% The purpose of this file is simply to supply ``glue code'' to +% support the legacy \packlass{\lettcdpadi} class. The document +% class is ``redirected'' to \packlass{\letteracdp}, and the +% \packlass{\adiseal} package is automatically loaded. Options are +% properly shunted, too. +% +% It should be time to expunge this file from the Bundle, perhaps +% [v0.33], but it is also true that it uses so few +% bytes\ldots\space(that is, an entire block of the disk!). +% +% \subsection{Identification} +% +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1998/06/01] % LaTeX2e is required! +\ProvidesClass{lettcdpadi} + [2005/01/01 v0.33 (development)] +% \end{macrocode} +% +% \subsection{Initial code} +% +% This segment is empty in the \packlass{\lettcdpadi} class. +% +% \subsection{Declaration of options} +% +% \begin{macrocode} +\DeclareOption{nopixmap} {\PassOptionsToPackage{nopixmap} {adiseal}} +\DeclareOption{usepixmap}{\PassOptionsToPackage{usepixmap}{adiseal}} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{letteracdp}} +% \end{macrocode} +% +% \subsection{Option processing} +% +% \begin{macrocode} +\ProcessOptions\relax +% \end{macrocode} +% +% \subsection{Class and package loading} +% +% \begin{macrocode} +\LoadClass{letteracdp}[2005/01/01] +\RequirePackage{adiseal}[2005/01/01] +% \end{macrocode} +% +% \subsection{Main code} +% +% This segment is empty in the \packlass{\lettcdpadi} class. +% +% End of the module for the \packlass{\lettcdpadi} class. +% \begin{macrocode} +%</adicl> +% \end{macrocode} +% +% \section{The code for the \packlass{\cdpaddon} package} +% +% This part of the file goes into \filedir{\cdpaddon.sty}. +% \begin{macrocode} +%<*addon> +% \end{macrocode} +% +% \subsection{Identification} +% +% Why did I ask for the June 1998 release of \LaTeX? I don't remember! +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1998/06/01] % LaTeX2e is required! +\ProvidesPackage{cdpaddon} + [2005/01/01 v0.33 (development)] +\@ifdefinable\@cdpaddon{\def\@cdpaddon{cdpaddon}} +% \end{macrocode} +% +% \subsection{Initial code} +% +% Switches. +% \begin{macrocode} +\def\do#1{\@ifdefinable#1{\newif#1}} +\do\if@using@cdp@ +\do\if@use@color@ +\do\if@use@hyper@ +% \end{macrocode} +% +% \begin{macro}{\@cdpaddon@printer} +% Below, we shall store in this macro the name (without the extension +% \filedir{.def}) of the definition file from which to read the +% definitions of the colors for the C.D.P. seal. It is needed only +% during the initialization of the package, and it is "\@undefined" +% before the end. If it is empty, the emergency colors will be used: +% we make this the default. +% \begin{macrocode} +\@ifdefinable\@cdpaddon@printer{\let\@cdpaddon@printer\@empty} +% \end{macrocode} +% \end{macro} +% +% ``Scratch'' macros, will be re-used in the sequel. +% \begin{macrocode} +\@ifdefinable\@temp@cdpaddon@a{} +\@ifdefinable\@temp@cdpaddon@b{} +% \end{macrocode} +% +% Here is a first use of those ``scratch'' macros. +% \begin{macrocode} +\def\@temp@cdpaddon@a{% + \@using@cdp@false + \PackageWarningNoLine{\@cdpaddon}{% + It seems that you are not using the letteracdp\MessageBreak + document class; therefore no attempt will be made\MessageBreak + to modify letterheads and similar things% + }% +} +\def\@temp@cdpaddon@b{letteracdp} +% \end{macrocode} +% Double check to be absolutely sure that the \packlass{\letteracdp} +% class is loaded. +% \begin{macrocode} +\@ifclassloaded{\@temp@cdpaddon@b}{% + \ifx\@letteracdp\@temp@cdpaddon@b + \@using@cdp@true + \else + \@temp@cdpaddon@a + \fi +}{% + \@temp@cdpaddon@a +} +% \end{macrocode} +% +% \subsection{Declaration of options} +% +% The following macro is needed to strip the prefix \opz{printer:}\ +% from the option that selects which color definition file to load. +% Again, we use one of the ``scratch'' macro to save memory (the other +% ``scratch'' macro is used as well inside). +% \begin{macrocode} +\def\@temp@cdpaddon@a#1printer:#2,#3@@@{% + \def\@temp@cdpaddon@b{#1}% + \ifx\@temp@cdpaddon@b\@empty + \def\@cdpaddon@printer{#2}% + \else + \@unknownoptionerror + \fi +} +\DeclareOption{bw}{\@use@color@false} +\DeclareOption{color}{\@use@color@true} +\DeclareOption{hypertext}{\@use@hyper@true} +\DeclareOption{plaintext}{\@use@hyper@false} +% \end{macrocode} +% The purpose of the following ``catch-all'' option is to intercept +% a \opz{printer:}\ldots\ option requesting a color definition file. +% \begin{macrocode} +\DeclareOption*{% + \expandafter\@temp@cdpaddon@a\CurrentOption,printer:,@@@% +} +% \end{macrocode} +% +% \subsection{Option processing} +% +% \begin{macrocode} +\ExecuteOptions{color,plaintext} +\ProcessOptions\relax +% \end{macrocode} +% If the \opz{printer:Default} option has been specified, we want +% the same behavior as if no \opz{printer:}\ldots\ option had been +% specified at all. +% \begin{macrocode} +\def\@temp@cdpaddon@a{Default} +\ifx\@cdpaddon@printer\@temp@cdpaddon@a + \let\@cdpaddon@printer\@empty +\fi +% \end{macrocode} +% +% \subsection{Package loading} +% +% \begin{macrocode} +\def\@temp@cdpaddon@a#1#2#3#4#5{% + \IfFileExists{#1.sty}{% + \RequirePackage[#2]{#1}% + }{% + \@nameuse{@use@#3@false} + \PackageWarningNoLine{\@cdpaddon}{% + Can't find the #1 package;\MessageBreak + option #4 ignored (converted to #5)% + }% + }% +} +\if@use@color@ + \@temp@cdpaddon@a{color}{}{color}{color}{bw} +\fi +\if@use@hyper@ + \@temp@cdpaddon@a{hyperref}{}{hyper}{hypertext}{plaintext} +\fi +% \end{macrocode} +% +% \subsection{Main code} +% +% Unfortunately, the code is only sparsely commented (at the moment). +% +% \subsubsection{Redefinition of the seal, etc.} +% +% The following macro is used to draw in color the thin, small line +% that, when the page needs to be folded, indicates where to fold it. +% We need to define it here, outside of the conditionals, and to +% assign it later to "\@folding@tag" using "\let" (see below) because +% it contains a "\fi" (mumble grumble\ldots). +% \begin{macrocode} +\@ifdefinable\@back@folding@tag{\def\@back@folding@tag{% + \if@do@fold@ + \raisebox{\@lh@folding@ht}[\z@][\z@]{% + \makebox[\z@][l]{% + \color{strong@col}% + \dimen@ -\@lh@right@margin + \advance\dimen@ 1cm% + \kern\dimen@ \vbox{% + \kern -.1\p@ + \hrule \@height .1\p@ \@depth .1\p@ \@width 5mm% + \kern -.1\p@ + }% + }% + }% + \fi +}} +% \end{macrocode} +% +% If the \packlass{\letteracdp} class is loaded\ldots +% \begin{macrocode} +\if@using@cdp@ +% \end{macrocode} +% \ldots then we can try to replace the macros that draw the seal, +% etc.; but we want to perform the redefinition (if and) only if the +% macro is already defined, and rise an error otherwise. To ease this +% task, we define the ``scratch'' macro "\@temp@cdpaddon@a" in such a +% way that "\@temp@cdpaddon@a{"\meta{name}"}{"\meta{code}"}" rises an +% error if \meta{name} is undefined, and executes \meta{code} +% otherwise. It is intended that \meta{code} is the code that does the +% actual redefinition. Note that \meta{name} must be indicated +% \emph{without} the backslash. Note also that it is not necessary to +% put in a second parameter for \meta{code}: simply, "{"\meta{code}"}" +% will become the third parameter of "\@ifundefined". +% \begin{macrocode} + \def\@temp@cdpaddon@a#1{% + \@ifundefined{#1}{% + \PackageError\@cdpaddon{% + Internal command \@backslashchar#1 undefined% + }{% + The internal command \@backslashchar#1, + that should have been defined\MessageBreak + by the \@letteracdp\space document class, + is actually undefined.\MessageBreak + Probably, you are using an old or modified version + of that class.\MessageBreak + Proceed, but some of the colors won't come out right.% + }% + }% + } +% \end{macrocode} +% +% We first take care of color. Did the user request colors? +% \begin{macrocode} + \if@use@color@ +% \end{macrocode} +% Yes? Well, in that case, we try to load the file that defines +% the hues. First of all, see whether the user selected a color +% definition file. +% \begin{macrocode} + \ifx\@cdpaddon@printer\@empty +% \end{macrocode} +% If not (\("\@cdpaddon@printer"="\@empty"\)), then we must read the +% config.\ file. Before doing this, we define the "\DeclareCDPSealHuesDefault" +% command, in a somewhat tricky way: we begin a group, thereby making +% a local definition, but we put the "\endgroup" in the replacement text +% of the macro itself. This is quite OK, because once the macro has +% been expanded, we no longer need its definition! We must foresee +% the case in which the configuration file does not contain any +% "\DeclareCDPSealHuesDefault" command at all. For this, we use +% another hack: we "\let" "\@temp@cdpaddon@b" equal to "\endgroup" +% \emph{inside} the group, but to "\@empty" outside of it. Then we call it: +% if the group has already ended, nothing happens, otherwise the group +% is ended now. +% \begin{macrocode} + \let\@temp@cdpaddon@b\@empty + \begingroup % \endgroup put in by \@temp@cdpaddon@b + \let\@temp@cdpaddon@b\endgroup + \InputIfFileExists{cdpshues.cfg}{% + \PackageInfo{\@cdpaddon}{% + Reading config. file% + }% +% \end{macrocode} +% \begin{macro}{\DeclareCDPSealHuesDefault} +% This command is defined in such a way that it not only ends the group, +% but also stops reading from the file. +% \begin{macrocode} + \def\DeclareCDPSealHuesDefault{% + \@temp@cdpaddon@b % ends group + \endinput +% \end{macrocode} +% \end{macro} +% The argument to "\DeclareCDPSealHuesDefault" will become the +% replacement text of the following "\def". +% \begin{macrocode} + \def\@cdpaddon@printer + }% + }{% + \PackageWarningNoLine{\@cdpaddon}{% + Could not find config. file for default printer% + }% + }% +% \end{macrocode} +% The following is part of the hack to end the group if it has not +% already ended. +% \begin{macrocode} + \@temp@cdpaddon@b +% \end{macrocode} +% We now check if the user specified the \opz{printer:None} option; +% if so, we take the same action that would result from an empty +% configuration file. +% \begin{macrocode} + \else + \def\@temp@cdpaddon@b{None}% + \ifx\@cdpaddon@printer\@temp@cdpaddon@b + \let\@cdpaddon@printer\@empty + \fi +% \end{macrocode} +% End of things to do when no \opz{printer:}\ldots\ option has been +% specified. +% \begin{macrocode} + \fi +% \end{macrocode} +% OK, now we have the name of the color definition file in +% "\@cdpaddon@printer", and we have to load it. The following are the +% actions to take when the file cannot be found or when +% "\@cdpaddon@printer" is still empty (\emph{e.g.,} because no +% config.\ file was found, or because it was void): use emergency +% definitions and issue a warning. We save them in a ``scratch'' +% macro because we need them twice~(!). +% \begin{macrocode} + \def\@temp@cdpaddon@b{% + \definecolor{slight@col}{named}{SpringGreen} + \definecolor{strong@col}{named}{OliveGreen} + \PackageInfo{\@cdpaddon}{% + Color hues defined internally% + }% + \typeout{% + *Package cdpaddon using built-in colors for the C.D.P. seal.*% + }% + } +% \end{macrocode} +% We finally try to load the color definition file. +% \begin{macrocode} + \ifx\@cdpaddon@printer\@empty + \@temp@cdpaddon@b + \else + \InputIfFileExists{\@cdpaddon@printer.def}{% + \PackageInfo{\@cdpaddon}{% + Color hues defined by def. file\MessageBreak + \@cdpaddon@printer.def% + }% + }{% + \PackageWarningNoLine{\@cdpaddon}{% + Could not find def. file \@cdpaddon@printer.def% + }% + \@temp@cdpaddon@b + }% + \fi +% \end{macrocode} +% +% We define another handy subroutine. Given the name \meta{boxname} +% of an hbox, "\@temp@cdpaddon@b{"\meta{boxname}"}" causes a +% "\color{strong@col}" declaration to be added at the beginning of +% "\"\meta{boxname}, properly contained in a group to assure that the +% "\special" for restoring the previous colors is included in the box too. +% We use this method of setting and resetting the color inside the +% individual boxes because the one used in the previous versions, of +% setting the color once for all at the beginning of "\@cdp@head", did +% not seem to work properly with pdf\TeX. +% \begin{macrocode} + \def\@temp@cdpaddon@b#1{% + \@temp@cdpaddon@a{#1}{% + \setbox\z@\box\@nameuse{#1}% + \sbox{\@nameuse{#1}}{{\color{strong@col}\unhbox\z@}}% + }% + } +% \end{macrocode} +% +% Actual redefinition of macros begins here. +% +% \begin{macro}{\@folding@tag} +% First, install the redefinition of "\@folding@tag" that we had +% prepared in advance. +% \begin{macrocode} + \@temp@cdpaddon@a{@folding@tag}{% + \let\@folding@tag\@back@folding@tag + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@logo@box@base} +% \changes{0.32}{2002 Jul 01}{Eliminated an awful bug introduced with +% version 0.31 (a conditional that could not appear at this spot)} +% Color the main part of the seal. +% \begin{macrocode} + \@temp@cdpaddon@a{@logo@box@base}{% + \savebox\@logo@box@base[\z@][r]{\setlength\unitlength{.625mm}% + \begin{picture}(32,16)(-3,7.87)% +% \end{macrocode} +% I don't remember exactly what this group was for. Eliminate? +% \begin{macrocode} + \begingroup +% \end{macrocode} +% Draw the inner of the~``D'' and of the~``P'', in the slight color. +% \begin{macrocode} + \color{slight@col}% +% \end{macrocode} +% Try to draw two filled circles of the right size to fill up the +% inner of the two letters. If the target system happens to have +% sufficiently large filled circles, this will suffice. +% \begin{macrocode} + \put(8,16){\circle*{10}}% + \put(18,16){\circle*{10}}% +% \end{macrocode} +% With the standard set of fonts, however, the above request can not +% be honored, and the two circles we have just obtained are a little +% too small; so, we finish them by adding arcs of circumference of +% increasing size, drawn in thick lines. +% \begin{macrocode} + \thicklines + \put(8,16){\oval(8.2,8.2)[l]}% + \put(8,16){\oval(8.6,8.6)[l]}% + \put(8,16){\oval(9,9)[l]}% + \put(8,16){\oval(9.4,9.4)[l]}% + \put(8,16){\oval(9.8,9.8)[l]}% + \put(18,16){\oval(8.2,8.2)[r]}% + \put(18,16){\oval(8.6,8.6)[r]}% + \put(18,16){\oval(9,9)[r]}% + \put(18,16){\oval(9.4,9.4)[r]}% + \put(18,16){\oval(9.8,9.8)[r]}% +% \end{macrocode} +% Now erase the inner half of the two circles. +% \begin{macrocode} + \put(13,16){\makebox(0,0){\color{white}% + \vrule height 6.25mm depth 0mm width 6.25mm + }}% +% \end{macrocode} +% Draw the vertical part of the two letters. +% \begin{macrocode} + \put(9,11){\makebox(0,0)[bl]{% + \vrule height 12.5mm depth 0mm width 1.875mm + }}% + \put(14,1){\makebox(0,0)[bl]{% + \vrule height 12.5mm depth 0mm width 1.875mm + }}% + \endgroup +% \end{macrocode} +% Now redraw the outer strokes of the~``D'' and of the~``P'' in the +% strong color. +% \begin{macrocode} + \color{strong@col}% + \put(8,16){\oval(10,10)[l]}% + \put(8,11){\line(0,1){10}}% + \put(9,11){\framebox(3,20){}}% + \put(18,16){\oval(10,10)[r]}% + \put(18,11){\line(0,1){10}}% + \put(14,1){\framebox(3,20){}}% +% \end{macrocode} +% The strokes of the~``C'' are thick. +% \begin{macrocode} + \thicklines + \put(8,16){\oval(16,16)[l]}% + \put(8,8){\line(1,0){5}}% + \put(13,24){\line(1,0){10}}% + \put(8,16){\oval(14,14)[l]}% + \put(8,9){\line(1,0){5}}% + \put(13,23){\line(1,0){10}}% + \end{picture}% + }% + } +% \end{macrocode} +% \end{macro} +% Coloring the other parts of the seal is easier: just add the color +% declaration to the various boxes, to the rule in the head, and to the +% whole footer. +% \begin{macrocode} + \@temp@cdpaddon@b{@logo@box@addS} + \@temp@cdpaddon@b{@logo@box@addL} + \@temp@cdpaddon@b{@oordinamento@box} + \@temp@cdpaddon@a{@cdp@head}{\def\@cdp@head{% + \@logo@overlay\@logo@box@addL + \copy\@oordinamento@box + {\color{strong@col}\hrulefill}\kern\@lh@right@margin + }} + \@temp@cdpaddon@a{@cdp@foot}{\def\@cdp@foot{% + \color{strong@col}% + \reset@font + \setlength\@tempdima{\textwidth}% + \addtolength\@tempdima{-2\@lh@right@margin}% + \hss\parbox[t]{\@tempdima}{% + \parfillskip\z@skip + \noindent\hrulefill\@@par + \baselineskip 11\p@ + \hb@xt@\hsize{\hfil\copy\@name@and@WWW@box\hfil}% + }\hss + }} + \fi +% \end{macrocode} +% +% We now deal with hyperlinks. If the user requested them\ldots +% \begin{macrocode} + \if@use@hyper@ +% \end{macrocode} +% \ldots well, we take care of them. The precompilation of the footer +% must be deferred until the "\begin{document}" hook, because the macros +% of the \packlass{hyperref} package are not available for actual +% typesetting until that moment. Note that we just need to encapsulate +% the web address of the \emph{Coordinamento} into an "\href" command: +% the color-switching command has already been given above, inside the +% "\@cdp@foot" box (the color must be changed independently from the use +% of hyperlinks). +% \begin{macrocode} + \AtBeginDocument{% + \@temp@cdpaddon@a{@name@and@WWW@box}{% + \setbox\@name@and@WWW@box = \vtop{% + \baselineskip 11\p@ + \hb@xt@\z@{\hss \@lh@rm\Coordinamento \hss}% + \hb@xt@\z@{% + \hss + \@lh@it World Wide Web:\/ + \href{\CoordinamentoWWW}{\@lh@tt \CoordinamentoWWW}% + \hss + }% + }% + }% +% \end{macrocode} +% Of course, in this case we cannot release the "\@temp@cdpaddon@a" +% macro until the "\begin{document}" hook, too. +% \begin{macrocode} + \let\@temp@cdpaddon@a\@undefined + } +% \end{macrocode} +% The following line informs the \packlass{\hyperref} package that the +% bookmark level for paragraphs should be~2. +% \begin{macrocode} + \def\toclevel@paragraph{2} +% \end{macrocode} +% If hyperlinks are not requested, we can release "\@temp@cdpaddon@a" +% right now. +% \begin{macrocode} + \else + \let\@temp@cdpaddon@a\@undefined + \fi +% \end{macrocode} +% +% We can do the same thing if the \packlass{\letteracdp} class is +% not loaded. +% \begin{macrocode} +\else + \let\@temp@cdpaddon@a\@undefined +\fi +% \end{macrocode} +% +% The memory taken by the following ``scratch'' macros can be freed +% in any case. +% \begin{macrocode} +\let\if@using@cdp@\@undefined +\let\@using@cdp@true\@undefined +\let\@using@cdp@false\@undefined +\let\if@use@color@\@undefined +\let\@use@color@true\@undefined +\let\@use@color@false\@undefined +\let\if@use@hyper@\@undefined +\let\@use@hyper@true\@undefined +\let\@use@hyper@false\@undefined +\let\@back@folding@tag\@undefined +\let\@cdpaddon@printer\@undefined +\let\@temp@cdpaddon@b\@undefined +% \end{macrocode} +% +% \subsubsection{Smiling faces} +% +% \begin{macro}{\facesmile} +% \begin{macro}{\facefrown} +% These commands produce happy or sad ``faces''. They are made +% ``transparent'' to the "\spacefactor", just like parentheses +% (the "\spacefactor" is saved in "\count@"). +% \begin{macrocode} +\DeclareRobustCommand*{\facesmile}{\@face\smile} +\DeclareRobustCommand*{\facefrown}{\@face\frown} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@face} +% The low-level command that draws the face ("\bigcirc"), the eyes, and +% the mouth: the latter is passed as an argument, so it can be a +% "\smile" or a "\frown". +% \begin{macrocode} +\@ifdefinable\@face{\def\@face#1{% + \leavevmode + \count@\spacefactor + \hb@xt@ 1em{\hfil$% + \hb@xt@\z@ {\hss$\bigcirc$\hss}% + \lower .2ex \hb@xt@\z@ {\hss$\scriptscriptstyle #1$\hss}% + \raise .3ex \hb@xt@\z@ {\hss${\cdot}\mkern 2mu{\cdot}$\hss}% + $\hfil}% + \spacefactor\count@ +}} +% \end{macrocode} +% \end{macro} +% +% End of the module for the \packlass{\cdpaddon} package. +% \begin{macrocode} +%</addon> +% \end{macrocode} +% +% \section{Definition and configuration files} +% +% This section contains the ancillary files (definition and +% configuration files) used by the \packlass{\cdpaddon} package. +% +% \subsection{The \filedir{\example} file} +% +% This part of the file goes into the prototype definition file +% \filedir{\example}. All comments are left in the code because this +% file is intended as an example of how to write color definition files +% for the \packlass{\cdpaddon} package. +% \begin{macrocode} +%<*example> +%%% +%%% The "\ProvidesFile" command allows LaTeX to check the name and +%%% the release date of the file; if either differs from what the +%%% user requested, a warning is issued when the file is loaded. +%%% This helps to pinpoint old files as well as files which have been +%%% installed incorrectly. It is not mandatory to include this +%%% command in a file, and you can omit it from your definition files +%%% if you want (but including it is more elegant); however, if you do +%%% leave this command in your definition files, you should modify +%%% both its mandatory and its optional argument so that they reflect +%%% the name and the release date, respectively, of your file. +%%% Note that the extension ".def" must be included in the file name, +%%% and that the date is in the format YYYY/MM/DD. +\ProvidesFile{cdpshues-example.def}[2005/01/01 Printer-dependent file] +%%% +%%% Define here the colors to use to draw the C.D.P. seal; +%%% "slight@col" is the color used to paint the inner of the D and +%%% of the P, "strong@col" is the color used to draw the lines. +%%% The colors are defined by means of the usual "\definecolor" +%%% command, which is part of the standard color package. The colors +%%% defined here, of course, are just a silly example. +\definecolor{slight@col}{named}{SpringGreen} +\definecolor{strong@col}{named}{OliveGreen} +%</example> +% \end{macrocode} +% +% \subsection{The \filedir{\epson} file} +% +% This part of the file goes into the definition file +% \filedir{\epson}. +% \begin{macrocode} +%<*epson> +\ProvidesFile{epson-stylus-740.def}[2005/01/01 Printer-dependent file] +\definecolor{slight@col}{rgb}{.8,1,.8} +\definecolor{strong@col}{rgb}{0,.266667,0} +%</epson> +% \end{macrocode} +% +% \subsection{The \filedir{\hplj} file} +% +% This part of the file goes into the definition file \filedir{\hplj}. +% \begin{macrocode} +%<*hplj> +\ProvidesFile{hp-laserjet-4500.def}[2005/01/01 Printer-dependent file] +\definecolor{slight@col}{cmyk}{.1,0,.1,0} +\definecolor{strong@col}{cmyk}{.5,0,.5,.5} +%</hplj> +% \end{macrocode} +% +% \subsection{The \filedir{\cdpshues} file} +% +% This part of the file goes into the configuration file +% \filedir{\cdpshues}. Again, we leave all comments in the generated +% file because they are meant to help the final user to modify the file. +% \begin{macrocode} +%<*config> +%%% +%%% The argument of the "\DeclareCDPSealHuesDefault" command contains +%%% the name (w/o extension) of the default color definition file: +\DeclareCDPSealHuesDefault{cdpshues} + +==================== +EXPLANATORY COMMENTS +==================== + +This file is special in that the cdpaddon package stops reading it as +soon as it encounters the first "\DeclareCDPSealHuesDefault" command: +all subsequent lines are ignored, and can hence contain explanatory +comments, just like these. To save disk space (although, in this era +of gigabytes, this is not a compelling issue!), you can, if you want, +delete all lines in this file except the one which contains the first +occurrence of a "\DeclareCDPSealHuesDefault" command (12 lines above); +but if you do so, please be sure to read them before deleting them! +(Anyway, I think it is a good idea to leave the comments in place.) + +The "\DeclareCDPSealHuesDefault" command has one argument, in which +you should put the name of a default file from which the definitions +of the hues for the C.D.P. seal are read when no other file has been +indicated in the options passed to the cdpaddon package. Note that +the extension ".def" is automatically added to the name; therefore, +you **must** leave it out in the name given as the argument of the +"\DeclareCDPSealHuesDefault" command. + +The C.D.P. Bundle comes with some definition files already included; +their names are listed below, without the extension ".def" (each one +is packaged in a "\DeclareCDPSealHuesDefault" command): + +\DeclareCDPSealHuesDefault{cdpshues-example} +\DeclareCDPSealHuesDefault{epson-stylus-740} +\DeclareCDPSealHuesDefault{hp-laserjet-4500} + +To make one of these files the default one, copy (or move) the line +containing its name to the top of the file, so that its becomes the +first line (yes, even above the opening comments, those four dozens +lines starting with "%%": let us keep things easy!). + +If you write a new definition file, you can make it the default by +writing a similar "\DeclareCDPSealHuesDefault" command and putting it +in the first line of this file (above the opening comments, why not). +Remember that only the first such command appearing in this file is +taken into consideration: all subsequent lines are ignored. + +%</config> +% \end{macrocode} +% +% \section{End of input} +% +% The usual "\endinput" which prevents the \DS\ program from putting +% garbage into the generated files. +% \begin{macrocode} +\endinput +% \end{macrocode} +% +% \Finale +% |