% \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-2006 by Gustavo MEZZETTI . % % 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.34} % \def\filedate{2006/01/01} % \def\docdate {2006/01/01} % \def\doclongdate{January~1, 2006} % % \CheckSum{4829} % % \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} % \changes{0.34}{2006 Jan 01}{Improved interaction with the % \protect\packlass{\protect\hyperref} package} % \changes{0.34}{2006 Jan 01}{Corrected positioning of floats % in float pages} % \changes{0.34}{2006 Jan 01}{Added \protect\texttt{\protect\bslash place} % command} % %% \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. % } % \setcounter{IndexColumns}{2} % % \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*{\env}[1]{{\normalfont\ttfamily #1}} % \newcommand*{\cnt}[1]{{\normalfont\ttfamily #1}} % \newcommand*{\sty}[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--2006 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--2006 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 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 retains % 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 what 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 may 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 % the \textsl{\LaTeX book} \cite[Section~7.3 and % Subsection~C.14.3]{LaTeXbook} for information on 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 % may 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 % personal default color definition file. 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 (EPS) format called % \filedir{\adiseal.eps}, unless PDF output is being generated, in % which case a file in Portable Document Format (PDF) named % \filedir{adiseal.pdf} is searched for instead. 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 whether a file you have got 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.\,Anford\\ % Haga Alto, CA~94321 (U.S.A.) %} %\signature{R.~J. Drofnats\\Professor} %\date{January~1, 2006} % as usual, date is optional, default is \today %% Place where the letter is written (optional): %\place{St.\,Anford} % %% 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. %] % %\opening{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 % % \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 is 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 improves 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} % 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} % % \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} [2006/01/01 v0.34 (**incomplete**)] % \end{macrocode} % Print a copyright message on the terminal, just below the name % of the class. % \begin{macrocode} \typeout{Copyright (C) 1999-2006 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 one 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 one 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 \cnt{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: \cnt{addrlabelrows} holds % the number of rows % \begin{macrocode} \newcounter{addrlabelrows} % \end{macrocode} % \counterindex{addrlabelcolumns} % and \cnt{addrlabelcolumns} holds the number of columns. % \begin{macrocode} \newcounter{addrlabelcolumns} % \end{macrocode} % \counterindex{label} % The \cnt{addrlabelrows} and \cnt{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 \cnt{label} counter holds % the index of a label inside a given letter % \begin{macrocode} \newcounter{label}[letter] % \end{macrocode} % \counterindex{totallabel} % while the \cnt{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 them. 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 checks 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}{\@place} % The place where the letter is written: starting from version~0.34, % this macro is used as the default value for the optional argument of % "\@makeopening", "\makedate", etc. It is logically and functionally % analogous to "\@date". % \begin{macrocode} \do\@place % \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 \env{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 \env{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 \env{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 % \env{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 \env{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 \env{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 \env{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\sty{letterhead} and in the % \sty{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" to obtain the seal as it appears % in the \sty{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" to obtain the seal embedded % in the \ldots\sty{letterhead} 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 \sty{firstletterhead} and % \sty{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 \env{sender}, % \env{addressee}, and \env{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 \env{addressee} environment, the token "\andcc" may % 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\env{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 \env{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. % \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 % \env{signatureenv} environment (the environment one uses to typeset % the signature); it is the responsability of the surrounding % \ldots\env{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 \env{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. % % \emph{Begin to think (v.~0.34):} should I change the defaults as % follows: \opz{boldsubject} in place of \opz{mediumsubject}, % \opz{italicsignature} in place of \opz{uprightsignature}, % \opz{shortindent} in place of \opz{indent}? % \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} % If the \packlass{eepic} package is not available, force the switch % to false and warn the user. % \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} % % Some of the following initializations could have been put in the % \emph{Initial code} section, but some others require that the code % for the options have already been executed. % % \begin{macro}{\date} % 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 other ones. Since "\date" is a kernel % command, an explicative comment is left in % the code too. % \begin{macrocode} %% Command \date redefined to make changes to date local. \def\date#1{\def\@date{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\place} % This command records the place where the letter is written (added % in version~0.34): it is analogous to "\date". Starting from % version~0.34, this should be used instead of the optional argument % of "\opening", "\makedate", etc.\ (however, the optional argument of % those commands may still be used, for compatibility). Note that the % comma is added automatically, but only if the argument of "\place" % is nonempty. % \begin{macrocode} \newcommand*\place[1]{% \ifx \@empty #1\@empty % if #1 is empty \let\@place\@empty \else \def\@place{#1,}% \fi } % \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 \cnt{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\env{presentation} % environment, and these environments completely redefine the values % of these style parameters. The values given here will be used only % when a \env{sender}, \env{addressee}, or \env{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 is % the following: % % \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 (just before "\@begin@letter@hook"). 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{\lettername \space \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 \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 } % \end{macrocode} % % \begin{environment}{normalpresentation} % The environment for making a normal presentation: % \begin{macrocode} \newenvironment*{normalpresentation}{% \cleardoublepage \@setup@pres }{% % \end{macrocode} % \changes{0.34}{2006 Jan 01}{At the end of the environment, % changed \protect\texttt{\protect\bslash par} into % \protect\texttt{\protect\bslash @@par}} % Changed the following line from "\par" to "\@@par" (v.~0.34): % \begin{macrocode} \@@par \addpenalty\@e@prespenalty \addvspace\belowpresentationvspace } % \end{macrocode} % \end{environment} % % \begin{macro}{\@nofoldwarning} % Warning issued when folded presentations are not allowed: % \begin{macrocode} \@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% }% }} % \end{macrocode} % \end{macro} % % \begin{environment}{foldedpresentation} % The environment for making a folded presentation, possibly % splitting it into two parts: the part the actually fits in the folded % flap, and the other, which is merged with the text below the % folding. I~think it's better to include some comments here. % \begin{macrocode} \newenvironment*{foldedpresentation}{% % \end{macrocode} % Are folded letters currently allowed? % \begin{macrocode} \if@do@fold@ % \end{macrocode} % \emph{Yes.} First, assure that we are at the beginning of a page; % note that \emph{numbered} pages, here, are inserted if there is a gap % to fill in. % \begin{macrocode} \cleardoublepage % \end{macrocode} % The contents of the presentation will be saved in "\box0": set up % parameters, color support\ldots % \begin{macrocode} \setbox\z@\vbox\bgroup \@setup@pres % \end{macrocode} % \changes{0.34}{2006 Jan 01}{Added setting of % \protect\texttt{\protect\bslash boxmaxdepth} % at the beginning of the environment} % Added the following line (v.~0.34), even if the depth of "\box0" % will be checked later: % \begin{macrocode} \boxmaxdepth\maxdepth % \end{macrocode} % \ldots color support, we were saying\ldots % \begin{macrocode} \color@begingroup % \end{macrocode} % The reason for this "\penalty" will be explained later~($*$): % \begin{macrocode} \penalty-\@M % \end{macrocode} % \changes{0.34}{2006 Jan 01}{Removed a superfluous setting of % \protect\texttt{\protect\bslash prevdepth} % from the beginning of the environment} % Removed the following line (v.~0.34): we have no need to insert % interline glue here, and it is even wrong to do it; we will insert the % "\topskip" glue below with a trick (which, in any case, would remove % the---incorrect---interline glue inserted here). Why did I include % this redundant statement? %\begin{verbatim} %\prevdepth\z@ %\end{verbatim} % \begin{macrocode} \else % \end{macrocode} % \emph{No.} Inform the user and substitute a normal presentation. % \begin{macrocode} \@nofoldwarning \normalpresentation \fi }{% % \end{macrocode} % % When the presentation ends, if we were making a folded % presentation\ldots % \begin{macrocode} \if@do@fold@ % \end{macrocode} % \ldots finish off the box\ldots % \begin{macrocode} \@@par \color@endgroup % \end{macrocode} % \ldots and save its "\prevdepth" for later. % \begin{macrocode} \global\dimen@i\prevdepth % \end{macrocode} % Insert the equivalent of "\foldingfilbreak[0]": if possible, the % "\vsplit" that will later split the presentation should try to split % it here (\emph{i.e.}, not to split it at all). % \begin{macrocode} \@f@ldingfilbreak\@fold@basepenalty % \end{macrocode} % But "\vsplit" might prefer to split the box at the implicit % "\penalty-10000" inserted at its end; avoid this, since it would % defeat the "\vfil" of "\@f@ldingfilbreak":\nobreak\space($**$) % \begin{macrocode} \vskip\maxdimen % "discourage" the break at the \penalty-10000 % \end{macrocode} % End of "\vbox". % \begin{macrocode} \egroup % \end{macrocode} % Now "\box0" contains the presentation, but it lacks the due % "\topskip" glue atop. Of course, we could have inserted the % equivalent (in normal circumstances) of the "\topskip" glue by % setting \[ "\prevdepth" := "\topskip"-"\baselineskip" \] at the % beginning of "\box0", but this does not work always, since it could % insert the "\lineskip" glue instead. We are admittedly whimsical % here, but, in order to achieve exactly the same result yielded by % the "\topskip" glue machinery operated in the main vertical list, we % use the following trick of "\vsplit"'ting "\box0" to \texttt{0pt}. % A legal breakpoint exists for this: it is the "\penalty-10000" % inserted above in~($*$)! This breakpoint comes first in "\box0" and % it is mandatory, so the "\vsplit" operation will stop immediately % (without consuming time); nothing will be actually split off, % everything will remain in "\box0", but with "\splittopskip" glue % added at the top! Moreover, although we set "\boxmaxdepth" inside % "\box0", we check again for possible excess depth (can't figure out % how it could creep in, however). So: % \begin{macrocode} \splitmaxdepth\maxdepth \splittopskip\topskip \setbox\tw@\vsplit\z@ to\z@ % \end{macrocode} % The real splitting of the presentation is done by the following % "\vsplit": the baseline of the first line possibly remaining in % "\box0" after the "\vsplit" must be at a distance of % "\@below@folding@skip" from the folding, plus the "\parskip" glue % and, of course, the normal interline glue (we are in mid-page now). % \begin{macrocode} \splittopskip\baselineskip \advance\splittopskip\@below@folding@skip \advance\splittopskip\parskip \setbox\tw@\vsplit\z@ to\@folding@ht % \end{macrocode} % Now "\box2" contains the part of the presentation that does fit % in the folded flap; we append this box to the page (actually, it is the % first thing contributed since the "\cleardoublepage"). Since % this box already includes "\topskip" glue at the % top, no further interline glue must be inserted above it. % \begin{macrocode} \nointerlineskip \box\tw@ % \end{macrocode} % Thanks to the above setting of "\splitmaxdepth", we are sure that % the depth of the previous box is small; so the following line will % take us exactly on the edge of the fold, with null depth\ldots % \begin{macrocode} {\baselineskip\@above@folding@margin \nobreak\null}% % \end{macrocode} % \ldots where we insert a costly, yet feasible breakpoint. % \begin{macrocode} \penalty\@highpenalty % \end{macrocode} % If everything fitted in the folded flap, nothing remained in % "\box0". % \begin{macrocode} \ifvoid\z@ % \end{macrocode} % In that case, just leave appropriate blank space (the "\prevdepth" % is already zero, so the interline glue of the following line will be % correct). % \begin{macrocode} \vskip\@below@folding@skip % \end{macrocode} % Otherwise, take the part that did not fit out of "\box0"\ldots % \begin{macrocode} \else \unvbox\z@ % \end{macrocode} % \ldots so it is now in the list of ``recent contributions'' % ("\unvbox" does not exercise the page builder); remove the % "\vskip\maxdimen" added in~($**$) just to fool "\vsplit", as well as % the items added by the virtual "\foldingfilbreak[0]". % \begin{macrocode} \unskip % remove "\vskip\maxdimen" \unpenalty % remove "\penalty\@fold@basepenalty" \unskip % remove "\vskip \dimen@ plus 1fil minus ..." \unskip % remove "\vskip -\skip@" \unpenalty % remove "\penalty 10000" % \end{macrocode} % Now the list of ``recent contributions'' contains exactly what the % user put in the presentation (and did not fit in the folded flap). % Restore "\prevdepth" and conclude as if it were a normal % presentation: this makes a perfectly seamless join with the % following material, as if the folded presentation had been a normal % one, extending down to this spot in the page. ^^A ( paren match % Not bad, uhu?~:-) % \begin{macrocode} \prevdepth\dimen@i \addpenalty\@e@prespenalty \addvspace\belowpresentationvspace % \end{macrocode} % Ah, yes, also inform the user of what happened: % \begin{macrocode} \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 % \end{macrocode} % If we were not making a folded presentation, then conclude a % normal one. % \begin{macrocode} \else \endnormalpresentation \fi } % \end{macrocode} % \end{environment} % % Back to uncommented code. % \begin{macrocode} \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}% } % \end{macrocode} % % \begin{macro}{\@f@ldingfilbreak} % The ``upper half'' of "\@foldingfilbreak". % \begin{macrocode} \@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% }} % \end{macrocode} % \end{macro} % % \begin{macrocode} \@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[1][\z@]{% \@foldingfilbreak{\@fold@getpen{#1}}% } \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][\@place]{\@make@date{#1}NN} \newcommand*\maketopdate [1][\@place]{\@make@date{#1}NY} \newcommand*\makebottomdate[1][\@place]{\@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][\@place]{% \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}% } % \end{macrocode} % % \begin{macro}{\stopletter} % User-level hook invoked (before anything else) when a letter ends. % \begin{macrocode} \newcommand*\stopletter{} % \end{macrocode} % \end{macro} % % \subsubsection{Address labels} % % This part of the code should probably be detached and put in a % separte file to be loaded on demand. % % The general idea is the following: % \begin{itemize} % \item % a \env{labels} (or \env{baselabels}, see below) environment % produces one or more sheets of address labels; % \item % inside \env{labels}, several \env{labelgroup} environments wrap up % the address labels pertaining to each letter (a letter may have % several address labels associated with it, if it has several % addressees); % \item % inside each \env{labelgroup} environment, individual labels are % produced with the "\basemlabel" command. % \end{itemize} % The \env{labels} environment takes care of such things like jumping % to a new page, etc.; the \env{labelgroup} environment merely changes % the way address labels are numbered, but does not otherwise affect % the printout. % % The user may either: % \begin{enumerate} % \renewcommand*{\theenumi}{(\Alph{enumi})} % \renewcommand*{\labelenumi}{\theenumi} % \item\label{autolabels} % include a "\makelabels" declaration in the preamble, to have % address labels generated automatically via the \filedir{.aux} % file; in this case, appropriate commands are written in the % \filedir{.aux} file by each % \env{baseletter} environment, which, when the \filedir{.aux} file % is re-read at the "\end{document}", automatically generate the % required environments and commands (\env{labels}, % \env{labelgroup}, etc.); \emph{or} % \item\label{handlabels} % produce the address labels ``by hand'', including directly in the % source file, where (s)he want the address label sheets to appear, a % \env{labels} environment, containing the appropriate % \env{labelgroup} environments, containing, in turn, the individual % "\basemlabel" commands. % \end{enumerate} % In principle, it is also possible to mix \ref{autolabels} % and~\ref{handlabels} (and to have several \env{labels} % environments, too), but this has no practical utility. % % \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 \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 } % \end{macrocode} % % \begin{environment}{baselabels} % This is the actual environment for producing sheets of address % labels: the \env{labels} environment (see below) is simply a wrapper % that offers to the user the opportunity of changing some settings % before invoking \env{baselabels}. % \begin{macrocode} \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 } % \end{macrocode} % \end{environment} % % \begin{environment}{labels} % It is the user-level environment for producing one or more sheets of address labels. % Its default definition simply invokes \env{baselables}, but the % user may redefine it to set some style parameters. For example: %\begin{verbatim} %\renewenvironment{labels}{% % \baselabels % \setlength\fboxrule{.2pt}% % \addtolength\fboxsep{-2\fboxrule}% %}{\endbaselabels} %\end{verbatim} % will draw a thin border around each address label. % \begin{macrocode} \newenvironment*{labels}{\baselabels}{\endbaselabels} % \end{macrocode} % \end{environment} % % Back to uncommented code. % \begin{macrocode} \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}% } % \end{macrocode} % % \begin{macro}{\ifactuallabel} % Macro for the user: "\ifactuallabel{"\meta{FOO}"}{"\meta{BAR}"}" % executes \meta{FOO} if the label is not being skipped, \meta{BAR} % otherwise. % \begin{macrocode} \let\ifactuallabel\@firstoftwo % \end{macrocode} % \end{macro} % % \begin{macrocode} \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*\lettername {Lettera} \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} % % \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} [2006/01/01 v0.34 (development)] %% \typeout{Copyright (C) 1999-2006 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} % % \begin{macro}{\@letter@bookmark} % Support for pdf\TeX\slash\packlass{\hyperref}. If pdf\TeX\ is % being used to typeset the document, if the \packlass{\hyperref} % package is loaded, and if the user does not ask us to avoid it, we % shall generate a ``level~0'' bookmark for each letter we shall % typeset (sections are of level~1, so they will be bookmarked under % letters). This command serves to this purpose: it is defined either % as "\@gobbletwo", if such bookmarks are \emph{not} being generated, % or as a suitable invocation of "\pdfbookmark" if they are. To begin % with, we set the former alternative, which makes it act as a no-op. % \begin{macrocode} \@ifdefinable\@letter@bookmark{\let\@letter@bookmark\@gobbletwo} % \end{macrocode} % \end{macro} % % 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 } % \end{macrocode} % The option \opz{letterbookmarks} causes the bookmarks for letters to % be generated. Upon expansion, the 2~arguments of % "\@letter@bookmark" will become arguments of "\pdfbookmark". We % also need to ask the \packlass{\hyperref} package to generate closed % bookmarks. Note that the user can later overwrite this setting; % note also that nothing will happen if \packlass{\hyperref} is not % loaded later. % \begin{macrocode} \DeclareOption{letterbookmarks}{% \def\@letter@bookmark{\pdfbookmark[0]}% \PassOptionsToPackage{bookmarksopen=false}{hyperref}% } % \end{macrocode} % The option \opz{noletterbookmarks} supresses the bookmarks for % letters. % \begin{macrocode} \DeclareOption{noletterbookmarks}{% \let\@letter@bookmark\@gobbletwo } % \end{macrocode} % The option \opz{openletterbookmarks} causes the bookmarks for % letters to be generated and to be presented open to the reader. We % ask the \packlass{\hyperref} package to generate open bookmarks, but % only one level deep. Note that the user can later overwrite this % setting. This is made the default option, below. % \begin{macrocode} \DeclareOption{openletterbookmarks}{% \def\@letter@bookmark{\pdfbookmark[0]}% \PassOptionsToPackage{bookmarksopen,bookmarksopenlevel=1}{hyperref}% } \DeclareOption*{\PassOptionsToClass{\CurrentOption}{letteracdp}} % \end{macrocode} % % \subsection{Option processing} % % \begin{macrocode} \ExecuteOptions{plaintoc,openletterbookmarks} \ProcessOptions\relax % \end{macrocode} % % \subsection{Class loading} % % \begin{macrocode} \LoadClass{letteracdp}[2006/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} % % Stuff for dealing with the \packlass{\hyperref} package. The % problem is our non-standard hierarchy of sectioning commands, with % paragraphs placed directly below sections. In this version (0.34) we % choose a different approach than the one we adopted in version 0.33, % redefining "\theHparagraph"; of course, this must be done % \emph{after} \packlass{\hyperref} has been loaded, and we could not % find any better place for this than the "\AtBeginDocument" hook. % Within the same hook, we also redefine "\theHsection" (the counter % used by \packlass{\@hyperref} to generate hyperlinks to sections) so % that sections with the same number, but included in different % letters, will have different anchors; we fix the bookmark level for % paragraphs, too. % \begin{macrocode} \AtBeginDocument{% \def\theHletter{\arabic{letter}}% \@ifpackageloaded{hyperref}{% \def\theHparagraph{\theHsection.\arabic{paragraph}}% \def\theHsection{\theHletter.\arabic{section}}% \def\toclevel@paragraph{2}% }{% % \end{macrocode} % If the \packlass{\@hyperref} package is not loaded, we assure that % "\@letter@bookmarks" acts as a no-op: % \begin{macrocode} \let\@letter@bookmark\@gobbletwo }% } % \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 (because it looks for \filedir{.toc}, \filedir{.lof}, % etc.\ files, not for, say, \filedir{.toc1}, etc.), 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 } % \end{macrocode} % % The "\@begin@letter@hook" macro is invoked whenever a letter % starts; we want (possibly, see above) a bookmark to be generated for % the letter. Note that we use "\theletter" for the letter number % presented to the user, and "\theHletter" for the number used to % generate the anchor. % \begin{macrocode} \g@addto@macro\@begin@letter@hook{% \edef\@cdp@reserved{% \noexpand\@letter@bookmark {\lettername\space\theletter}{letter.\theHletter}% }% \@cdp@reserved % \end{macrocode} % % Actions for closing a set of toc/lof/lot file and opening another: % \begin{macrocode} \if@filesw {\escapechar\m@ne \immediate\write\@out@table@list{\string\}^^J\string\{}% }% \immediate\write\@auxout {\string\@deferred@clopen{\number\c@letter}}% \fi } % \end{macrocode} % % Uncommented code. % \begin{macrocode} \@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 {1\bigskipamount plus 2 fil} \setlength \@fpbot {\z@ plus 1 fil} \setlength \@dblfptop {\@fptop} \setlength \@dblfpsep {\@fpsep} \setlength \@dblfpbot {\@fpbot} \setlength\abovecaptionskip{\medskipamount} \setlength\belowcaptionskip{\z@skip} % \end{macrocode} % % \subsubsection{Title, section heads, figures, bibliography\ldots} % % \begin{macro}{\maketitle} % Without the \packlass{\@hyperref} package, the "\maketitle" % command can take the same optional argument as "\maketopdate", for % specifying a short string to be prepended to the date; and in this % case, the new "\place" declaration will be automatically honored. % But the former feature will break if \packlass{\@hyperref} is % loaded, and no remedy seems feasible for this, since % \packlass{\@hyperref} assumes that "\maketitle" hasn't got any % arguments. Note also that a period is automatically added to the % title. % \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 } % \end{macrocode} % \end{macro} % % Uncommented code. % \begin{macrocode} \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} % % \end{macrocode} % % \section{The code for the \packlass{\adiseal} package} % % This part of the file goes into \filedir{\adiseal.sty}. % \emph{Very obsolete:} eliminate? % \begin{macrocode} %<*adipk> % \end{macrocode} % % \subsection{Identification} % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1998/06/01] % LaTeX2e is required! \ProvidesPackage{adiseal} [2006/01/01 v0.34 (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} % \changes{0.34}{2006 Jan 01}{Got rid of the \filedir{.eps} extension % in the name of the file of the ADI seal: thus, the extension % \filedir{.eps} or \filedir{.pdf} will be automatically supplied % by the \packlass{epsgif} package according to the actual % typesetting engine employed (\TeX\ or pdf\TeX)} % 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. \emph{Note:} the image must be contained % in a file in Encapsulated PostScript format or, for pdf\TeX, in % Portable Document Format, and it should be exactly \( 60\,\mbox{bp} \) % wide by \( 42\,\mbox{bp} \) tall. The appropriate file extension % will be supplied by the \packlass{epsfig} package. % \begin{macrocode} \@ifdefinable\@seal@graph@file{\def\@seal@graph@file{% adiseal% must be an EPS or a PDF file }} % \end{macrocode} % \end{macro} % % \begin{macro}{\if@use@pixmap@} % 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} % \end{macro} % % \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.eps}{% \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} % % \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 occupies 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} [2006/01/01 v0.34 (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}[2006/01/01] \RequirePackage{adiseal}[2006/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} % % \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} [2006/01/01 v0.34 (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 has been removed from the code, since the % bookmark level for paragraphs is now fixed in the file % \filedir{\articoletteracdp.cls} (v.~0.34). %\begin{verbatim} %\def\toclevel@paragraph{2} %\end{verbatim} % 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 % either 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} % % \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}[2006/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} % % \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}[2006/01/01 Printer-dependent file] \definecolor{slight@col}{rgb}{.8,1,.8} \definecolor{strong@col}{rgb}{0,.266667,0} % % \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}[2006/01/01 Printer-dependent file] \definecolor{slight@col}{cmyk}{.1,0,.1,0} \definecolor{strong@col}{cmyk}{.5,0,.5,.5} % % \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. % % \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 %