Version 1.0
[mspang/csc-poster.git] / letterhead.sty
1 %% This is letterhead.sty, which is the LaTeX 2e package for defining
2 %% custom letterheads.
3 %% Copyright (C) 2003  Simon Law
4 %%
5 %% This program is free software; you can redistribute it and/or modify
6 %% it under the terms of the GNU General Public License as published by
7 %% the Free Software Foundation; either version 2 of the License, or
8 %% (at your option) any later version.
9 %%
10 %% This program is distributed in the hope that it will be useful,
11 %% but WITHOUT ANY WARRANTY; without even the implied warranty of
12 %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 %% GNU General Public License for more details.
14 %%
15 %% You should have received a copy of the GNU General Public License
16 %% along with this program; if not, write to the Free Software
17 %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 %%
19 %% Requirements: You must have tetex-extra installed on your system.
20 %% This package should be used in conjunction with letter.cls.
21 %%
22 %% Changelog:
23 %%   Version 1.0
24 %%   * Initial release.
25 %%   -- Simon Law <sfllaw@engmail.uwaterloo.ca>
26
27 \NeedsTeXFormat{LaTeX2e}
28 \ProvidesPackage{letterhead}[2003/01/19 v1.0]
29
30 %%%%%%%%%%%%%%%%%
31 %% DEFINE LENGTHS
32 %%%%%%%%%%%%%%%%%
33 % We should eat up half an inch of margin so that the letterhead does
34 % not invade as much of the page.
35 \newlength{\letterheadheight}
36 \setlength{\letterheadheight}{-0.5in}
37
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 %% DEFINE HEADER AND FOOTER SUBSTITUTIONS
40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41 % The default header is empty, just like the standard letter.cls.
42 \newcommand*{\letterhead}{\empty}
43 % The default footer is just like the standard letter.cls.
44 \newcommand*{\letterfoot}{%
45   \hspace*{100pt}\vspace*{45pt}%
46   \fromlocation \hfill \telephonenum%
47 }
48
49 %%%%%%%%%%%%%%%%%%%%%%%%%%%
50 %% DEFINE NEW SUBSTITUTIONS
51 %%%%%%%%%%%%%%%%%%%%%%%%%%%
52 \newcommand*{\office}[1]{\def\fromoffice{#1}}
53 \newcommand*{\subject}[1]{\def\thesubject{#1}}
54 \office{}
55 \subject{}
56
57 %%%%%%%%%%%%%%%%%%%%%%
58 %% DEFINE LETTERSTYLES
59 %%%%%%%%%%%%%%%%%%%%%%
60 % There are three business letter styles in common use:
61 %  - Full block: all text is flush against the left margin.
62 %  - Semi-block: the sender's address, date, and signature are indented.
63 %  - Modified:   Like semi-block, only the paragraph text is indented as well.
64 \newcommand*{\letterstyle}[1]{%
65   \@ifundefined{ls@#1}%
66     \undefinedletterstyle
67   {\@nameuse{ls@#1}}%
68 }
69 \newcommand*{\ls@full}{\noindentfrom\noindentsig\setlength{\parindent}{0pt}}
70 \newcommand*{\ls@semi}{\indentfrom\indentsig\setlength{\parindent}{0pt}}
71 \newcommand*{\ls@modified}{\indentfrom\indentsig\setlength{\parindent}{20pt}}
72
73 %%%%%%%%%%%%%%%%%%%%%%%
74 %% DEFINE THE PAGESTYLE
75 %%%%%%%%%%%%%%%%%%%%%%%
76 % \pagestyle{firstpage} is used by letter.cls for the first page of each
77 % letter.
78 \def\ps@firstpage{%
79   \def\@oddhead{%
80     % Use a smaller font that usual, and scale it to be consistent.
81     \ifcase \@ptsize\relax
82       \normalsize
83     \or
84       \small
85     \or
86       \footnotesize
87     \fi
88     % Display the letterhead
89     \parbox{\textwidth}{\vspace*{\letterheadheight}\letterhead}%
90   }
91   \def\@oddfoot{%
92     \hb@xt@\textwidth{%
93       % Use a smaller font that usual, and scale it to be consistent.
94       \ifcase \@ptsize\relax
95         \footnotesize
96       \or
97         \scriptsize
98       \or
99         \scriptsize
100       \fi
101       % Display the footer.
102       \parbox{\textwidth}{\letterfoot}%
103     }%
104   }%
105   \hss%
106 }
107
108 %%%%%%%%%%
109 %% OPENING
110 %%%%%%%%%%
111 % @indentfrom is used to determine if the sender's address and date should
112 % be indented.
113 \newif \if@indentfrom \@indentfromtrue
114 \newcommand*{\noindentfrom}{\@indentfromfalse}
115 \newcommand*{\indentfrom}{\@indentfromtrue}
116
117 % Redefine \opening to respect @indentfrom, and put in \noindent commands
118 % to support proper handling of \parindent.
119 \renewcommand*{\opening}[1]{%
120   \thispagestyle{firstpage}%
121   \noindent
122   \ifx\@empty\fromaddress{%
123     \if@indentfrom\raggedleft\fi%
124     \@date\par%
125   }%
126   \else{% home address
127     \if@indentfrom\raggedleft\fi%
128     \begin{tabular}{@{}l@{}}%
129       \ignorespaces
130       \fromaddress \\*[2\parskip]%
131       \@date%
132     \end{tabular}\par%
133   }%
134   \fi%
135   \vspace{2\parskip}%
136   {\raggedright \toname \\ \toaddress \par}%
137   \vspace{2\parskip}%
138   % Added subject handling, for really formal business letters.
139   \ifx\@empty\thesubject\else%
140     \centerline{\bfseries \thesubject}\par%
141     \vspace{2\parskip}\fi%
142   \noindent#1\par\nobreak%
143 }
144
145 %%%%%%%%%%
146 %% CLOSING
147 %%%%%%%%%%
148 % @indentsig is used to determine if the signature block should be indented.
149 \newif \if@indentsig \@indentsigtrue
150 \newcommand*{\noindentsig}{\@indentsigfalse}
151 \newcommand*{\indentsig}{\@indentsigtrue}
152
153 % Redefine \opening to respect @indentsig.
154 \renewcommand{\closing}[1]{%
155   \par\nobreak\vspace{\parskip}%
156   \stopbreaks
157   \noindent
158   \if@indentsig
159     \hspace*{\longindentation}%
160   \fi
161   \parbox{\indentedwidth}{%
162     \raggedright
163     \ignorespaces #1\\[6\medskipamount]%
164     % Added office handling, so that it can automatically put in your title.
165     \ifx\@empty\fromsig
166       \fromname \\ \fromoffice
167     \else \fromsig \fi\strut%
168   }%
169   \par%
170   \vspace{2\parskip}%
171 }
172
173 % Redefine the \ps command to make postscripts always flush left.
174 \renewcommand{\ps}{\par\startbreaks\noindent}
175
176 \endinput