%%-*- LaTeX -*-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % cjwenv.cls % % % Class file for typesetting envelopes. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Title: cjwenv.cls % Author: Colin J. Wynne % Date: Tue Dec 31 13:10:56 1996 % Last Rev.: % % Usage: % % Here is an example: % % \documentclass[business,11pt]{cjwenv} % \address{% % My Home Address \\ % Street Name \\ % City, ST ZIP} % % \begin{document} % \begin{envelope}[c]{% % Prof. Peter Schickele \\ % USND Hoopole \\ % Hoopole, ND 12345} % \end{envelope} % % \begin{envelope}{% % Dr. Seuss \\ % Whoville, ?? 67890} % \address[c]{% % Horton \\ % Lost \\ % Hoboken, NJ 13579} % \end{envelope} % % \end{document} % Declare the file version and date. \def\fileversion{1.1} \def\filedate{1998/10/5} % Identify the class. \NeedsTeXFormat{LaTeX2e} \ProvidesClass{cjw-env}% [\filedate\space v\fileversion\space Envelope Class---CJW] % My printer puts the top of the landscape page on the opposite side % of the printer from the envelope feed. Therefore, we offer the % option of putting the output at the bottom of a standard page. \newif \if@atbottom \@atbottomfalse % We set an envelope type with the following macro. \newcommand{\envtype}[1]{% \renewcommand{\do@envelope}{\csname env@#1\endcsname}} \newcommand{\do@envelope}{} % Class options: % % For business envelopes. Other types should be handled thusly. \DeclareOption{business}{\envtype{business}} % For 6.5" business envelopes. \DeclareOption{narrow}{\envtype{narrow}} % For bottom printing. \DeclareOption{bottom} {\@atbottomtrue} % Default: pass to article. \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} % Pick a default envelope type. \ExecuteOptions{business} \ProcessOptions % Load primary class. \LoadClass[12pt]{article} % All we care about is hieght, width, and offsets. Zero out % everything else. \newcommand{\reset@page}{% \setlength{\oddsidemargin} {0.0pt} \setlength{\topmargin} {0.0pt} \setlength{\headheight} {0.0pt} \setlength{\headsep} {0.0pt} \setlength{\marginparsep} {0.0pt} \setlength{\marginparwidth} {0.0pt} \setlength{\footskip} {0.0pt} % \setlength{\parskip} {0.0pt} \setlength{\parindent} {0.0pt} % \setlength{\textwidth} {\paperwidth} \addtolength{\textwidth} {-1.0in} \setlength{\textheight} {\paperheight} \addtolength{\textheight} {-1.0in} } % This is the business envelope code. \newcommand{\env@business}{% % Introduce a postscript special for landscape printing. \special{landscape} % Swap the height and width in TeX to match the landscape orientation. \setlength{\@tempdima} {\paperheight} \setlength{\paperheight} {\paperwidth} \setlength{\paperwidth} {\@tempdima} % % Our business envelope has physical height of 4.125", and we will % leave a half inch on either side as a margin. \setlength{\textheight} { 3.125in} \setlength{\voffset} {-0.500in} % For bottom printing: \if@atbottom % This calculates the \voffset necessary to put the *physical* % bottom off the envelope (half inch below printable area) flush % bottom on the physical (landscap) page. \setlength{\@tempdima} {\paperheight} \addtolength{\@tempdima}{-1.0in} \setlength{\@tempdimb} {\textheight} \addtolength{\@tempdimb}{-\voffset} \addtolength{\@tempdima}{-\@tempdimb} % \setlength{\voffset} {\@tempdima} \fi % We leave 0.75" horizontal margin on either side of a 9.5" % envelope. \setlength{\textwidth} { 8.000in} \setlength{\hoffset} {-0.250in} } % For a narrow (3.625" x 6.5") business envelope. \newcommand{\env@narrow}{% % Introduce a postscript special for landscape printing. \special{landscape} % Swap the height and width in TeX to match the landscape orientation. \setlength{\@tempdima} {\paperheight} \setlength{\paperheight} {\paperwidth} \setlength{\paperwidth} {\@tempdima} % % Our envelope has physical height of 3.625", and we will % leave a quarter inch on either side as a margin. \setlength{\textheight} { 3.125in} \setlength{\voffset} {-0.250in} % For bottom printing: \if@atbottom % This calculates the \voffset necessary to put the *physical* % bottom off the envelope (quarter inch below printable area) % flush bottom on the physical (landscap) page. \setlength {\@tempdima}{\paperheight} \addtolength{\@tempdima}{-1.000in} \setlength {\@tempdimb}{\textheight} \addtolength{\@tempdimb}{-\voffset} \addtolength{\@tempdima}{-\@tempdimb} % \setlength{\voffset} {\@tempdima} \fi % We leave 0.5" horizontal margin on either side of a 6.5" % envelope. \setlength{\textwidth} { 5.50in} \setlength{\hoffset} {-0.50in} } % How the sender's address is input. By default, it will be flush % left/ragged right. An appropriate optional argument may be given. \newcommand{\address}[2][l]{% \gdef\@address{#2}\gdef\from@align{#1}} \address{} % This does the actual page setup at the end of the preamble. It must % be done here and not after the \begin{document} in order for all the % page parameters to work out, it seems. \AtBeginDocument{% \reset@page\do@envelope} % The envelope environment sets the actual envelope. Mandatory % argument is the recipient's address. Optional argument changes the % alignment of that adress. There should probably be nothing in the % actual environemnt, though in printing numerous envelopes one could % put different return addresses in, or perhaps additional typesetting % commands. \newenvironment{envelope}[2][l]% {\gdef\@recipient{#2}\gdef\recip@align{#1}} {\do@envelope\clearpage \thispagestyle{empty} \vtop to \textheight{ \hbox{% \begin{tabular}{\from@align} \@address \end{tabular}} \vfill \hbox to \textwidth{\hss \begin{tabular}{\recip@align} \@recipient \end{tabular}\hss} \vfill}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%