% CPES/WEMPEC/UW-Madison Slide Class...
%
% By Eric Benedict, 26 September 2000
% WEMPEC, UW-Madison
%
%===============================================

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{uwmslide}[2000/09/26 Univ. WI-Madison Slide Format]
%Pass options onto the slides class
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{slides}}
\ProcessOptions\relax
\LoadClass{article}
\RequirePackage{epsfig}
\usepackage{times}		% Times works good for *.pdf conversions

% Define a flag, \@@slide, to indicate if the current slide
%  should include a \newpage command, 1=include it, 0=don't
\newcount\@@slide
\global\@@slide=1

% Define the 'adjustment' for the first slide after the title
% slide.  Its a dirty trick, but seems to work...
\newlength{\@@adjslide}
\setlength{\@@adjslide}{-1.5in}


% Define the width of the left half of the slide
%\newdimen{\@@leftslidewidth}
%\global\@@leftslidewidth=4.25in  % define a default, just to be safe
\newlength{\@@leftslidewidth}
\setlength{\@@leftslidewidth}{4.25in}  % define a default, just to be safe
\newlength{\@@rightslidewidth}



% Define a flag, \@@slidetype to indicate the type of double
% item slide which is being used.
%  0 = Not being used --> \slidedivider generates error msg
%  1 = plain doubleslide
%  2 = leftitem
%  3 = rightitem
%  4 = doubleitem
\newcount\@@slidetype
\global\@@slidetype=0	

%==========================
% Set the paper size
%===========================
\setlength\paperheight{8.5in}
\setlength\paperwidth{11in}
\special{! /landplus90 true store} % rotate 90 deg clockwise in dvips
\special{landscape} % set the paper size for dvips
\setlength\textwidth{9.5in}
\setlength\textheight{6in}
\setlength\hoffset{-0.25in}
\setlength\voffset{-0.25in}
\setlength\oddsidemargin{0in}
\setlength\evensidemargin{0in}

\setlength\footskip{2bp}



% Enlarge the headheight for the logo
\setlength\headheight{74bp}
\setlength\topmargin{-37bp}

% Place the logo and rules for the header/footers.
\IfFileExists{logo.eps}{
\renewcommand{\@oddhead}{\vbox{\psfig{file=logo.eps,height=72bp} \hfill\\[1.5bp] \rule{\textwidth}{0.4bp}}}
\renewcommand{\@evenhead}{\vbox{\psfig{file=logo.eps,height=72bp} \hfill\\[1.5bp] \rule{\textwidth}{0.4bp}}}
} % Logo file exists
{\ClassWarning{uwmslide}{Logo file logo.eps not found.\MessageBreak  Omitting logo in header}
\renewcommand{\@oddhead}{\rule{\textwidth}{0.4bp}}
\renewcommand{\@evenhead}{\rule{\textwidth}{0.4bp}}
} % Logo file AWOL...
%
\renewcommand{\@oddfoot}{\parbox{\textwidth}{\rule{\textwidth}{0.4pt} \\[1pt]  \rule{1pt}{0pt}\hfill {\rm \thepage}}}
\renewcommand{\@evenfoot}{\parbox{\textwidth}{\rule{\textwidth}{0.4pt} \\[1pt] \rule{1pt}{0pt}\hfill {\rm \thepage}}}



%================================
%
%  Define the larger font sizes appropriate for slides
%   (copied from the slitex.cls file...)
%
%================================
\def\ifourteenpt{14.4}
\def\iseventeenpt{17.28}
\def\itwentypt{20.74}
\def\itwentyfourpt{24.88}
\def\itwentyninept{28.66}
\def\ithirtyfourpt{34.4}
\def\ifortyonept{41.28}
\def\@setfontsize@parms#1#2#3#4#5#6#7#8{%
   \lineskip #1\relax%
   \parskip #2\relax
   \abovedisplayskip #3\relax
   \belowdisplayskip #4\relax
   \abovedisplayshortskip #5\relax
   \belowdisplayshortskip #6\relax
  \setbox\strutbox=\hbox{\vrule \@height#7\p@\@depth#8\p@\@width\z@}%
  \baselineskip\baselinestretch\baselineskip
  \normalbaselineskip\baselineskip}
