% 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}