summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/frankenstein/unsupported
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/frankenstein/unsupported
Initial commit
Diffstat (limited to 'macros/latex/contrib/frankenstein/unsupported')
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/README-unsupported150
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/bits.cfg20
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/bits.ins64
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/bits.pdfbin0 -> 134601 bytes
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/bits.sty1070
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/bits.tex67
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/drama.ins64
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/drama.pdfbin0 -> 93998 bytes
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/drama.sty488
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/drama.tex67
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/includex-test.tex206
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/includex.ins64
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/includex.pdfbin0 -> 95848 bytes
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/includex.sty492
-rw-r--r--macros/latex/contrib/frankenstein/unsupported/includex.tex67
15 files changed, 2819 insertions, 0 deletions
diff --git a/macros/latex/contrib/frankenstein/unsupported/README-unsupported b/macros/latex/contrib/frankenstein/unsupported/README-unsupported
new file mode 100644
index 0000000000..aadf532c27
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/README-unsupported
@@ -0,0 +1,150 @@
+
+ SOME UNSUPPORTED PARTS OF:
+
+ FRANKENSTEIN
+
+ A Collection of Macros for LaTeX and BibTeX
+
+------------------------------------------------------------------------
+ CONTENTS
+
+ NOTES
+ general
+ non-support
+ PACKAGE DESCRIPTIONS
+ includex
+ bits
+ drama
+ DISTRIBUTION CONDITIONS
+ TERMINOLOGY
+ AUTHOR
+
+------------------------------------------------------------------------
+ NOTES
+
+ general
+
+ Three LaTeX packages are part of the Frankenstein bundle but are
+ unsupported. They are distributed on CTAN in a subdirectory of the
+ directory containing the supported Frankenstein filesets (i.e.,
+ CTAN:/macros/latex/contrib/supported/frankenstein/unsupported/). In
+ a TeX installation, however, supported and unsupported macros,
+ sources, and documentation should be placed together, (e.g., in
+ TDS:/texmf/{doc,source,tex}/latex/frankenstein).
+
+ If you wish to use the unsupported packages, download the entire
+ "frankenstein" directory from CTAN (which will include the
+ "unsupported" subdirectory).
+
+ To use the Makefile on the unsupported filesets, you must do two
+ things.
+
+ 1. Copy all the files in the "unsupported" subdirectory into its
+ parent directory ("frankenstein").
+
+ 2. Set the variable USE_UNSUP to something nonempty either by:
+ a. uncommenting the line in the file Makefile, or
+ b. setting it in your environment, or
+ c. set the variable on the Make command line, e.g., "make
+ USE_UNSUP=t all".
+
+ Descriptions of the four unsupported packages are below.
+ Further important information about the Frankenstein bundle may be
+ found in the file README.
+
+ Installation instructions are in the file INSTALL.
+ The bits and drama packages depend on the non-Frankenstein package
+ "relsize.sty". Please see INSTALL for further information.
+
+ Both the README and INSTALL files are located in the parent
+ directory of this file (on CTAN) or in the same directory as this
+ file (in a TeX installation).
+
+
+ non-support
+
+ The package filesets in this directory are UNSUPPORTED. They are
+ furthermore possibly INCOMPLETE and NOT fully DOCUMENTED.
+
+ I hope one day to complete these packages, document them, and
+ support them. I will gladly listen to feedback on them, but I do
+ not take the same level of responsibility for them as for the
+ packages I call "supported". In the meantime, they are made public
+ under the conditions stated below so that I can refer interested
+ individuals to them.
+
+ These packages are indeed valuable in certain ways, such as
+ sometimes working as advertised, but of course I offer no
+ guarantees.
+
+
+------------------------------------------------------------------------
+ PACKAGE DESCRIPTIONS
+
+------------------------------------------------------------------------
+ bits
+ (Frankenstein's guts)
+
+ Bits provides a programmer's interface for a new idea called a
+ "bit", which is like an environment but has a title, author, and
+ other attributes usually only associated with the "document"
+ environment.
+
+------------------------------------------------------------------------
+ drama
+ production-format stage script
+ (Frankenstein's heart)
+
+ Drama defines macros for typesetting a basic production-style stage
+ script.
+
+------------------------------------------------------------------------
+ includex
+ extra ways to include files
+
+ Includex allows you to include just the contents of one source file
+ into another, ignoring the text outside the \begin{document}
+ ... \end{document} in the included file. See also the supported
+ "newclude" package, which is intended to supersede includex, though
+ until I ensure that it is a satisfactory replacement I will keep
+ includex around.
+
+------------------------------------------------------------------------
+ DISTRIBUTION CONDITIONS
+
+ All Frankenstein files are copyrighted by Matthew Swift and released
+ under the conditions of the GNU General Public License contained in
+ the file COPYING, which should be in the parent directory or the
+ same directory as this file.
+
+ The unsupported filesets in the same directory as this file ought to
+ be distributed WITH the supported ones. They are useless without
+ the supported ones.
+
+ I am willing to specially license this code; please simply contact
+ me with your proposal.
+
+------------------------------------------------------------------------
+ TERMINOLOGY
+
+ fileset: A group of files related to a single LaTeX package, LaTeX
+ class, or BibTeX bibliography style and any accompanying
+ option or configuration files. The files in a package or
+ class fileset have the same root name but different
+ filename extensions. In bibstyle filesets, some root names
+ differ by a "-bst" suffix.
+
+ CTAN: Comprehensive TeX Archive Network: a system of TeX-related
+ file archives available via FTP (see
+ ftp://ctan.tug.org/tex-archive/CTAN.sites) and often
+ reproduced on CDROMs.
+
+ TDS: TeX Directory Structure: a recommended directory structure
+ for TeX installations. See
+ ftp://ctan.tug.org/tex-archive/tds.
+
+------------------------------------------------------------------------
+ AUTHOR
+
+ Matt Swift
+ <swift@alum.mit.edu>
diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.cfg b/macros/latex/contrib/frankenstein/unsupported/bits.cfg
new file mode 100644
index 0000000000..c25a476ff1
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/bits.cfg
@@ -0,0 +1,20 @@
+% \iffalse
+%%
+% Even if you don't want any code in this file, leave the empty file, or else
+% loading the \package{bits} package will consume extra time as it searches
+% for this file.
+%%
+% \fi
+% \begin{macrocode}
+\def\fileinfo{Bits package configuration}
+\def\fileversion{v1}
+\def\filedate{1996/01/24}
+\def\docdate{1996/01/24}
+% \end{macrocode}
+%
+% \AddToCheckSum{10}
+%
+% \begin{macrocode}
+\ProvidesFile{bits.cfg}
+\InputIfFileExists{monster.cfg}{}{}
+% \end{macrocode}
diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.ins b/macros/latex/contrib/frankenstein/unsupported/bits.ins
new file mode 100644
index 0000000000..f61f9054c5
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/bits.ins
@@ -0,0 +1,64 @@
+% bits.ins -- docstrip driver for the bits LaTeX package
+%
+% Copyright (C) 1995-2001 Matthew Swift <swift@alum.mit.edu>
+% Please see the copyright notice in \preamble below.
+
+% This file, when run through TeX or LaTeX, will generate fast loadable files
+% from the .sty, .cls, or .bst files mentioned below.
+
+\input docstrip
+\keepsilent
+
+\preamble
+
+ This program is part of the Frankenstein bundle for LaTeX.
+
+ Copyright (C) 1995-2001 Matthew Swift <swift@alum.mit.edu>
+
+ This file may have one of TWO names, either
+ bits.sty or bits.stq. This
+ LaTeX package will work ONLY if it is called bits.sty
+ and placed in a proper directory. This file should have been
+ distributed to you with a DIFFERENT file (also) called
+ bits.sty which functions identically to this one
+ but contains documentation in comments. This file works faster,
+ but the other should be kept because it contains the documentation
+ for this LaTeX package. Files called README and INSTALL should have
+ also been distributed to you with this file; see them for more
+ information.
+
+ This program is free software; you may redistribute it and/or
+ modify it under the conditions of the LaTeX Project Public
+ License, either version 1.2 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ LaTeX Project Public License for more details.
+
+\endpreamble
+
+\askforoverwritefalse
+
+% This will get changed to either nothing or \nopostamble.
+
+
+\generate{\file{bits.stq}{\from{bits.sty}{}}}
+
+\Msg{}
+\Msg{***********************************************************************}
+\Msg{*}
+\Msg{* The file bits.stq is a faster replacement for the file}
+\Msg{* bits.sty.}
+\Msg{*}
+\Msg{* bits.stq is stripped of comments (documentation) and must be}
+\Msg{* renamed bits.sty and placed where LaTeX can find it}
+\Msg{* before it may be used.}
+\Msg{*}
+\Msg{***********************************************************************}
+\Msg{}
+
+\endbatchfile
diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.pdf b/macros/latex/contrib/frankenstein/unsupported/bits.pdf
new file mode 100644
index 0000000000..bd635a1d87
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/bits.pdf
Binary files differ
diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.sty b/macros/latex/contrib/frankenstein/unsupported/bits.sty
new file mode 100644
index 0000000000..630fa00409
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/bits.sty
@@ -0,0 +1,1070 @@
+%^^A* legal notices
+% \iffalse
+%
+% This program is part of the Frankenstein bundle for LaTeX.
+%
+% Copyright 1995-2001 Matt Swift <swift@alum.mit.edu>.
+%
+% This file contains both the code and documentation for the
+% bits LaTeX package. It will work ONLY if it is placed in a
+% proper directory. Files called README, INSTALL, bits.tex
+% and bits.ins should have also been distributed to you
+% with this file. See them for more information on how to typeset
+% the documentation with LaTeX and how to generate a version of this
+% file that will work faster than this one.
+%
+% This program is free software; you may redistribute it and/or
+% modify it under the conditions of the LaTeX Project Public
+% License, either version 1.2 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.
+%
+% This program is distributed in the hope that it will be useful,
+% but without any warranty; without even the implied warranty of
+% merchantability or fitness for a particular purpose. See the
+% LaTeX Project Public License for more details.
+%
+% \fi
+%
+%^^A* checks
+%
+%^^A NOTE: The character table, with two %'s, will get written to all files.
+%% \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 \~}
+%
+% \CheckSum{602}
+%
+% \newcommand\scheme [2] {\ensuremath{\frac{#1}{#2}}}
+%
+%^^A** abstract
+% \begin{abstract}
+% Bits provides a programmer's interface for a new idea called a
+% \term{bit}, which is like an environment but has a title, author, and
+% other attributes usually only associated with the \env{document}
+% environment.
+%
+% This package is useful but may have problems and is unsupported.
+% \end{abstract}
+% \tableofcontents
+%
+% \part{Discussion}
+%
+% This documentation is spotty, but should be accurate. Please feel free to
+% write me if you can't figure something out.
+%
+% \section{Basic concepts and terminology}
+% \subsection{Users' interface}
+%
+% A \term{bit} is the smallest part of a document treated as an independent
+% unit. Each \term{bit} has an explicit type called a \term{bitstyle}.
+% (Examples: generic, story, poem, recipe, letter.) A bit's bitstyle
+% determines the markup that is legal within the bit. (Additional declarations
+% can be made on a per-bit basis, also; see below.) A bit's formatting is
+% determined by both its bitstyle and the copystyle (see below) of the
+% document. New bitstyles can be added.
+%
+% A \term{copystyle} is one of an explicit list of ways to present a collection
+% of bits together in a single document. It might well be called a
+% ``documentstyle'' and be implemented as a \LaTeX{} documentclass, but if they
+% are kept separate, copystyles and documentclasses can coexist with each
+% other, and this leads to a greater flexibility when dealing with existing
+% documents. The relationship between copystyles and documentclasses is
+% discussed further below. New copystyles can be added.
+%
+% \subsection{Programmers' interface}
+%
+% The formatting of a bit is considered to involve a fixed number of
+% \term{tasks}. Examples of tasks performed near the beginning of formatting a
+% bit are inserting some space after the preceding bit, and formatting the
+% title of the current bit. Each task must be assigned a \term{procedure} that
+% accomplishes that task. (Notice that the null procedure might be a suitable
+% procedure for some tasks in some situations.) We call a mapping of some
+% tasks to suitable procedures a \term{profile}. We call a profile that maps
+% the \emph{complete} set of tasks a \term{scheme}. You need a scheme to
+% format a bit, and the scheme to use for a given bit is determined by its
+% bitstyle and copystyle.
+%
+% Now we are in a position to try to visualize the variable space established
+% by the \term{bits} package. It's not simple, and if you think of a better
+% way, please let me know.
+%
+% As just explained, to format a bit, you need a scheme, which is a series of
+% procedures suitable for a series of certain tasks. To be concrete, let's
+% assume there are 4 tasks. Identify each task with a general color. In our
+% example, let's use red, blue, green, and yellow. Think of a scheme as a
+% stack of colored blocks, each representing a procedure. The top block,
+% corresponding to the first task, is red, the second block is blue, the third
+% green, and the bottom block, corresponding to the final task, is yellow.
+%
+% Suppose I create a new scheme, the same as the original except for a slight
+% change in the first task. This would be represented by changing the color of
+% the red, or top, block to a different shade of red. The precise color of a
+% block represents the specific procedure. A general color is associated with
+% a task because it is expected that no procedure suitable for one task is
+% going to be suitable for another task. The redness of a block represents its
+% suitability for the the first task.
+%
+% (If we wanted to be exact, we would observe that some procedures, such as the
+% null procedure, might be suitable for more than one task. OK, let such
+% procedures be a shade of grey, with the null task, let us say, being white.
+% Then the colored block at each task's position will have either the
+% associated color of the task or a shade of grey.)
+%
+% I have drawn in your mind the picture of two stacks of 4 colored blocks,
+% differing only in the shade of the top (red) block. Let's give them the
+% names Jack and Jill. Let Jack and Jill represent two bitstyles. You can
+% imagine as many bitstyles as you like---Jack, Jill, Hank, Wendy, and
+% Beauregard; all are stacks of four colored blocks arranged next to each other
+% in a line, a red block on top, a blue block, a green block, and a yellow
+% block. Some of the stacks might even have identical blocks. This would mean
+% that two bitstyles have the same scheme. You refer to bitstyles by their
+% name, so in the future, you could change one bitstyle and make it different
+% from the other. In fact, when you create a new bitstyle, it is initially
+% simply a copy of an existing bitstyle. Then you can modify the new one if
+% you want to.
+%
+% bitclass? bittype? bitstyle best describes a scheme. bitscheme?
+%
+% You've almost got the whole picture now. We need to consider copystyles.
+% Suppose Jack, Jill, Hank, Wendy, and little Beauregard are all siblings.
+% They have the same last name, Grimm. Grimm is the name of a copystyle.
+% Across town, or in a parallel universe, there is another set of siblings
+% Jack, Jill, etc.\ with a different last name, Beedle. They, too, are
+% represented by a line of stacks of colored blocks. Line up the Beedle
+% siblings behind the Grimm siblings, and you now have a pile of colored blocks
+% 4 high (4 tasks), 5 wide (the 5 bitstyles Jack, Jill, etc.), and 2 deep (the
+% 2 copystyles Grimm and Beedle).
+%
+% That's it. Given a bitstyle (e.g., Hank) and a copystyle (e.g., Beedle), you
+% have a particular scheme for formatting a bit.
+%
+% As you may notice, there is so far no justification for the metaphor of
+% family. Nothing I've said yet about tasks and procedures corresponds to the
+% metaphor's suggestion that Hank Beedle is probably more similar to Wendy
+% Beedle than he is to Hank Grimm; or that when putting together the Beedles in
+% a family photograph, there is a certain pleasing aesthetic unity that would
+% be lacking if any of those odd-looking Grimms were to stray into the picture.
+% In fact, technically, each scheme can be completely different from every
+% other scheme, Hank Beedle being as different from Wendy Beedle as he is from
+% Hank Grimm.
+%
+% These metaphors are justified when you consider the way in which new
+% copystyles and bistyles are added, and the expected purposes for bitstyles
+% and copystyles.
+%
+% OR: family of Poems, family of recipes. First name is the copystyle. Then a
+% document would consist of Hank Poem, Hank Recipe, etc. = Standard Poem,
+% Standard Recipe; Fancy Poem, Fancy Recipe.
+%
+% Or, each family has one Poem, one Recipe, etc. So a document puts together
+% members of a family, Poem, Recipe, etc.
+%
+% \section{Usage}
+%
+% Bits look like \LaTeX{} environments that take two arguments. (Surprise
+% surprise that's exactly what they are.) Here's an example of a bit with
+% hypothetical bitstyle ``poem'':
+%
+% \begin{codeexample}
+% \begin{poem}{Butterflies}{\subtitle{An Address to My Stomach}}
+% O jittery one, quavering tub, \\
+% Rumble not your complaints so violently! \\
+% Remember your jollitude just last Sunday, \\
+% The pound of bovine ambrosia \\
+% I filled you to the gills with \\
+% To silence you, on this, my wedding day.
+% \end{poem}
+% \end{codeexample}
+%
+% \section{Extension and customization}
+% \subsection{Customizing an instance of a bit}
+%
+% Fat little Hank Beedle might come with a note tied around his neck on a piece
+% of yarn, with special instructions on his care and feeding from his mother.
+% ``Peanuts will give him hives,'' it might say. And ``A quart of sour cream
+% is always welcome.''
+%
+% \subsection{Adding bitstyles, copystyles, and tasks}
+%
+% When you add a new bitstyle $B'$, you create a new scheme for each of the
+% existing copystyles. You name an existing bitstyle $B$ and zero or more
+% profiles. For each existing copystyle $C$, the profiles will be composed
+% with the \scheme{B}{C} scheme to obtain the new scheme \scheme{B'}{C}.
+% (Notice that if any of the profiles you name are schemes, the choice of $B$
+% is irrelevant, and that if you name no profiles, $B' = B$.)
+%
+% The procedure is identical when you add a new copystyle. Just swap
+% references to copystyles and bibstyles in the last paragraph.
+%
+% You can add to list of tasks. When you do this, you must assign a default
+% procedure for it (part of the \cat{Z} scheme, the universal default). All
+% existing bitstyles and copystyles will inherit the same procedure for this
+% task. This makes sense because they've presumably all done the task the same
+% way before, if they've done it at all. You can promulgate changes with
+% \cs\Promulgate etc.
+%
+% \section{Notes}
+%
+% FIX; bit type determines its markup; bitstyle is a mapping of tasks to
+% procedures.
+%
+% \StopEventually{}
+%
+% \part{Implementation}
+%
+% \section{Version control}
+%
+% \begin{macro}{\fileinfo}
+% \begin{macro}{\DoXUsepackagE}
+% \begin{macro}{\HaveECitationS}
+% \begin{macro}{\fileversion}
+% \begin{macro}{\filedate}
+% \begin{macro}{\docdate}
+% \begin{macro}{\PPOptArg}
+% These definitions must be the first ones in the file.
+% \begin{macrocode}
+\def\fileinfo{basic bits (Frankenstein's guts)}
+\def\DoXPackageS {}
+\def\fileversion{v1.2}
+\def\filedate{2001/08/31}
+\def\docdate{2001/08/31}
+\edef\PPOptArg {%
+ \filedate\space \fileversion\space \fileinfo
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% If we're loading this file from a \cs\ProcessDTXFile command (see the
+% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined;
+% othewise we assume it is not (that's why the FunkY NamE).
+%
+% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed
+% in \cs\DoXPackageS (needed to typeset the documentation for this file) and
+% then bail out. Otherwise, we're using this file in a normal way as a
+% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in
+% the \ext{dtx} file, and, if you're reading the typeset documentation of this
+% package, would appear just above. (It's OK to call \cs\usepackage with an
+% empty argument or \cs\relax, by the way.)
+% \begin{macrocode}
+\makeatletter% A special comment to help create bst files. Don't change!
+\@ifundefined{JusTLoaDInformatioN} {%
+ }{% ELSE (we know the compsci package is already loaded, too)
+ \UndefineCS\JusTLoaDInformatioN
+ \SaveDoXVarS
+ \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined
+ \usepackage{#1}%
+ }%
+ \RestoreDoXVarS
+ \makeatother
+ \endinput
+}% A special comment to help create bst files. Don't change!
+% \end{macrocode}
+%
+% Now we check for \LaTeX2e and declare the LaTeX package.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bits}[\PPOptArg]
+% \end{macrocode}^^A special comment to help create bst files. Don't change!
+%
+% ^^A NOTE: We have to compensate for the above backslashes, which are not
+% ^^A actually in the .dtx file the author works on, by adding to the
+% ^^A CheckSum.
+%%
+% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this.
+% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however...
+% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file
+% ^^A that precede it.
+% \IfCitations {%
+% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in
+% } ^^A the .dtx file, we need 2 more in the CheckSum.
+%
+%
+% \section{Preliminaries}
+%
+% \subsection{Requirements}
+%
+% \begin{macrocode}
+\RequirePackage{blkcntrl,letterhead,moredefs,relsize}
+% \end{macrocode}
+%
+% \subsection{Option processing}
+%
+% \begin{macrocode}
+\DeclareOption{poetica} {%
+ \RequirePackage{poetica}
+ \newcommand\FullTitlePoetica {%
+ \begin{Poetica}
+ \fontshape{t}\selectfont
+ \BitTitle\\%
+ \ifx\BitSubtitle\ShortEmpty \else
+ \BitSubtitle\\%
+ \fi
+ \end{Poetica}
+ }
+ \AtBeginDocument {%
+ \let\FullTitle\FullTitlePoetica
+ }
+}
+% \end{macrocode}
+% FIX: hmm, I think I always want user options so that I can have two different
+% packages require a package, and they don't have to match up on their options.
+% What about options that can only be used in preamble, that would be the right
+% thing for many cases I think. Aak, \cname{ends} can't be defined without
+% special handling? Hmm, seems like it can.
+% \begin{macrocode}
+\DeclareBooleanUserOptions{ends}{noends}
+\DeclareBooleanUserOptions{signed}{anonymous}
+
+\DeclareBooleanOptions{titlepage}{notitlepage}
+
+\ExecuteOptions{ends,notitlepage,signed}
+\ProcessOptions
+% \end{macrocode}
+%
+% \section{Making new copy and bit styles}
+%
+% \subsection{General stuff}
+%
+% \begin{macro}{\bt@a}
+% \begin{macro}{\bt@b}
+% \begin{macro}{\bt@c}
+% \begin{macro}{\bt@d}
+% \begin{macro}{\bt@e}
+% \mbox{}
+% \begin{macrocode}
+\ReserveCS\bt@a
+\ReserveCS\bt@b
+\ReserveCS\bt@c
+\ReserveCS\bt@d
+\ReserveCS\bt@e
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bt@tasks}
+% \begin{macro}{\bt@bitstyle@list}
+% \begin{macro}{\bt@copystyle@list}
+% Comma-separated lists of valid bitstyles, copystyles, and tasks. We start
+% them off non-null to bootstrap the system of adding new ones, which adds
+% them preceded by a comma.
+% \begin{macrocode}
+\newcommand\bt@tasks {%
+ environment,end@bit,begin@bit,interbits,firstbit%
+ ,settitle,setfirsttitle%
+}
+\newcommand\bt@bitstyle@list {%
+ generic%
+}
+\newcommand\bt@copystyle@list {%
+ standard%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\if@bt@trymoreschemes@}
+% \begin{macro}{\@bt@trymoreschemes@true}
+% \begin{macro}{\@bt@trymoreschemes@false}
+% \begin{macro}{\bt@list@car}
+% \begin{macro}{\bt@list@cdr}
+% \cname{bt@list@car} and \cname{bt@list@cdr} expand to the car and cdr of a
+% comma-separated list, respectively.
+% \begin{macrocode}
+\provideboolean{@bt@trymoreschemes@}
+
+\NewName{bt@list@car}{#1,#2\@nil} {%
+ #1%
+}
+\NewName{bt@list@cdr}{#1,#2\@nil} {%
+ #2%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NewCopystyle}
+% \begin{macro}{\NewBitstyle}
+% \begin{macro}{\bt@assign@task}
+% To define a new style, you specify a base style and a list of profiles.
+% Each of these can be empty. If no base style is specified, the root style
+% is used (i.e., standard copystyle or generic bitstyle). See discussion
+% above.
+% \begin{macrocode}
+\newcommand\NewCopystyle [2][Z] {% args: [profile-list] new-copystyle
+ \addto@macro\bt@copystyle@list{,#2}%
+ \@for\bt@a:=\bt@bitstyle@list \do {%
+ \@for\bt@b:=\bt@tasks \do {%
+ \eExpand\bt@b\In {%
+ \expandafter\bt@assign@task
+ \expandafter{\bt@a}{#2}{##1}{#1}%
+ }%
+ }%
+ }%
+}
+\newcommand\NewBitstyle [2][Z] {% args: [scheme-list] new-bitstyle
+ \addto@macro\bt@bitstyle@list{,#2}%
+ \@for\bt@a:=\bt@copystyle@list \do {%
+ \@for\bt@b:=\bt@tasks \do {%
+ \eExpand\bt@a\In {%
+ \eExpand\bt@b\In {%
+% \eExpandNest\bt@b\In {% FIX?
+ \bt@assign@task{#2}{##1}{####1}{#1}%
+ }%
+ }%
+ }%
+ }%
+}
+\newcommand\bt@assign@task [4] {% args: bitstyle copystyle
+ % task scheme-list
+ \@bt@trymoreschemes@true
+ \edef\bt@d{#4}% scheme-list that diminishes; edef not necessary
+ \@whilesw\if@bt@trymoreschemes@\fi {%
+% \end{macrocode}
+% There's at least one element to start; and the last scheme (\cat{Z}) is always
+% defined.
+% \begin{macrocode}
+ \edef\bt@c{%
+ \bt@list@car\bt@d,\@nil
+ }
+ \@ifundefined{bt@make@#3@\bt@c} {%
+ \edef\bt@d{\bt@list@cdr\bt@d,\@nil}%
+ }{% ELSE
+ \@nameuse{bt@make@#3@\bt@c}{#1}{#2}%
+ \@bt@trymoreschemes@false
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\PromulgateTaskAcrossCopystyles}
+% \begin{macro}{\PromulgateTaskAcrossBitstyles}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\PromulgateTaskAcrossCopystyles [3] {% args: task scheme bitstyle
+ \@for\bt@a:=\bt@copystyle@list \do {%
+ \@nameuse{bt@make@#1@#2}{#3}{\bt@a}%
+ }%
+}
+\newcommand\PromulgateTaskAcrossBitstyles [3] {% args: task scheme copystyle
+ \@for\bt@a:=\bt@bitstyle@list \do {%
+ \@nameuse{bt@make@#1@#2}{\bt@a}{#3}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bt@begin@bit@common}
+% \begin{macro}{\BitStyle}
+% \begin{macro}{\PreBitAll}
+% \cname{bt@begin@bit@common} should be called early in the sequence of
+% beginning a bit.
+% \begin{macrocode}
+\providesavebox\sc@box@a
+\newcommand\bt@begin@bit@common [2] {%
+ \title{#1}%
+% \end{macrocode}
+% We want to clear all optional attributes here, such as subtitle. FIX: should
+% be a list of attributes and perhaps even abstract clearing functions on them, etc.
+% \begin{macrocode}
+ \subtitle{}%
+% \end{macrocode}
+% Execute stuff: FIXME: nice hooks can be set here to execute things later
+% We introduce the \par so that extra spaces in the argument are not going to
+% mean anything. It would be complicated but possible by means perhaps of
+% \cs\nullfont to avoid starting a paragraph here. Arg, the kernel is so
+% opaque on how it handles ignoring spaces and what it's doing with everypar.
+% \begin{macrocode}
+ \par #2%
+ \refstepcounter{bit}%
+ \ifnum\value{bit} = \@ne
+ \@nameuse{bt@firstbit@\CopyStyle}%
+ \else
+ \@nameuse{bt@interbits@\CopyStyle}%
+ \fi
+}
+\ReserveCS\BitStyle
+\ReserveCS\PreBitAll
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Schemes}
+%
+% \subsubsection{The \cat{Z} scheme}
+%
+% \begin{macro}{\FullTitle}
+% The \cat{Z} scheme is always the last resort deafult, and it corresponds to
+% the standard copystyle and the generic bitstyle.
+%
+% FIXME: whenever we have a dummy we have to use DefName or else we error
+% FIXME: Aak, when Promulgating we need defnames for everyting!
+% \begin{macrocode}
+\newcommand\bt@make@environment@Z [2] {% args: bitstyle dummy
+ \DefName{end#1}{}{}%
+ \DefName{#1}{##1##2} {%
+ \DefName{end#1}{} {%
+ \@nameuse{bt@end@bit@#1@\CopyStyle}{##1}%
+ }%
+ \@nameuse{bt@begin@bit@#1@\CopyStyle}{##1}{##2}%
+ }%
+}
+\newcommand\bt@make@interbits@Z [2] {% args: dummy copystyle
+ \DefName{bt@interbits@#2}{} {%
+ \relax
+ \par\pagebreak[2]\bigskip\bigskip
+ \@nameuse{bt@settitle@\BitStyle @#2}%
+ }%
+}
+\newcommand\bt@make@firstbit@Z [2] {% args: dummy copystyle
+ \DefName{bt@firstbit@#2}{} {%
+ \relax
+ \par\pagebreak[2]%
+ \thispagestyle{empty}%
+ \@nameuse{bt@setfirsttitle@\BitStyle @#2}%
+ }%
+}
+\newcommand\bt@make@begin@bit@Z [2] {% args: bitstyle copystyle
+ \DefName{PreBit#1}{}{}%
+ \DefName{bt@begin@bit@#1@#2}{##1##2} {%
+ \def\BitStyle{#1}%
+ \bt@begin@bit@common{##1}{##2}%
+ \PreBitAll
+ \@nameuse{PreBit#1}%
+ }%
+}
+\newcommand\bt@make@end@bit@Z [2] {% args: bitstyle copystyle
+ \DefName{bt@end@bit@#1@#2}{##1} {%
+ \TheEnd
+ }%
+}
+\newcommand\bt@make@settitle@Z [2] {% args: bitstyle copystyle
+ \DefName{bt@settitle@#1@#2}{} {%
+ \relax
+ \begin{center}\FullTitle\end{center}
+ }%
+}
+\newcommand\bt@make@setfirsttitle@Z [2] {% args: bitstyle copystyle
+ \DefName{bt@setfirsttitle@#1@#2}{} {%
+ \relax
+ \begin{center}\FullTitle\end{center}
+ \DTypeout{FIXME setfirsttitle in Z scheme}%
+ }%
+}
+% \end{macrocode}
+% When there is no subtitle, it sometimes seems better for the title to be set
+% one size larger than the copy; but when you have a subtitle, you need the
+% title two sizes larger so that the subtitle can be an intermediate size.
+% With CM fonts, because their boldface is extended, a bold subtitle at the
+% same size as the copy looks good, and larger is too larger. So this is a
+% tricky issue. A basic kludge that would work for me, given the font families
+% I have an use, would be to check for CM fonts here, or on the other hand
+% specifically for an extended boldface, or for Dante/Bulmer, or set a flag in
+% my dante.sty or bulmer.sty.
+% \begin{macrocode}
+\newcommand\FullTitle {%
+ \relsize{2}\bfseries
+% \relsize{1}\bfseries
+ \BitTitle\\%
+ \ifx\BitSubtitle\ShortEmpty
+ \else
+ \csname sbseries\endcsname % this way it's harmless if undefined
+ \relsize{-1}\BitSubtitle\\%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{The \cat{P} scheme}
+%
+% \begin{macro}{\bt@make@setfirsttitle@P}
+% \begin{macro}{\bt@make@settitle@P}
+% \begin{macro}{\bt@make@end@bit@P}
+% \begin{macro}{\bt@make@begin@bit@P}
+% The \cat{P} scheme was created for the poem bitstyle.
+% \begin{macrocode}
+\newcommand\bt@make@begin@bit@P [2] {% args: bitstyle copystyle
+ \DefName{bt@begin@bit@#1@#2}{##1##2} {%
+ \def\BitStyle{#1}%
+ \bt@begin@bit@common{##1}{##2}%
+ \PreBitAll
+ \verse % FIX: why does the PreBitAll hook come before \verse and the
+ % BitHook come after? Why doesn't the PreBitAll come in
+ % @common@ -- well, so that a bit can put stuff before the hooks.
+ \@nameuse{PreBit#1}%
+ }%
+}
+\newcommand\bt@make@end@bit@P [2] {% args: bitstyle copystyle
+ \DefName{bt@end@bit@#1@#2}{##1} {%
+ \relax
+ \endverse
+ \TheEnd
+ }%
+}
+\newcommand\bt@make@settitle@P [2] {% args: bitstyle copystyle
+ \DefName{bt@settitle@#1@#2}{} {%
+ \relax
+ \begin{verse}\FullTitle\end{verse}
+ }%
+}
+\newcommand\bt@make@setfirsttitle@P [2] {% args: bitstyle copystyle
+ \DefName{bt@setfirsttitle@#1@#2}{} {%
+ \relax
+ \begin{verse}\FullTitle\end{verse}
+ \DTypeout{this is setfirsttitle in P scheme}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{The \cat{R} scheme}
+% For the prose bitstyle.
+% \begin{macrocode}
+\newcommand\bt@make@settitle@R [2] {%
+ \DefName{bt@settitle@#1@#2}{} {%
+ \relax
+ \ifx\BitTitle\ShortEmpty\else
+ \noindent
+ \begingroup
+ \relsize{1}%
+ \bfseries
+ \BitTitle
+ \endgroup
+ \par\smallskip
+ \fi
+ }%
+}
+% \end{macrocode}
+%
+% \subsubsection{The \cat{T} scheme} FIX: for what?
+%
+% \section{The standard copystyle and generic bitstyle}
+%
+% \begin{macrocode}
+\@for\bt@e:=\bt@tasks \do {%
+ \PromulgateTaskAcrossBitstyles{\bt@e}{Z}{standard}
+}
+% \end{macrocode}
+%
+% \section{Bit Styles}
+%
+% \subsection{Story}
+% This is the same as generic.
+% \begin{macrocode}
+\NewBitstyle{generic}
+\NewBitstyle{story}
+% \end{macrocode}
+%
+% \subsection{Poem}
+%
+% \begin{macrocode}
+\NewBitstyle{poem}
+\PromulgateTaskAcrossCopystyles{begin@bit}{P}{poem}
+\PromulgateTaskAcrossCopystyles{end@bit}{P}{poem}
+\PromulgateTaskAcrossCopystyles{settitle}{P}{poem}
+\PromulgateTaskAcrossCopystyles{setfirsttitle}{P}{poem}
+% \end{macrocode}
+%
+% \subsection{Prose}
+%
+% \begin{macrocode}
+\NewBitstyle{prose}
+\PromulgateTaskAcrossCopystyles{settitle}{R}{prose}
+% \end{macrocode}
+%
+% \section{Copy Styles}
+%
+% \begin{macrocode}
+\NewCopystyle{titlepage}
+
+\newcommand\bt@make@setfirsttitle@T [2] {% args: bitstyle copystyle
+ \DefName{bt@setfirsttitle@#1@#2}{} {%
+ \thispagestyle{empty}%
+ \vspace*{\fill}%
+ \begin{center}
+ {\relsize{5}\BitTitle \\}%
+ \ifx\BitSubtitle\ShortEmpty\else
+ {\relsize{3}\BitSubtitle \\}%
+ \fi
+ \end{center}
+ \vfill
+% \CoverNotes
+% \vfill
+ \par
+ \begingroup
+ \sffamily
+ \hfill
+ \begin{tabular}{r@{\hspace{\@ne em}}r}
+ Copy of:&\todayabbrev \\%
+ Version of:&\Lastchange \\%
+ Date:&\Date \\%
+ \end{tabular}
+ \par\bigskip\bigskip
+ \begin{raggedleft}
+ \def\and{\\}%
+ \larger\scshape\Author
+% \end{macrocode}
+% A final |\par| is needed to close the paragraph in raggedleft mode.
+% \begin{macrocode}
+ \par
+ \end{raggedleft}
+ \endgroup
+ \newpage
+ \setcounter{page}{\@ne}%
+ }%
+}
+\PromulgateTaskAcrossBitstyles{setfirsttitle}{T}{titlepage}
+% \end{macrocode}
+%
+% \section{Bit counters and interbit skips}
+%
+% \begin{macro}{\c@bit}
+% \begin{macro}{\c@bitbit}
+% \begin{macro}{\c@bitbitbit}
+% \mbox{}
+% \begin{macrocode}
+\providecounter{bit}
+\providecounter{bitbit}[bit]
+\providecounter{bitbitbit}[bitbit]
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bt@bitskip}
+% \begin{macro}{\InterBitBreak}
+% \begin{macro}{\InterBitBitBreak}
+% \begin{macro}{\InterBitBitBitBreak}
+% \cs\medbreak is penalty -100; \cs\smallbreak is 50. FIXME: what's going on
+% here?
+% \begin{macrocode}
+\newcommand\bt@bitskip[1] {%
+ \par
+ \ifdim \lastskip < \bigskipamount
+ \removelastskip
+ \penalty -500%
+ #1%
+ \fi
+}
+\newcommand\InterBitBreak {%
+ \bt@bitskip
+ \bigskip
+}
+\newcommand\InterBitBitBreak {%
+ \bt@bitskip
+ \medskip
+}
+\newcommand\InterBitBitBitBreak {%
+ \bt@bitskip
+ \smallskip
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bitbit}
+% \begin{macro}{\bitbitbit}
+% \begin{macro}{\bt@bitbit}
+% \begin{macro}{\bt@bitbitbit}
+% FIXME: These should be made attributes of the Generic Bit Style.
+% \begin{macrocode}
+\newcommand\bitbit {%
+ \@ifstar {%
+ \bt@bitbit{}%
+ }{% ELSE
+ \refstepcounter{bitbit}%
+ \bt@bitbit{\thebitbit\ }%
+ }%
+}
+\newcommand{\bt@bitbit} [2] {%
+ \ifnum\value{bitbit}=\@ne \else
+ \InterBitBitBreak
+ \fi
+ \noindent #1{\relsize{-1}\bfseries #2}%
+ \par\nobreak
+ \smallskip
+}
+\newcommand\bitbitbit {%
+ \@ifstar {%
+ \bt@bitbitbit{}%
+ }{% ELSE
+ \refstepcounter{bitbitbit}%
+ \bt@bitbitbit{\thebitbitbit\ }%
+ }%
+}
+\newcommand\bt@bitbitbit [2] {%
+ \ifnum\value{bitbitbit}=\@ne \else
+ \InterBitBitBitBreak
+ \fi
+ \noindent #1{\relsize{-1}\bfseries #2}%
+ \par\nobreak
+ \smallskip
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Userinfos}
+%
+% \begin{macro}{\Author}
+% \begin{macro}{\author}
+% \begin{macro}{\Lastchange}
+% \begin{macro}{\lastchange}
+% \begin{macro}{\Date}
+% \begin{macro}{\date}
+% \begin{macro}{\title}
+% \begin{macro}{\BitTitle}
+% \begin{macro}{\BitSubtitle}
+% \begin{macro}{\Subtitle}
+% \begin{macro}{\subtitle}
+% When we redefine \cs\author, \cs\date, and \cs\title, we add a new action to
+% the original meaning. This means that standard commands like \cs\maketitle
+% will still perform as expected, if someone prefers to use that instead of the
+% \Frankenstein commands.
+% \begin{macrocode}
+\SaveCS\date
+
+\newcommand*\Date {%
+ \todayabbrev
+}
+\defcommand\date [1] {%
+ \MDSaveddate{#1}%
+ \def\Date{#1}%
+}
+\SaveCS\title
+\ReserveCS\BitTitle
+
+\defcommand\title [1] {%
+ \MDSavedtitle{#1}%
+ \def\BitTitle{#1}%
+}
+% \end{macrocode}
+% Why did I originally want \cs\Subtitle to be a user command instead of \cs\subtitle?
+% \begin{macrocode}
+\NewUserInfo*[\subtitle]\BitSubtitle
+%\NewUserInfo*[\Subtitle]\BitSubtitle
+%\newlet\subtitle\Subtitle
+\NewUserInfo*\Lastchange
+\lastchange{\todayabbrev}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Copystyle}
+% \begin{macro}{\copystyle}
+% \mbox{}
+% \begin{macrocode}
+\NewUserInfo*\CopyStyle
+\copystyle{standard}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Dates}
+%
+% \begin{macro}{\today}
+% \begin{macro}{\todayabbrev}
+% \mbox{}
+% \begin{macrocode}
+\def\today {%
+ \number\day\space\ifcase\month\or
+ January\or February\or
+ March\or April\or May\or June\or July\or August\or September\or
+ October\or November\or December\fi\space\number\year
+}
+\newcommand\todayabbrev {%
+ \number\day\space\ifcase\month\or
+ Jan\or Feb\or
+ Mar\or Apr\or May\or Jun\or Jul\or Aug\or Sep\or
+ Oct\or Nov\or Dec\fi\space\number\year
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\copywrite}
+% This adds a copyright message to the beginning of \cs\Notes. Its single
+% argument should be a year.
+% \begin{macrocode}
+\newcommand\copywrite [1] {%
+ \edef\Notes {%
+ \copyright#1 All rights reserved. \Notes
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Ends}
+%
+% \begin{macro}{\EndSign}
+% It's very hard to attach this thing without allowing a page break before it. FIX.
+% \begin{macrocode}
+\newcommand\EndSign {%
+ \par\nobreak
+ \vspace{2\bigskipamount}% multiplication turns glue into dimen.
+ \hfill
+% \end{macrocode}
+% We do this so that |\Author| can have |\\|s in it.
+% \begin{macrocode}
+ \begingroup
+ \scshape
+ \let\and\@tabularcr
+ \begin{tabular}{c}
+ \Author \\%
+ \relsize{-1}\itshape\Date
+ \end{tabular}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\theend}
+% User command which (almost) always makes an \cs\EndSign:
+% \begin{macrocode}
+\newcommand\theend {%
+ \if@signed@
+ \EndSign
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TheEnd}
+% The end of a bit calls \cs\TheEnd. The default definition is either
+% nothing or \cs\EndSign, depending on some condition.
+% \begin{macrocode}
+\newcommand\TheEnd {%
+ \def\sc@t@c {%
+ prizes%
+ }%
+ \let\sc@t@a\EndSign
+ \ifx\CopyStyle\sc@t@c
+ \InitCS*\sc@t@a
+ \else
+ \if@signed@
+ \if@ends@
+% FIX: when you get the footer going...
+% \ifnum\value{page} < 2%
+% \InitCS*\sc@t@a
+% \fi
+ \else
+ \InitCS*\sc@t@a
+ \fi
+ \else
+ \InitCS*\sc@t@a
+ \fi
+ \fi
+ \sc@t@a
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Version control}
+%
+% We use macros instead of boxes, because at this point some of the macros in
+% the boxes may change their meaning.
+%
+% Algorithm: We will maintain two \cs\hbox es |to \textwidth| each time
+% \cs\MakeCover is called. Set the footboxes to |\v@idbox| here. Whenever
+% |\MakeCover| is called, it should stack another |\vbox| with the right
+% information in it into both boxes. The information is expanded, and thus the
+% macro contents can change between calls to |\MakeCover|, but the box being
+% built inserts two different |\vboxes| with their value at the moment.
+%
+% \begin{macro}{\bt@vcbox}
+% \begin{macro}{\VersionControlString}
+% \begin{macro}{\VersionControlAuthorString}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\BTVersionWord {Version}
+\newcommand\BTCopyWord {Copy}
+\newcommand\bt@vcbox {%
+ \footnotesize
+ \ifx\Lastchange\ShortEmpty\else
+ {\bfseries \BTVersionWord:} {\slshape \Lastchange}%
+ \fi
+ \hspace{\@ne em}%
+ {\bfseries \BTCopyWord:} {\slshape \todayabbrev}%
+}
+\newcommand\VersionControlString {%
+ \hfill \bt@vcbox \hfill
+}
+% \end{macrocode}
+% I should assign some names to the various meanings of and, like protect.
+% \begin{macrocode}
+\newcommand\VersionControlAuthorString {%
+ \bt@vcbox \hfill {\scshape\def\and{\unskip, \ignorespaces}\Author}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\whitespace}
+% \mbox{}
+% \begin{macrocode}
+\requirecommand\whitespace {%
+ \bigbreak
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \part{Configuration}
+%
+% We leave the rest to a configuration file.
+% \begin{macrocode}
+\InputIfFileExists{bits.cfg}{}{}
+% \end{macrocode}
+%
+% The contents of the distributed configuration file are below.
+%
+% \InputIfFileExists{bits.cfg}{}{}
+%
+% \Finale
diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.tex b/macros/latex/contrib/frankenstein/unsupported/bits.tex
new file mode 100644
index 0000000000..dca970a548
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/bits.tex
@@ -0,0 +1,67 @@
+% bits.tex -- documentation for the bits LaTeX package.
+%
+% This program is part of the Frankenstein bundle for LaTeX2e.
+%
+% Copyright (C) 1995-2001 Matt Swift <swift@alum.mit.edu>
+%
+% This program is free software; you may redistribute it and/or
+% modify it under the conditions of the LaTeX Project Public
+% License, either version 1.2 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.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% LaTeX Project Public License for more details.
+%
+\documentclass{ltxdoc}
+\makeatletter
+\def\part {%
+ \clearpage
+ \@afterindentfalse
+ \secdef\@part\@spart
+}
+\def\StripV #1{\E@cdr #1\@nil}
+\makeatother
+\usepackage{attrib,compsci}
+\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual]
+\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing}
+ [The MLA Style Manual]
+\newtheorem{lessoninternal}{Lesson}
+\newenvironment{lesson} {%
+ \let\AttribInit\sffamily
+ \let\PreTrib\textsection
+ \let\PostTrib\ShortEmpty
+ \lessoninternal
+ } {%
+ \endlessoninternal
+ }
+\newcommand\manualref [1] {\textsf{\S #1}}
+\ProcessDTXFile{bits.sty}
+\newlet\MaybeABib\relax
+\IfCitations {
+ \def\MaybeABib {%
+ \newpage
+ \bibliographystyle{achicago}%
+ \bibliography{frankenstein}%
+ }
+ \SaveDoXVarS
+ \usepackage{achicago}
+ \RestoreDoXVarS
+}
+\CodelineIndex
+\EnableCrossrefs
+\begin{document}
+\date{Version: \StripV\fileversion \qquad Date: \filedate\\
+ \relsize{-2}Documentation revision: \docdate}
+\author{Matt Swift \email{swift@alum.mit.edu}}
+\title{The \textsf{bits} LaTeX package \\\smaller \fileinfo}
+\maketitle
+\DocInput{bits.sty}
+\MaybeABib
+\newpage
+\PrintIndex
+\end{document}
diff --git a/macros/latex/contrib/frankenstein/unsupported/drama.ins b/macros/latex/contrib/frankenstein/unsupported/drama.ins
new file mode 100644
index 0000000000..d2fb308754
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/drama.ins
@@ -0,0 +1,64 @@
+% drama.ins -- docstrip driver for the drama LaTeX package
+%
+% Copyright (C) 1995-2001 Matthew Swift <swift@alum.mit.edu>
+% Please see the copyright notice in \preamble below.
+
+% This file, when run through TeX or LaTeX, will generate fast loadable files
+% from the .sty, .cls, or .bst files mentioned below.
+
+\input docstrip
+\keepsilent
+
+\preamble
+
+ This program is part of the Frankenstein bundle for LaTeX.
+
+ Copyright (C) 1995-2001 Matthew Swift <swift@alum.mit.edu>
+
+ This file may have one of TWO names, either
+ drama.sty or drama.stq. This
+ LaTeX package will work ONLY if it is called drama.sty
+ and placed in a proper directory. This file should have been
+ distributed to you with a DIFFERENT file (also) called
+ drama.sty which functions identically to this one
+ but contains documentation in comments. This file works faster,
+ but the other should be kept because it contains the documentation
+ for this LaTeX package. Files called README and INSTALL should have
+ also been distributed to you with this file; see them for more
+ information.
+
+ This program is free software; you may redistribute it and/or
+ modify it under the conditions of the LaTeX Project Public
+ License, either version 1.2 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ LaTeX Project Public License for more details.
+
+\endpreamble
+
+\askforoverwritefalse
+
+% This will get changed to either nothing or \nopostamble.
+
+
+\generate{\file{drama.stq}{\from{drama.sty}{}}}
+
+\Msg{}
+\Msg{***********************************************************************}
+\Msg{*}
+\Msg{* The file drama.stq is a faster replacement for the file}
+\Msg{* drama.sty.}
+\Msg{*}
+\Msg{* drama.stq is stripped of comments (documentation) and must be}
+\Msg{* renamed drama.sty and placed where LaTeX can find it}
+\Msg{* before it may be used.}
+\Msg{*}
+\Msg{***********************************************************************}
+\Msg{}
+
+\endbatchfile
diff --git a/macros/latex/contrib/frankenstein/unsupported/drama.pdf b/macros/latex/contrib/frankenstein/unsupported/drama.pdf
new file mode 100644
index 0000000000..ccc6013db5
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/drama.pdf
Binary files differ
diff --git a/macros/latex/contrib/frankenstein/unsupported/drama.sty b/macros/latex/contrib/frankenstein/unsupported/drama.sty
new file mode 100644
index 0000000000..b74e90f974
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/drama.sty
@@ -0,0 +1,488 @@
+%^^A* legal notices
+% \iffalse
+%
+% This program is part of the Frankenstein bundle for LaTeX.
+%
+% Copyright 1995-2001 Matt Swift <swift@alum.mit.edu>.
+%
+% This file contains both the code and documentation for the
+% drama LaTeX package. It will work ONLY if it is placed in a
+% proper directory. Files called README, INSTALL, drama.tex
+% and drama.ins should have also been distributed to you
+% with this file. See them for more information on how to typeset
+% the documentation with LaTeX and how to generate a version of this
+% file that will work faster than this one.
+%
+% This program is free software; you may redistribute it and/or
+% modify it under the conditions of the LaTeX Project Public
+% License, either version 1.2 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.
+%
+% This program is distributed in the hope that it will be useful,
+% but without any warranty; without even the implied warranty of
+% merchantability or fitness for a particular purpose. See the
+% LaTeX Project Public License for more details.
+%
+% \fi
+%
+%^^A* checks
+%
+%^^A NOTE: The character table, with two %'s, will get written to all files.
+%% \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 \~}
+%
+% \CheckSum{314}
+%
+%^^A** abstract
+% \begin{abstract}
+% Defines macros for typesetting a basic production-style stage script.
+%
+% This package is useful but may have problems and is unsupported.
+% \end{abstract}
+% \tableofcontents
+%
+% \part{Discussion}
+%
+% I am close to handling the insertion of a ``continued'' message at the top
+% of the page when a speech is broken across the page. But it's not there
+% yet.
+%
+% \DescribeEnv{script}
+% This is the only environment so far, for a basic production-style stage
+% script. It is implemented as a bitstyle: see the \package{bits} package
+% for details of use. I think you only need to issue an
+% \cs\author\marg{author's name} and \cs\date\marg{date} command. Also,
+% create an empty file called \file{bits.cfg} on your system (or put the
+% \cs\author declaration in it).
+%
+% Options come in pairs (boldface is default):
+% \begin{description}
+% \item[\textmd{oneact}/multiact] Multiact scripts use act numbers; oneacts
+% just have scenes.
+% \end{description}
+%
+% \DescribeMacro\character
+% \cs\character\marg{full description}\marg{name}\marg{csname} defines a new
+% character. \meta{full description} is used in the dramatis personae
+% listing. \meta{name} is the name to use to refer to the character in stage
+% directions, and to introduce their speeches. \cs\character defines a
+% command |\|\meta{csname} which prints \meta{name} in the font given in
+% \cs\DirectStyle. Use this in stage directions. It is an abbreviation
+% macro of category \cat{Character}; following spacing is handled
+% automatically for you. See the \package{abbrevs} package for details. Also
+% defined is the command
+% \DescribeMacro\SpeakAppend
+% |\|\meta{csname}|says|, which is used to introduce the character's
+% speeches. The suffix ``says'' can be changed by redefining \cs\SpeakAppend
+% before using \cs\character. You can also define it before loading the
+% \package{drama} package.
+%
+% \DescribeMacro\scene
+% \DescribeMacro\act
+% Use \cs\scene and \cs\act to start acts and scenes.
+%
+% \DescribeMacro\direct
+% \DescribeMacro\setstage
+% \cs\direct\marg{stage directions}. Use \cs\setstage\marg{stage directions}
+% at the beginning of scenes and acts.
+%
+% \StopEventually{}
+%
+% \part{Implementation}
+%
+% \section{Version control}
+%
+% \begin{macro}{\fileinfo}
+% \begin{macro}{\DoXUsepackagE}
+% \begin{macro}{\HaveECitationS}
+% \begin{macro}{\fileversion}
+% \begin{macro}{\filedate}
+% \begin{macro}{\docdate}
+% \begin{macro}{\PPOptArg}
+% These definitions must be the first ones in the file.
+% \begin{macrocode}
+\def\fileinfo{drama package (Frankenstein's heart)}
+\def\DoXPackageS {}
+\def\initelyHavECitationS {}
+\def\fileversion{v0.2}
+\def\filedate{1996/05/05}
+\def\docdate{1996/05/05}
+\edef\PPOptArg {%
+ \filedate\space \fileversion\space \fileinfo
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% If we're loading this file from a \cs\ProcessDTXFile command (see the
+% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined;
+% othewise we assume it is not (that's why the FunkY NamE).
+%
+% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed
+% in \cs\DoXPackageS (needed to typeset the documentation for this file) and
+% then bail out. Otherwise, we're using this file in a normal way as a
+% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in
+% the \ext{dtx} file, and, if you're reading the typeset documentation of this
+% package, would appear just above. (It's OK to call \cs\usepackage with an
+% empty argument or \cs\relax, by the way.)
+% \begin{macrocode}
+\makeatletter% A special comment to help create bst files. Don't change!
+\@ifundefined{JusTLoaDInformatioN} {%
+ }{% ELSE (we know the compsci package is already loaded, too)
+ \UndefineCS\JusTLoaDInformatioN
+ \SaveDoXVarS
+ \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined
+ \usepackage{#1}%
+ }%
+ \RestoreDoXVarS
+ \makeatother
+ \endinput
+}% A special comment to help create bst files. Don't change!
+% \end{macrocode}
+%
+% Now we check for \LaTeX2e and declare the LaTeX package.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{drama}[\PPOptArg]
+% \end{macrocode}^^A special comment to help create bst files. Don't change!
+%
+% ^^A NOTE: We have to compensate for the above backslashes, which are not
+% ^^A actually in the .dtx file the author works on, by adding to the
+% ^^A CheckSum.
+%%
+% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this.
+% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however...
+% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file
+% ^^A that precede it.
+% \IfCitations {%
+% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in
+% } ^^A the .dtx file, we need 2 more in the CheckSum.
+%
+%
+% \begin{macrocode}
+\RequirePackage{abbrevs,bits,dialogue,moredefs,relsize}
+%\RequirePackage{xmark}
+\let\sc@mark\Gobble
+\VerboseErrors
+
+\DeclareBooleanOptions{oneact}{multiact}
+\ProcessOptions
+% \end{macrocode}
+%
+% \section{characters}
+%
+% \begin{macro}{\SpeakAppend}
+% \begin{macro}{\sc@cast}
+% \begin{macro}{\character}
+%
+% \begin{macrocode}
+\providecommand\SpeakAppend {says}
+\ReserveCS\sc@cast
+\NewUserAbbrevDefiner\NewCharacterAbbrev{Character}
+\let\TMFontCharacter\scshape
+\newcommand*\character [3] {% args: dramper name csname
+ \expandafter\NewCharacterAbbrev\csname #3\endcsname{#2}%
+ \NewName* {#3\SpeakAppend} {} {%
+ \speak{#2}%
+ }%
+ \addto@macro\sc@cast{,#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% The |\@cdr| gets rid of the first silly comma.
+% \begin{macrocode}
+\newcommand\DramPer {%
+ \ifx\sc@cast\LongEmpty\else
+ {\larger\scshape Cast}%
+ \relax\begin{verse}
+ \edef\sc@t@a{\E@cdr\sc@cast\@nil}%
+ \@for\sc@t@b:=\sc@t@a \do {%
+ \sc@t@b\\%
+ }%
+ \relax\end{verse}%
+% \end{macrocode}
+% Prepare for another set of characters.
+% \begin{macrocode}
+ \InitCS\sc@cast
+ \bigbreak
+ \fi
+}
+% \end{macrocode}
+%
+% \subsubsection{sectioning}
+%
+% \begin{macro}{\sc@toks@saved@output}
+% We pull some fancy stuff with the output routine here. The algorithm is a
+% simpler version of Knuth's \cite[260ff]{knuth:texbook}.
+% \begin{macrocode}
+\newtokens\sc@toks@saved@output
+\sc@toks@saved@output=\output
+% \end{macrocode}
+% \end{macro}
+%
+% The |\sc@botmark|, if not empty, will contain text to be inserted at the top
+% of the next page. It must contain vertical not horizontal material.
+%
+% We actually need to communicate the boolean |sc@directing| via the mark,
+% because only the information in the marks is guaranteed to reflect the state
+% at the end of the page, and not several lines later.
+% \begin{macrocode}
+\providelength\sc@len
+
+\newcommand\sc@outputwrapper {%
+ \setlength{\sc@len}{\dp255}%
+ \the\sc@toks@saved@output
+ \def\sc@t@b {%
+ \sc@botmark
+ \addtolength{\sc@len}{-\prevdepth}%
+ \kern\sc@len
+ }%
+ \InitCS\sc@t@a
+ \ifx\sc@botmark\ShortEmpty
+ \let\sc@t@a\sc@t@b
+ \else
+ \ifsc@directing
+ \let\sc@t@a\sc@t@b
+ \fi
+ \fi
+ \sc@t@a
+}
+\newcommand\script {%
+ \MakeDirectTakeArg
+ \relax\begin{Script}%
+}
+\NewName{endscript} {} {%
+ \relax\end{Script}%
+}
+\NewName{script*} {} {%
+ \MakeDirectTakeNoArg
+ \relax\begin{Script}%
+}
+\NewName{endscript*} {} {%
+ \relax\end{Script}%
+}
+\newcommand\sc@make@begin@bit@D [2] {% args: bitstyle copystyle
+ \DefName{sc@begin@bit@#1@#2}{##1##2} {%
+ \def\BitStyle{#1}%
+ \sc@begin@bit@common{##1}{##2}%
+ \PreBitAll
+%
+% \ClaimXMarkTwo
+% \FrankenInfo{drama}{The script environment is changing \protect\output.}%
+% \output={\sc@outputwrapper}%
+% \let\maxdepth\maxdimen
+% \let\@maxdepth\maxdimen
+ \if@oneact@
+ \def\thepage {%
+ \arabic{bitbitbit}\hspace{\@ne em}\arabic{page}%
+ }%
+ \else
+ \def\thepage {%
+ \arabic{bitbit}--\arabic{bitbitbit}\hspace{\@ne em}\arabic{page}%
+ }%
+ \fi
+ \DramPer
+%
+ \@nameuse{PreBit#1}%
+ }%
+}
+\newcommand\sc@make@end@bit@D [2] {% args: bitstyle copystyle
+ \DefName{sc@end@bit@#1@#2}{##1} {%
+ \sc@possiblyfinishdirecting
+ \TheEnd
+ \FrankenInfo{drama}{\protect\output is back to normal now.}%
+ }%
+}
+\NewBitstyle{Script}
+\PromulgateComponentAcrossCopystyles{end@bit}{D}{Script}
+\PromulgateComponentAcrossCopystyles{begin@bit}{D}{Script}
+
+\newcommand\act {%
+ \sc@possiblyfinishdirecting
+ \sc@mark{\ShortEmpty}%
+ \stepcounter{bitbit}%
+ \pagebreak[3]%
+ \bigskip
+ \centerline{\relsize{2}Act \thebitbit}%
+ \par
+ \nobreak
+ \smallskip
+}
+\newcommand\scene {%
+ \sc@possiblyfinishdirecting
+ \sc@mark{\ShortEmpty}%
+ \stepcounter{bitbitbit}%
+ \pagebreak[3]%
+ \bigskip
+ \centerline{\relsize{1}Scene \thebitbitbit}%
+ \par
+ \nobreak
+ \smallskip
+}
+% \end{macrocode}
+%
+% \subsubsection{speakers and stage directions}
+%
+% \begin{macrocode}
+\newlength{\halfacross}
+ \setlength{\halfacross}{\textwidth}
+ \divide\halfacross by 2
+\newlength{\quarteracross}
+ \setlength{\quarteracross}{\textwidth}
+ \divide\quarteracross by 4
+
+\newenvironment{DramaTab} [1] {%
+ \relax\begin{list}{} {%
+ \setlength{\leftmargin}{#1}%
+ \setlength{\listparindent}{\z@}%
+ \sloppy
+ }%
+ \item\relax
+ }{%
+ \relax\end{list}%
+}
+\newcommand\setstage [1] {%
+ \relax\begin{DramaTab}{\halfacross}%
+ \DirectStyle
+ \DirectOpen
+ \ignorespaces
+ #1%
+ \unskip
+ \DirectClose
+ \relax\end{DramaTab}%
+}
+% \end{macrocode}
+%
+% It is a question of style whether to announce the speaker's name a second
+% time, if his speech continues after a stage direction in a paragraph by
+% itself. If the page breaks immediately before the stage direction, or
+% duringit, no continuation message will be given. If it breaks after the
+% stage direction, and before the next speaker is announced with the |\speak|
+% command, a continuation message appropriate to the speaker \emph{before} the
+% stage direction is given. Of course, sectioning commands will cancel any
+% continuation messages.
+%
+% Communicating via the mark is giving me a problem. I need to solve this
+% problem and replace @sc@bool with mark information.
+%
+% Also, when using the no-argument form on a source with arguments, you cannot
+% swallow the spaces with |\ignorespaces|, because the open brace shields them.
+%
+% There are problems with certain combinations of taking arguments and
+% reannouncing speakers after a stage direction. I should draw a chart, and
+% see how I can handle things.
+% \begin{macro}{\DirectOpen}
+% \begin{macro}{\DirectClose}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\DirectOpen {\textrm{(}}
+\newcommand\DirectClose {\textrm{)}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\newboolean{sc@directing}
+
+\newcommand*\DirectNoArg {%
+ \sc@noargs@finishdirecting
+ \sc@direct
+}
+\newcommand\DirectWithArg [1] {%
+ \sc@args@finishdirecting
+ \sc@direct
+ #1%
+ \sc@really@finishdirecting
+}
+\newcommand\sc@direct {%
+ \global\let\sc@lastmark\sc@themark
+ \sc@mark{\ShortEmpty}%
+ \sc@directingtrue
+ \pagebreak[0]% mild encouragement
+ \relax\begin{DramaTab}{\quarteracross}%
+ \DirectStyle
+ \DirectOpen
+ \ignorespaces
+}
+\newcommand\sc@really@finishdirecting {%
+ \unskip
+ \DirectClose
+ \relax\end{DramaTab}
+ \sc@directingfalse
+% \sc@mark\expandafter{\sc@lastmark}% FIXME:
+}
+% \end{macrocode}
+% Looks like args version is null.
+% \begin{macrocode}
+\ReserveCS\sc@args@finishdirecting
+\newcommand\sc@noargs@finishdirecting {%
+ \ifsc@directing
+ \sc@really@finishdirecting
+ \fi
+}
+\ReserveCS\sc@possiblyfinishdirecting
+\newcommand\MakeDirectTakeArg {%
+ \let\sc@possiblyfinishdirecting\sc@args@finishdirecting
+ \let\direct\DirectWithArg
+}
+\newcommand\MakeDirectTakeNoArg {%
+ \let\sc@possiblyfinishdirecting\sc@noargs@finishdirecting
+ \let\direct\DirectNoArg
+}
+% \end{macrocode}
+%
+% \todo{Do penalties better?}
+%
+% \begin{macro}{\GiveSpeaker}
+% \begin{macrocode}
+\newcommand\GiveSpeaker [1] {%
+ \par
+ \centerline{\textsc{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GiveSpeakerContinued}
+% The space is explicit for clarity.
+% \begin{macrocode}
+\newcommand\GiveSpeakerContinued [1] {%
+ \GiveSpeaker{#1\space\rlap{\textsl{(continued)}}}%
+}
+\newcommand\speak [1] {%
+ \sc@possiblyfinishdirecting
+ \sc@mark{\ShortEmpty}%
+ \pagebreak[2]%
+ \smallskip
+ \sc@mark{\GiveSpeakerContinued{#1}}%
+ \GiveSpeaker{#1}%
+ \par
+ \nopagebreak
+ \noindent
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale
diff --git a/macros/latex/contrib/frankenstein/unsupported/drama.tex b/macros/latex/contrib/frankenstein/unsupported/drama.tex
new file mode 100644
index 0000000000..99b7c8c2e0
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/drama.tex
@@ -0,0 +1,67 @@
+% drama.tex -- documentation for the drama LaTeX package.
+%
+% This program is part of the Frankenstein bundle for LaTeX2e.
+%
+% Copyright (C) 1995-2001 Matt Swift <swift@alum.mit.edu>
+%
+% This program is free software; you may redistribute it and/or
+% modify it under the conditions of the LaTeX Project Public
+% License, either version 1.2 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.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% LaTeX Project Public License for more details.
+%
+\documentclass{ltxdoc}
+\makeatletter
+\def\part {%
+ \clearpage
+ \@afterindentfalse
+ \secdef\@part\@spart
+}
+\def\StripV #1{\E@cdr #1\@nil}
+\makeatother
+\usepackage{attrib,compsci}
+\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual]
+\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing}
+ [The MLA Style Manual]
+\newtheorem{lessoninternal}{Lesson}
+\newenvironment{lesson} {%
+ \let\AttribInit\sffamily
+ \let\PreTrib\textsection
+ \let\PostTrib\ShortEmpty
+ \lessoninternal
+ } {%
+ \endlessoninternal
+ }
+\newcommand\manualref [1] {\textsf{\S #1}}
+\ProcessDTXFile{drama.sty}
+\newlet\MaybeABib\relax
+\IfCitations {
+ \def\MaybeABib {%
+ \newpage
+ \bibliographystyle{achicago}%
+ \bibliography{frankenstein}%
+ }
+ \SaveDoXVarS
+ \usepackage{achicago}
+ \RestoreDoXVarS
+}
+\CodelineIndex
+\EnableCrossrefs
+\begin{document}
+\date{Version: \StripV\fileversion \qquad Date: \filedate\\
+ \relsize{-2}Documentation revision: \docdate}
+\author{Matt Swift \email{swift@alum.mit.edu}}
+\title{The \textsf{drama} LaTeX package \\\smaller \fileinfo}
+\maketitle
+\DocInput{drama.sty}
+\MaybeABib
+\newpage
+\PrintIndex
+\end{document}
diff --git a/macros/latex/contrib/frankenstein/unsupported/includex-test.tex b/macros/latex/contrib/frankenstein/unsupported/includex-test.tex
new file mode 100644
index 0000000000..4539bd840b
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/includex-test.tex
@@ -0,0 +1,206 @@
+%* filecontents
+% $Id: includex-test.tex,v 1.2 1999/02/27 05:09:26 swift Exp $
+
+%** includex-test-aux.tex
+\begin{filecontents}{includex-test-aux.tex}
+This text is in a separate file that just contains text, and some \LaTeX\ code.
+For a change, let's quote \emph{Moby Dick}, chapter~94:
+\begin{quotation} %
+ Squeeze!\ squeeze!\ squeeze!\ all the morning long; I squeezed that sperm
+ till I myself almost melted into it; I squeezed that sperm till a strange
+ sort of insanity came over me; and I found myself unwittingly squeezing my
+ co-laborers' hands in it, mistaking their hands for the gentle globules.
+ Such an abounding, affectionate, friendly, loving feeling did this avocation
+ beget; that at last I was continually squeezing their hands, and looking up
+ into their eyes sentimentally; as much as to say,---Oh!\ my dear fellow
+ beings, why should we longer cherish any social acerbities, or know the
+ slightest ill-humor or envy! Come; let us squeeze hands all round; nay, let
+ us all squeeze ourselves into each other; let us squeeze ourselves
+ universally into the very milk and sperm of kindness.
+
+ Would that I could keep squeezing that sperm for ever! For now, since by many
+ prolonged, repeated experiences, I have perceived that in all cases man must
+ eventually lower, or at least shift, his conceit of attainable felicity; not
+ placing it anywhere in the intellect or the fancy; but in the wife, the
+ heart, the bed, the table, the saddle, the fire-side, the country; now that I
+ have perceived all this, I am ready to squeeze case eternally. In thoughts
+ of the visions of the night, I saw long rows of angels in paradise, each with
+ his hands in a jar of spermaceti.
+\end{quotation}
+\end{filecontents}
+%** includex-test-aux1.tex
+\begin{filecontents}{includex-test-aux1.tex}
+\documentclass{article}
+
+\usepackage{alltt}
+
+\newcommand\preamblecmd
+ {This line is due to the preamble of the included file.}
+
+\tdisable
+\tdisableone{flue}
+\tdisableopt[glue]{shoe}
+\tdisabletwo{blue}{grue}
+
+\begin{document}
+
+\tdisable
+\tdisableone{flue}
+\tdisableopt[glue]{shoe}
+\tdisabletwo{blue}{grue}
+
+\preamblecmd
+
+This file could be compiled on its own.
+
+\begin{alltt}
+Here is yet another quotation from Beckett, this time from \emph{Watt}
+(45--46).
+\end{alltt}
+
+\begin{quotation}
+ The crocuses and the larch turning green every year a week before the others
+ and the pastures red with uneaten sheep's placentas and the long summer days
+ and the new-mown hay and the wood-pigeon in the morning and the cuckoo in the
+ afternoon and the corncrake in the evening and the wasps in the jam and the
+ smell of the gorse and the look of the gorse and the apples falling and the
+ children walking in the dead leaves and the larch turning brown a week before
+ the others and the chestnuts falling and the howling winds and the sea
+ breaking over the pier and the first fires and the hooves on the road and the
+ consumptive postman whistling \emph{The Roses Are Blooming in Picardy} and
+ the standard oil-lamp and of course the snow and to be sure the sleet and
+ bless your heart the slush and every fourth year the February d\`eb\^acle and
+ the endless April showers and the crocuses and then the whole bloody business
+ starting all over again.
+\end{quotation}
+
+Notice, just as one single thing among dozens, that ``crocus''
+sounds like ``croak us.''
+
+\end{document}Error 1 in radical shutdown!
+Error 2 in radical shutdown!
+
+None of this text should ever be set.
+
+\end{filecontents}
+%** includex-test-aux.sty
+\begin{filecontents}{includex-test-aux.sty}
+\renewcommand\autotest {%
+ This text is coming from the definition of $\backslash$\texttt{autotest} that
+ is in the auxiliary file.
+}
+
+\typeout{Autoload file being loaded!}
+
+\newcommand\madbomber {%
+ \emph{I am the mad bomber!}%
+}
+
+\end{filecontents}
+
+%* main document
+
+\documentclass{article}
+\usepackage{includex,compsci}
+
+\begin{document}
+%* Intro
+\def\fileversion{v1}
+\def\filedate{1999/02/26}
+
+\makeatletter
+\def\StripV #1{\E@cdr #1\@nil}
+\makeatother
+
+\date{Version: \StripV\fileversion \qquad Date: \filedate}
+\author{Matt Swift \email{swift@alum.mit.edu}}
+\title{Testing the \package{includex} package}
+\maketitle
+
+\section{New ways to include}
+
+This will take several pages.
+
+First, check that we can |\include| as usual, so the rest of this page should
+be blank, and the Melville quote should be alone on the next page.
+
+\include{includex-test-aux}
+
+This should be on a new page. Now we include the same thing, but it should
+come immediately here because we use |\include*|:
+
+\include*{includex-test-aux}
+
+And this paragraph should immediately follow the Melville. Now, we check
+|\includedoc| and |\includedoc*| in a similar manner. The included file is
+going to use the |alltt| environment. We have loaded the package in the parent
+file. The |\usepackage| command in the included file should be disabled; if
+not, there will be an error when it tries to redefine the environment. Also,
+we disable several commands that will produce an error if they are not. This
+should be the last text on this page.
+
+\newcommand\tdisable{\typeout{Error with \protect\tdisable.}}
+\newcommand\tdisableone[1]{\typeout{Error with \protect\tdisableone.}}
+\newcommand\tdisableopt[2][]{\typeout{Error with \protect\tdisableopt.}}
+\newcommand\tdisabletwo[2]{\typeout{Error with \protect\tdisabletwo.}}
+
+\disable{\let\tdisable\relax}
+\disable{\let\tdisableone\Gobble}
+\disable{\let\tdisableopt\GobbleOM}
+\disable{\let\tdisabletwo\GobbleMM}
+
+\makeatletter
+\newcommand\checkp {%
+ \@ifundefined{preamblecmd} {%
+ \DTypeout{Preamblecmd undefined.}%
+ }{% ELSE
+ \DTypeout{Preamblecmd is: (\preamblecmd).}%
+% \let\preamblecmd\relax
+ }%
+}
+\makeatother
+\checkp
+
+\includedoc{includex-test-aux1}
+
+\checkp
+
+And this should be on a new page. The first line should have said it
+comes from the preamble.
+
+The |\includedoc| family of commands puts the included file into a group. So
+|\preamblecmd| is not defined now.
+
+Now we do the same thing over, but the file should appear immediately.
+
+\includedoc*{includex-test-aux1}
+
+\checkp
+
+And this paragraph should immediately follow the Beckett. Finally, we have to
+check |\includedocskip| and |\includedocskip*|. The difference will be that
+the first line will say it comes from the parent. This should be the last text
+on the page.
+
+\newcommand\preamblecmd {%
+ This def of preamblecmd comes from the parent.
+}
+
+\includedocskip{includex-test-aux1}
+
+\checkp
+This should be on a new page. And once again, the quote should follow
+immediately here:
+
+\includedocskip*{includex-test-aux1}
+
+\checkp
+
+And this text should immediately follow the quote.
+
+%* end
+
+END OF TEST
+
+\end{document}
+
diff --git a/macros/latex/contrib/frankenstein/unsupported/includex.ins b/macros/latex/contrib/frankenstein/unsupported/includex.ins
new file mode 100644
index 0000000000..87907d4bd6
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/includex.ins
@@ -0,0 +1,64 @@
+% includex.ins -- docstrip driver for the includex LaTeX package
+%
+% Copyright (C) 1995-2001 Matthew Swift <swift@alum.mit.edu>
+% Please see the copyright notice in \preamble below.
+
+% This file, when run through TeX or LaTeX, will generate fast loadable files
+% from the .sty, .cls, or .bst files mentioned below.
+
+\input docstrip
+\keepsilent
+
+\preamble
+
+ This program is part of the Frankenstein bundle for LaTeX.
+
+ Copyright (C) 1995-2001 Matthew Swift <swift@alum.mit.edu>
+
+ This file may have one of TWO names, either
+ includex.sty or includex.stq. This
+ LaTeX package will work ONLY if it is called includex.sty
+ and placed in a proper directory. This file should have been
+ distributed to you with a DIFFERENT file (also) called
+ includex.sty which functions identically to this one
+ but contains documentation in comments. This file works faster,
+ but the other should be kept because it contains the documentation
+ for this LaTeX package. Files called README and INSTALL should have
+ also been distributed to you with this file; see them for more
+ information.
+
+ This program is free software; you may redistribute it and/or
+ modify it under the conditions of the LaTeX Project Public
+ License, either version 1.2 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ LaTeX Project Public License for more details.
+
+\endpreamble
+
+\askforoverwritefalse
+
+% This will get changed to either nothing or \nopostamble.
+
+
+\generate{\file{includex.stq}{\from{includex.sty}{}}}
+
+\Msg{}
+\Msg{***********************************************************************}
+\Msg{*}
+\Msg{* The file includex.stq is a faster replacement for the file}
+\Msg{* includex.sty.}
+\Msg{*}
+\Msg{* includex.stq is stripped of comments (documentation) and must be}
+\Msg{* renamed includex.sty and placed where LaTeX can find it}
+\Msg{* before it may be used.}
+\Msg{*}
+\Msg{***********************************************************************}
+\Msg{}
+
+\endbatchfile
diff --git a/macros/latex/contrib/frankenstein/unsupported/includex.pdf b/macros/latex/contrib/frankenstein/unsupported/includex.pdf
new file mode 100644
index 0000000000..e452557a80
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/includex.pdf
Binary files differ
diff --git a/macros/latex/contrib/frankenstein/unsupported/includex.sty b/macros/latex/contrib/frankenstein/unsupported/includex.sty
new file mode 100644
index 0000000000..0d0c58a8f6
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/includex.sty
@@ -0,0 +1,492 @@
+%^^A* legal notices
+% \iffalse
+%
+% This file is part of the Frankenstein bundle, comprising the
+% files listed in the file Manifest.txt. You should have
+% received the complete bundle when you received this file.
+%
+% Copyright 1995-2001 Matt Swift <swift@alum.mit.edu>.
+%
+% This file contains both the code and documentation for the
+% includex LaTeX package. It will work ONLY if it is placed in
+% a proper directory. Files called README, INSTALL,
+% includex.tex includex.ins, and includex.dvi
+% should have also been distributed to you with this file. See
+% README for more information on how to generate a version of
+% this file that will work faster than this one.
+%
+% This program is free software; you may redistribute it and/or
+% modify it under the conditions of the LaTeX Project Public
+% License, either version 1.2 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.
+%
+% This program is distributed in the hope that it will be useful,
+% but without any warranty; without even the implied warranty of
+% merchantability or fitness for a particular purpose. See the
+% LaTeX Project Public License for more details.
+%
+% \fi
+%
+%^^A* checks
+%
+%^^A NOTE: The character table, with two %'s, will get written to all files.
+%% \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 \~}
+%
+% \CheckSum{227}
+%
+% \begin{abstract}
+% Includex allows you to include just the contents of one source file into
+% another, ignoring the text outside the
+% \code{\begin{document}}\lips\code{\end{document}} in the included file.
+%
+% This package is useful but may have problems and is unsupported.
+%
+% See also the \package{newclude} package.
+% \end{abstract}
+% \tableofcontents
+%
+% \part{Discussion}
+% \section{Including Files}
+%
+% \DescribeMacro{\include*}
+% \cs\include was always pretty useless to me because it did a \cs\clearpage
+% before and after the \cs\input. The macro |\include*| is defined below to be
+% like \cs\include but without the \cs\clearpage s.
+%
+% The other thing we do is define a command \cs\includedoc, which includes a
+% file which is allowed to have its own \cs\documentclass and |\begin{document}|
+% and |\end{document}| and \cs\usepackage commands.
+%
+% This opens up a whole new world of truly modular \LaTeX{} files. There is
+% even nothing special about extracting the |document| environment, we can
+% extract \emph{any} environment, or perhaps even other things.
+%
+% There are some problems, however. Maybe the \cs\usepackage is necessary,
+% maybe it would conflict. Same with other commands like the \cs\newcommand
+% family. It is simply not (yet) an issue in \LaTeX{} design to consider the
+% implications of parent files. The problems are not insurmountable. We can
+% begin by working with a convention, and ultimately maybe make some changes in
+% certain macros. I will be getting to all this. I admit I have not looked
+% carefully to see whether the design specifications of \LaTeX3{} address these
+% important issues.
+%
+% The macros here will be useful in many circumstances, when the included files
+% are themselves simple.
+%
+% \DescribeMacro{\includedoc}
+% \DescribeMacro{\includedoc*}
+% \DescribeMacro{\includedocskip}
+% \DescribeMacro{\includedocskip*}
+% There are now two main commands, \cs\includedoc and \cs\includedocskip,
+% each with a |*| version analogous to the new \cmd{include*}. Each take a
+% filename as an argument just like \cs\include.
+%
+% \cs\includedoc\marg{filename} reads everything in the file except for
+% \cs\documentclass, \cs\usepackage, |\begin{document}|, |\end{document}|
+% (and whatever follows it).
+%
+% \cs\includedocskip\marg{filename} does the same except it also skips
+% everything between \cs\documentclass and |\begin{document}|.
+%
+% \DescribeMacro{\disable}
+% At present there is a makeshift way to ignore additional commands when
+% using \cs\includedoc and \cs\includedocskip. If you want to cause \cs\foo
+% which takes no arguments to be disabled, say |\disable{\let\foo\relax}|. If
+% \cs\foo takes one mandatory argument, say |\let\foo\Gobble| instead. If
+% \cs\foo takes one optional and one mandatory, say |\let\foo\GobbleOM|. If
+% \cs\foo takes two mandatory arguments, say |\let\foo\GobbleMM|. For other
+% permutations of arguments, you can extrapolate from the macros defined
+% below.
+%
+% \StopEventually{}
+%
+% \part{Implementation}
+%
+% \section{Version control}
+%
+% \begin{macro}{\fileinfo}
+% \begin{macro}{\DoXUsepackagE}
+% \begin{macro}{\HaveECitationS}
+% \begin{macro}{\fileversion}
+% \begin{macro}{\filedate}
+% \begin{macro}{\docdate}
+% \begin{macro}{\PPOptArg}
+% These definitions must be the first ones in the file.
+% \begin{macrocode}
+\def\fileinfo{extra ways to include files}
+\def\DoXPackageS {}
+\def\fileversion{v0.6a}
+\def\filedate{1999/02/23}
+\def\docdate{1999/02/23}
+\edef\PPOptArg {%
+ \filedate\space \fileversion\space \fileinfo
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% If we're loading this file from a \cs\ProcessDTXFile command (see the
+% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined;
+% othewise we assume it is not (that's why the FunkY NamE).
+%
+% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed
+% in \cs\DoXPackageS (needed to typeset the documentation for this file) and
+% then bail out. Otherwise, we're using this file in a normal way as a
+% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in
+% the \ext{dtx} file, and, if you're reading the typeset documentation of this
+% package, would appear just above. (It's OK to call \cs\usepackage with an
+% empty argument or \cs\relax, by the way.)
+% \begin{macrocode}
+\makeatletter% A special comment to help create bst files. Don't change!
+\@ifundefined{JusTLoaDInformatioN} {%
+ }{% ELSE (we know the compsci package is already loaded, too)
+ \UndefineCS\JusTLoaDInformatioN
+ \SaveDoXVarS
+ \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined
+ \usepackage{#1}%
+ }%
+ \RestoreDoXVarS
+ \makeatother
+ \endinput
+}% A special comment to help create bst files. Don't change!
+% \end{macrocode}
+%
+% Now we check for \LaTeX2e and declare the LaTeX package.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{includex}[\PPOptArg]
+% \end{macrocode}^^A special comment to help create bst files. Don't change!
+%
+% ^^A NOTE: We have to compensate for the above backslashes, which are not
+% ^^A actually in the .dtx file the author works on, by adding to the
+% ^^A CheckSum.
+%%
+% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this.
+% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however...
+% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file
+% ^^A that precede it.
+% \IfCitations {%
+% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in
+% } ^^A the .dtx file, we need 2 more in the CheckSum.
+%
+%
+% \section{Requirements}
+%
+% Now we declare the package, check for \LaTeX2e, and load the other packages
+% needed.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{includex}
+\RequirePackage{moredefs}
+% \end{macrocode}
+%
+% \section{Disabling things}
+%
+% \begin{macro}{\disable}
+% This allows the disabling hacks.
+% \begin{macrocode}
+\ReserveCS\DisableMonster % This line is elsewhere for main package
+\newcommand\disable[1] {%
+ \g@addto@macro\DisableMonster{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{New things}
+%
+% \begin{macro}{\sc@saved@include}
+% \begin{macro}{\include}
+% \begin{macro}{\sc@include}
+% \begin{macro}{\sc@@include}
+% This is a simple redefinition of \cs\include without the \cs\clearpage
+% commands. Nothing tricky going on.
+% \begin{macrocode}
+\newlet\sc@saved@include\include
+\renewcommand\include {%
+ \@ifstar
+ \sc@include
+ \sc@saved@include
+}
+\newcommand\sc@include {%
+ \relax
+ \ifnum\@auxout=\@partaux
+ \@latex@error{\string\include\space cannot be nested}\@eha
+ \else
+ \expandafter\sc@@include
+ \fi
+}
+\newcommand\sc@@include[1] {%
+ \if@filesw
+ \immediate\write\@mainaux{\string\@input{#1.aux}}%
+ \fi
+ \@tempswatrue
+ \if@partsw
+ \@tempswafalse
+ \edef\@tempb{#1}%
+ \@for \@tempa:=\@partlist
+ \do{\ifx\@tempa
+ \@tempb
+ \@tempswatrue
+ \fi}%
+ \fi
+ \if@tempswa
+ \let\@auxout\@partaux
+ \if@filesw
+ \immediate\openout\@partaux #1.aux%
+ \immediate\write\@partaux{\relax}%
+ \fi
+ \@input@{#1.tex}%
+ \@writeckpt{#1}%
+ \if@filesw
+% NOTE: Robin took out the \immediate here.
+% \immediate\closeout\@partaux
+ \closeout\@partaux
+ \fi
+ \else
+ \@nameuse{cp@#1}%
+ \fi
+ \let\@auxout\@mainaux
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Now we start dealing with the much more tricky extraction of the |document|
+% environment.
+%
+% We start with considering how to quit inputting a file. The idea is to make
+% the |\end{document}| command of the included file call \cs\endinput. But
+% there is a hitch that characters on the line after the |\end{document}| get
+% inserted when you don't want them to. To beat that limitation, we have to do
+% some work.
+%
+% \begin{macro}{\sc@radical@shutdown}
+% We will add a bunch of commands to this macro, with the idea of \cs\catcode ing
+% everything and its brother to a comment. This would be a brute force
+% method!
+% \begin{macrocode}
+\ReserveCS\sc@radical@shutdown
+% \end{macrocode}
+% First log a message that we're about to do some crazy things. In case
+% something ever goes wrong, this might help.
+% \begin{macrocode}
+\addto@macro\sc@radical@shutdown {%
+ \PackageInfo{includex}{\protect\sc@radical@shutdown\space beginning}%
+}
+% \end{macrocode}
+% Now we start adding \cs\catcode commands. These first two should be
+% redundant; but just in case someone changed things\lips.
+% \begin{macrocode}
+\addto@macro\sc@radical@shutdown{\catcode`\%=14} % 14 = comment
+\addto@macro\sc@radical@shutdown{\catcode`\^=7} % 7 = superscript
+% \end{macrocode}
+% \begin{macro}{\sc@disable@char}
+% Next, we define a command we weill use in a loop in a moment.
+% \begin{macrocode}
+\newcommand\sc@disable@char[1] {%
+ \addto@macro\sc@radical@shutdown
+ {\catcode`#1=14}} % 14 = comment
+% \end{macrocode}
+% \end{macro}
+% The following list contains every keyboard char except these three, which are
+% treated specially: |%#|.
+% The first is already a comment, and we handle the second in a moment. Each
+% character in the following list is \cs\catcode d to a comment:
+% \begin{macrocode}
+\@tfor\sc@t@a:=abcdefghijklmnopqrstuvwxyz%
+ ABCDEFGHIJKLMNOPQRSTUVWXYZ%
+ ~!@$&*()_+-=[]|/?.,<>%
+ 1234567890%
+ `'";:%
+ \^\\\{\}\ % this is really the chars "^\{}" and space
+ \do {\expandafter\sc@disable@char\sc@t@a}
+% \end{macrocode}
+% We add |#| separately, because it's tricky or impossible to put it into the
+% list we just used.
+% \begin{macrocode}
+\sc@disable@char\#
+% \end{macrocode}
+% We end the macro with \cs\endinput. This has to come after all the previous,
+% otherwise, \TeX{} goes ahead and reads to the end of the line immediately,
+% with regular catcodes. This is a good theory, I'm not sure it's necessary.
+% \begin{macrocode}
+\addto@macro\sc@radical@shutdown{\endinput}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sc@radical@shutdown@aftergroup}
+% We need to use |\sc@radical@shutdown| this way.
+% \begin{macrocode}
+\newcommand\sc@radical@shutdown@aftergroup {%
+ \aftergroup\sc@radical@shutdown
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sc@begindoc@toks}
+% \begin{macro}{\sc@enddoc@toks}
+% These are for \cs\AtBeginIncludedDocument and \cs\AtEndIncludedDocument.
+% \begin{macrocode}
+\newtoks\sc@begindoc@toks
+\sc@begindoc@toks{}
+\newtoks\sc@enddoc@toks
+\sc@enddoc@toks{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\AtBeginIncludedDocument}
+% The analogue of \cs\AtBeginDocument.
+% \begin{macrocode}
+\newcommand\AtBeginIncludedDocument[1] {%
+ \sc@begindoc@toks\expandafter{\the\sc@begindoc@toks#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AtEndIncludedDocument}
+% The analogue of \cs\AtEndDocument
+% \begin{macrocode}
+\newcommand\AtEndIncludedDocument[1] {%
+ \sc@enddoc@toks\expandafter{\the\sc@enddoc@toks#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\includedoc}
+% \begin{macro}{\includedoc*}
+% Now we start from the other end, defining the user command.
+% \begin{macrocode}
+\newcommand\includedoc {%
+% Robin's new:
+ \@ifstar {%
+ \def\sc@includebit@cmd{\include*}\sc@includebit
+ }{% ELSE
+ \let\sc@includebit@cmd\include\sc@includebit
+ }%
+}
+
+% My old:
+% {\sc@includebit}
+% {\clearpage
+% \sc@includebit[\clearpage]}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sc@includebit}
+% The commented-out code is for some eventual extensions.
+%
+% Interface is \cmd{sc@includebit}\oarg{postlude}\marg{file} (where
+% \oarg{postlude} is command(s) to be executed after the inclusion is
+% complete); it is assumed that \cmd{sc@includebit@cmd} is either \cs\include
+% or \cmd{include*}
+% \begin{macrocode}
+\newcounter{sc@count}
+\newcounter{bit}
+\newcommand\sc@includebit [2] [] {%
+ \setcounter{sc@count}{\thebit}%
+ \begingroup
+ \DisableMonster
+ \let\usepackage\GobbleOM
+% Robin's new:
+ \def\enddocument {%
+ \makeatletter
+ \the\sc@enddoc@toks
+ \sc@radical@shutdown@aftergroup
+ }
+% My old:
+% \let\enddocument\sc@radical@shutdown@aftergroup
+ \let\documentclass\GobbleOM
+ \let\documentstyle\GobbleOM % why worry about branching if 2.09..
+ \def\document {%
+ \the\sc@begindoc@toks
+ }%
+ \def\IncludedJobname {#2}%
+ \sc@includebit@cmd{#2}%
+ \endgroup
+ \par
+ #1
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\includedocskip}
+% \begin{macro}{\includedocskip*}
+% Now we make a similar command that \emph{entirely} skips the preamble,
+% whereas \cs\includedoc only skipped those commands that we specifically
+% disabled. Obviously this whole business of the preamble needs to be
+% radically reconceived if convenient modularity of documents is to be had. At
+% the moment, no distinction is made between things like \cs\newcommand and
+% \cs\usepackage that should be exported to a parent file, and those things that
+% should not.
+% \begin{macrocode}
+\newcommand\includedocskip {%
+ \@ifstar {%
+ \sc@includebitskip
+ }{% ELSE
+ \clearpage
+ \sc@includebitskip[\clearpage]%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% I tried combining |\sc@includebitskip| and |\sc@includebit| but something
+% changed when I used a conditional to do this. I'm sure the problem could be
+% figured out and the two combined.
+%
+% \begin{macro}{\sc@includebitskip}
+% We begin skipping with the \cs\documentclass or \cs\documentstyle command, and
+% stop with the |\begin{document}| command. With some hacking to the new
+% |verbatim| environment, this could be done. I haven't done this yet, so this
+% is implemented by stuffing everything into a macro argument. I can't think
+% of a \cs\begin occurring between \cs\documentclass the \cs\begin document, but
+% that will screw things up if it does.
+%
+% The commented lines here are once again for a future extension.
+% \begin{macrocode}
+\newcommand\sc@includebitskip [2] [] {%
+ \setcounter{sc@count}{\thebit}%
+ \begingroup
+ \DisableMonster
+ \let\enddocument\sc@radical@shutdown@aftergroup
+ \long\def\documentclass ##1\begin{%
+ \begingroup
+ \def\@currenvir{document}%
+ \GobbleM
+ }% "{document}" is still to be read.
+ \let\documentstyle\documentclass
+ \include*{#2}%
+ \endgroup
+ \par
+ #1\relax
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale
diff --git a/macros/latex/contrib/frankenstein/unsupported/includex.tex b/macros/latex/contrib/frankenstein/unsupported/includex.tex
new file mode 100644
index 0000000000..b2072b0808
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/unsupported/includex.tex
@@ -0,0 +1,67 @@
+% includex.tex -- documentation for the includex LaTeX package.
+%
+% This program is part of the Frankenstein bundle for LaTeX2e.
+%
+% Copyright (C) 1995-2001 Matt Swift <swift@alum.mit.edu>
+%
+% This program is free software; you may redistribute it and/or
+% modify it under the conditions of the LaTeX Project Public
+% License, either version 1.2 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.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% LaTeX Project Public License for more details.
+%
+\documentclass{ltxdoc}
+\makeatletter
+\def\part {%
+ \clearpage
+ \@afterindentfalse
+ \secdef\@part\@spart
+}
+\def\StripV #1{\E@cdr #1\@nil}
+\makeatother
+\usepackage{attrib,compsci}
+\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual]
+\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing}
+ [The MLA Style Manual]
+\newtheorem{lessoninternal}{Lesson}
+\newenvironment{lesson} {%
+ \let\AttribInit\sffamily
+ \let\PreTrib\textsection
+ \let\PostTrib\ShortEmpty
+ \lessoninternal
+ } {%
+ \endlessoninternal
+ }
+\newcommand\manualref [1] {\textsf{\S #1}}
+\ProcessDTXFile{includex.sty}
+\newlet\MaybeABib\relax
+\IfCitations {
+ \def\MaybeABib {%
+ \newpage
+ \bibliographystyle{achicago}%
+ \bibliography{frankenstein}%
+ }
+ \SaveDoXVarS
+ \usepackage{achicago}
+ \RestoreDoXVarS
+}
+\CodelineIndex
+\EnableCrossrefs
+\begin{document}
+\date{Version: \StripV\fileversion \qquad Date: \filedate\\
+ \relsize{-2}Documentation revision: \docdate}
+\author{Matt Swift \email{swift@alum.mit.edu}}
+\title{The \textsf{includex} LaTeX package \\\smaller \fileinfo}
+\maketitle
+\DocInput{includex.sty}
+\MaybeABib
+\newpage
+\PrintIndex
+\end{document}