\DeclareMathSizes{13.82}{13.82}{10}{7}
\DeclareMathSizes{16.59}{16.59}{12}{7}
\DeclareMathSizes{19.907}{19.907}{16.59}{13.82}
\DeclareMathSizes{23.89}{23.89}{19.907}{16.59}
\DeclareMathSizes{28.66}{28.66}{23.89}{19.907}
\DeclareMathSizes{34.4}{34.4}{28.66}{23.89}
\DeclareMathSizes{41.28}{41.28}{34.4}{28.66}
\renewcommand{\normalsize}{%
      \@setfontsize\normalsize\itwentypt{28\p@ plus3\p@ minus4\p@}%
      \@setfontsize@parms
            {2pt}%
            {30\p@ plus18\p@ minus9\p@}%
            {15\p@ plus3\p@ minus3\p@}%
            {10\p@ plus3\p@ minus3\p@}%
            {10\p@ plus3\p@}
            \abovedisplayshortskip
            {17}{7}}
\normalsize
\renewcommand{\small}{\@setfontsize\small\iseventeenpt{19\p@ plus3\p@ minus\p@}%
           \@setfontsize@parms
            {2\p@}%
            {15\p@ plus15\p@ minus7\p@}%
            {12\p@ plus3\p@ minus3\p@}%
            {9\p@ plus3\p@ minus3\p@}%
            {6\p@ plus3\p@}%
            \abovedisplayshortskip
            {13.5}{5.6}}
\let\footnotesize=\small
\let\scriptsize=\small
\renewcommand{\tiny}{\@setfontsize\tiny\ifourteenpt{16\p@ plus2\p@ minus\p@}%
          \@setfontsize@parms
            {2pt}%
            {14\p@ plus3\p@ minus10\p@}%
            {11\p@ plus3\p@ minus10\p@}%
            \abovedisplayskip
            {8\p@ plus3\p@ minus5\p@}%
            {\z@ plus3\p@}%
            {10}{4}}
\renewcommand{\large}{\@setfontsize\large\itwentyfourpt{42\p@ plus8\p@ minus5\p@}%
           \@setfontsize@parms
            {2\p@}%
            {40\p@ plus20\p@ minus4\p@}%
            {20\p@ plus8\p@ minus3\p@}%
            \abovedisplayskip
            {10\p@ plus5\p@}%
            \abovedisplayshortskip
            {20}{8.5}}

\renewcommand{\Large}{\@setfontsize\Large\itwentyninept{48\p@ plus10\p@ minus6\p@}%
           \@setfontsize@parms
            {2\p@}%
            {48\p@ plus30\p@ minus6\p@}%
            {24\p@ plus10\p@ minus6\p@}%
            \abovedisplayskip
            {12\p@ plus8\p@}%
            \abovedisplayshortskip
            {27}{11}}

\renewcommand{\LARGE}{\@setfontsize\LARGE\ithirtyfourpt{52\p@ plus10\p@ minus6\p@}%
           \@setfontsize@parms
            {2\p@}%
            {52\p@ plus30\p@ minus6\p@}%
            {24\p@ plus10\p@ minus6\p@}%
            \abovedisplayskip
            {12\p@ plus8\p@}%
            \abovedisplayshortskip
            {27}{11}}

\renewcommand{\huge}{\@setfontsize\huge\ifortyonept{60\p@ plus10\p@ minus6\p@}%
           \@setfontsize@parms
            {2\p@}%
            {60\p@ plus30\p@ minus6\p@}%
            {24\p@ plus10\p@ minus6\p@}%
            \abovedisplayskip
            {12\p@ plus8\p@}%
            \abovedisplayshortskip
            {27}{11}}

\let\Huge\huge
\renewcommand\baselinestretch{}
\setlength\parindent{\z@}



