% LoVullo Specification Specification
%
% Yep.

\documentclass[draft]{lvspec}
\usepackage{multicol}
\usepackage[final]{graphicx}

\makeatletter
\makeatother

\begin{document}
\title{LoVullo Specification Specifications}
\author{Mike Gerwitz}
\titlecontent{%
  \includegraphics[scale=0.5]{images/dilbert-time.png}
  \vfill
}%
\abstract{%
  \setlength\columnsep{-5ex}%
  \begin{multicols}{2}
  \begin{quote}
    \sl\small\raggedright
    \def\ind{}%
    %
    In the beginning was the plan,\\
    \ind and then the specification;\\
    And the plan was without form,\\
    \ind and the specification was void.

    And darkness\\
    \ind was on the faces of the implementors thereof;\\
    And they spake unto their leader, saying:\\
    ``It is a crock of shit,\\
    \ind and smells as of a sewer.''

    And the leader took pity on them,\\
    \ind and spoke to the project leader:\\
    ``It is a crock of excrement,\\
    \ind and none may abide the odor thereof.''

    And the project leader\\
    \ind spake unto his section head, saying:\\
    ``It is a container of excrement,\\
    \ind and it is very strong, such that none may abide it.''

    The section head then hurried to his department manager,\\
    \ind and informed him thus:\\
    ``It is a vessel of fertilizer,\\
    \ind and none may abide its strength.''
    \goodbreak

    The department manager carried these words\\
    \ind to his general manager,\\
    and spoke unto him\\
    \ind saying:\\
    ``It containeth that which aideth the growth of plants,\\
    \ind and it is very strong.''

    And so it was that the general manager rejoiced\\
    \ind and delivered the good news unto the Vice President.\\
    ``It promoteth growth,\\
    \ind and it is very powerful.''

    The Vice President rushed to the President's side,\\
    \ind and joyously exclaimed:\\
    ``This powerful new software product\\
    \ind will promote the growth of the company!''

    And the President looked upon the product,\\
   \ind and saw that it was very good.

   \hfill---The Jargon File
  \end{quote}
  \end{multicols}
  \bigskip
}
\maketitle

\begindeptgroup{it}

