summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/frankenstein/unsupported/bits.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/frankenstein/unsupported/bits.sty')
-rw-r--r--Master/texmf-dist/doc/latex/frankenstein/unsupported/bits.sty1070
1 files changed, 1070 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/frankenstein/unsupported/bits.sty b/Master/texmf-dist/doc/latex/frankenstein/unsupported/bits.sty
new file mode 100644
index 00000000000..630fa00409c
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/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