%======================================================
% Adjust the spacing in between the list items (@listi=1st level,  ii=2nd
% level, etc).
%======================================================
\renewcommand{\@listi}{{\leftmargin\leftmargini
            \parsep .25\parskip
            \topsep \parsep
            \itemsep\parskip
            \partopsep \z@}}
\renewcommand{\@listii}{{\leftmargin\leftmarginii
             \labelwidth\leftmarginii
             \advance\labelwidth-\labelsep
             \parsep .2\parskip
             \topsep \parsep
             \itemsep\parskip}}
\renewcommand{\@listiii}{{\leftmargin\leftmarginiii
              \labelwidth\leftmarginiii
              \advance\labelwidth-\labelsep}}
\renewcommand{\@listiv}{{\leftmargin\leftmarginiv
             \labelwidth\leftmarginiv
             \advance\labelwidth-\labelsep}}
\renewcommand{\@listv}{{\leftmargin\leftmarginv
            \labelwidth\leftmarginv
            \advance\labelwidth-\labelsep}}
\renewcommand{\@listvi}{{\leftmargin\leftmarginvi
             \labelwidth\leftmarginvi
             \advance\labelwidth-\labelsep}}




%=============================================================================
% TITLEPAGE
%  Re-define the footer so that it has the rule line, but no number at
%  the start of the titlepage, then add the page number back in the 
%  footer for the rest of the slides...
%=============================================================================
\renewenvironment{titlepage}{%
\renewcommand{\@oddfoot}{\vbox{\rule{\textwidth}{0.4pt} \\[1pt]  \rule{1pt}{0pt}}}
 \newpage }{%
 \newpage 
 }

%=====================================================================
% MAKETITLE 
%   Adjust the \maketitle command slightly for slide usage
%=====================================================================
\renewcommand{\maketitle}{%
  \begin{titlepage}
    \let\footnotesize\large \let\footnoterule\relax \let\footnote\thanks
    \null\vfill
   \begin{center}%
    {\Large \@title \par}%
    \vskip 3em%
    {\large
       \begin{tabular}[t]{c}%
        \@author
      \end{tabular}\par}%
    {\large \@date \par}%       % Set date in \large size.
  \end{center}%\par
    \@thanks
    \vfill\null
  \end{titlepage}
  \setcounter{footnote}{0}
  \setcounter{page}{1} %title page is NOT counted
  \let\thanks\relax
  \let\maketitle\relax \
  \gdef\@thanks{}
  \gdef\@author{}
  \gdef\@title{}
  \global\@@slide=0 % Set flag to indicate that the title page fix is
%                   % required for the next slide
}





