%% onrannual.cls
%% Copyright 2009-2010 Adam R. Maxwell
%
% This work 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 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is A. R. Maxwell.
%
% This work consists of the file onrannual.cls.

%
% Document class for ONR Ocean Battlespace Sensing annual reports, following format
% from http://www.onr.navy.mil/sci_tech/32/reports/annual/ as of Sept 2009.
% Developed and maintained by Adam R. Maxwell, adam.maxwell@pnl.gov
%

\ProvidesClass{onrannual}[2010/03/13 v1.1 ONR annual report document class]
\NeedsTeXFormat{LaTeX2e}

%
% This class is a modification of the standard article class.  The primary
% documentation is the skeleton.tex file available at CTAN:
%
% http://mirror.ctan.org/macros/latex/contrib/onrannual/skeleton.tex
%
% Lacking that, note that the following three new commands are provided:
%
% \distribution{xxx} where xxx is the appropriate distribution statement A or B
% \awardnumber{N00014-xxx} where the argument is your award number
% \projecturl{\url{http:foo}} which is an optional project URL
%

%% This technique was copied from latex.ltx, since I couldn't find any documented
%% way to use commands in the preamble.
\let\@awardnumber\@empty
\def\awardnumber#1{\def\@awardnumber{#1}}

\let\@projecturl\@empty
\def\projecturl#1{\def\@projecturl{#1}}

\let\@distribution\@empty
\def\distribution#1{\def\@distribution{#1}}

% Times and Helvetica
% XeTeX should be an alternative here, but it wasn't producing a bold title,
% and I didn't want to spend time figuring out why.
\RequirePackage{mathptmx}

% Remaining packages require article to be loaded
\LoadClass[12pt]{article}

% margins given in style guide; different from Word template...
\RequirePackage[margin=0.8in, bottom=1.0in]{geometry}

% block format for author/address
\RequirePackage[blocks]{authblk}

% get rid of section numbers
\setcounter{secnumdepth}{-2}

% no paragraph indentation; everything has to be flushleft
\setlength{\parindent}{\z@}

\fontsize{12}{14}
\selectfont

% use a single line to separate paragraphs
\setlength{\parskip}{\baselineskip}
\RequirePackage{parskip}

% change font and justification for captions
\RequirePackage{caption}
\captionsetup{font={bf,it}, justification=centering}

% reference list name for bibliography command
\renewcommand{\refname}{REFERENCES}

% This is sort of nasty; we have to adjust skip around the headings, as well
% as the font size, since the parskip package won't fix them.
\renewcommand\section{\@startsection {section}{1}{\z@}%
                                   {-10pt}% no skip above the heading
                                   {7pt}% if positive, is the skip below; else is the skip to right of run-in
                                   {\normalfont\bfseries\MakeUppercase}} % bold, normal size, uppercase
      
%% ONR reports don't allow for a subsection or subsubsection, conceptually, so redefine
%% to print an error message instead of allowing headings that look stupid.                               
\renewcommand\subsection{\PackageError{onrannual}{Subsections not available for ONR reports}{ONR reports do not include sub or lower sectioning.}}  
\renewcommand\subsubsection{\subsection}                        
                                   
%% Copied \maketitle definition from article.cls.  Most adjustments here are for spacing, but
%% also to avoid printing the date.
\renewcommand\maketitle{\par
  \begingroup
    \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
    \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
    \long\def\@makefntext##1{\parindent 1em\noindent
            \hb@xt@1.8em{%
                \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
    \newpage
    \global\@topnum\z@   % Prevents figures from going at top of page.
    \@maketitle
    \thispagestyle{plain}\@thanks
  \endgroup
  \setcounter{footnote}{0}%
  \global\let\thanks\relax
  \global\let\maketitle\relax
  \global\let\@maketitle\relax
  \global\let\@thanks\@empty
  \global\let\@author\@empty
  \global\let\@date\@empty
  \global\let\@title\@empty
  \global\let\title\relax
  \global\let\author\relax
  \global\let\date\relax
  \global\let\and\relax
}
\def\@maketitle{%
  \setlength\parskip{\z@}%
  \newpage
  \begin{center}%
  {\footnotesize\textit{\@distribution}}
  \vskip 2\baselineskip
  \let \footnote \thanks
    % title font is 14 pt bold
    {\fontsize{14}{\f@baselineskip}\fontseries{b}\selectfont \@title}%
    \vskip \baselineskip
    \setlength{\affilsep}{\z@}%
    {\begin{tabular}[t]{c}%
        \@author
      \end{tabular}\par}%
    \vskip \baselineskip
    Award Number: \@awardnumber \par
    \@projecturl
  \end{center}%
  \par
  \vskip 1.5em}

% ONR wants active hyperlinks colored blue, based on email correspondence, so we'll load it last
% after mucking about with sectioning
\RequirePackage[colorlinks=true, pdfborder={0 0 0}, linkcolor=black, citecolor=black, urlcolor=blue, bookmarks=false]{hyperref}

%% now for anything that has to be set as late as possible
\AtBeginDocument{%

    % this is really gruesome, since I don't understand how natbib changes the heading
    \@ifpackageloaded{natbib}{%
      \renewcommand\bibsection{%
       \section{\refname\@mkboth{\MakeUppercase{\refname}}{\MakeUppercase{\refname}}\vspace{7pt}}%
      }%
    }{}%
      
    % for some reason, they want it to look as if a typewriter was used...
    \raggedright%
    
    % don't use Courier for URLs; this works for hyperref also
    \@ifpackageloaded{url}{\urlstyle{rm}}{}%
}