summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/cybercic
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/cybercic
Initial commit
Diffstat (limited to 'macros/latex/contrib/cybercic')
-rw-r--r--macros/latex/contrib/cybercic/LICENSE22
-rw-r--r--macros/latex/contrib/cybercic/README25
-rw-r--r--macros/latex/contrib/cybercic/cybercic.dtx473
-rw-r--r--macros/latex/contrib/cybercic/cybercic.ins59
-rw-r--r--macros/latex/contrib/cybercic/cybercic.pdfbin0 -> 189663 bytes
5 files changed, 579 insertions, 0 deletions
diff --git a/macros/latex/contrib/cybercic/LICENSE b/macros/latex/contrib/cybercic/LICENSE
new file mode 100644
index 0000000000..d8e77cab59
--- /dev/null
+++ b/macros/latex/contrib/cybercic/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 jared jennings
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/macros/latex/contrib/cybercic/README b/macros/latex/contrib/cybercic/README
new file mode 100644
index 0000000000..9ceb21d991
--- /dev/null
+++ b/macros/latex/contrib/cybercic/README
@@ -0,0 +1,25 @@
+This is cybercic, a horrible hack for LaTeX which is used in concert with the
+cyber package to make documents with annotations of compliance with information
+assurance (IA) requirements. "cic" stands for Controls in Contents, and when
+you include this package, some notations of compliance are added to section
+names as seen in the table of contents of the final document.
+
+For example, United States Department of Defense Instruction 8500.2
+<http://www.dtic.mil/whs/directives/corres/pdf/850002p.pdf> contains about 150
+requirements ("IA controls") which apply to automated information systems like
+servers and networks. Those inside the Department who want to set up a new
+system must write documents showing how the system complies with the
+requirements, so that administrators will know how to configure it, and
+auditors can satisfy themselves that it complies with the requirements.
+
+One such requirement, DCSS-1, states that "system initialization, shutdown, and
+aborts" must be "configured to ensure that the system remains in a secure
+state." If you write a section \section{State Changes}, which is numbered 2.2
+when the document is built, and you use iadoc to notate in your text that you
+comply with DCSS-1, like \implements{iacontrol}{DCSS-1}, and you have a table
+of contents, the entry for 2.2 will look like "2.2 State Changes---DCSS-1."
+
+Because of the obscene macro hackery involved, it doesn't work if you have any
+macros inside your section titles, like \texttt or \emph.
+
+cybercic is released under the MIT license; see the file named LICENSE.
diff --git a/macros/latex/contrib/cybercic/cybercic.dtx b/macros/latex/contrib/cybercic/cybercic.dtx
new file mode 100644
index 0000000000..dc0976187e
--- /dev/null
+++ b/macros/latex/contrib/cybercic/cybercic.dtx
@@ -0,0 +1,473 @@
+% \iffalse meta-comment
+% Copyright (c) 2015 Jared Jennings <jjennings@fastmail.fm>
+%
+% Permission is hereby granted, free of charge, to any person
+% obtaining a copy of this software and associated documentation
+% files (the "Software"), to deal in the Software without
+% restriction, including without limitation the rights to use, copy,
+% modify, merge, publish, distribute, sublicense, and/or sell copies
+% of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be
+% included in all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+% BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+% ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+% SOFTWARE.
+% \fi
+%
+% ^^A We cannot \usepackage{cybercic}, because it is a horrible hack.
+% ^^A Therefore we do not get \filedate and \fileversion for free.
+% \def\filedate{2015/06/24}
+% \def\fileversion{v2.1}
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{cybercic}
+%<package> [2015/06/24 Fixed packaging issues]
+%
+%<*driver>
+\documentclass{ltxdoc}
+
+\usepackage{verbatim}
+
+
+
+% Make PDF magic happen.
+% Thanks, Patrick Joeckel:
+% http://www.mpch-mainz.mpg.de/~joeckel/pdflatex/
+% Note that I expect always to use pdflatex, not latex+dvipdf
+\usepackage[bookmarks=true,bookmarksnumbered=true,breaklinks=true,pdftex]{hyperref}
+\hypersetup{
+ colorlinks=false,
+ linkbordercolor={0.7 0.7 1.0}
+}
+
+\EnableCrossrefs
+\RecordChanges
+\CodelineIndex
+
+\begin{document}
+ \DocInput{cybercic.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{0}
+%
+% \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 \~}
+%
+% \changes{v1.0}{2011/11/02}{Split off from iadoc}
+% \changes{v1.1}{2012/06/07}{Made skiacic into a \LaTeX\ package}
+% \changes{v1.2}{2012/12/17}{Renamed skiacic to iacic}
+% \changes{v1.3}{2015/03/11}{Renamed iacic to cybercic; changes for suitability on CTAN}
+% \changes{v2.0}{2015/03/21}{Bumped version to match \textsf{cyber}}
+% \changes{v2.1}{2015/06/24}{Fixed packaging issues}
+%
+% \title{The \textsf{cybercic} package\thanks{This document corresponds to
+% \textsf{cybercic}~\fileversion, dated~\filedate.}}
+% \author{Jared Jennings \\ \texttt{jjennings@fastmail.fm}}
+%
+% \maketitle
+% \tableofcontents
+% \clearpage
+%
+%
+% \section{What's it for?}
+%
+% This package, when used in conjunction with \textsf{cyber}, adds IA control
+% names to division names in the table of contents. (The \textsf{cic} stands
+% for ``controls in contents.'' \emph{Division} means chapter, section,
+% subsection, subsubsection, etc.)
+%
+% As an example, suppose you have a section in your document like this:
+%
+% \begin{verbatim}
+% \section{Stuff about individual authentication}
+%
+% \documents{iacontrol}{IAIA-1} Bla, bla, bla...
+% \end{verbatim}
+%
+% Without \textsf{cybercic}, this creates a line in your table of contents that
+% says something like, ``3.2 Stuff about individual authentication ..... 34,''
+% and a section heading in the body of the document, on (in our example) page
+% 34, that says something like, ``3.2 Stuff about individual authentication.''
+%
+% When you add \textsf{cybercic}, the line in your table of contents will say,
+% ``3.2 Stuff about individual authentication (IAIA-1) ... 34.'' The section
+% head in the body of the document will stay the same.
+%
+%
+% \section{How to use it}
+%
+% In the preamble of your document, write |\usepackage{cybercic}|. But! You must
+% be careful where you write it. If you use \textsf{hyperref}, you must use
+% \textsf{cybercic} \emph{after} \textsf{hyperref}. You must use
+% \textsf{cybercic} after \textsf{cyber}, as well.
+%
+% \DescribeMacro{\Cybercontrolsincontentsenabledfalse}
+%
+% \DescribeMacro{\Cybercontrolsincontentsenabledtrue}
+%
+% If there is a part of your document wherein you do not want section titles in
+% the table of contents changed, at the beginning of that part write
+% |\Cybercontrolsincontentsenabledfalse|. When you want controls-in-contents
+% re-enabled, write |\Cybercontrolsincontentsenabledtrue|.
+%
+%
+% \section{Caveats}
+%
+% First and foremost, when you use this package, and you also use
+% \textsf{hyperref} to make a PDF with bookmarks in it, you cannot put
+% \emph{any} formatting in your section titles. This means you cannot write
+% something like:
+%
+% \begin{verbatim}
+% \section{My \emph{Awesome} Section}
+% \section{The {\tt /usr/var/tmp} directory}
+% \end{verbatim}
+%
+% You must content yourself with:
+%
+% \begin{verbatim}
+% \section{My Awesome Section}
+% \section{The /usr/var/tmp directory}
+% \end{verbatim}
+%
+% This package is a horrible (but ingenious) hack. Do not use it unless you
+% really, really need to. It may not play well with other packages.
+%
+% If a section spans multiple pages, and compliance posture tags (like
+% |\documents| or |\implements|, see \textsf{cyber} documentation) are strewn
+% throughout, running page heads containing section names will only show IA
+% control names mentioned before the page began. Patches gratefully accepted.
+%
+%
+% \section{Implementation}
+%
+% \StopEventually{}
+%
+% \begin{macrocode}
+\makeatletter
+% \end{macrocode}
+%
+% Given that we are using controlsincontents, sometimes it needs to be disabled
+% for part of a document. The newif here is for that purpose.
+% \begin{macro}{\Cybercontrolsincontentsenabledtrue}
+% \begin{macro}{\Cybercontrolsincontentsenabledfalse}
+% \begin{macrocode}
+\newif\ifCybercontrolsincontentsenabled
+\Cybercontrolsincontentsenabledtrue
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% The word ``division'' here is a general term for a part, chapter, section,
+% subsection, subsubsection, paragraph, or subparagraph.
+%
+% Every kind of division has an optional argument, what should show in the
+% table of contents instead of the title shown in the text. Our strategy is to
+% set that optional toc name to a reference to a macro. The macro is first
+% defined to contain the original name of the section, but it can be redefined
+% later in the document to tack text onto the end of it.
+%
+% \url{http://www.elektro.uni-miskolc.hu/~gati/references/latex/macro/tugpap1.pdf}
+% introduces this sort of indirection.
+%
+% Only the last definition of the division's title macro that appeared in the
+% document is expanded when the |.toc| file is written. So the table of
+% contents then contains all the additions to the division's title as well as
+% the title itself. Unfortunately, at the part of the document where the
+% division title is typeset in the text, none of the redefinitions have
+% happened yet, so only the title which shows in the TOC can be amended using
+% this method.
+%
+% We need to name the macro that will contain each division's title. Each name
+% must be unique, so we use the counters for different kinds of sections; but
+% each name must also be a valid identifier, so instead of using numbers we use
+% letters. (Alph bombs out after it gets to number 26, so Roman it is.)
+% \begin{macrocode}
+\newcommand \alphpart {pt\Roman{part}}
+\ifdefined\chapter
+\newcommand \alphchapter {\alphpart ch\Roman{chapter}}
+\newcommand \alphsection {\alphchapter se\Roman{section}}
+\else
+\newcommand \alphsection {\alphpart se\Roman{section}}
+\fi
+\newcommand \alphsubsection {\alphsection su\Roman{subsection}}
+\newcommand \alphsubsubsection {\alphsubsection ss\Roman{subsubsection}}
+\newcommand \alphparagraph {\alphsubsubsection p\Roman{paragraph}}
+\newcommand \alphsubparagraph {\alphparagraph sp\Roman{subparagraph}}
+% \end{macrocode}
+
+% Now we're going to replace |\@sect|. This macro is used for all divisions
+% |\section| and smaller.
+% \begin{macrocode}
+\let\skia@orig@sect\@sect
+\gdef\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifCybercontrolsincontentsenabled
+% \end{macrocode}
+% \#1 is the kind of division, e.g. section or subparagraph. \#2 is the depth
+% of this kind of division in the hierarchy (1 is a chapter, 2 is a
+% section, etc)
+% \begin{macrocode}
+ \ifnum #2>\c@tocdepth
+% \end{macrocode}
+% The kind of division we're starting is too detailed to show up in the
+% table of contents. Just do the usual |@sect| thing. (Before this special
+% case was written, any use of |\subsubsection| resulted in an
+% |\inaccessible| error.)
+% \begin{macrocode}
+ \skia@orig@sect{#1}{#2}{#3}{#4}{#5}{#6}[#7]{#8}
+% \end{macrocode}
+% A side effect of not redefining |\last@division| and |\last@divtitle| here
+% as we do below is that any |\addtosectionname|s that happen will add to
+% the name of the last-declared TOC-worthy division - which will be a
+% larger division that contains this one.
+%
+% For example, assume |\setcounter{tocdepth}{1}|, i.e. only chapters are
+% shown in the TOC. Now if we |\chapter{One}| |\section{Onedotone}|
+% |\addtosectionname{Bla}|, Bla will be added to One, not onto Onedotone.
+% \begin{macrocode}
+ \else
+% \end{macrocode}
+% This division will show up in the TOC. Prepare it to have text added
+% onto its name there.
+% Let's capture a unique name for the section being created:
+% \begin{macrocode}
+ \edef\last@division{#1\csname alph#1\endcsname}
+% \end{macrocode}
+% (An example expansion would be paragraphptchseIsussIIp.)
+% Now we construct a name for a macro which will contain the title of this
+% section.
+% \begin{macrocode}
+ \edef\last@divtitle{\csname titleof\last@division \endcsname}
+ \edef\last@divaddedto{\csname addedto\last@division \endcsname}
+% \end{macrocode}
+% Now we define that macro. The expandafter causes |\last@divtitle| to be
+% expanded before the |\def|, so that we are not defining |\last@divtitle|, but
+% the thing it expands to---in our example, we are defining
+% |\titleofparagraphptchseIsussIIp|. Mind-bending, eh?
+% \begin{macrocode}
+ \expandafter\def\last@divtitle{#7}
+% \end{macrocode}
+% Now we call the old |@sect|, giving |\last@divtitle| as the section title to
+% use in the table of contents. But we don't want to expand it right now,
+% because it would just expand to \#7. So we put a |\noexpand| first. But we
+% don't want its value to be exactly ``|\last@divtitle|'', because that
+% one gets redefined all the time, and only the last definition would be
+% used in writing the toc file, so the name of every section in the toc
+% would end up the same... This expansion stuff is a bit fiddly, isn't
+% it? So instead of using |\last@divtitle|, as above, we have to write
+% its expansion out here.
+% \begin{macrocode}
+ \skia@orig@sect{#1}{#2}{#3}{#4}{#5}{#6}[\noexpand\csname titleof\last@division\endcsname]{#8}
+ \fi
+ \else
+% \end{macrocode}
+% If we're in this |else|, Cybercontrolsincontentsenabled is not true. Just do
+% the usual section thing.
+% \begin{macrocode}
+ \skia@orig@sect{#1}{#2}{#3}{#4}{#5}{#6}[#7]{#8}
+ \fi}
+% \end{macrocode}
+%
+% And we need to add the same machinery to |\@chapter|---if it exists. (Some
+% document classes do not define it.)
+% \begin{macrocode}
+\ifdefined\@chapter
+\let\skia@orig@chapter\@chapter
+\gdef\@chapter[#1]#2{%
+ \ifCybercontrolsincontentsenabled
+ \edef\last@division{chapter\alphchapter}
+ \edef\last@divtitle{\csname titleof\last@division \endcsname}
+ \edef\last@divaddedto{\csname addedto\last@division \endcsname}
+ \expandafter\def\last@divtitle{#1}
+ \skia@orig@chapter[\noexpand\csname titleof\last@division\endcsname]{#2}
+ \else
+ \skia@orig@chapter[#1]{#2}
+ \fi}
+\fi % defined @chapter
+% \end{macrocode}
+%
+%
+% Fix PDF bookmarks by using the expansion of the title macro, not its name.
+%
+% When you use \textsf{hyperref} and you tell it to make PDF bookmarks, the
+% bookmarks it writes to the PDF file have to have very normal sorts of names.
+% I think you may get to use UTF-8, but you can't have any text formatting.
+% The way hyperref makes sure of this is by temporarily defining all of the
+% \LaTeX\ formatting macros you may want to use, like |\textsf|, to do nothing,
+% so that they expand to their contents rather than some \TeX\ code that makes
+% the formatting happen plus the contents, and then evaluating the line that's
+% supposed to go in the table of contents (the optional argument to |\@section|
+% or |\@chapter| which defaults to the first argument) expanding only those
+% macros. As I recall. It's been six months since I figured it out.
+%
+% But we've set the section name as it should appear in the contents to a
+% macro, and not a macro that \textsf{hyperref} is prepared for. So the PDF
+% bookmark for section 1.2 which begins on page 4 says
+% |1.2 \titleofsectionptchseI 4|
+% instead of |1.2 My Cool Section (IAIA-1) 4|.
+%
+% Our hamfisted solution to this is to go ahead and fully expand the parameter.
+% That means that the |\titleofsectionptchseI| macro is expanded, to ``My Cool
+% Section (IAIA-1).'' But it also means that all of those guards that hyperref
+% had to deal with what happens if I write
+% |\section{My \emph{Awesome} Section}|
+% are gone, and suddenly if there is any formatting in any section names, bad
+% things happen. So this is the part of the code that necessitates that all
+% division titles have no formatting in them at all.
+%
+% Most of this definition of addcontentsline comes from the hyperref package.
+% For this to work properly, cyber must be loaded \emph{after} hyperref.
+% \begin{macrocode}
+\@ifpackageloaded{hyperref}{%
+ \gdef\addcontentsline#1#2#3{% toc extension, type, tag
+ \begingroup
+ \let\label\@gobble
+ \let\textlatin\@firstofone
+ \ifx\@currentHref\@empty
+ \Hy@Warning{%
+ No destination for bookmark of \string\addcontentsline,%
+ \MessageBreak destination is added%
+ }%
+ \phantomsection
+ \fi
+ \expandafter\ifx\csname toclevel@#2\endcsname\relax
+ \begingroup
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\Hy@bookmarkstype
+ \Hy@WarningNoLine{bookmark level for unknown #2 defaults to 0}%
+ \else
+ \Hy@Info{bookmark level for unknown #2 defaults to 0}%
+ \fi
+ \endgroup
+ \expandafter\gdef\csname toclevel@#2\endcsname{0}%
+ \fi
+ \edef\Hy@toclevel{\csname toclevel@#2\endcsname}%
+% \end{macrocode}
+% Unlike hyperref, expand \#3 so we don't try to use a macro name as the
+% title of the bookmark. But \#3 is likely a |\numberline{...}|, and at
+% the time this is expanded, it seems that |\numberline| is some LaTeXy
+% thing, not a hyperreffy thing, and hyperref complains about all the
+% TeX code in the expansion of \#3. So we make sure that \numberline is
+% going to just put the number in.
+% \begin{macrocode}
+ \let\saved@numberline\numberline
+ \ifHy@bookmarksnumbered
+ \let\numberline\Hy@numberline
+ \else
+ \let\numberline\@gobble
+ \fi
+ \edef\Hy@expandedtag{#3}
+ \let\numberline\saved@numberline
+% \end{macrocode}
+% Now, about writing that bookmark.
+% \begin{macrocode}
+ \Hy@writebookmark{\csname the#2\endcsname}%
+ {\Hy@expandedtag}%
+ {\@currentHref}%
+ {\Hy@toclevel}%
+ {#1}%
+ \ifHy@verbose
+ \typeout{pdftex: bookmark at \the\inputlineno:
+ {\csname the#2\endcsname}
+ {\Hy@expandedtag}
+ {\@currentHref}%
+ {\Hy@toclevel}%
+ {#1}%
+ }%
+ \fi
+ \addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{\thepage}{\@currentHref}%
+ }%
+ \endgroup
+ }
+}
+
+% \end{macrocode}
+% That blank line just above seems to be necessary.
+%
+% To avoid restating IA controls in appended-to section names, we'll need a
+% substring search function.
+%
+% From the substr package, version 1.2, 2009/10/20, copyright 2000, 2005, 2009
+% Harald Harders, available from CTAN:
+%
+% ---
+%
+% expands the first and second argument with
+% |\protected@edef| and calls \#3 with them:
+% \begin{macrocode}
+\newcommand\su@ExpandTwoArgs[3]{%
+ \protected@edef\su@SubString{#1}%
+ \protected@edef\su@String{#2}%
+ \expandafter\expandafter\expandafter#3%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\su@SubString\expandafter
+ }\expandafter{\su@String}%
+}
+% \end{macrocode}
+% tests if \#1 in \#2. If yes execute \#3, else \#4
+% \begin{macrocode}
+\newcommand*\IfSubStringInString[2]{%
+ \su@ExpandTwoArgs{#1}{#2}\su@IfSubStringInString
+}
+\newcommand*\su@IfSubStringInString[2]{%
+ \def\su@compare##1#1##2\@nil{%
+ \def\su@param{##2}%
+ \ifx\su@param\@empty
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }%
+ \su@compare#2\@nnil#1\@nil
+}
+% \end{macrocode}
+%
+% ---
+%
+% End substr package excerpt.
+%
+% Now, to append some text to the name of the section we're in, we just have to
+% redefine the macro whose name is the value of |\last@divtitle|. In order to add
+% to it without infinite recursion, we use |\edef|, which expands its body before
+% defining. Again, rather than defining |\last@divtitle| itself, we want to
+% define the macro it names. The expandafter does this.
+%
+% \begin{macrocode}
+\def\addtosectionname#1{%
+ \def\skia@yes{yes}
+ \expandafter\ifx\last@divaddedto\skia@yes
+ \IfSubStringInString{#1}{\last@divtitle}{}{%
+ \expandafter\edef\last@divtitle{\last@divtitle , #1}%
+ }
+ \else
+ \expandafter\edef\last@divtitle{\last@divtitle ---#1}
+ \fi
+ \expandafter\def\last@divaddedto{yes}}
+
+\makeatother
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/cybercic/cybercic.ins b/macros/latex/contrib/cybercic/cybercic.ins
new file mode 100644
index 0000000000..da7aa8bb75
--- /dev/null
+++ b/macros/latex/contrib/cybercic/cybercic.ins
@@ -0,0 +1,59 @@
+%% Copyright (c) 2015 Jared Jennings <jjennings@fastmail.fm>
+%% Permission is hereby granted, free of charge, to any person
+%% obtaining a copy of this software and associated documentation
+%% files (the "Software"), to deal in the Software without
+%% restriction, including without limitation the rights to use, copy,
+%% modify, merge, publish, distribute, sublicense, and/or sell copies
+%% of the Software, and to permit persons to whom the Software is
+%% furnished to do so, subject to the following conditions:
+%%
+%% The above copyright notice and this permission notice shall be
+%% included in all copies or substantial portions of the Software.
+%%
+%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+%% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+%% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+%% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+%% BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+%% ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+%% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+%% SOFTWARE.
+
+\input docstrip
+\usedir{tex/latex/cybercic}
+\preamble
+--- BEGIN DISCLAIMER ---
+Those who use this do so at their own risk;
+AFSEO does not provide maintenance nor support.
+--- END DISCLAIMER ---
+--- BEGIN AFSEO_DATA_RIGHTS ---
+This is a work of the U.S. Government and is placed
+into the public domain in accordance with 17 USC Sec.
+105. Those who redistribute or derive from this work
+are requested to include a reference to the original,
+at <https://github.com/afseo/cmits>, for example by
+including this notice in its entirety in derived works.
+--- END AFSEO_DATA_RIGHTS ---
+
+This is a generated file.
+
+Copyright and distribution license not yet determined.
+Made in 2012 by Jared Jennings <jared.jennings.ctr@us.af.mil> at the (U.S.) Air
+Force SEEK EAGLE Office.
+
+\endpreamble
+\generate{\file{cybercic.sty}{\from{cybercic.dtx}{package}}}
+
+\obeyspaces
+\Msg{*******************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you must execute these *}
+\Msg{* commands: *}
+\Msg{* *}
+\Msg{* insd=$HOME/texmf/tex/latex/cybercic *}
+\Msg{* mkdir -p $insd *}
+\Msg{* cp cybercic.sty $insd *}
+\Msg{* *}
+\Msg{*******************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/cybercic/cybercic.pdf b/macros/latex/contrib/cybercic/cybercic.pdf
new file mode 100644
index 0000000000..8a05d1d474
--- /dev/null
+++ b/macros/latex/contrib/cybercic/cybercic.pdf
Binary files differ