%===================================================
%  Slide Environment
%
%   This environment creates a generic slide which
%   has a title centered in Huge text at the top
%   and the remaining body left unconstrained.
%
%===================================================
\newenvironment{slide}[1]{%
\ifnum\@@slide=0   % Check for 1st slide
  \global\@@slide=1  % Set flag so we won't come back
  \vspace*{\@@adjslide}     % Dirty trick to fix the offset which
%                    %  appears on the 1st after the title slide...
\else
  \newpage
\fi%
{\Huge \begin{center} #1\end{center}}
}
{}




%===================================================
%  Item Slide Environment
%
%   This environment creates a slide which
%   has a title centered in Huge text at the top
%   and the remaining body consisting of an itemized
%   list.
%
%===================================================
\newenvironment{itemslide}[1]{% \begin{itemslide} things
\ifnum\@@slide=0   % Check for 1st slide
  \global\@@slide=1  % Set flag so we won't come back
  \vspace*{\@@adjslide}     % Dirty trick to fix the offset which
%                    %  appears on the 1st after the title slide...
\else
  \newpage
\fi%
{\Huge \begin{center} #1\end{center}}
\begin{itemize}
}
{\end{itemize}
}%\end{itemslide} things




%===================================================
%
%   \slidedivider is used by the multiple-side items 
%   to seperate the left and right hand sides of each
%   slide.
%
%===================================================
\newcommand{\slidedivider}{%
\setlength\@@rightslidewidth{\m@ne\@@leftslidewidth}
\global\addtolength{\@@rightslidewidth}{8.5in}
\ifcase\@@slidetype
%                             Error Case
\ClassWarning{uwmslide}{\protect\slidedivider\space used outside of environment.\MessageBreak
Extra \protect\slidedivider\space command ignored}
%
\or                        % plain double slide
%
\end{minipage}
\hfill
\begin{minipage}[c]{\@@rightslidewidth}
%
\or                        % leftitem slide
%
\end{itemize}
\end{minipage}
\hfill
\begin{minipage}[c]{\@@rightslidewidth}
%
\or                        % rightitem slide
%
\end{minipage}
\hfill
\begin{minipage}[c]{\@@rightslidewidth}
\begin{itemize}
%
\or                        % doubleitem slide
%
\end{itemize}
\end{minipage}
\hfill
\begin{minipage}[c]{\@@rightslidewidth}
\begin{itemize}
%
\else
%
\fi
}

%===================================================
%  Double Slide Environment
%
%    This environment creates a slide with two
%    equal spaced minipages.  This can be used to
%    put two pictures next to each other.  It is
%    also used for the leftitem, rightitem and doubleitem
%    environments...
%
%    This environment requires the \slidedivider
%    command to be used in between the two slide 
%    halves.
%===================================================
\newenvironment{doubleslide}[2][4.25in]{% \begin{doubleslide} things
\ifnum\@@slidetype=0 \global\@@slidetype=1 \fi % Set slide type 
%                                                if not already set
\ifnum\@@slide=0   % Check for 1st slide
  \global\@@slide=1  % Set flag so we won't come back
  \vspace*{\@@adjslide}     % Dirty trick to fix the offset which
%                    %  appears on the 1st after the title slide...
\else
  \newpage
\fi%
%\global\@@leftslidewidth=#1  % let \slidedivider know the size
\setlength{\@@leftslidewidth}{#1}  % let \slidedivider know the size
{\Huge \begin{center} #2\end{center}}
\begin{minipage}[c]{#1}
}
{\end{minipage}         % End the minipage
\global\@@slidetype=0   % Clear the slide type flag
}%\end{doubleslide} things





%===================================================
%  leftitem Slide Environment
%
%    This environment creates a slide with two
%    equal spaced minipages.  The left hand side
%    minipage is an itemized list.
%
%    This environment requires the \slidedivider
%    command to be used in between the two slide 
%    halves.
%===================================================
\newenvironment{leftitem}[2][4.25in]{% \begin{leftitem} things
\global\@@slidetype=2  % Set type to leftitem
\begin{doubleslide}[#1]{#2}
\begin{itemize}
}
{\end{doubleslide}}%\end{leftitem} things






%===================================================
%  rightitem Slide Environment
%
%    This environment creates a slide with two
%    equal spaced minipages.  The right hand side
%    minipage is an itemized list.
%
%    This environment requires the \slidedivider
%    command to be used in between the two slide 
%    halves.
%===================================================
\newenvironment{rightitem}[2][4.25in]{% \begin{rightitem} things
\global\@@slidetype=3  % Set type to rightitem
\begin{doubleslide}[#1]{#2}
}
{\end{itemize}
\end{doubleslide}}%\end{rightitem} things







%===================================================
%  doubleitem Slide Environment
%
%    This environment creates a slide with two
%    equal spaced minipages.  The right hand side
%    minipage is an itemized list.
%
%    This environment requires the \slidedivider
%    command to be used in between the two slide 
%    halves.
%===================================================
\newenvironment{doubleitem}[2][4.25in]{% \begin{doubleitem} things
\global\@@slidetype=4  % Set type to doubleitem
\begin{doubleslide}[#1]{#2}
\begin{itemize}
}
{\end{itemize}
\end{doubleslide}}%\end{doubleitem} things