\chapter{Oh, Hello}
\incomplete
\todo{There's no specification yet; in due time.}
\bigskip

\begin{center}
  \includegraphics[scale=0.5]{images/spec-design.png}
\end{center}


\appendix
\chapter{Creating Specifications with \LaTeX}
This appendix is an example of an implementation of the specifications and is
useful as an API reference, but \shallnot be used in place of formal
specifications with regards to implementation.

Using the {\tt lvspec} document class with enable paragraph numbering; {\tt
draft} mode will enable signature lines, as shown to the right.

\begin{ex}
  \begin{verbatim}
% omit "[draft]" to disable signature lines
\documentclass[draft]{lvspec}

% as is the case with all LaTeX documents, begin and end with document
% environment
\begin{document}
  % ...content here...
\end{document}
  \end{verbatim}
\end{ex}

Example environments, as shown above, can be created with the {\tt ex}
environment. All examples end with `$\square$'.

\begin{ex}
  \begin{verbatim}
\begin{ex}
  % ...example here...
\end{ex}
  \end{verbatim}

  The extra vertical space is simply because of the \cmd{verbatim} environment
  used for the above examples; \cmd{ex} itself does not add it, as shown here.
\end{ex}


\section{General Formatting}
There are a number of formatting decisions that \cmd{lvspec} makes for you; you
should \emph{not} override them manually, since the \cmd{lvspec}~class is
intended to provide a company-wide abstraction that can be easily modified to
apply to all specifications.

The \cmd{lvspec}~class is based on the \cmd{scrreprt}~class, which is in turn
very similar to the standard \LaTeX\ \cmd{report}~class. In particular, all
section levels starting with \verb|\chapter| are supported and margins are of
equal length on both sides, which is suitable for collating portions of the
document without having to worry about binding and what side a particular page
is printed on. Margins are large to provide plenty of space for annotations and
reader markup. The default page size is US~letter.

\cmd{lvspec} suppresses paragraph indentation and instead adds space between
paragraphs, which is more natural with paragraph numbering (see~\sref{parnum}).

The amount of text on a page is determined by a ratio that carefully balances
characters per line and number of lines on a page according to established
typesetting conventions and also takes into account Hermann~Zapf's ideas for
page ``grayness'' (where a page appears darker with more text). Since
\cmd{lvspec} adds additional whitespace between lines, it accommodates by
decreasing the height of the top and~bottom page margins. Furthermore, glue
between section headings has been condensed slightly and is not as stretchable.

The header of each page contains the document title (short title if provided) in
the upper-right hand corner, with the current section (as of the beginning of
the page) on the upper-left. The typeface is in {\sc Small Caps} to distinguish
it from the page body which is in fairly close proximity. The font size has also
been {\small slightly decreased} to move focus away from it.

\p{ex:footer}
The footer of each page contains, from left to right, the section number of the
last section to appear on the page; the current page number; and a unique
version identifier that is either taken from \path{verstr.tex} or---if
unavailable---the current date.\footnote{See \path{lvspec.git/Makefile} for an
example of how to use \path{verstr.tex}.}


\subsection{Title Page and Abstract}
The title is typeset in {\sc Small Caps} to provide stronger emphasis than a
normal typeface (because {\bf bold is too bold}).

If the \cmd{draft} option is provided via \verb|\documentclass|, then the text
``{\sc(Working Draft)}'' will be typeset below the title.

The \verb|\title| command is modified to support an optional ``short title'' to
be used primarily in the header to provide additional space for section names.

The text ``{\sc LoVullo Associates}'' is added below any provided author(s).

The date of document generation is typeset flush with the bottom of the page
body.

Two bold, vertical bars span the entire length of the page body in the left and
right margins.

Additional content may be added to the title page below the author and above the
date by using the \verb|\titlecontent| command.

An abstract may be typeset on the following page using the~\verb|\abstract|
command. If the~\cmd{draft} option is provided, an additional paragraph will be
added---regardless of whether an abstract was given---stating that the document
is a draft.

Flush with the bottom of the abstract page body is a copyright notice, date of
page generation (the same date that appears on the title page) and the version
identifier that appears on the footer of every page (as mentioned
in~\pref{ex:footer}).

\begin{ex}
  \begin{verbatim}
\begin{document}
% optionally, use \title[Short Title]{Long Title}
\title{LoVullo Specification Specifications}
\author{Mike Gerwitz}
\titlecontent{%
  \includegraphics[scale=0.5]{images/dilbert-time.png}
  \vfill
}%
\abstract{...}
\maketitle
% ...
  \end{verbatim}
\end{ex}

Immediately after the title and~abstract pages are typeset, paragraph numbering
(see~\sref{parnum}) and~signature lines (see~\sref{siglines}) are enabled.

\section{Paragraph Numbering}\label{s:parnum}
Paragraph numbering can be temporarily disabled using \verb|\pnumoff| and
re-enabled using \verb|pnumon|\ldots

\pnumoff
\ldots as shown here.

\pnumon
Numbers will continue where they previously left off before being suppressed.

\begin{ex}
  \begin{verbatim}
Paragraph numbering can be temporarily disabled using \verb|\pnumoff| and
re-enabled using \verb|pnumon|\ldots

\pnumoff
\ldots as shown here.

\pnumon
Numbers will continue where they previously left off before being suppressed.
  \end{verbatim}
\end{ex}

Disabling paragraph numbering also disables the signature line, since there is
no longer any disambiguating identifier.

\begin{itemize}
  \item Paragraph numbering, by default, does not take effect inside any
  environments.\footnote{Except for \cmd{document}.}
\end{itemize}

\begin{ex}
  \begin{verbatim}
\begin{itemize}
  \item Paragraph numbering, by default, does not take effect inside any
  environments.\footnote{Except for \cmd{document}.}
\end{itemize}
  \end{verbatim}
\end{ex}


\section{Signature Lines}\label{s:siglines}
The department for the entire section can be set using the
\verb|\sectiondept| command; the command takes effect until the next section
or chapter.

\begin{ex}
  \begin{verbatim}
\section{Signature Lines}
\sectiondept{it}
The department for the entire section can be set using the
\verb|\sectiondept| command; the command takes effect until the next section
or chapter.
  \end{verbatim}
\end{ex}

\dept{pm}
The department can be set per-paragraph using the \verb|\dept| command, as
demonstrated in this paragraph; the command will override any
\verb|\sectiondept| command temporarily and will undo itself after the paragraph
ends.

\begin{ex}
  \begin{verbatim}
\dept{pm}
The department can be set per-paragraph using the \verb|\dept| command, as
demonstrated in this paragraph; the command will override any
\verb|\sectiondept| command temporarily and will undo itself after the paragraph
ends.
  \end{verbatim}
\end{ex}

\dept{it}
An arbitrary group of paragraphs may have their section set using
\verb|\begindeptgroup| and \verb|\enddeptgroup|; they are \emph{not} reset by
sections. They may be nested.

\begin{ex}
  \begin{verbatim}
\begindeptgroup{it}
  % group: it
  \begindeptgroup{pm}
    % group: pm
  \enddeptgroup
  % group: it
\enddeptgroup
  \end{verbatim}
\end{ex}

Clicking on the department in the signature line will take you to the
^[authorization parties] section of the definitions (in this document,
\sref{authorize}).

\subsection{Incomplete}
\incomplete
If a paragraph is incomplete and not yet ready for authorization, use
\verb|\incomplete|.

\begin{ex}
  \begin{verbatim}
\incomplete
If a paragraph is incomplete and not yet ready for authorization, use
\verb|\incomplete|.
  \end{verbatim}
\end{ex}

\incompletei
If a paragraph is incomplete because more information is needed, then use the
command \verb|\incompletei|, which also includes the name of the department.

\begin{ex}
  \begin{verbatim}
\incompletei
If a paragraph is incomplete because more information is needed, then use the
command \verb|\incompletei|, which also includes the name of the department.
  \end{verbatim}
\end{ex}


\section{Definitions}
The formal language of the specification is important to resolve any
ambiguities; part of such a resolution involves the formal and unambiguous
definition of terms.

By default, \cmd{lvspec} will \emph{always} include specification definitions
(see~\sref{specdfn}).

When the~\cmd{draft} option is provided, a~section describing authorization
parties will also be added, which is linked to by the department in each
signature line.

Additionally, the following options may be provided via~\verb|\documentclass|:

\begin{description}
  \item[\cmd{devterms}]
  Comprehensive developer terminology that covers specifications that deal with
  software and/or~hardware details.

  \item[\cmd{insuranceterms}]
  General insurance terminology to be used in any specification that describes
  an insurance-related implementation. Additional content can be added
  immediately after the terms (e.g. to add a sub-section) by using the command
  \verb|\insuranceterminology|, which is only available if
  the~\cmd{insuranceterms} option is used.
\end{description}

Additional sections can be added before\footnote{Ensures that section numbers do
not change by disabling \cmd{draft} mode.} the authorization party sub-section
(or, if the~\cmd{draft} option is not provided, then at the end of the
definitions section) by using the \verb|\terminology| command.


\section{Miscellaneous}
% text has been carefully added to this line; margin, font, etc changes will
% ruin it!
Proper hyphenation is added for ``ConceptOne'', as is shown here on this line:
ConceptOne test.

\enddeptgroup


\pnumoff
\chapter{\LaTeX\ Tips}
This appendix is by no means comprehensive.

\section{Generating PDF}
A PDF can be generated from the~\TeX\ source files by issuing the command
\cmd{pdflatex}; indexes are generated using the command \cmd{makeidx}; and
bibliographies are generated using \cmd{bibtex}. First, \cmd{pdftex} must be run
to determine the page numbers and gather all the references. Then, after each of
the latter two commands are run, \cmd{pdftex} must be re-run in order to update
the document. Since the act of updating the document may alter the references,
it is recommended to run \cmd{pdftex} multiple times at the end:\footnote{See
\path{lvspec.git/Makefile} for an example.}

\begin{ex}
  \begin{verbatim}
$ pdftex src.tex \
> && bibtex src.tex \
> && makeindex src \
> && pdftex src.tex \
> && pdftex src.tex
  \end{verbatim}
\end{ex}

\noindent You may decide to omit \cmd{bibtex} if you are not using a
bibliography (but you probably should cite your information and rationale).

\end{document}
