diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/frankenstein/unsupported/bits.sty')
-rw-r--r-- | Master/texmf-dist/doc/latex/frankenstein/unsupported/bits.sty | 1070 |
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 |