From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/sf298/sf298.dtx | 2386 ++++++++++++++++++++++++++++++++++
 1 file changed, 2386 insertions(+)
 create mode 100644 macros/latex/contrib/sf298/sf298.dtx

(limited to 'macros/latex/contrib/sf298/sf298.dtx')

diff --git a/macros/latex/contrib/sf298/sf298.dtx b/macros/latex/contrib/sf298/sf298.dtx
new file mode 100644
index 0000000000..17779ae44c
--- /dev/null
+++ b/macros/latex/contrib/sf298/sf298.dtx
@@ -0,0 +1,2386 @@
+% \iffalse
+% Fill-in and print the Standard Form 298.
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is file `sf298.dtx', the documentation file for the `sf298'
+% package.
+%
+% Copyright (C) 2000,2004 Steven Douglas Cochran.
+%
+% The copyright remains with the above author.
+%
+% The sf298 package may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2 
+% 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.2 or later is part of all distributions of LaTeX 
+% version 1999/12/01 or later.
+%
+% The sf298 package is distributed in the hope that it will be
+% useful, but `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.  See the LaTeX
+% Project Public License for more details.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% @LaTeX-style-file{
+%    Author     = "Peter A. Rochford",
+%    Version    = "1.3",
+%    Date       = "2016/7/7",
+%    Time       = "11:38:00",
+%    Filename   = "sf298.sty",
+%    Address    = "Acorn Science & Innovation, Inc.
+%                      1616 Anderson Road, Suite 213
+%                      McLean, VA 22102, USA",
+%    Telephone  = "+1 703-995-9872",
+%    Email      = "prochford@acornsi.com",
+%    Abstract   = "Extension of the LaTeX package to optionally provide the page of
+%                  General Instructions. Also fixed known bug when using \usepackage{totpages}.''
+%
+%    Author     = "Steven Douglas Cochran",
+%    Version    = "1.2",
+%    Date       = "2004/12/22",
+%    Time       = "10:33:25",
+%    Filename   = "sf298.sty",
+%    Address    = "SVC HS Information Technology,  M200 Scaife Hall
+%                  3550 Terrace Street
+%                  Pittsburgh, PA 15261, USA",
+%    Telephone  = "+1 412.624.9282",
+%    FAX        = "+1 412.648.8865",
+%    Email      = "sdc18@pitt.edu",
+%    CodeTable  = "ISO/ASCII",
+%    Keywords   = "LaTeX, standard forms, sf298, report documentation",
+%    Supported  = "yes",
+%    Abstract   = "LaTeX package for generating a completed standard
+%                  form 298 (Rev.\ 8/98) as prescribed by ANSI 
+%                  Std.\ Z39.18 for report documentation, for instance,
+%                  as part of a document delivered on a U.S. Government
+%                  contract.''
+% }
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{sf298.dtx}
+\documentclass[letterpaper]{ltxdoc}
+\usepackage{totpages} % needed to provide total number of pages in SF298
+\def\CurrentOption{} % fix bug in totpages
+\usepackage[noconfig]{sf298}
+\usepackage{afterpage}
+\advance\textheight2\baselineskip
+\setlength\hfuzz{26pt}
+
+\usepackage[textwidth=\textwidth,textheight=\textheight]{geometry} % needed to change textwidth for \GeneralInstructions
+%</driver>
+%
+%<*ltxdoc>
+\AtBeginDocument{
+  \EnableCrossrefs
+  \RecordChanges
+  \CodelineIndex}
+\AtEndDocument{
+  \PrintChanges
+  \PrintIndex}
+\begin{document}
+  \DocInput{sf298.dtx}
+\end{document}
+%</ltxdoc>
+%
+% \fi
+%
+% \newcommand*{\Lopt}[1]{\textsf{#1}}
+% \newcommand*{\Lfile}[1]{\texttt{#1}}
+% \newcommand*{\Lpack}[1]{\textsf{#1}}
+%
+% \changes{v1.0}{11 Jan 2000}{Initial revision.}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \DoNotIndex{\ ,\(,\),\@car,\@date,\@empty,\@gobble,\@ifnextchar}
+% \DoNotIndex{\@ifundefined,\@nil,\@tempa,\@tempboxa,\@tempskipa}
+% \DoNotIndex{\@viiipt,\@vpt,\@vipt,\@xipt,\@xivpt,\@warning,\@xpt,\\}
+% \DoNotIndex{\2,\AtEndDocument,\addtocounter,\advance,\arabic}
+% \DoNotIndex{\baselineskip,\baselinestretch,\begin,\bf,\c@page}
+% \DoNotIndex{\cleardoublepage,\csname,\date,\day,\DeclareFixedFont}
+% \DoNotIndex{\def,\documentclass,\documentpackage,\edef,\else,\end}
+% \DoNotIndex{\endcsname,\evensidemargin,\ExecuteOptions,\expandafter}
+% \DoNotIndex{\fi,\font,\fontdimen,\footnote,\framebox,\global,\hbox}
+% \DoNotIndex{\headheight,\headsep,\hrule,\hskip,\hss,\if,\if@twoside}
+% \DoNotIndex{\ifdim,\IfFileExists,\ifodd,\ifx,\InputIfFileExists,\LARGE}
+% \DoNotIndex{\large,\leftskip,\let,\line,\lineskip,\linethickness}
+% \DoNotIndex{\linewidth,\makeatletter,\makeatother,\makebox,\maketitle}
+% \DoNotIndex{\month,\NeedsTeXFormat,\newcommand,\newcounter,\newif}
+% \DoNotIndex{\newpage,\noindent,\normalbaselineskip,\null,\number}
+% \DoNotIndex{\oddsidemargin,\pagenumbering,\pagestyle,\par,\parbox,\phantom}
+% \DoNotIndex{\ProvidesPackage,\put,\r@TotPages,\raggedright,\relax}
+% \DoNotIndex{\renewcommand,\rightskip,\rule,\section,\setcounter}
+% \DoNotIndex{\setbox,\setlength,\shortstack,\space,\spaceskip,\string}
+% \DoNotIndex{\tableofcontents,\textheight,\textwidth,\thispagestyle}
+% \DoNotIndex{\topmargin,\tt,\typeout,\unitlength,\usepackage,\value}
+% \DoNotIndex{\vbox,\vfil,\voffset,\vskip,\vss,\wd,\xspaceskip,\year}
+%
+% \newcommand{\ie}{{\it i.e.\/}}
+%
+% \def\filename{sf298.dtx}
+% \def\fileversion{1.3}
+% \def\filedate{2016/7/7}
+% \def\docdate {2016/7/7}
+% \makeatletter
+%   \def\drawform{\sf@drawform}
+%   \def\@oddfoot{%
+%     \rm
+%     \hfill
+%     \@ifundefined{r@fig:form}%
+%       {thepage}%
+%       {\@tempcnta\pageref{fig:form}
+%        \ifnum \c@page=\@tempcnta \else
+%          \thepage
+%        \fi}%
+%     \hfill}
+%   \let\@evenfoot\@oddfoot
+% \makeatother
+%
+% \CheckSum{1457}
+%
+% \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         \~}
+%
+% \title{The \Lpack{sf298} Package\footnote{This paper documents
+%        the \Lpack{sf298} package v\fileversion, last revised \filedate.}}
+% \author{
+%         Steven Douglas Cochran\\[5pt]
+%         SVC HS Information Technology,  M200 Scaife Hall \\
+%         3550 Terrace Street  \\
+%         Pittsburgh, PA 15261, USA\\[5pt]
+%         \texttt{sdc18@pitt.edu}
+%         \and\\[5pt]
+%         Peter Andrew Rochford\\[5pt]
+%         Acorn Science \& Innovation, Inc. \\
+%         1616 Anderson Road, Suite 213 \\
+%         McLean, VA 22102, USA\\[5pt]
+%         \texttt{prochford@acornsi.com}
+%         }
+% \date{\docdate}
+% \maketitle
+% \vspace{-20pt}
+% \begin{abstract}
+% \noindent
+% This article documents the \LaTeX\ package for generating a completed
+% standard form 298 (Rev.\ 8/98) as prescribed by ANSI Std.\ Z39.18 for
+% report documentation, for instance, as part of a document delivered on
+% a U.S. Government contract. The latest revision includes the option of
+% inserting the General Instructions page that typically appears after the
+% form.
+%
+%\end{abstract}
+% 
+% \setcounter{tocdepth}{2}
+% \tableofcontents
+%
+% \section{Introduction}
+%   \begin{figure}
+%     \ReportDate{}
+%     \DistributionStatement{}
+%     \ReportClassification{}
+%     \AbstractClassification{}
+%     \PageClassification{}
+%     \AbstractLimitation{}
+%     \NumberPages{}
+%     \Abstract{\hfill Figure~\ref{fig:form}: Blank Special Form 298
+%               (Report Documentation Page).\hfill\null}
+%     \refstepcounter{figure}
+%     \label{fig:form}
+%     \vbox to \textheight{%
+%       \vspace{-78pt}%
+%       \hbox to \textwidth{%
+%         \hspace{-130pt}%
+%         \drawform
+%         \hss}%
+%       \vss}
+%   \end{figure}
+% 
+% The \Lpack{sf298} package provides for creating a filled-in copy of
+% the standard form 298 (Rev.\ 8/98), ``Report Documentation Page''
+% (shown in Figure~\ref{fig:form}).  This form is used in announcing and
+% cataloging reports submitted as deliverables on contracts with the
+% U.S. Government.  It is important that the information on the sf298
+% page be consistent with the rest of the report, particularly the cover
+% and title page.  Instructions for filling in each block of the form
+% are given below.  The macro \cmd{\MakeRptDocPage} causes the page to be
+% printed.  If the \Lopt{twoside} option is specified in the
+% documentclass, then it is printed as a separate page with a blank
+% back. The macro \cmd{\GeneralInstructions} causes the page of general 
+% instructions that accompanies the form to be printed. This is typically inserted 
+% after the |sf298| form.
+% 
+% If you are changing the base font families for your paper (\eg, you
+% load the \Lpack{times} package to use the PostScript fonts) and you
+% want the fonts used on the |sf298| to change also, then you must
+% change the font families before loading the \Lpack{sf298} package (see
+% section~\ref{sec:configfont}).
+% 
+% The package takes two sets of options: The \Lopt{config} option (default),
+% causes it to check for a configuration file, while \Lopt{noconfig} disables
+% this check (see section~\ref{sec:configfile});  The 
+% \Lopt{nofloatlongboxes} option (default) causes the package to generate
+% the fixed standard form, while the \Lopt{floatlongboxes} option causes
+% boxes 12--15 to distribute their vertical spacing in order to handle 
+% special cases such as a very long supplementary note in box 13.
+% 
+% A sample report is given in section~\ref{sec:sample} that shows one
+% approach to using the \Lpack{sf298} package.
+% 
+% \section{The Individual Fields}
+% \changes{v1.2}{22 Dec 2004}{Added note about the \Lopt{floatlongboxes}
+%    option.}
+% 
+% There are nineteen fields, three with multiple sub-fields, on the
+% sf298.  The following macros, each having a single argument, define
+% the data to be included in each field.  Usually only a few fields will
+% apply to a given report.  Table~\ref{tab:attributes} notes which
+% fields are required and which have default values.  It also gives an
+% approximate number of lines and characters per line that will fit into
+% each block (for the Computer Modern Roman font family, PostScript Times
+% Roman or other fonts will differ).  The best approach to insure that 
+% the form is properly filled-in is to preview the page and adjust any
+% fields that appear to have a problem.
+% 
+% A few fields allow a partial extra line along the top of the box.  The
+% last two columns of Table~\ref{tab:attributes} shows the offset needed
+% to add such an extra line.  To use this extra space, you must already
+% have used up the maximum number of (regular) lines for this field and
+% you must begin the argument with an \cmd{\hspace} of the size of the
+% indicated {\bf Skip}.  The last {\bf Chars.} column gives the approximate
+% amount of extra characters that you can add.
+% 
+% \begin{table}
+% \null\vspace{-.1in}
+% \def\n{\hfill{\bf ---}\hfill\null}
+% \def\d#1#2{\smash{\lower#1\hbox{#2}}}
+% \def\p{\phantom{0}}
+% \def\s#1{{\footnotesize (#1)}}
+% \def\S#1{%
+%   \ifnum#1<10
+%     {\footnotesize \phantom{0}(#1)}%
+%   \else
+%     \s{#1}%
+%   \fi}
+% \def\z#1{\hbox to 0pt{#1\hss}\p\p\p}
+% \doublerulesep.5pt
+% \arrayrulewidth.5pt
+% \caption{Field Attributes and Approximate Maximum Size.}
+% \label{tab:attributes}
+% \vspace{10pt}
+% \DeleteShortVerb{\|}
+% \hbox to 1.1\textwidth{%
+% \hss
+% \begin{tabular}{rlcccccc}                                                                  \hline\hline
+%   \multicolumn{1}{c}{\rule{0pt}{14pt}\bf Field}
+%           & \multicolumn{1}{c}{\d{1ex}{\bf Macro Name}}
+%                                                 & \multicolumn{1}{c}{\d{1ex}{\bf Required}}
+%                                                       & \multicolumn{1}{l}{\bf Default}
+%                                                             & \multicolumn{1}{c}{\bf Max}
+%                                                                  & \multicolumn{1}{c}{{\bf Chars.}\d{-2.5pt}{\s{6}}}
+%                                                                          & \multicolumn{2}{c}{\d{-2pt}{{\bf Extra Space}\d{-2.5pt}{\s{8}}}}
+%                                                                                         \\ \cline{7-8}
+%   \multicolumn{1}{c}{\rule[-7pt]{0pt}{7pt}\bf Number}
+%           &                                     &     & \multicolumn{1}{l}{{\bf Value}\d{-2.5pt}{\s{1}}}
+%                                                             & \multicolumn{1}{c}{\bf Lines}
+%                                                                   & \multicolumn{1}{c}{\bf per Line}
+%                                                                           & \multicolumn{1}{c}{\d{2pt}{{\bf Skip}\d{-2.5pt}{\s{7}}}}
+%                                                                                  & \multicolumn{1}{c}{\d{2pt}{{\bf Chars.}\d{-2.5pt}{\s{6}}}}
+%                                                                                         \\ \hline\rule{0pt}{14pt}
+%    1\z{}  & \cmd{\ReportDate}                   & Yes &\s{2}& \p1 &  \p31 & \n   & \n   \\
+%    2\z{}  & \cmd{\ReportType}                   & Yes & \n  & \p1 &  \p46 & \n   & \n   \\
+%    3\z{}  & \cmd{\DatesCovered}                 & Yes & \n  & \p1 &  \p39 & \n   & \n   \\
+%    4\z{}  & \cmd{\Title}                        & Yes & \n  & \p7 &  \p72 & 35mm & \p48 \\
+%    5\z{a} & \cmd{\ContractNumber}               & \n  & \n  & \p1 &  \p46 & \n   & \n   \\
+%    5\z{b} & \cmd{\GrantNumber}                  & \n  & \n  & \p1 &  \p46 & \n   & \n   \\
+%    5\z{c} & \cmd{\ProgramElementNumber}         & \n  & \n  & \p1 &  \p46 & \n   & \n   \\
+%    5\z{d} & \cmd{\ProjectNumber}                & \n  & \n  & \p1 &  \p46 & \n   & \n   \\
+%    5\z{e} & \cmd{\TaskNumber}                   & \n  & \n  & \p1 &  \p46 & \n   & \n   \\
+%    5\z{f} & \cmd{\WorkUnitNumber}               & \n  & \n  & \p1 &  \p46 & \n   & \n   \\
+%    6\z{}  & \cmd{\Author}                       & Yes & \n  & \p7 &  \p72 & 22mm & \p58 \\
+%    7\z{}  & \cmd{\PerformingOrg}                & Yes & \n  & \p4 &  \p81 & \n   & \n   \\
+%    8\z{}  & \cmd{\POReportNumber}               & \n  & \n  & \p4 &  \p39 & 18mm & \p26 \\
+%    9\z{}  & \cmd{\SponsoringAgency}             & Yes & \n  & \p5 &  \p81 & \n   & \n   \\
+%   10\z{}  & \cmd{\Acronym}                      & \n  & \n  & \p2 &  \p30 & \n   & \n   \\
+%   11\z{}  & \cmd{\SMReportNumber}               & \n  & \n  & \p1 &  \p39 & 23mm & \p23 \\
+%   12\z{}  & \cmd{\DistributionStatement} \s{9} & \n  &\s{3}& \p3 &   120 & 70mm & \p75 \\
+%   13\z{}  & \cmd{\SupplementaryNotes} \s{9}    & \n  & \n  & \p2 &   120 & 45mm & \p92 \\
+%   14\z{}  & \cmd{\Abstract} \s{9}              & Yes & \n  &  10 &   120 & 22mm &  105 \\
+%   15\z{}  & \cmd{\SubjectTerms} \s{9}          & \n  & \n  & \p3 &   125 & 32mm &  103 \\
+%   16\z{a} & \cmd{\ReportClassification}         & Yes &\s{4}& \p1 & \p\p9 & \n   & \n   \\
+%   16\z{b} & \cmd{\AbstractClassification}       & Yes &\s{4}& \p1 & \p\p9 & \n   & \n   \\
+%   16\z{c} & \cmd{\PageClassification}           & Yes &\s{4}& \p1 & \p\p9 & \n   & \n   \\
+%   17\z{}  & \cmd{\AbstractLimitation}           & \n  &\s{5}& \p1 &  \p12 & \n   & \n   \\
+%   18\z{}  & \cmd{\NumberPages}                  & Yes & \n & \p1 & \p\p8 & \n   & \n   \\
+%   19\z{a} & \cmd{\ResponsiblePerson}            & \n  & \n  & \p1 &  \p41 & \n   & \n   \\ \rule[-7pt]{0pt}{7pt}
+%   19\z{b} & \cmd{\RPTelephone}                  & \n  & \n  & \p1 &  \p41 & \n   & \n   \\ \hline\hline
+%   \multicolumn{8}{l}{\rule{0pt}{14pt}{\bf Notes:}}                                \\
+%   \multicolumn{8}{l}{\quad\S{1} All defaults may be overridden by specifying a 
+%                      value.  Custom defaults may be assigned using a}             \\
+%   \multicolumn{8}{l}{\quad\phantom{\S{1}} configuration file (see 
+%                      section~\ref{sec:configfile})}.                               \\
+%   \multicolumn{8}{l}{\quad\S{2} Defaults to the current date (in dd-mm-yyyy 
+%                      format).}                                                    \\
+%   \multicolumn{8}{l}{\quad\S{3} Defaults to ``Approved for public release; 
+%                      distribution is unlimited''}.                                 \\
+%   \multicolumn{8}{l}{\quad\S{4} Defaults to ``U'' (Unclassified)}.                 \\
+%   \multicolumn{8}{l}{\quad\S{5} Defaults to ``UU'' (Unclassified Unlimited).}     \\
+%   \multicolumn{8}{l}{\quad\phantom{\S{1}} otherwise, there is no default (see 
+%                      section~\ref{sec:configpage}).}                              \\
+%   \multicolumn{8}{l}{\quad\S{6} The number of characters is approximate and for
+%                      the Computer Modern Roman font family only.}                 \\
+%   \multicolumn{8}{l}{\quad\S{7} Amount to indent the extra first line, 
+%                      \eg, \cmd{\Title}\{\cmd{\hspace}\{37mm\} \dots text\dots\}.} \\
+%   \multicolumn{8}{l}{\quad\S{8} More text may be placed in these blocks by
+%                      adjusting the font family or size and/or changing}           \\
+%   \multicolumn{8}{l}{\quad\phantom{\S{8}} the interline gap (see 
+%                      \cmd{\PerformingOrg} in sections~\ref{sec:configfile} and
+%                      \ref{sec:sample} for an example).}                           \\
+%   \multicolumn{8}{l}{\quad\S{9} If the \Lopt{floatlongboxes} option is set
+%                      when loading the pacakage, then this box may hold more or}   \\
+%   \multicolumn{8}{l}{\quad\phantom{\S{9}} less than indicated in this table,
+%                      however the extra space sizes are still valid.} 
+% \end{tabular}%
+% \hskip-5mm}
+% \vspace{.1in}
+% \MakeShortVerb{\|}
+% \end{table}
+% 
+% For those blocks that allow more than one line (see
+% Table~\ref{tab:attributes}), the text argument will automatically be
+% broken to fit the box and the paragraph is usually vertically centered
+% and left justified.  You can use ``|\\|'' (newline) to override the
+% default linebreaking, if desired (see section~\ref{sec:configfile} for
+% an example).
+%
+% \newpage
+% \paragraph{1. REPORT DATE.}
+% \DescribeMacro{\ReportDate}
+%
+% \noindent
+% Full publication date including day and month, if available.
+% Must cite at least the year and be Year 2000 compliant, \eg
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\ReportDate}\{30--06--1998\}} & $\rightarrow$ & 30--06--1998 \\
+%   ~~ & {\tt \cmd{\ReportDate}\{xx--06--1998\}} & $\rightarrow$ & xx--06--1998 \\
+%   ~~ & {\tt \cmd{\ReportDate}\{xx--xx--1998\}} & $\rightarrow$ & xx--xx--1998
+% \end{tabular}
+% \par\null\noindent
+% This field is required, but will default to the current date.
+%
+% \paragraph{2. REPORT TYPE.}
+% \DescribeMacro{\ReportType}
+%
+% \noindent
+% State the type of report, such as final, technical, interim,
+% memorandum, master's thesis, progress, quarterly, research, special,
+% group study, {\it etc\@.\/}  This field is required.
+% 
+% \paragraph{3. DATES COVERED.}
+% \DescribeMacro{\DatesCovered}
+%
+% \noindent
+% Indicate the time during which the work was performed and the report
+% was written, \eg,
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\DatesCovered}\{Jun 1997--Jun 1998\}} & $\rightarrow$ & Jun 1997--Jun 1998 \\
+%   ~~ & {\tt \cmd{\DatesCovered}\{1--10 Jun 1996\}}     & $\rightarrow$ & 1--10 Jun 1996     \\
+%   ~~ & {\tt \cmd{\DatesCovered}\{May--Nov 1998\}}      & $\rightarrow$ & May--Nov 1998      \\
+%   ~~ & {\tt \cmd{\DatesCovered}\{Nov 1998\}}           & $\rightarrow$ & Nov 1998
+% \end{tabular}
+% \par\null\noindent
+% The month and year for at least one month are required.
+% 
+% \paragraph{4. TITLE AND SUBTITLE.}
+% \DescribeMacro{\Title}
+%
+% \noindent
+% A title is taken from the part of the report that provides the most
+% meaningful and complete information.  When a report is prepared in
+% more than one volume, repeat the primary title, add volume number, and
+% include subtitle for the specific volume.  On classified documents enter
+% the title classification in parentheses.  This field is required.
+% 
+% \paragraph{5a. CONTRACT NUMBER.}
+% \DescribeMacro{\ContractNumber}
+%
+% \noindent
+% Enter all contract numbers as they appear in the report, \eg
+%
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\ContractNumber}\{F33615--86--C--5169\}} & $\rightarrow$ & F33615--86--C--5169
+% \end{tabular}
+%
+% \paragraph{5b. GRANT NUMBER.}
+% \DescribeMacro{\GrantNumber}
+%
+% \noindent
+% Enter all grant numbers as they appear in the report, \eg
+%
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\GrantNumber}\{AFOSR--82--1234\}} & $\rightarrow$ & AFOSR--82--1234
+% \end{tabular}
+%
+% \paragraph{5c. PROGRAM ELEMENT NUMBER.}
+% \DescribeMacro{\ProgramElementNumber}
+%
+% \noindent
+% Enter all program element numbers as they appear in the report, \eg
+%
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\ProgramElementNumber}\{61101A\}} & $\rightarrow$ & 61101A
+% \end{tabular}
+%
+% \paragraph{5d. PROJECT NUMBER.}
+% \DescribeMacro{\ProjectNumber}
+%
+% \noindent
+% Enter all project numbers as they appear in the report, \eg
+%
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\ProjectNumber}\{1F665702D1257; ILIR\}} & $\rightarrow$ & 1F665702D1257; ILIR
+% \end{tabular}
+%
+% \paragraph{5e. TASK NUMBER.}
+% \DescribeMacro{\TaskNumber}
+%
+% \noindent
+% Enter all task numbers as they appear in the report, \eg
+%
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\TaskNumber}\{05; RF0330201; T4112\}} & $\rightarrow$ & 05; RF0330201; T4112
+% \end{tabular}
+%
+% \paragraph{5f. WORK UNIT NUMBER.}
+% \DescribeMacro{\WorkUnitNumber}
+%
+% \noindent
+% Enter all work unit numbers as they appear in the report, \eg
+%
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\WorkUnitNumber}\{001; AFAPL30480105\}} & $\rightarrow$ & 001; AFAPL30480105
+% \end{tabular}
+%
+% \paragraph{6. AUTHOR(S).}
+% \DescribeMacro{\Author}
+%
+% \noindent
+% Enter name(s) of the person(s) responsible for writing the report,
+% performing the research, or credited with the content of the report.
+% The form of entry is the last name, first name, middle initial, and
+% additional qualifiers separated by commas, \eg
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\Author}\{Smith, Richard, J, Jr\}} & $\rightarrow$ & Smith, Richard, J, Jr
+% \end{tabular}
+% \par\null\noindent
+% If editor or compiler, this should follow the name(s).
+%
+% \paragraph[7. PERFORMING ORGANIZATION NAME(S) AND ADDRESS(ES).]
+%     {\hbox to 1in{7. PERFORMING ORGANIZATION NAME(S) AND ADDRESS(ES).\hss}}
+% \DescribeMacro{\PerformingOrg}
+%
+% \noindent
+% Self-explanatory.  This field is one of the best examples of one that
+% may be defined in a configuration file that may be used for many
+% papers.  For an example of how to use a configuration file, see
+% section~\ref{sec:configfile}.
+% 
+% \paragraph{8. PERFORMING ORGANIZATION REPORT NUMBER.}
+% \DescribeMacro{\POReportNumber}
+%
+% \noindent
+% Enter the unique alphanumeric report number(s) assigned by the
+% performing organization, \eg
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & \multicolumn{3}{l}{\tt \cmd{\POReportNumber}\{BRL--1234; AFWL--TR--85--4017--Vol21--PT--2\}} \\ 
+%      & \hspace{1in} & $\rightarrow$ & BRL--1234; AFWL--TR--85--4017--Vol21--PT--2
+% \end{tabular}
+% 
+% \paragraph{9. SPONSORING/MONITORING AGENCY NAME(S) AND ADDRESS(ES).}
+% \DescribeMacro{\SponsoringAgency}
+%
+% \noindent
+% Enter the name and address of the organization(s) financially
+% responsible for and monitoring the work.  If it is desired to place
+% two organizations in this field, then they may be split up in two
+% different ways, the first is to use two 2-line addresses with (for
+% example) a % ``|\\[10pt]|'' line break after the first address to show
+% both % the sponsoring and the monitoring agency addresses.  The second
+% method is to place the addresses in a |tabular| environment.  An 
+% example of both methods is shown below.
+% \begin{verbatim}
+%   \SponsoringAgency{%
+%     U.S. Government Sponsoring Department    \\
+%     P.O. Box 92919, Miltown, AK  97909--6543 \\[10pt]
+%     U.S. Army Monitoring Agency              \\
+%     909 Mission Rd., Somecity, MD  29399--9753}
+% \end{verbatim}
+% \begin{verbatim}
+%   \SponsoringAgency{%
+%     \begin{tabular}{@{}l@{\hspace{5mm}}l@{}}
+%       U.S. Government Sponsoring Dept. & U.S. Government Monitoring Agency \\
+%       P.O. Box 92919                   & 909 Mission Rd.                   \\
+%       Miltown, AK  97909--6543         & Somecity, MD  29399--9753
+%     \end{tabular}}
+% \end{verbatim}
+% These give the following, respectively:
+% \par\null\noindent 
+% \frame{\vbox to 72.8pt{%
+%   \vfil
+%   \parbox{364.2pt}{%
+%     U.S. Government Sponsoring Dept.         \\
+%     P.O. Box 92919, Miltown, AK  97909--6543 \\[10pt]
+%     U.S. Government Monitoring Agency        \\
+%     909 Mission Rd., Somecity, MD  29399--9753}%
+%   \vfil}}
+% \par\null\noindent 
+% \frame{\vbox to 72.8pt{%
+%   \vfil
+%   \parbox{364.2pt}{%
+%     \begin{tabular}{@{}l@{\hspace{5mm}}l@{}}
+%       U.S. Government Sponsoring Dept. & U.S. Government Monitoring Agency \\
+%       P.O. Box 92919                   & 909 Mission Rd.                   \\
+%       Miltown, AK  97909--6543         & Somecity, MD  29399--9753
+%     \end{tabular}}
+%   \vfil}}
+%
+% \paragraph{10. SPONSOR/MONITOR'S ACRONYM(S).}
+% \DescribeMacro{\Acronyms}
+%
+% \noindent
+% Enter any acronym(s) that pertain to the Sponsor/Monitor, separated
+% with commas, if available, \eg
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\Acronyms}\{BRL, ARDEC, NADC\}} & $\rightarrow$ & BRL, ARDEC, NADC
+% \end{tabular}
+%
+% \paragraph{11. SPONSOR/MONITOR'S REPORT NUMBER(S).}
+% \DescribeMacro{\SMReportNumber}
+%
+% \noindent
+% Enter the report number(s) as assigned by the sponsoring/monitoring
+% agency, if available, \eg
+% \par\null\noindent
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\SMReportNumber}\{BRL-TR--829\}} & $\rightarrow$ & BRL-TR--829
+% \end{tabular}
+%
+% \paragraph{12. DISTRIBUTION/AVAILABILITY STATEMENT.}\hskip-3mm%
+%   \footnote{The \Lopt{floatlongboxes} option may shrink or enlarge this
+%      box vertically as it equalizes the vertical space for boxes 12--15.}
+% \DescribeMacro{\DistributionStatement}
+% \changes{v1.2}{22 Dec 2004}{Added note about the \Lopt{floatlongboxes}
+%    option.}
+%
+% \noindent
+% Use agency-mandated availability statements to indicated the public
+% availability or distribution limitations of the report.  If additional
+% limitations/restrictions or special markings are indicated follow
+% agency authorization procedures, \eg, RD/FRD, PROPIN, ITAR.
+% Include copyright information. This field is {\bf not} required, but will
+% default to the first of the following examples:
+% \par\null\noindent
+% ``Approved for public release; distribution is unlimited.''
+% \par\null\noindent
+% ``Distribution authorized to DoD only; (reason and date).  Other
+% requests shall be referred to (controlling DoD office).''
+% \par\null\noindent
+% ``Further dissemination only as directed by (controlling DoD office
+% and date) or higher DoD authority.''
+% \par\null\noindent
+% \hbox to \textwidth{%
+%   \begin{tabular}{l@{\space---\space}l}
+%     For DoD  & See DoDD 5230.24, ``Distribution Statements on Technical
+%                                    Documents.''\\
+%     For DoE  & See authorities.\\
+%     For NASA & See Handbook NHB 2200.2.\\
+%     For NTIS & Leave blank.
+%   \end{tabular}%
+%   \hss}
+%
+% \paragraph{13. SUPPLEMENTARY NOTES.}\hskip-3mm\addtocounter{footnote}{-1}\footnotemark
+% \DescribeMacro{\SupplementaryNotes}
+% \changes{v1.2}{22 Dec 2004}{Added note about the \Lopt{floatlongboxes}
+%    option.}
+%
+% \noindent
+% Enter information not included elsewhere such as: ``Prepared in
+% cooperation with\dots''; ``Translation of\dots''; ``To be published
+% in\dots''.  When a report is revised, include a statement whether the
+% new report supersedes or supplements the older report and the older
+% report number if different.  ARO requires the following text:
+% \begin{verse}\noindent
+%   ``The views, opinions and/or findings contained in this report
+%   are those of the authors and should not be construed as an
+%   official Department of Army position, policy or decision, unless
+%   so designated by other documentation.''
+% \end{verse}
+% 
+% \paragraph{14. ABSTRACT.}\hskip-3mm{\addtocounter{footnote}{-1}\footnotemark
+% \DescribeMacro{\Abstract}
+% \changes{v1.2}{22 Dec 2004}{Added note about the \Lopt{floatlongboxes}
+%    option.}
+%
+% \noindent
+% Include a brief (approximately 200 words) factual summary of
+% the most significant information contained in the report.  This field 
+% is required.
+% 
+% \paragraph{15. SUBJECT TERMS.}\hskip-3mm\addtocounter{footnote}{-1}\footnotemark
+% \DescribeMacro{\SubjectTerms}
+% \changes{v1.2}{22 Dec 2004}{Added note about the \Lopt{floatlongboxes}
+%    option.}
+%
+% \noindent
+% Enter keywords or phrases identifying major subjects in the report.
+% Separate key words and phrases with semicolons (;).  
+% 
+% \paragraph{16a. REPORT SECURITY CLASSIFICATION.}
+% \DescribeMacro{\ReportClassification}
+%
+% \noindent
+% Enter U.S.\ Security Classification in accordance with U.S.\ Security
+% Regulations, \eg\ U, C, S, etc.  If this form contains classified 
+% information, stamp classification level on the top and bottom of the 
+% page.  This field is required, but will default to ``U'' (Unclassified).
+% 
+% \paragraph{16b. ABSTRACT SECURITY CLASSIFICATION.}
+% \DescribeMacro{\AbstractClassification}
+%
+% \noindent
+% See 16a (above).
+%
+% \paragraph{16c. THIS PAGE SECURITY CLASSIFICATION.}
+% \DescribeMacro{\PageClassification}
+%
+% \noindent
+% See 16a (above).
+%
+% \paragraph{17. LIMITATION OF ABSTRACT.}
+% \DescribeMacro{\AbstractLimitation}
+%
+% \noindent
+% This block must be completed to assign a distribution limitation to
+% the abstract.  Enter either ``UU'' (Unclassified Unlimited) or ``SAR''
+% (same as report).  An entry in this block is necessary if the abstract
+% is to be limited.  If blank, the abstract is assumed to be unlimited.
+% This field is {\bf not} required, but defaults to ``UU''.
+% 
+% \paragraph{18. NUMBER OF PAGES.}
+% \DescribeMacro{\NumberPages}
+% \DescribeMacro{\NumberPages*}
+%
+% \noindent
+% Enter the total number of pages (including including Roman numerals).
+% This field is required. The current implementation of the \Lpack{sf298} 
+% package uses the \Lpack{totpages} package that is now commonly 
+% available with standard \LaTeX\  distributions or can be easily obtained 
+% from Internet accessible package distribution sites such as the
+% The Com­pre­hen­sive TeX Archive Net­work (CTAN)  (https://www.ctan.org/).
+% You may ignore this field and a value will be entered on the page after the
+% processing of the document with \LaTeX.  As with labels and citations
+% referenced in the document, a message will be printed if \LaTeX\ must
+% be run again to propagate a correct label value to the sf298 form.  If
+% a value is given with this macro, then it {\bf will} be the one used
+% on the form.
+% 
+% There is also a star version of the \cmd{\NumberPages} macro that is 
+% only used with the \Lpack{totpages} package.  This adds the given 
+% number of pages to the result rather than directly setting the page 
+% number.  This macro is used when you are inserting a known number of 
+% pages, say for an appendix, into the document.
+% 
+% \paragraph{19a. NAME OF RESPONSIBLE PERSON.}
+% \DescribeMacro{\ResponsiblePerson}
+%
+% \noindent
+% Enter the name of the person responsible for submission of the
+% document.
+%
+% \paragraph{19b. TELEPHONE NUMBER OF RESPONSIBLE PERSON.}
+% \DescribeMacro{\RPTelephone}
+%
+% \noindent
+% Enter the telephone number of the person responsible for the
+% submission of the document (including area code).
+% 
+% \section{SF298 Form}
+% \changes{v1.3}{23 Jun 2016}{Added section describing how to insert the Special 
+% Form 298 into the document.}
+% 
+% The macro \cmd{\ReportDescription} will insert the standard form 298 on a
+% separate page at the location where it appears. This will produce the Report 
+% Documentation page as appears earlier in this document.
+% 
+% \section{General Instructions Page}
+% \changes{v1.3}{20 Jun 2016}{Added section describing the option to 
+% add a General Instructions page.}
+% 
+% Some government organizations require that a General Instructions 
+% page be included after the standard form 298. The macro 
+% \cmd{\GeneralInstructions\{\Lopt{typesize}\}} causes the page to be printed 
+% according to a generic type size, \eg \Lopt{footnotesize}. The \Lopt{typesize}
+% argument was implemented to allow the end user control over the print size 
+% of the general instructions.
+% 
+% The\cmd{\GeneralInstructions} command need simply be inserted into your 
+% \LaTeX\  document after the \cmd{\MakeRptDocPage} command. This will
+% result in the following page appearing in the document.
+%
+% \newgeometry{textheight=1.1\textheight}
+% \GeneralInstructions{small}
+% \restoregeometry
+%
+% \section{Configuration}
+% \enlargethispage{24pt}
+% 
+% In order to make the use of the report documentation page as easy as
+% possible, several aspects of the package are automated or can be easily
+% configured.
+% 
+% \subsection{Fonts}
+% \label{sec:configfont}
+% 
+% When the package is loaded it defines the fonts that are used by
+% basing them on the font families \cmd{\sfdefault} for the field labels and
+% \cmd{\rmdefault} for the text entries.  By default, they will be based on
+% the Computer Modern font family.  If you are changing the base font
+% families for your paper and you want the fonts used on the |sf298| to
+% change also, then you must change the font families before loading the
+% \Lpack{sf298} package.  See \cite[pages 229,236]{Kopk-Daly93} for more 
+% information about the default font families.
+% 
+% For any specific field, you can override the default font by 
+% declaring your preferred value along with your entry, \eg
+% \par\null\noindent 
+% \begin{tabular}{llll}
+%   ~~ & {\tt \cmd{\Title}\{\cmd{\Huge} A Huge Title\}} & $\rightarrow$ & \smash{\Huge\lower.5ex\hbox{A Huge Title}}
+% \end{tabular}
+%
+% \subsection{Configuration file}
+% \label{sec:configfile}
+% 
+% When the package is loaded, it searches along the standard \TeX\
+% search path, as configured in the system and modified by 
+% the {\tt TEXINPUTS} environment variable (or equivalent) for the
+% file \Lfile{sf298.cfg}.  It loads the first such file that
+% it finds and this file may be used to change defaults or make other
+% changes to the \Lpack{sf298} package, \eg
+% \par\null\noindent 
+% \begin{tabular}{ll@{}l}
+%   ~~ & {\tt \cmd{\PerformingOrg}\{} & {\tt Our Little Laboratory \cmd{\\[-1pt]}}\footnotemark \\[-1pt]
+%      &                              & {\tt Computer Science Department \cmd{\\[-1pt]}}        \\[-1pt]
+%      &                              & {\tt The Big University \cmd{\\[-1pt]}}                 \\[-1pt]
+%      &                              & {\tt 9999 Avenue Street \cmd{\\[-1pt]}}                 \\[-1pt]
+%      &                              & {\tt Anytown, TX  19293--8765}
+% \end{tabular}\footnotetext{Note that five lines are fit where only four are recommended in 
+%                            Table~\ref{tab:attributes} by shrinking the baselineskip by one point.}
+% \par\null\noindent 
+% For an organization, other typical fields for inclusion in the
+% configuration file are \cmd{\ResponsiblePerson} and
+% \cmd{\RPTelephone}.  For a set of papers that are part of the same
+% contract, you could set the \TeX\ search path so that a local version
+% of \Lfile{sf298.cfg} is loaded that first \cmd{\inputs} the more global
+% one and then sets contract specific defaults associated with a single
+% contract, \eg, \cmd{\ContractNumber}, \cmd{\Sponsoring Agency}, 
+% \cmd{\Acronym}, {\it etc.\/}
+%
+% The option |noconfig| turns off the input of the configuration file.
+% For symmetry, there exists an option |config|, but that is the 
+% default and does not need to be specified.
+%
+% \subsection{``Number of Pages'' field}
+% \label{sec:configpage}
+% 
+% The {\bf Number of Pages} field will be automatically filled-in by calculating the
+% difference between the page count of the |sf298| page and the last
+% page.  If the \Lpack{totpages} package is not present, and if the field
+% is not defined, a warning will be issued.
+% 
+% If the {\bf Number of Pages} is incorrectly calculated, then the
+% correct value can be explicitly defined with the \cmd{\NumberPage}
+% macro or offset by a fixed value with the \cmd{\NumberPage*} macro.
+% The former may be needed if the sf298 form is not the first page of
+% the document. An example of the latter is where there is an
+% appendix whose pages are inserted and are, therefore, not
+% automatically counted.
+% 
+% \subsection{Adjusting the form placement}
+% \DescribeMacro{\LeftShift}
+% \DescribeMacro{\DownShift}
+% \changes{v1.1}{15 Feb 2000}{Changed reference of millimeters to big points.}
+% 
+% \noindent
+% Sometimes you need to adjust the placement of a large form, such as to
+% provide an extra amount of margin space or for a different page size.
+% These two macros allow this fine-tuning: \cmd{\LeftShift\{5\}} will cause
+% the form to be shifted 5 big points to the left\@.\footnote{Note that 
+% there are no units here, the unit step is defined as one big point 
+% (1 bp) at the beginning of the \cmd{\MakeRptDocPage} command above by 
+% setting the \cmd{\unitlength}.}  The \cmd{\DownShift\{-8.5\}} will cause the 
+% form to be shifted up $8\frac{1}{2}$ big points (\ie, down a negative 
+% $8\frac{1}{2}$ big points).  For example, the following commands will 
+% center the sf298 form on A4 paper:
+% \par\null\noindent
+% \begin{tabular}{ll}
+%   ~~ & {\tt \cmd{\LeftShift}\{8.5\}} \\
+%      & {\tt \cmd{\DownShift}\{-22.0\}}
+% \end{tabular}
+%
+% \section{An example of use with the \Lpack{article} class}
+% \label{sec:sample}
+% \iffalse
+%<*sample>
+% \fi%
+% 
+% This sample program demonstrates how the \Lpack{sf298} package may 
+% be used and integrated with an existing class.  Here we redefine 
+% \cmd{\@makefile} so that we can create a titlepage and report
+% documentation page that share a common set of fields, such as the
+% report title, the performing organization title and address and the
+% report abstract.
+% 
+% First we have to start the paper as an \Lpack{article} with twosided
+% pages and using the \Lpack{sf298} package.  We also make the `@' a
+% letter so that we can update some internal names.
+% 
+%    \begin{macrocode}
+\documentclass[twoside]{article}
+\usepackage{sf298}
+
+ \setlength{\parindent}{5ex}
+ \setlength{\paperwidth}{8.5in}
+ \setlength{\textwidth}{6.5in}
+ \setlength{\oddsidemargin}{0in}
+ \setlength{\evensidemargin}{0in}
+ 
+\makeatletter
+%    \end{macrocode}
+%
+% \begin{macro}{\@maketitle}
+% 
+% We modify the standard \cmd{\@maketitle} so that the title and author's
+% address (from the internal \cmd{\sf@PeformingOrg} value) are
+% integrated into the standard titlepage layout.  This may not always be
+% the best approach, since the blocks may contain different internal
+% layout information on the title page and on the report documentation
+% page.  Here, the \cmd{\@date} macro is used for the date rather than
+% \cmd{\sf@ReportDate} and similarly for the author's names, since the
+% desired format is different for these fields, even though the
+% information is the same.  Another way to do the same thing is to
+% define the macro to parse and format these values as desired in each
+% case.
+% 
+% As much as possible, a document class that generates both a titlepage
+% and the report documentation page (sf298) should allow the common
+% information to be entered only once.
+%
+%    \begin{macrocode}
+\renewcommand{\@maketitle}{%
+  \newpage
+  \null
+  \vskip 2em%
+  \begin{center}%
+  \let\footnote\thanks
+    {\LARGE\sf@Title\par}%
+    \vskip 1.5em%
+    {\large
+      \lineskip .5em%
+      \begin{tabular}[t]{c}%
+        \@author\\[10pt]
+        \sf@PerformingOrg
+      \end{tabular}\par}%
+    \vskip 1em%
+    {\large\@date}%
+  \end{center}%
+  \par
+  \vskip 1.5em}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\showabstract}
+% 
+% The next macro, \cmd{\showabstract} shows one method of pulling the
+% abstract text out of the internal (``hidden'') define, in order to
+% include it on the titlepage as we show in the accompanying
+% \Lfile{sample298.txt} file.  We just have to make sure that we use it
+% before making the report documentation page, since this data is
+% thrown away after that.
+%
+%    \begin{macrocode}
+ \newcommand{\showabstract}{%
+   \noindent
+   \sf@Abstract}
+%    \end{macrocode}
+% \end{macro}
+%
+% We are finished with our example integration, so we close off changing
+% the internals and make `@' an ``other'' once more.
+%
+%    \begin{macrocode}
+\makeatother
+%    \end{macrocode}
+% 
+% Now we fill in the fields needed for the title and the report
+% documentation pages.  For reference as a template, we have entered all
+% of the \Lpack{sf298} block macros below.  The ones that are not being
+% used are commented out.  Note that although block 7 (Performing Organization Name) 
+% is rated at four lines according to Table~\ref{tab:attributes}, we can fit five
+% lines if we compress them a little.  Depending on your base font family and
+% such small adjustments, you can probably fit any reasonable set of information
+% onto this form in the way that you want to.
+%
+%    \begin{macrocode}
+\date{June 1996}
+\ReportDate{10--06--1996}
+\ReportType{Final}
+\DatesCovered{1 June 1996 --- 31 May 1999}
+\Title{Final Report Title\thanks{We wish to thank all those who helped with
+                         this project.  The views and conclusions contained
+                         in this document are those of the authors and should
+                         not be interpreted as representing anyone else.}}
+\ContractNumber{DACA99--99--C--9999}
+ %\GrantNumber{}
+ %\ProgramElementNumber{}
+ %\ProjectNumber{}
+ %\TaskNumber{}
+ %\WorkUnitNumber{}
+\author{Joe A. Uthor and Jane E. Ditor}
+\Author{Uthor, Joe, A., and Ditor, Jane, E.}
+\PerformingOrg{%
+  Our Little Laboratory\\[-1pt]
+  Computer Science Department\\[-1pt]
+  The Big University\\[-1pt]
+  9999 Avenue Street\\[-1pt]
+  Anytown, TX  19293--8765}
+ %\POReportNumber{}
+\SponsoringAgency{%
+  U.S. Army Sponsoring Department\\
+  P.O. Box 92919, Miltown, AK  97909--6543\\[10pt]
+  U.S. Army Monitoring Agency\\
+  909 Mission Rd., Somecity, MD  29399--9753}
+ %\Acronyms{}
+ %\SMReportNumber{}
+ %\DistributionStatement{}
+\SupplementaryNotes{%
+  The views, opinions and/or findings contained in this report are
+  those of the authors and should not be construed as an official
+  U.S.\ Government position, policy or decision, unless so designated
+  by other documentation.}
+\Abstract{%
+ This sample paper shows one way to use the sf298 package along with
+ the article documentclass to generate a paper with the standard form 298
+ as the second physical page in the document.
+
+ In addition, the common text of the title, authors and abstract are
+ shared and the ``{\tt \string\thanks}'' macro is treated specially so
+ that it is active for the titlepage and inactive for the report
+ documentation page.}
+\SubjectTerms{keywords; associated words; other words}
+ %\NumberPages{}
+ %\ReportClassification{}
+ %\PageClassification{}
+ %\AbstractClassification{}
+\AbstractLimitation{UU}
+\ResponsiblePerson{Mr.\ Joe A. Uthor}
+\RPTelephone{(412) 555--9999}
+%    \end{macrocode}
+% 
+% Finally we begin a very simple report. First we print the titlepage
+% and the abstract.  Next the report documentation and general 
+% instructions pages are written. Following these two pages, the 
+% table of contents is output, followed by the very short report.
+% 
+%    \begin{macrocode}
+\begin{document}
+\pagenumbering{roman}
+
+\maketitle\thispagestyle{empty}
+\begin{abstract}
+ \showabstract
+\end{abstract}
+
+\ReportDescription
+
+\GeneralInstructions{small}
+
+\tableofcontents
+\cleardoublepage
+\pagenumbering{arabic}
+\setcounter{page}{1}
+
+\section{Introduction}
+
+Blah, blah and blah.
+
+\section{Conclusion}
+
+More blah, blah and blah.
+
+\end{document}
+%    \end{macrocode}
+% \iffalse
+%</sample>
+% \fi%
+%
+% \StopEventually{%
+% \section{Acknowledgments}
+% 
+% Dr. Cochran would like to thank Professor Bruce M. Boghosian at the Center for
+% Computational Science, Boston University (bruceb@bu.edu) for
+% discovering problems with the use of a PostScript background for the
+% sf298 form which convinced him to original write the entire package in \LaTeX\  
+% (versions 1.1 \& 1.2). Also, to Dr.\ Nino Pereira (pereira@speakeasy.net) for the 
+% suggestion to make some of the fields more flexible.
+%
+% Dr. Rochford would like to thank Dr. Cochran for creating the orginal version of 
+% the package, to which he added the option of providing the page of General 
+% Instructions (version 1.3).
+%
+% \begin{thebibliography}{6}%
+% \bibitem{Mull99}%
+%   Wihelm M\"uller,
+%   \emph{The \Lpack{totpages} package},
+%   1999/07/13.
+% \bibitem{Kopk-Daly93}%
+%   Michel Goossens, Framk Mittelbach, and Alexander Samarin,
+%   \emph{A Guide to \LaTeXe},
+%   1993,  2$^{nd}$ edition (revised 1995).
+% \end{thebibliography}}
+%
+% \section{The {\tt DOCSTRIP} modules}
+% The following modules are used in the implementation to direct
+% {\tt DOCSCRIPT} in generating the external files:
+% \begin{tabular}[t]{ll}
+%   driver    & produces a documentation driver file.\\
+%   package   & produces the package sf298.sty.\\
+%   sample    & produces a sample \LaTeX\ template and test file.
+% \end{tabular}
+%
+% \newpage
+% \section{The code}
+% \iffalse
+%<*package>
+% \fi%
+% \subsection{Identification}
+%
+% \changes{v1.1}{15 Feb 2000}{No longer require the graphicx package.}
+% \changes{v1.2}{22 Dec 2004}{Updated package ID.}
+%
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{sf298}[2016/07/07 Standard Form 298]
+\typeout{Package: sf298 2016/07/07 v1.3)}
+\providecommand{\eg}{{\it e.g.\/\ }}
+%    \end{macrocode}
+%
+% \subsection{Load the \Lpack{totpages} package, if it exists.}
+%
+% \begin{macro}{\sf@page}
+% \changes{v1.1}{22 Feb 2000}{Added the optional loading of the 
+% {\sf totpages} package.  If present, then the total pages block 
+% is automatically set.}
+%
+% Check to see if the \Lpack{totpages} package is present.  If it is,
+% then load the package and create a local page counter for use in 
+% calculating the actual total pages.
+%
+%    \begin{macrocode}
+\IfFileExists{totpages.sty}{%
+  \usepackage{totpages}
+  \newcounter{sf@page}}{}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Load the \Lpack{multicol} package.}
+%
+% \changes{v1.3}{20 Jun 2016}{Added the multicol package to support multi-column formatting 
+% for the General Instructions page.}
+%
+% Check to see if the \Lpack{multicol} package is present.  If it is, then load the package to 
+% support multi-column formatting for the General Instructions page. If it is not present then
+% report error and terminate.
+%
+%    \begin{macrocode}
+\IfFileExists{multicol.sty}{%
+  \usepackage{multicol}}
+  {\PackageError {sf298}{The multicol package was not found.}
+  {Install the multicol package on your system.}}
+%    \end{macrocode}
+%
+% \subsection{Load the \Lpack{fancyhdr} Package}
+%
+% Check to see if the \Lpack{fancyhdr} package is present.  If it is, then load the package to 
+% define a custom footer. If it is not present then report error and terminate. This package 
+% is needed to define a custom footer where the form identifier appears on the General 
+% Instructions produced by \cmd{\GeneralInstructions}.
+%
+%    \begin{macrocode}
+\IfFileExists{fancyhdr.sty}{%
+  \usepackage{fancyhdr}}
+  {\PackageError {sf298}{The fancyhdr package was not found.}
+  {Install the fancyhdr package on your system.}}
+%    \end{macrocode}
+%
+% \subsection{Create the user interface}
+%
+% \changes{v1.1}{22 Feb 2000}{Moved user interface commands and default 
+% prior to loading a configuration file}
+% 
+% The following macros define the external and internal portions of the
+% user interface.  These macros are used to fill the various blocks of
+% the form.  All but one of the macros have the same pattern: a public
+% version which sets the internal value, both based on the block name.
+% The exception is the \cmd{\NumberPages} macro that has a starred form
+% for special use when the \Lpack{totpages} when the page count is 
+% calculated automatically (see below).
+%
+% \begin{macro}{\ReportDate}
+% \begin{macro}{\sf@ReportDate}
+%    \begin{macrocode}
+\newcommand\ReportDate[1]{\renewcommand\sf@ReportDate{#1}}
+\newcommand\sf@ReportDate{\number\day--\number\month--\number\year}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ReportType}
+% \begin{macro}{\sf@ReportType}
+%    \begin{macrocode}
+\newcommand\ReportType[1]{\renewcommand\sf@ReportType{#1}}
+\newcommand\sf@ReportType{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\DatesCovered}
+% \begin{macro}{\sf@DatesCovered}
+%    \begin{macrocode}
+\newcommand\DatesCovered[1]{\renewcommand\sf@DatesCovered{#1}}
+\newcommand\sf@DatesCovered{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Title}
+% \begin{macro}{\sf@Title}
+%    \begin{macrocode}
+\newcommand\Title[1]{\renewcommand\sf@Title{#1}}
+\newcommand\sf@Title{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ContractNumber}
+% \begin{macro}{\sf@ContractNumber}
+%    \begin{macrocode}
+\newcommand\ContractNumber[1]{\renewcommand\sf@ContractNumber{#1}}
+\newcommand\sf@ContractNumber{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\GrantNumber}
+% \begin{macro}{\sf@GrantNumber}
+%    \begin{macrocode}
+\newcommand\GrantNumber[1]{\renewcommand\sf@GrantNumber{#1}}
+\newcommand\sf@GrantNumber{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ProgramElementNumber}
+% \begin{macro}{\sf@ProgramElementNumber}
+%    \begin{macrocode}
+\newcommand\ProgramElementNumber[1]{\renewcommand\sf@ProgramElementNumber{#1}}
+\newcommand\sf@ProgramElementNumber{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ProjectNumber}
+% \begin{macro}{\sf@ProjectNumber}
+%    \begin{macrocode}
+\newcommand\ProjectNumber[1]{\renewcommand\sf@ProjectNumber{#1}}
+\newcommand\sf@ProjectNumber{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\TaskNumber}
+% \begin{macro}{\sf@TaskNumber}
+%    \begin{macrocode}
+\newcommand\TaskNumber[1]{\renewcommand\sf@TaskNumber{#1}}
+\newcommand\sf@TaskNumber{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\WorkUnitNumber}
+% \begin{macro}{\sf@WorkUnitNumber}
+%    \begin{macrocode}
+\newcommand\WorkUnitNumber[1]{\renewcommand\sf@WorkUnitNumber{#1}}
+\newcommand\sf@WorkUnitNumber{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Author}
+% \begin{macro}{\sf@Author}
+%    \begin{macrocode}
+\newcommand\Author[1]{\renewcommand\sf@Author{#1}}
+\newcommand\sf@Author{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\PerformingOrg}
+% \begin{macro}{\sf@PerformingOrg}
+%    \begin{macrocode}
+\newcommand\PerformingOrg[1]{\renewcommand\sf@PerformingOrg{#1}}
+\newcommand\sf@PerformingOrg{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\POReportNumber}
+% \begin{macro}{\sf@POReportNumber}
+%    \begin{macrocode}
+\newcommand\POReportNumber[1]{\renewcommand\sf@POReportNumber{#1}}
+\newcommand\sf@POReportNumber{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\SponsoringAgency}
+% \begin{macro}{\sf@SponsoringAgency}
+%    \begin{macrocode}
+\newcommand\SponsoringAgency[1]{\renewcommand\sf@SponsoringAgency{#1}}
+\newcommand\sf@SponsoringAgency{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Acronyms}
+% \begin{macro}{\sf@Acronyms}
+%    \begin{macrocode}
+\newcommand\Acronyms[1]{\renewcommand\sf@Acronyms{#1}}
+\newcommand\sf@Acronyms{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\SMReportNumber}
+% \begin{macro}{\sf@SMReportNumber}
+%    \begin{macrocode}
+\newcommand\SMReportNumber[1]{\renewcommand\sf@SMReportNumber{#1}}
+\newcommand\sf@SMReportNumber{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\DistributionStatement}
+% \begin{macro}{\sf@DistributionStatement}
+%    \begin{macrocode}
+\newcommand\DistributionStatement[1]{%
+  \renewcommand\sf@DistributionStatement{#1}}
+\newcommand\sf@DistributionStatement{Approval for public release;
+                                     distribution is unlimited.}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\SupplementaryNotes}
+% \begin{macro}{\sf@SupplementaryNotes}
+%    \begin{macrocode}
+\newcommand\SupplementaryNotes[1]{\renewcommand\sf@SupplementaryNotes{#1}}
+\newcommand\sf@SupplementaryNotes{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Abstract}
+% \begin{macro}{\sf@Abstract}
+%    \begin{macrocode}
+\newcommand\Abstract[1]{\renewcommand\sf@Abstract{#1}}
+\newcommand\sf@Abstract{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\SubjectTerms}
+% \begin{macro}{\sf@SubjectTerms}
+%    \begin{macrocode}
+\newcommand\SubjectTerms[1]{\renewcommand\sf@SubjectTerms{#1}}
+\newcommand\sf@SubjectTerms{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ReportClassification}
+% \begin{macro}{\sf@ReportClassification}
+%    \begin{macrocode}
+\newcommand\ReportClassification[1]{\renewcommand\sf@ReportClassification{#1}}
+\newcommand\sf@ReportClassification{U}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\AbstractClassification}
+% \begin{macro}{\sf@AbstractClassification}
+%    \begin{macrocode}
+\newcommand\AbstractClassification[1]{%
+  \renewcommand\sf@AbstractClassification{#1}}
+\newcommand\sf@AbstractClassification{U}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\PageClassification}
+% \begin{macro}{\sf@PageClassification}
+%    \begin{macrocode}
+\newcommand\PageClassification[1]{\renewcommand\sf@PageClassification{#1}}
+\newcommand\sf@PageClassification{U}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\AbstractLimitation}
+% \begin{macro}{\sf@AbstractLimitation}
+%    \begin{macrocode}
+\newcommand\AbstractLimitation[1]{\renewcommand\sf@AbstractLimitation{#1}}
+\newcommand\sf@AbstractLimitation{UU}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ResponsiblePerson}
+% \begin{macro}{\sf@ResponsiblePerson}
+%    \begin{macrocode}
+\newcommand\ResponsiblePerson[1]{\renewcommand\sf@ResponsiblePerson{#1}}
+\newcommand\sf@ResponsiblePerson{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\RPTelephone}
+% \begin{macro}{\sf@RPTelephone}
+%    \begin{macrocode}
+\newcommand\RPTelephone[1]{\renewcommand\sf@RPTelephone{#1}}
+\newcommand\sf@RPTelephone{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NumberPages}
+% \begin{macro}{\NumberPages*}
+% \changes{v1.1}{29 Feb 2000}{Added ability to offset the automatic
+%  number of pages calculation.}
+% 
+% The \cmd{\NumberPages} macro that has a both a regular form
+% (\cmd{\NumberPages}) that is used when setting the number of pages,
+% and a starred form (\cmd{\NumberPages*}) that is used to offset
+% the automatically calculated number of pages calculated using the
+% \Lpack{totpages} package.  The value supplied by the starred form 
+% is added to account for inserted pages that are not part of the
+% \LaTeX\ paper.  For instance, when you are inserting a known number of 
+% pages from an alternative source, say for an appendix, into the
+% document.  
+% 
+% The \cmd{\NumberPages} macro looks ahead for an asterisk and if it
+% finds one, then it ``eats'' it and passes the argument to the internal
+% \cmd{\sf@SNumberPages} macro where it is stored for later use to with the
+% total pages calculation.  Otherwise, it sends the argument to
+% the \cmd{\sf@NNumberPages} macro where it becomes the actual page number.
+%
+%    \begin{macrocode}
+\newcommand\NumberPages{%
+  \@ifnextchar *%
+    {\def\@tempa*{\sf@SNumberPages}%
+     \@tempa}%
+    {\sf@NNumberPages}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sf@NNumberPages}
+% \begin{macro}{\sf@NumberPages}
+%    \begin{macrocode}
+\newcommand\sf@NNumberPages[1]{\renewcommand\sf@NumberPages{#1}}
+\newcommand\sf@NumberPages{\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sf@SNumberPages}
+% \begin{macro}{\sf@ExtraPages}
+%    \begin{macrocode}
+\newcommand\sf@SNumberPages[1]{\renewcommand\sf@ExtraPages{#1}}
+\newcommand\sf@ExtraPages{0}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fancypagestyle}
+% The macro \cmd{\fancypagestyle\{sf298FormIDStyle\}} is defined so the 
+% form identifier for the General Instructions page can be placed at the bottom
+%  of the page, namely ``{\bfseries Standard Form 298 Back} (Rev.\ 8/98)''.
+% \end{macro}
+%
+%    \begin{macrocode}
+\fancypagestyle{sf298FormIDStyle}
+{\fancyhf{}\renewcommand{\headrulewidth}{0pt}
+\fancyfoot[R]{\footnotesize {\bfseries Standard Form 298 Back} (Rev.\ 8/98)} }
+%    \end{macrocode}
+%
+% \subsection{Options Processing: Check for a configuration file}
+%
+% \changes{v1.1}{29 Feb 2000}{Added option to turn on/off the 
+% configuration file check.}
+% \changes{v1.1}{22 Feb 2000}{Added check for a configuration file.}
+% \changes{v1.2}{22 Dec 2004}{Added new option: [no]floatlongboxes.}
+%
+% First we define a switch that we can set with the optional arguments
+% and then declare the optional arguments themselves.
+%
+%    \begin{macrocode}
+\DeclareOption{config}{\def\sf@config{Y}}
+\DeclareOption{noconfig}{\def\sf@config{N}}
+%    \end{macrocode}
+%
+% Second, we define an option that floats the four long boxes near 
+% the bottom of the page.  This allows for more flexibility in the
+% layout without greatly modifying the standard form.
+%
+%    \begin{macrocode}
+\newif\ifsf@floatlongboxes
+\DeclareOption{floatlongboxes}{\sf@floatlongboxestrue}
+\DeclareOption{nofloatlongboxes}{\sf@floatlongboxesfalse}
+%    \end{macrocode}
+%
+% Next we process the optional arguments.  We set the default
+% to read the configuration file and process any options to
+% allow the user to turn it off.  Then, depending on the 
+% current value of the configuration switch, we check for the
+% configuration file.
+%
+%    \begin{macrocode}
+\ExecuteOptions{config,nofloatlongboxes}
+\ProcessOptions
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\if Y\sf@config
+  \InputIfFileExists{sf298.cfg}{}{}
+\fi
+\let\sf@config\relax
+%    \end{macrocode}
+%
+% \subsection{Form placement fine tuning}
+%
+% \begin{macro}{\LeftShift}
+% \begin{macro}{\DownShift}
+% 
+% These two macros allow the user to set any offset for the form.  This
+% allows fine tuning of the form placement as necessary.
+%
+%    \begin{macrocode}
+\newcommand\LeftShift[1]{\renewcommand\sf@LeftShift{#1}}
+\newcommand\sf@LeftShift{0}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\newcommand\DownShift[1]{\renewcommand\sf@DownShift{#1}}
+\newcommand\sf@DownShift{0}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Font definition}
+% \changes{v1.3}{20 Jun 2016}{Changed fonts for form identifiers at bottom of page.}
+%
+% \begin{macro}{\sf@setfont}
+% \changes{v1.1}{15 Feb 2000}{Added titlefonts to support a \LaTeX-based
+% blank form (rather than the previous PostScript one).  Added setfont 
+% stuff to fix weird things that can be done to upset a fixed format.}
+%
+% This macro is used to set the baseline and insure that the interword
+% spacing has not been changed by evil outside influences when
+% typesetting the form titles and entries.
+%
+%    \begin{macrocode}
+\newcommand{\sf@setfont}[2]{%
+  \renewcommand{\baselinestretch}{1.0}%
+  \setlength{\baselineskip}{#2}%
+  \setlength{\normalbaselineskip}{\baselineskip}%
+  #1
+  \spaceskip=\fontdimen2\font % space between words (\raggedright)
+  \xspaceskip=\fontdimen2\font
+  \advance\xspaceskip by\fontdimen7\font}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sf@strut}
+% \changes{v1.1}{15 Feb 2000}{Added strut to space the block heading at the
+%  exactly proper position in the upper left corner.}
+%
+% This strut is added at the beginning of each block title to place the
+% title text at the desired offset from the upper left corner of the
+% block.
+%
+%    \begin{macrocode}
+\newcommand{\sf@strut}{\rule{0pt}{7pt}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sf@titlefontA}
+% \begin{macro}{\sf@settitlefontA}
+% \begin{macro}{\sf@titlefontB}
+% \begin{macro}{\sf@settitlefontB}
+% \begin{macro}{\sf@titlefontC}
+% \begin{macro}{\sf@settitlefontC}
+% \begin{macro}{\sf@titlefontD}
+% \begin{macro}{\sf@settitlefontD}
+% \begin{macro}{\sf@titlefontE}
+% \begin{macro}{\sf@settitlefontE}
+% \begin{macro}{\sf@titlefontF}
+% \begin{macro}{\sf@settitlefontF}
+% \changes{v1.1}{22 Feb 2000}{Changed font declarations to use 
+% \cmd{\sfdefault} so that they will adjust to the preferred font family.}
+%
+% The form headings are set with Sans Serif at 14-, 11-, 8-, and 6-point
+% sizes and a couple of different shapes and sizes.  Each font is
+% actually set by the related \cmd{\settitlefont?} macro which switches 
+% to the indicated fixed font, sets the new baseline and protects the 
+% text from external settings.  The actual font family used depends on 
+% the current setting of \cmd{\sfdefault} \cite[pages 229,236]{Kopk-Daly93}.
+%
+%    \begin{macrocode}
+\DeclareFixedFont{\sf@titlefontA}{OT1}{\sfdefault}{bx}{n}{\@xivpt}
+\newcommand{\sf@settitlefontA}{\sf@setfont{\sf@titlefontA}{18pt}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareFixedFont{\sf@titlefontB}{OT1}{\sfdefault}{m}{sl}{\@xipt}
+\newcommand{\sf@settitlefontB}{\sf@setfont{\sf@titlefontB}{13.6pt}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareFixedFont{\sf@titlefontC}{OT1}{\sfdefault}{m}{n}{\@vipt}
+\newcommand{\sf@settitlefontC}{\sf@setfont{\sf@titlefontC}{7pt}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareFixedFont{\sf@titlefontD}{OT1}{\sfdefault}{bx}{n}{\@vipt}
+\newcommand{\sf@settitlefontD}{\sf@setfont{\sf@titlefontD}{7pt}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareFixedFont{\sf@titlefontE}{OT1}{\sfdefault}{bx}{n}{\@viiipt}
+\newcommand{\sf@settitlefontE}{\sf@setfont{\sf@titlefontE}{9.5pt}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareFixedFont{\sf@titlefontF}{OT1}{\sfdefault}{m}{sl}{\@viiipt}
+\newcommand{\sf@settitlefontF}{\sf@setfont{\sf@titlefontF}{9.5pt}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\sf@entryfont}
+% \begin{macro}{\sf@setentryfont}
+% \changes{v1.1}{22 Feb 2000}{Changed font declaration to use 
+% \cmd{\rmdefault} so that it will adjust to the preferred font family.}
+% 
+% The form is filled in with Roman 10-point text.  This insures that the
+% text will reasonably fit in the form boxes and will not vary with
+% the choice of the normal fontsize of the document.  As with the title
+% fonts, above, the entry font is actually set by the related
+% \cmd{\setentryfont} macro.  The actual font family used depends on
+% the current setting of \cmd{\rmdefault} 
+% \cite[pages 229,236]{Kopk-Daly93}.
+%
+%    \begin{macrocode}
+\DeclareFixedFont{\sf@entryfont}{OT1}{\rmdefault}{m}{n}{\@xpt}
+\newcommand{\sf@setentryfont}{\sf@setfont{\sf@entryfont}{11pt}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\sf@revfontbold}
+% \begin{macro}{\sf@setrevfontbold}
+% \begin{macro}{\sf@revfont}
+% \begin{macro}{\sf@setrevfont}
+% \changes{v1.3}{20 Jun 2016}{Added font declaration for form identifier (i.e.
+% revision) that appears at the bottom of the forms.}
+% 
+% The form identifiers are filled in with Sans Serif at 9-point size to match the 
+% appearance of the form as publicly distributed in Portable Data Format (PDF) 
+% by the United States Government. Separate fonts are specified for the bold
+% and non-bold portions of the identifiers.
+%
+%    \begin{macrocode}
+\DeclareFixedFont{\sf@revfontbold}{OT1}{\sfdefault}{bx}{n}{9pt}
+\newcommand{\sf@setrevfontbold}{\sf@setfont{\sf@revfontbold}{10pt}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareFixedFont{\sf@revfont}{OT1}{\sfdefault}{m}{n}{9pt}
+\newcommand{\sf@setrevfont}{\sf@setfont{\sf@revfont}{10pt}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Error checking and reporting}
+%
+% \changes{v1.1}{22 Feb 2000}{Added the error checking and reporting.}
+% \begin{macro}{\ifsf@undef}
+% \begin{macro}{\sf@undeftrue}
+% \begin{macro}{\sf@undeffalse}
+% 
+% This switch is used by the error reporting at the end of the document
+% to generate a general message that there was an undefined required
+% field.
+% 
+%    \begin{macrocode}
+\newif\ifsf@undef
+\sf@undeffalse
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sf@undefined}
+% 
+% The \cmd{\sf@undefined} macro is executed with the optional argument for
+% each required field and without the optional argument at the end of
+% the document.
+%
+%    \begin{macrocode}
+\newcommand{\sf@undefined}[1][\@empty]{%
+  \ifx \@empty#1\relax
+    \ifsf@undef
+       \typeout{^^J%
+                SF298 Warning: There are required fields that are undefined.%
+                ^^J}%
+     \fi
+  \else
+    \sf@undeftrue
+    \typeout{^^J%
+             SF298 Warning: \expandafter\string\csname #1\endcsname\space
+             is undefined.%
+             ^^J}%
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sf@checkfield}
+% 
+% This macro does the actual checking for undefined required fields.
+% Because of the different sorts of field definitions that could be
+% created, it was easier to just fill a box with whatever the user
+% defined and check to see if the box has a non-zero width.  You could
+% defeat this if you really wanted to, but it should work for reasonable
+% field values.
+%
+%    \begin{macrocode}
+\newcommand{\sf@checkfield}[1]{%
+  \setbox\@tempboxa\vbox{\csname sf@#1\endcsname}%
+  \ifdim \wd\@tempboxa =0pt
+    \sf@undefined[#1]
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\AtEndDocument{\sf@undefined}
+%    \end{macrocode}
+%
+%
+% \subsection{Page layout}
+% 
+% This is the part of the code that actually sets up the form page and
+% draws the form.  After the form is drawn, most of the macros are set
+% to \cmd{\relax} in order to recover as much pool space as possible.
+%
+% \subsubsection{Form setup and cleanup}
+%
+% \begin{macro}{\ReportDescription}
+% 
+% At the end of the \cmd{\titlepage} command, the \cmd{\thanks} macro is
+% redefined to be \cmd{\relax}.  If we want to define the title once and
+% also want to be able to have a \cmd{\thanks} message associated with the
+% title on the titlepage, and want to use that same title text on the
+% report documentation page, then we need to redefine the \cmd{\thanks}
+% macro to eat it's argument.  This is done by setting \cmd{\thanks} to
+% \cmd{\@gobble} while printing the report documentation page.
+% 
+%    \begin{macrocode}
+\newcommand{\ReportDescription}{%
+   \global\let\thanks\@gobble
+   \MakeRptDocPage
+   \global\let\thanks\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MakeRptDocPage}
+% 
+% The \cmd{\MakeRptDocPage} command creates the Report Documentation Page
+% using the information defined by the associated field macros.  This
+% should be used at the beginning of a deliverable report just after
+% the cover or title page and counts as the first actual page of the 
+% document.
+%
+%    \begin{macrocode}
+\newcommand\MakeRptDocPage{%
+%    \end{macrocode}
+% 
+% If the \Lpack{twoside} option is specified in the \cmd{\documentclass}, then
+% it is printed as a separate page with a blank back. This page is treated
+% as page `{\it i}' (if the documentclass \Lpack{twoside} option is
+% specified, then the back treated as page `{\it ii}'.
+%
+%    \begin{macrocode}
+  \newpage
+  \if@twoside\ifodd\c@page\else
+    \null
+    \thispagestyle{empty}%
+    \newpage
+  \fi\fi
+%    \end{macrocode}
+%
+% \changes{v1.1}{22 Feb 2000}{Added calculation of total pages (if the
+% totpages package is present).  Added check for missing fields.}
+%
+% Check for missing required fields.  If the field value is missing, then
+% print a warning.  In the case of the number of pages, if the 
+% \Lpack{totpages} package was loaded, then calculate the value, else if 
+% the total pages is not given, then give a warning.
+%
+%    \begin{macrocode}
+  \sf@checkfield{ReportDate}
+  \sf@checkfield{ReportType}
+  \sf@checkfield{DatesCovered}
+  \sf@checkfield{Title}
+  \sf@checkfield{Author}
+  \sf@checkfield{PerformingOrg}
+  \sf@checkfield{SponsoringAgency}
+  \sf@checkfield{Abstract}
+  \sf@checkfield{ReportClassification}
+  \sf@checkfield{AbstractClassification}
+  \sf@checkfield{PageClassification}
+  \sf@checkfield{AbstractLimitation}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \edef\@tempa{\sf@NumberPages}%
+  \edef\@tempa{\expandafter\@car\@tempa \@nil}%
+  \if \relax\@tempa\relax
+    \@ifundefined{c@TotPages}%
+      {\sf@undefined[NumberPages]}
+      {\@ifundefined{r@TotPages}%
+         {\renewcommand{\sf@NumberPages}{{\bf ??}}}%
+         {\setcounter{sf@page}{\expandafter\@car\r@TotPages\@nil}
+          \addtocounter{sf@page}{-\value{TotPages}}
+          \addtocounter{sf@page}{\sf@ExtraPages}
+          \renewcommand{\sf@NumberPages}{\arabic{sf@page}}}}
+  \fi
+%    \end{macrocode}
+%
+% \changes{v1.1}{15 Feb 2000}{Adjusted offset calculations for new
+%  blank form.}
+% 
+% Next we make this page number one of the document and draw the form on
+% an $8\frac{1}{2}\times 11$ inch letter-size page and all offsets in
+% the actual form layout are in pixels from the lower-left corner of the
+% picture box as defined by the \cmd{\sf@drawform} macro. When we close
+% off the boxes, we allow the form to expand beyond the zero sized box.
+% This keeps \LaTeX\ from issuing warnings about overfull boxes.
+%
+%    \begin{macrocode}
+  \setcounter{page}{1}%
+  \thispagestyle{empty}
+  \vbox to 0pt{%
+    \@tempskipa 34pt
+    \advance\@tempskipa\voffset
+    \advance\@tempskipa\topmargin
+    \advance\@tempskipa\headheight
+    \advance\@tempskipa\headsep
+    \advance\@tempskipa\baselineskip
+    \vskip-\@tempskipa
+    \hbox to 0pt{%
+      \@tempskipa\oddsidemargin
+      \advance\@tempskipa 42pt
+      \hskip-\@tempskipa
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+      \sf@drawform
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+      \hss}%
+    \vss}%
+%    \end{macrocode}
+%
+% The page is now done, so, if the documentclass \Lpack{twoside} option
+% is specified, generate a blank page for its back, which counts as
+% page `{\it ii}').
+%
+%    \begin{macrocode}
+  \newpage
+  \if@twoside
+    \null
+    \thispagestyle{empty}%
+    \newpage
+  \fi
+%    \end{macrocode}
+%
+% \changes{v1.1}{15 Feb 2000}{Added font macros to the list of unused
+% definitions.  Also \cmd{\ReportDate} and \cmd{\sf@ReportDate}.}
+% Finally, the last step is to set all of the now unused definitions to
+% \cmd{\relax}, thereby freeing some space.
+%
+%    \begin{macrocode}
+  \global\let\ReportDate\relax
+  \global\let\sf@ReportDate\relax
+  \global\let\ReportType\relax
+  \global\let\sf@ReportType\relax
+  \global\let\DatesCovered\relax
+  \global\let\sf@DatesCovered\relax
+  \global\let\Title\relax
+  \global\let\sf@Title\relax
+  \global\let\ContractNumber\relax
+  \global\let\sf@ContractNumber\relax
+  \global\let\GrantNumber\relax
+  \global\let\sf@GrantNumber\relax
+  \global\let\ProgramElementNumber\relax
+  \global\let\sf@ProgramElementNumber\relax
+  \global\let\ProjectNumber\relax
+  \global\let\sf@ProjectNumber\relax
+  \global\let\TaskNumber\relax
+  \global\let\sf@TaskNumber\relax
+  \global\let\WorkUnitNumber\relax
+  \global\let\sf@WorkUnitNumber\relax
+  \global\let\Author\relax
+  \global\let\sf@Author\relax
+  \global\let\PerformingOrg\relax
+  \global\let\sf@PerformingOrg\relax
+  \global\let\POReportNumber\relax
+  \global\let\sf@POReportNumber\relax
+  \global\let\SponsoringAgency\relax
+  \global\let\sf@SponsoringAgency\relax
+  \global\let\Acronyms\relax
+  \global\let\sf@Acronyms\relax
+  \global\let\SMReportNumber\relax
+  \global\let\sf@SMReportNumber\relax
+  \global\let\DistributionStatement\relax
+  \global\let\sf@DistributionStatement\relax
+  \global\let\SupplementaryNotes\relax
+  \global\let\sf@SupplementaryNotes\relax
+  \global\let\Abstract\relax
+  \global\let\sf@Abstract\relax
+  \global\let\SubjectTerms\relax
+  \global\let\sf@SubjectTerms\relax
+  \global\let\ReportClassification\relax
+  \global\let\sf@ReportClassification\relax
+  \global\let\AbstractClassification\relax
+  \global\let\sf@AbstractClassification\relax
+  \global\let\PageClassification\relax
+  \global\let\sf@PageClassification\relax
+  \global\let\AbstractLimitation\relax
+  \global\let\sf@AbstractLimitation\relax
+  \global\let\ResponsiblePerson\relax
+  \global\let\sf@ResponsiblePerson\relax
+  \global\let\RPTelephone\relax
+  \global\let\NumberPages\relax
+  \global\let\sf@NNumberPages\relax
+  \global\let\sf@NumberPages\relax
+  \global\let\sf@SNumberPages\relax
+  \global\let\sf@ExtraPages\relax
+  \global\let\LeftShift\relax
+  \global\let\sf@LeftShift\relax
+  \global\let\DownShift\relax
+  \global\let\sf@DownShift\relax
+  \global\let\sf@RPTelephone\relax
+  \global\let\sf@setfont
+  \global\let\sf@strut\relax
+  \global\let\sf@titlefontA\relax
+  \global\let\sf@settitlefontA\relax
+  \global\let\sf@titlefontB\relax
+  \global\let\sf@settitlefontB\relax
+  \global\let\sf@titlefontC\relax
+  \global\let\sf@settitlefontC\relax
+  \global\let\sf@titlefontD\relax
+  \global\let\sf@settitlefontD\relax
+  \global\let\sf@titlefontE\relax
+  \global\let\sf@settitlefontE\relax
+  \global\let\sf@titlefontF\relax
+  \global\let\sf@settitlefontF\relax
+  \global\let\sf@entryfont\relax
+  \global\let\sf@setentryfont\relax
+  \global\let\sf@revfontbold\relax
+  \global\let\sf@setrevfontbold\relax
+  \global\let\sf@revfont\relax
+  \global\let\sf@setrevfont\relax
+  \global\let\sf@checkfield\relax
+  \global\let\sf@parbox\relax
+  \global\let\sf@drawform\relax
+  \global\let\MakeRptDocPage\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Form layout}
+% \begin{macro}{\sf@parbox}
+% \changes{v1.1}{15 Feb 2000}{Added.}
+%
+% This macro is used in the following \cmd{\sf@drawform} to contain fields that
+% are to be centered in a block, but expand upward when overfull.
+%    \begin{macrocode}
+\def\sf@parbox(#1,#2)#3{%
+  \makebox(0,0)[bl]{%
+    \vbox to #1\unitlength{%
+      \vss
+      \noindent
+      \parbox{#2\unitlength}{\raggedright#3}%
+    \vfil}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sf@drawform}
+% \changes{v1.1}{15 Feb 2000}{Changed from millimeter to big point spacing.}
+% \changes{v1.2}{22 Dec 2004}{Removed hard lines on the four long
+%     boxes if `floatlingboxes' is used.}
+%
+% First draw the boxes of the form as a large thick-walled box with
+% a series of thin horizontal and vertical lines.
+%
+%    \begin{macrocode}
+\newcommand\sf@drawform{%
+  \sf@setentryfont
+  \setlength{\unitlength}{1bp}
+  \begin{picture}(539,707)(\sf@LeftShift,\sf@DownShift)
+    % Draw blank form
+    \linethickness{1bp}%
+    \put(  0,  0){\framebox(539,707){}}
+    % Horizontal lines
+    \linethickness{0.5bp}%
+    \put(  0,677){\line(1,0){539}}
+    \put(  0,635){\line(1,0){539}}
+    \put(  0,611){\line(1,0){539}}
+    \put(324,581){\line(1,0){215}}
+    \put(324,551){\line(1,0){215}}
+    \put(  0,521){\line(1,0){539}}
+    \put(324,491){\line(1,0){215}}
+    \put(324,461){\line(1,0){215}}
+    \put(  0,431){\line(1,0){539}}
+    \put(  0,372){\line(1,0){539}}
+    \put(359,336){\line(1,0){180}}
+    \put(  0,300){\line(1,0){539}}
+    \ifsf@floatlongboxes\else
+      \put(  0,252){\line(1,0){539}}
+      \put(  0,215){\line(1,0){539}}
+      \put(  0, 95){\line(1,0){539}}
+    \fi
+    \put(  0, 48){\line(1,0){539}}
+    \put(  0, 36){\line(1,0){180}}
+    \put(324, 24){\line(1,0){215}}
+    % Vertical lines
+    \put(359,707){\line(0,-1){ 30}}
+    \put(144,635){\line(0,-1){ 24}}
+    \put(359,635){\line(0,-1){ 24}}
+    \put(324,611){\line(0,-1){180}}
+    \put(359,431){\line(0,-1){131}}
+    \put(180, 48){\line(0,-1){ 48}}
+    \put(266, 48){\line(0,-1){ 48}}
+    \put(324, 48){\line(0,-1){ 48}}
+    \put( 60, 36){\line(0,-1){ 36}}
+    \put(120, 36){\line(0,-1){ 36}}
+%    \end{macrocode}
+%
+% \changes{v1.2}{22 Dec 2004}{Removed hard titles on the four long
+%     boxes if `floatlingboxes' is used.}
+% Next, fill in the individual box titles.  Note the use of the 
+% \cmd{\sf@strut} to set the block titles a little down and to 
+% the right of the absolute corner of the box.
+%
+%    \begin{macrocode}
+    % Title text
+    \put(  0,677){\makebox(359, 30){%
+      \sf@settitlefontA REPORT DOCUMENTATION PAGE}}
+    \put(359,677){\makebox(180, 30){%
+      \sf@settitlefontB\shortstack[c]{%
+        Form Approved\\[-2pt]%
+        OMB No. 0704--0188}}}
+    \put(  3,635){\makebox(533, 42){%
+      \sf@settitlefontC\parbox{533bp}{\raggedright
+      The public reporting burden for this collection of information
+      is estimated to average 1 hour per response, including the
+      time for reviewing instructions, searching existing data
+      sources, gathering and maintaining the data needed, and
+      completing and reviewing the collection of information.
+      Send comments regarding this burden estimate or any other
+      aspect of this collection of information, including
+      suggestions for reducing this burden to Department of
+      Defense, Washington Headquarters Services, Directorate for
+      Information Operations and Reports (0704--0188), 1215
+      Jefferson Davis Highway, Suite 1204, Arlington, VA
+      22202--4302.  Respondents should be aware that
+      notwithstanding any other provision of law, no person shall
+      be subject to any penalty for failing to comply with a
+      collection of information if it does not display a currently
+      valid OMB control number.
+      {\sf@settitlefontD
+       PLEASE DO NOT RETURN YOUR FORM TO THE ABOVE ADDRESS.}}}}
+    \put(  0,611){\makebox(144, 24)[tl]{%
+      \sf@settitlefontE\sf@strut 1.\ REPORT DATE
+      \sf@settitlefontF (DD--MM--YYYY)}}
+    \put(144,611){\makebox(215, 24)[tl]{%
+      \sf@settitlefontE\sf@strut 2.\ REPORT TYPE}}
+    \put(359,611){\makebox(180, 24)[tl]{%
+      \sf@settitlefontE\sf@strut 3.\ DATES COVERED
+      \sf@settitlefontF (From --- To)}}
+    \put(  0,521){\makebox(324,90)[tl]{%
+      \sf@settitlefontE\sf@strut 4.\ TITLE AND SUBTITLE}}
+    \put(324,581){\makebox(215, 30)[tl]{%
+      \sf@settitlefontE\sf@strut 5a.\ CONTRACT NUMBER}}
+    \put(324,551){\makebox(215, 30)[tl]{%
+      \sf@settitlefontE\sf@strut 5b.\ GRANT NUMBER}}
+    \put(324,521){\makebox(215, 30)[tl]{%
+      \sf@settitlefontE\sf@strut 5c.\ PROGRAM ELEMENT NUMBER}}
+    \put(324,491){\makebox(215, 30)[tl]{%
+      \sf@settitlefontE\sf@strut 5d.\ PROJECT NUMBER}}
+    \put(324,461){\makebox(215, 30)[tl]{%
+      \sf@settitlefontE\sf@strut 5e.\ TASK NUMBER}}
+    \put(324,431){\makebox(215, 30)[tl]{%
+      \sf@settitlefontE\sf@strut 5f.\ WORK UNIT NUMBER}}
+    \put(  0,431){\makebox(324, 90)[tl]{%
+      \sf@settitlefontE\sf@strut 6.\ AUTHOR(S)}}
+    \put(  0,372){\makebox(359, 59)[tl]{%
+      \sf@settitlefontE\sf@strut
+      7.\ PERFORMING ORGANIZATION NAME(S) AND ADDRESS(ES)}}
+    \put(359,372){\makebox(180, 59)[tl]{%
+      \sf@settitlefontE\shortstack[l]{%
+        \sf@strut 8.\ PERFORMING ORGANIZATION REPORT\\[-2pt]
+        \sf@strut\phantom{8.\ }NUMBER}}}
+    \put(  0,300){\makebox(359, 72)[tl]{%
+      \sf@settitlefontE\sf@strut
+      9.\ SPONSORING / MONITORING AGENCY NAME(S) AND ADDRESS(ES)}}
+    \put(359,336){\makebox(180, 36)[tl]{%
+      \sf@settitlefontE\sf@strut 10.\ SPONSOR/MONITOR'S ACRONYM(S)}}
+    \put(359,300){\makebox(180, 36)[tl]{%
+      \sf@settitlefontE\shortstack[l]{%
+        \sf@strut 11.\ SPONSOR/MONITOR'S REPORT\\[-3pt]
+        \sf@strut\phantom{11.\ }NUMBER(S)}}}
+    \ifsf@floatlongboxes\else
+      \put(  0,252){\makebox(539, 48)[tl]{%
+        \sf@settitlefontE\sf@strut
+        12.\ DISTRIBUTION / AVAILABILITY STATEMENT}}
+      \put(  0,215){\makebox(539, 37)[tl]{%
+        \sf@settitlefontE\sf@strut 13.\ SUPPLEMENTARY NOTES}}
+      \put(  0,95){\makebox(539,120)[tl]{%
+        \sf@settitlefontE\sf@strut 14.\ ABSTRACT}}
+      \put(  0, 48){\makebox(539, 46)[tl]{%
+        \sf@settitlefontE\sf@strut 15.\ SUBJECT TERMS}}
+    \fi
+    \put(  0, 36){\makebox(180, 12)[tl]{%
+      \sf@settitlefontE\sf@strut 16.\ SECURITY CLASSIFICATION OF:}}
+    \put(  0,  0){\makebox( 60, 36)[tl]{%
+      \sf@settitlefontE\sf@strut a.\ REPORT}}
+    \put( 60,  0){\makebox(60, 36)[tl]{%
+      \sf@settitlefontE\sf@strut b.\ ABSTRACT}}
+    \put(120,  0){\makebox(60, 36)[tl]{%
+      \sf@settitlefontE\sf@strut c.\ THIS PAGE}}
+    \put(180,  0){\makebox( 86, 48)[tl]{%
+      \sf@settitlefontE\shortstack[l]{%
+        \sf@strut 17.\ LIMITATION OF\\[-2pt]
+        \sf@strut\phantom{17.\ }ABSTRACT}}}
+    \put(266,  0){\makebox( 68, 48)[tl]{%
+      \sf@settitlefontE\shortstack[l]{%
+        \sf@strut 18.\ NUMBER\\[-2pt]
+        \sf@strut\phantom{18.\ }OF\\[-2pt]
+        \sf@strut\phantom{18.\ }PAGES}}}
+    \put(324, 24){\makebox(215, 24)[tl]{%
+      \sf@settitlefontE\sf@strut 19a.\ NAME OF RESPONSIBLE PERSON}}
+    \put(324,  0){\makebox(215, 24)[tl]{%
+      \sf@settitlefontE\sf@strut 19b.\ TELEPHONE NUMBER
+        \sf@settitlefontF (include area code)}}
+    \put(405,-25){\makebox(123, 17)[bl]{%
+      \shortstack[l]{%
+        {{\sf@setrevfontbold Standard Form 298} \sf@setrevfont (Rev.\ 8/98)}\\[-2pt]%
+        {\sf@setrevfont Prescribed by ANSI Std.\ Z39.18}}}}
+%    \end{macrocode}
+%
+% \changes{v1.2}{22 Dec 2004}{If `floatlingboxes' is used, then the
+%     four long box separator lines and titles are typset along with
+%     the text so that they may act more dynamically.}
+%
+% Now, we add the user's entries to the form.  For undefined entries,
+% we just add null text, the required fields are checked above and a 
+% warning issued if any of them are empty.
+%
+%    \begin{macrocode}
+    % Fill in form
+    \put(  4,614){\makebox(0,0)[bl]{\sf@ReportDate}}
+    \put(148,614){\makebox(0,0)[bl]{\sf@ReportType}}
+    \put(363,614){\makebox(0,0)[bl]{\sf@DatesCovered}}
+    \put(  4,523){\sf@parbox( 80,324){\sf@Title}}
+    \put(328,585){\makebox(0,0)[bl]{\sf@ContractNumber}}
+    \put(328,555){\makebox(0,0)[bl]{\sf@GrantNumber}}
+    \put(328,525){\makebox(0,0)[bl]{\sf@ProgramElementNumber}}
+    \put(328,495){\makebox(0,0)[bl]{\sf@ProjectNumber}}
+    \put(328,465){\makebox(0,0)[bl]{\sf@TaskNumber}}
+    \put(328,435){\makebox(0,0)[bl]{\sf@WorkUnitNumber}}
+    \put(  4,434){\sf@parbox( 80,321){\sf@Author}}
+    \put(  4,397){\makebox(0,0)[l]{%
+      \parbox{355bp}{\raggedright\sf@PerformingOrg}}}
+    \put(363,372){\sf@parbox( 46,176){\sf@POReportNumber}}
+    \put(  4,331){\makebox(0,0)[l]{%
+      \parbox{355bp}{\raggedright \sf@SponsoringAgency}}}
+    \put(363,349){\makebox(0,0)[l]{%
+      \parbox{176bp}{\raggedright\sf@Acronyms}}}
+    \put(363,304){\makebox(0,0)[bl]{%
+      \vbox to 26bp{%
+        \vss
+        \noindent
+        \parbox{176bp}{\raggedright\sf@SMReportNumber}}}}
+    \ifsf@floatlongboxes
+      \put(  0,49){\parbox[b]{541bp}{%
+       \leftskip=4bp
+       \rightskip=4bp plus 2em
+        \vbox to 250bp{%
+          \vbox to 0bp{%
+            \hbox{\sf@settitlefontE\sf@strut
+                12.\ DISTRIBUTION / AVAILABILITY STATEMENT}
+            \vss}
+          \vfil
+          \sf@DistributionStatement
+          \vfil
+          \hrule width\linewidth height0.5bp
+          \vbox to 0bp{%
+            \hbox{\sf@settitlefontE\sf@strut 13.\ SUPPLEMENTARY NOTES}
+            \vss}
+          \vfil
+          \sf@SupplementaryNotes
+          \vfil
+          \hrule width\linewidth height0.5bp
+          \vbox to 0bp{%
+            \hbox{\sf@settitlefontE\sf@strut 14.\ ABSTRACT}
+            \vss}
+          \vfil
+          \sf@Abstract
+          \vfil
+          \hrule width\linewidth height0.5bp
+          \vbox to 0bp{%
+            \hbox{\sf@settitlefontE\sf@strut 15.\ SUBJECT TERMS}
+            \vss}
+          \vfil
+          \sf@SubjectTerms
+          \vfil}}}
+    \else
+      \put(  4,255){\sf@parbox( 38,532){\sf@DistributionStatement}}
+      \put(  4,217){\sf@parbox( 25,532){\sf@SupplementaryNotes}}
+      \put(  4, 95){\sf@parbox(110,533){\sf@Abstract}}
+      \put(  4, 51){\sf@parbox( 36,533){\sf@SubjectTerms}}
+    \fi
+    \put( 30, 13){\makebox(0,0){\sf@ReportClassification}}
+    \put( 90, 13){\makebox(0,0){\sf@AbstractClassification}}
+    \put(150, 13){\makebox(0,0){\sf@PageClassification}}
+    \put(223, 13){\makebox(0,0){\sf@AbstractLimitation}}
+    \put(295, 13){\makebox(0,0){\large\sf@NumberPages}}
+    \put(328, 33){\makebox(0,0)[l]{\sf@ResponsiblePerson}}
+    \put(328,  9){\makebox(0,0)[l]{\sf@RPTelephone}}
+  \end{picture}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GeneralInstructions}
+% 
+% The \cmd{\GeneralInstructions} command creates the General Instructions Page,
+% which uses a two column format. This is optionally included in some technical
+% reports and should be used immediately after the \cmd{\ReportDescription} command
+% so the General Instructions Page appears on the page immediately following the SF298
+% form.
+% 
+%    \begin{macrocode}
+\newcommand\GeneralInstructions[1]{%
+   \global\let\thanks\@gobble
+   \MakeGenInsPage{#1}
+   \global\let\thanks\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MakeGenInsPage}
+% 
+% The \cmd{\MakeGenInsPage} command creates a new page containing
+% the General Instructions for the SF298 form in a two-column format.
+%
+%    \begin{macrocode}
+\newcommand\MakeGenInsPage[1]{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \newpage
+  \if@twoside\ifodd\c@page\else
+    \null
+    \thispagestyle{empty}%
+    \newpage
+  \fi\fi
+  \vspace{1ex}
+  
+  \thispagestyle{sf298FormIDStyle} % insert document code in footer
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\begin{#1} % set font size
+\noindent
+\fbox{\begin{minipage}{\textwidth}
+\vspace{3ex}
+\begin{center}
+\textbf{INSTRUCTIONS FOR COMPLETING SF 298}
+\end{center}
+
+\vspace{1ex}
+
+\setlength{\columnsep}{0.8cm}
+\setlength{\columnseprule}{0.2pt}
+\vspace{-4ex}
+
+\begin{multicols}{2}
+\noindent
+\textbf{1.~REPORT DATE.} Full publication date including day, month, 
+and year, if available. Must cite at least the year and be Year 2000 
+compliant, \eg 30-06-1998; xx-06-1998; xx-xx-1998.\hfill
+\\ \\ \noindent
+\textbf{2.~REPORT TYPE.} State the type of report, such as final,
+technical, interim, memorandum, master's thesis, progress, quarterly, 
+research, special, group study, etc.\hfill
+\\ \\ \noindent
+\textbf{3.~DATE COVERED.} Indicate the time during which the work was 
+performed and the report was written, \eg, Jun 1997 - Jun 1998; 
+1-10 Jun 1996; May - Nov 1998; Nov 1998.\hfill
+\\ \\ \noindent
+\textbf{4.~TITLE.} Enter title and subtitle with volume number and part 
+number, if applicable. On classified documents, enter the title 
+classification in parentheses.\hfill
+\\ \\ \noindent
+\textbf{5a.~CONTRACT NUMBER.} Enter all contract numbers as they 
+appear in the report, \eg F33315-86-C-5169.\hfill
+\\ \\ \noindent
+\textbf{5b.~GRANT NUMBER.} Enter all grant numbers as they appear in the
+report. \eg AFOSR-82-1234.\hfill
+\\ \\ \noindent
+\textbf{5c.~PROGRAM ELEMENT NUMBER.} Enter all program element numbers 
+as they appear in the report, \eg 61101A.\hfill
+\\ \\ \noindent
+\textbf{5e.~TASK NUMBER.}  Enter all task numbers as they appear in the 
+report, \eg 05; RF0330201; T4112.\hfill
+\\ \\ \noindent
+\textbf{5f.~WORK UNIT NUMBER.} Enter all work unit numbers as they 
+appear in the report, \eg 001; AFAPL30480105.\hfill
+\\ \\ \noindent
+\textbf{6.~AUTHOR(S).} Enter name(s) of person(s) responsible 
+for writing the report, performing the research, or credited with the 
+content of the report. The form of entry is the last name, first name, 
+middle initial, and additional qualifiers separated by commas, \eg Smith, 
+Richard, J, Jr.\hfill
+\\ \\ \noindent
+\textbf{7.~PERFORMING ORGANIZATION NAME(S) AND ADDRESS(ES).} Self-explanatory. \hfill
+\vfill
+\columnbreak
+
+\noindent
+\textbf{8.~PERFORMING ORGANIZATION REPORT NUMBER.} Enter all unique 
+alphanumeric report numbers assigned by the performing organization, 
+\eg BRL-1234; AFWL-TR-85-4017-Vol-21-PT-2.\hfill
+\\ \\ \noindent
+\textbf{9.~SPONSORING/MONITORING AGENCY NAME(S) AND ADDRESS(ES).} Enter 
+the name and address of the organization(s) financially responsible for 
+and monitoring the work.\hfill
+\\ \\ \noindent
+\textbf{10.~SPONSOR/MONITOR'S ACRONYM(S).} Enter, if available, \eg BRL, 
+ARDEC, NADC.\hfill
+\\ \\ \noindent
+\textbf{11.~SPONSOR/MONITOR'S REPORT NUMBER(S).} Enter report number as 
+assigned by the sponsoring/ monitoring agency, if available, \eg BRL-TR-829; 
+-215.\hfill
+\\ \\ \noindent
+\textbf{12.~DISTRIBUTION/AVAILABILITY STATEMENT.} Use agency-mandated 
+availability statements to indicate the public availability or distribution
+ limitations of the report. If additional limitations/ restrictions or 
+ special markings are indicated, follow agency authorization procedures, 
+ \eg RD/FRD, PROPIN, ITAR, etc. Include copyright information.\hfill
+\\ \\ \noindent
+\textbf{13.~SUPPLEMENTARY NOTES.} Enter information not included elsewhere 
+such as: prepared in cooperation with; translation of; report supersedes; 
+old edition number, etc.\hfill
+\\ \\ \noindent
+\textbf{14.~ABSTRACT.} A brief (approximately 200 words) factual summary 
+of the most significant information.\hfill
+\\ \\ \noindent
+\textbf{15.~SUBJECT TERMS.} Key words or phrases identifying major concepts 
+in the report.\hfill
+\\ \\ \noindent
+\textbf{16.~SECURITY CLASSIFICATION.} Enter security classification in 
+accordance with security classification regulations, \eg U, C, S, etc. If 
+this form contains classified information, stamp classification level on 
+the top and bottom of this page.\hfill
+\\ \\ \noindent
+\textbf{17.~LIMITATION OF ABSTRACT.} This block must be completed to assign 
+a distribution limitation to the abstract. Enter UU (Unclassified Unlimited) 
+or SAR (Same as Report). An entry in this block is necessary if the abstract 
+is to be limited. \hfill
+
+\end{multicols}
+\end{minipage}
+}
+\end{#1}
+
+\normalsize % return font to normal size
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi%
+%
+% \Finale
+%
-- 
cgit v1.2.3

