summaryrefslogtreecommitdiff
path: root/macros/plain/formats/lollipop/doc/manual/btxmac.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/plain/formats/lollipop/doc/manual/btxmac.tex')
-rw-r--r--macros/plain/formats/lollipop/doc/manual/btxmac.tex812
1 files changed, 812 insertions, 0 deletions
diff --git a/macros/plain/formats/lollipop/doc/manual/btxmac.tex b/macros/plain/formats/lollipop/doc/manual/btxmac.tex
new file mode 100644
index 0000000000..3093ed1a83
--- /dev/null
+++ b/macros/plain/formats/lollipop/doc/manual/btxmac.tex
@@ -0,0 +1,812 @@
+%% @texfile{
+%% author = "Karl Berry and Oren Patashnik",
+%% version = "0.99h",
+%% date = "24 Apr 1991",
+%% filename = "btxmac.tex",
+%% address = "Please use electronic mail",
+%% checksum = "812 4053 30557",
+%% email = "opbibtex@neon.stanford.edu",
+%% codetable = "ISO/ASCII",
+%% supported = "yes",
+%% docstring = "Defines macros that make BibTeX work with plain TeX",
+%% }
+% BibTeX-for-TeX macros, version 0.99h, for BibTeX 0.99c, TeX 3.0 or later.
+% Copyright (C) 1990--91 by Karl Berry and Oren Patashnik; all rights reserved.
+% You may copy this file provided: that it's accompanied by the
+% "BibTeXing" document, whose text is contained in the file `btxdoc.tex';
+% that any documentation you write for these macros also gives a
+% reference for "BibTeXing"; and that either you make absolutely no
+% changes to your copy, or if you do make changes, (1) you name the file
+% something other than `btxmac.tex' and you remove all occurrences of
+% `btxmac.tex' from the file, (2) you put, somewhere in the first twenty
+% lines of the file, your name, along with an electronic address at which
+% others who might use the file may reach you, and (3) you remove each
+% occurrence of Oren's name and electronic address from this file. These
+% restrictions help ensure that all standard versions of these macros are
+% identical, and that Oren doesn't get deluged with inappropriate e-mail.
+%
+% This file, btxmac.tex, contains TeX macros that allow BibTeX, a
+% bibliography program that was originally designed for use with LaTeX,
+% to work with plain TeX. Please report any bugs (outright goofs,
+% improvable macros, misfeatures, or unclear documentation) to Oren
+% Patashnik (opbibtex@neon.stanford.edu). These macros will become
+% frozen shortly after BibTeX version 1.00 is released.
+%
+% To use these macros you should be familiar with how BibTeX interacts
+% with LaTeX, since BibTeX's interaction with TeX is very similar; that
+% interaction is explained in the LaTeX manual. It also helps to
+% have read "BibTeXing", the documentation that accompanies BibTeX.
+% Then, if you want, you should redefine any of the macros that begin
+% with `\bbl' or `\biblabel' or `\print' that you need to get formatting
+% different from the default (the default settings are designed to
+% accompany a bibliography style like BibTeX's standard style `plain').
+% The macros you might want to change are described briefly a few
+% paragraphs hence. Finally, as long as you follow the guidelines given
+% by the LaTeX manual and "BibTeXing", you simply \input btxmac.
+% [Remember the general scheme: Running (La)TeX writes information on
+% the .aux (auxiliary) file; then running BibTeX reads information from
+% the .aux, .bst (style), and .bib (database) files, and writes
+% information (the bibliography) on a .bbl file; then running (La)TeX
+% incorporates the bibliography; then running (La)TeX once more fixes
+% the remaining forward references into the bibliography. Thus, to get
+% everything incorporated into your output, you'll have to run (La)TeX,
+% BibTeX, (La)TeX, (La)TeX. (Standup, sitdown, fight, fight, fight.)]
+%
+% These macros can stand alone or they can be \input into macro packages
+% like Eplain. If you want to try out these macros on the 0.99 version
+% of the xampl.bib file that's distributed with BibTeX (that version of
+% the file has no self-identification), you'll need to define \mbox,
+% which is a LaTeX command, to be \hbox.
+%
+%
+% HISTORY
+%
+% Karl Berry wrote the original version of these macros in 1989 and
+% 1990, for use in his `Eplain' package. Oren Patashnik modified them
+% slightly in July 1990, as part of the official BibTeX distribution.
+%
+% 1-Aug-90 Version 0.99a, not released to the general public.
+% 14-Aug-90 0.99b, first general release.
+% 26-Aug-90 0.99c, made \@undefinedmessage work with other macro packages.
+% 6-Sep-90 0.99d, allowed for general formatting of bibliography labels,
+% for general formatting of (in-text) citations, and for
+% changing certain catcodes while reading the .aux file.
+% 14-Nov-90 0.99e, changed the way \@setletters works, made some \new...'s
+% non-outer, and changed the way Eplain reads this file.
+% 12-Dec-90 0.99f, made \@resetnumerals change the `,' and `.' catcodes; and
+% added \biblabelextrahang, \@getoptionalarg, and \bblsc.
+% 11-Mar-91 0.99g, made a few minor changes required by the way Eplain reads
+% this file, but no functional changes.
+% 24-Apr-91 0.99h, inhibited the reading and writing of the .aux file if it
+% isn't used or if the \noauxfile macro is defined, and
+% removed some .aux-file-opening detritus; printed the
+% cite-key of undefined citations in \tt font; changed the
+% catcode of `_' inside \cite; and called \@resetnumerals
+% from inside a group.
+%
+%
+% The LaTeX-related commands defined in this file include (a) the four
+% commands that a user types (\bibliography, \bibliographystyle, \cite,
+% and \nocite); (b) the three commands that BibTeX looks for in the .aux
+% file (\bibdata, \bibstyle, and \citation---there is a fourth command
+% that BibTeX looks for, but that command is related to LaTeX's \include
+% facility, so these macros ignore that command); and (c) a LaTeX
+% command (\newcommand) that's written by one of the four standard
+% bibliography styles (alpha). The definitions here are not exactly the
+% same as the corresponding LaTeX definitions (those eight LaTeX
+% definitions depend on a significant fraction of LaTeX itself). But
+% the only substantial differences are with \newcommand, which here,
+% without complaining, lets you redefine a preexisting control sequence
+% (in LaTeX, \newcommand won't let you redefine a preexisting command),
+% and which here doesn't make the control sequences it defines \long (in
+% LaTeX, that happens automatically); there may also be other minor
+% differences. To summarize: Unless you know what you're doing, you
+% shouldn't define any control sequences with these eight names:
+%
+% \bibdata
+% \bibliography
+% \bibliographystyle
+% \bibstyle
+% \citation
+% \cite
+% \newcommand
+% \nocite
+%
+% There are three other commands written by one or more of the four
+% standard (plain, abbrv, alpha, unsrt) or four semistandard (acm,
+% apalike, ieeetr, siam) bibliography styles; they take effect only
+% within the bibliography, and are redefinable, as explained later:
+%
+% \em
+% \newblock
+% \sc
+%
+% There's one control sequence you might want to use (but not redefine)
+% in redefining \biblabelprint:
+%
+% \biblabelwidth
+%
+% There are twelve other control sequences (explained later in more detail)
+% that the macros of this file will use if you define them---you should
+% define them after the \input btxmac command but before the \bibliography
+% command. The first five begin with `\bbl' and affect fonts, spacing,
+% and perhaps other characteristics of the bibliography; the next three
+% begin with `\biblabel' and determine how labels are formatted in the
+% bibliography; and the last four begin with `\print' and determine how
+% the in-text citations are formatted:
+%
+% \bblem
+% \bblhook
+% \bblnewblock
+% \bblrm
+% \bblsc
+% \biblabelcontents
+% \biblabelextrahang
+% \biblabelprint
+% \printbetweencitations
+% \printcitefinish
+% \printcitenote
+% \printcitestart
+%
+% If it's defined before the \input btxmac command, the control sequence
+% below inhibits the reading and writing of the .aux file(s), and the
+% issuing of related warning messages. Any definition will do. This
+% feature might help when you're working on draft stages of a document:
+%
+% \noauxfile
+%
+% Here's another control sequence (it's described later), with an `@'
+% in its name, that you probably won't want to redefine unless you are
+% writing another macro package; if you do redefine it, however, do it
+% before the \input btxmac command:
+%
+% \@undefinedmessage
+%
+% And here are still more control sequences that, should you already have
+% them defined, might conflict with the way the btxmac.tex macros use them
+% (but since each of these has an `@' in its name, it's unlikely that such
+% conflicts will arise unless you intend them):
+%
+% \@auxfile \@auxfiledonefalse \@auxfiledonetrue
+% \@bracketcheck \@citation \@cite
+% \@citedef \@citelabel \@citewarningfalse
+% \@citewarningtrue \@commandname \@continuenewcommand
+% \@emptymarkA \@emptymarkB \@fileexistsfalse
+% \@fileexiststrue \@finishcitedef \@finishtestfileexistence
+% \@for \@forloop \@fornoop
+% \@fortmp \@getoptionalarg \@@getoptionalarg
+% \@gobble \@if@auxfiledone \if@citewarning
+% \@ifempty \@@ifempty \if@fileexists
+% \if@notfirstcitation \@iforloop \@innerdef
+% \@innernewcount \@innernewdimen \@innernewif
+% \@innernewwrite \@itemnum \@letter
+% \@linenumber \@newcommandwithargs \@newcommand
+% \@next \@nextwhile \@nil
+% \@nnil \@notfirstcitationfalse \@notfirstcitationtrue
+% \@numparams \@oldatcatcode \@onecitation
+% \@optionalarg \@other \@paramdef
+% \@readauxfile \@readbblfile \@resetnumerals
+% \@scfont \@setletters \@spacesub
+% \@startdef \@testfileexistence \@tokstostring
+% \@ttsA \@ttsB \@ttsmarkA
+% \@ttsmarkB \@undefined \@writeaux
+%
+%
+% So to start things off we turn `@' into a letter (category code 11),
+% keeping track of the old category code for future restoration.
+% (Simply resetting it to 12 when we leave these macros is
+% insufficient.) The use of `\cite' as a temporary control sequence is
+% a kludge, but it's a reasonably simple way to accomplish what we need
+% without possibly overwriting something (without an `@' in its name)
+% that might already be defined.
+%
+\edef\cite{\the\catcode`@}%
+\catcode`@ = 11
+\let\@oldatcatcode = \cite
+\chardef\@letter = 11
+\chardef\@other = 12
+%
+%
+% Next come some things that will be useful later.
+%
+% Make an outer definition into an inner one (due to Chris Thompson).
+% The arguments should be the control sequence to be defined, and the
+% new of the \outer control sequence, as characters; the control
+% sequence #1 is defined to be just the same as \csname#2\endcsname, but
+% not \outer. For example, \@innerdef\innernewcount{newcount} would
+% define \innernewcount to be a non-outer version of \newcount.
+%
+\def\@innerdef#1#2{\edef#1{\expandafter\noexpand\csname #2\endcsname}}%
+%
+% We use \@innerdef to make some of our allocations local, because
+% Eplain includes our code inside a conditional. We put @'s in the
+% names to minimize the (already small) chance of conflicts.
+%
+\@innerdef\@innernewcount{newcount}%
+\@innerdef\@innernewdimen{newdimen}%
+\@innerdef\@innernewif{newif}%
+\@innerdef\@innernewwrite{newwrite}%
+%
+%
+% Swallow one parameter.
+%
+\def\@gobble#1{}%
+%
+%
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\@undefined
+ \let\@linenumber = \empty % Pre-3.0.
+\else
+ \def\@linenumber{\the\inputlineno:\space}%
+\fi
+%
+%
+% \@getoptionalarg\CS gets an optional argument from the input, enclosed
+% in brackets, then expands \CS. We set \@optionalarg to \empty if we
+% don't find one, otherwise to the text of the argument. This assumes
+% the brackets don't have a funny category code.
+%
+\def\@getoptionalarg#1{\let\temp = #1\futurelet\next\@bracketcheck}%
+\def\@bracketcheck{\begingroup
+ \if [\next
+ \aftergroup\@@getoptionalarg
+ \else
+ \global\let\@optionalarg = \empty
+ %
+ % We can't do the \aftergroup\temp after the \fi, because then the
+ % \temp gets in the way of reading the optional argument from the
+ % input, if we do have one.
+ \aftergroup\temp
+ \fi
+\endgroup}%
+%
+\def\@@getoptionalarg[#1]{%
+ \def\@optionalarg{#1}%
+ \temp
+}%
+%
+%
+% \@tokstostring converts its argument into a list of character tokens.
+% It uses no commands that are executed in the stomach, only expansions
+% handled in the gullet. (This is necessary for use with \edef).
+%
+% Control sequences in the argument are not expanded. Blanks become a
+% \spacesub. The argument shouldn't contain other special characters.
+%
+\def\@tokstostring#1{\@ttsA#1 \@ttsmarkA}%
+%
+% \@ttsA partitions a sequence of tokens into portions delimited by blanks.
+%
+\def\@ttsA#1 #2\@ttsmarkA{%
+ \@ifempty{#1}\else
+ \@ttsB #1\@ttsmarkB
+ %
+ \@ifempty{#2}\else
+ \@spacesub\@ttsA#2\@ttsmarkA
+ \fi
+ \fi
+}%
+%
+% \@ttsB processes a sequence of tokens with no contained blanks.
+%
+\def\@ttsB#1{%
+ \ifx #1\@ttsmarkB\else
+ \string #1%
+ \expandafter\@ttsB
+ \fi
+}%
+%
+% This is just so \ifx won't complain about an undefined control sequence.
+%
+\def\@ttsmarkB{\@ttsmarkB}% should never be expanded
+%
+% The expansion of this macro replaces spaces.
+%
+\def\@spacesub{+}%
+%
+%
+% \@ifempty tests if it is given an argument.
+%
+\def\@ifempty#1{\@@ifempty #1\@emptymarkA\@emptymarkB}%
+\def\@@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
+%
+\def\@emptymarkA{\@emptymarkA}% Again, so \ifx won't complain.
+%
+%
+% From LaTeX.
+%
+\def\@nnil{\@nil}%
+\def\@fornoop#1\@@#2#3{}%
+%
+\def\@for#1:=#2\do#3{%
+ \edef\@fortmp{#2}%
+ \ifx\@fortmp\empty \else
+ \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}%
+ \fi
+}%
+%
+\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi
+}%
+%
+\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@fornoop \else
+ #4\relax\let\@nextwhile=\@iforloop\fi\@nextwhile#2\@@#3{#4}%
+}%
+%
+%
+% This macro tests if a file \jobname.#1 exists, and sets
+% \if@fileexists appropriately. If an optional argument is given, it is
+% used as the root part of the filename instead of \jobname.
+%
+\@innernewif\if@fileexists
+%
+\def\@testfileexistence{\@getoptionalarg\@finishtestfileexistence}%
+\def\@finishtestfileexistence#1{%
+ \begingroup
+ \def\extension{#1}%
+ \immediate\openin0 =
+ \ifx\@optionalarg\empty\jobname\else\@optionalarg\fi
+ \ifx\extension\empty \else .#1\fi
+ \space
+ \ifeof 0
+ \global\@fileexistsfalse
+ \else
+ \global\@fileexiststrue
+ \fi
+ \immediate\closein0
+ \endgroup
+}%
+%
+%
+%% [[[start of BibTeX-specific stuff]]]
+%
+% Now come the four main LaTeX commands and their associated .aux
+% commands. Just as in LaTeX, \bibliographystyle defines the BibTeX
+% style name (.bst file, that is), and \bibliography defines the
+% database (.bib) file(s). The corresponding .aux-file commands are
+% \bibstyle and \bibdata, which are there only for BibTeX's (but not
+% LaTeX's) use.
+%
+\def\bibliographystyle#1{%
+ \@readauxfile
+ \@writeaux{\string\bibstyle{#1}}%
+}%
+\let\bibstyle = \@gobble
+%
+% As well as writing the \bibdata command to tell BibTeX
+% which .bib files to read, we read the .bbl file that
+% BibTeX (or a person, conceivably) has produced.
+%
+\def\bibliography#1{%
+ \@readauxfile
+ \@writeaux{\string\bibdata{#1}}%
+ \@testfileexistence{bbl}%
+ \if@fileexists
+ \@readbblfile
+ \fi
+}%
+\let\bibdata = \@gobble
+%
+% The \nocite{label,label,...} command writes its argument to \@auxfile,
+% unless instructed not to, but produces no text in the document. Both
+% the \nocite and \cite commands produce \citation commands in the .aux file.
+%
+\def\nocite#1{%
+ \@readauxfile
+ \@writeaux{\string\citation{#1}}%
+}%
+%
+\@innernewif\if@notfirstcitation
+%
+% \cite[note]{label,label,...} produces the citations for the labels as
+% well. If the optional argument `note' is present, it's added after
+% the labels. Since \cite calls \nocite before doing any writing, it
+% doesn't need to call \@readauxfile. We change the category code of
+% `_' so that the dummy definition given to the citation label doesn't
+% include a subcript character; that would cause TeX to complain.
+%
+\def\cite{\begingroup\catcode`_ = \@letter \@getoptionalarg\@cite}%
+%
+% Typeset the citations for the labels in #1, followed by the note, if
+% it exists. To change the citation's format in the text, redefine one
+% or more `\print...' macros, whose defaults appear later in this file.
+%
+\def\@cite#1{%
+ \nocite{#1}%
+ % Start printing the text, beginning with a left bracket by default.
+ %
+ \printcitestart
+ \@notfirstcitationfalse
+ \@for \@citation :=#1\do
+ {%
+ \expandafter\@onecitation\@citation\@@
+ }%
+ \ifx\empty\@optionalarg\else
+ \printcitenote{\@optionalarg}%
+ \fi
+ \printcitefinish
+ \endgroup
+}%
+%
+\def\@onecitation#1\@@{%
+ \if@notfirstcitation
+ \printbetweencitations
+ \fi
+ %
+ \expandafter \ifx \csname\@citelabel{#1}\endcsname \relax
+ \if@citewarning
+ \message{\@linenumber Undefined citation `#1'.}%
+ \fi
+ % Give it a dummy definition:
+ \expandafter\gdef\csname\@citelabel{#1}\endcsname{%
+ {\tt \nobreak\hskip0pt#1\nobreak\hskip0pt}}%
+ \fi
+ % Now produce the text, whether it was undefined or not.
+ \csname\@citelabel{#1}\endcsname
+ \@notfirstcitationtrue
+}%
+%
+% Given a label `foo', the macro `\b@foo' is supposed to
+% hold the text that should be produced.
+%
+\def\@citelabel#1{\@tokstostring{b@#1}}%
+%
+% So, how does a citation label get defined? When we read the .bbl file
+% (below), a \bibitem writes out a \@citedef command. And when we read
+% the \@citedef, we define \@citelabel{#1}, where #1 is the user's
+% label. But we have to be careful when reading the \@citedef, because
+% the second argument might have accents or other commands with numbers
+% as arguments. We have given the numerals category code 11 for reading
+% the .aux file, and that prevents them from being recognized as TeX
+% <number>s. Similarly for the other characters that can be part of a
+% <number>. So we have to reset the category codes before reading the
+% second argument. We also have to reset them back to letters when we
+% finish reading the \@citedef's, because there might be more labels
+% with numerals in them defined afterwards in the .aux file, put there
+% by Eplain or whatever.
+%
+\def\@citedef#1{%
+ \begingroup
+ \@resetnumerals
+ \@finishcitedef{#1}%
+}%
+\def\@finishcitedef#1#2{%
+ \expandafter\gdef\csname\@citelabel{#1}\endcsname{#2}%
+ \endgroup
+}%
+\def\@resetnumerals{%
+ \catcode`0 = \@other \catcode`1 = \@other \catcode`2 = \@other
+ \catcode`3 = \@other \catcode`4 = \@other \catcode`5 = \@other
+ \catcode`6 = \@other \catcode`7 = \@other \catcode`8 = \@other
+ \catcode`9 = \@other \catcode`" = \@other \catcode`' = \@other
+ \catcode`` = \@other \catcode`, = \@other \catcode`. = \@other
+}%
+%
+%
+% Reading the .bbl file also produces the typeset bibliography. Please
+% notice, however, that we do not produce the title for the references
+% (e.g., `References'), as LaTeX does. The formatting and spacing of
+% that title, whether it should go into the headline, and so on, are all
+% things determined by your format. We cannot know those things in
+% advance. If you wish, you can define \bblhook to produce the title.
+% Or just do it before the \bibliography command.
+%
+\def\@readbblfile{%
+ % Define a counter to tell us which item number we are on.
+ \@innernewcount\@itemnum
+ %
+ \begingroup
+ \def\begin##1##2{%
+ % ##1 is just `thebibliography'.
+ % ##2 is the widest label.
+ % We set (new dimen) \biblabelwidth based on the widest label
+ \setbox0 = \hbox{\biblabelcontents{##2}}%
+ \biblabelwidth = \wd0
+ }%
+ \def\end##1{}% ##1 is `thebibliography' again.
+ %
+ % Here we have two possibilities:
+ % \bibitem[typesetlabel]{citationlabel}
+ % \bibitem{citationlabel}
+ % If we have the second of these, the citations are numbered, starting
+ % from one; we use our own count register \@itemnum for this.
+ %
+ \@itemnum = 0
+ \def\bibitem{\futurelet\next\@bibitem}%
+ \def\@bibitem{%
+ \begingroup \if [\next
+ \aftergroup\@alphabibitem
+ \else
+ \aftergroup\@numberedbibitem
+ \fi \endgroup
+ }%
+ \def\@alphabibitem[##1]##2{%
+ % Need \xdef here for various reasons.
+ \expandafter \xdef\csname\@citelabel{##2}\endcsname {##1}%
+ \@finishbibitem{##2}%
+ }%
+ %
+ \def\@numberedbibitem##1{%
+ \advance\@itemnum by 1
+ \expandafter \xdef\csname\@citelabel{##1}\endcsname{\number\@itemnum}%
+ \@finishbibitem{##1}%
+ }%
+ %
+ \def\@finishbibitem##1{%
+ \biblabelprint{\csname\@citelabel{##1}\endcsname}%
+ \@writeaux{\string\@citedef{##1}{\csname\@citelabel{##1}\endcsname}}%
+ \ignorespaces
+ }%
+ %
+ % Do the printing (we're producing the bibliography, remember).
+ %
+ \let\em = \bblem
+ \let\newblock = \bblnewblock
+ \let\sc = \bblsc
+ % Punctuation won't affect spacing;
+ \frenchspacing
+ % the penalties below are from LaTeX's [article,book,report].sty;
+ \clubpenalty = 4000 \widowpenalty = 4000
+ % the next two values come from LaTeX's \sloppy command;
+ \tolerance = 10000 \hfuzz = .5pt
+ \everypar = {\hangindent = \biblabelwidth
+ \advance\hangindent by \biblabelextrahang}%
+ \bblrm
+ % the \parskip is a guess at what looks good;
+ \parskip = 1.5ex plus .5ex minus .5ex
+ % and the .5em matches the \enspace of \biblabelprint below.
+ \biblabelextrahang = .5em
+ \bblhook
+ %
+ \input \jobname.bbl
+ \endgroup
+}%
+%
+% The widest label's width is useful for redefining \biblabelprint; you
+% redefine \biblabelwidth, in effect, by redefining the
+% \biblabelcontents macro that appears below. And \biblabelextrahang,
+% which is redefinable inside \bblhook, is added to \biblabelwidth to
+% determine the amount of hanging indentation.
+%
+\@innernewdimen\biblabelwidth
+\@innernewdimen\biblabelextrahang
+%
+% Now come the main macros that are related to the printing of the
+% bibliography. Since you might want to redefine them, they are given
+% default definitions outside of \@readbblfile.
+%
+% The first one controls the printing of a bibliography entry's label.
+% If you change it, make sure that it starts with something like
+% \noindent or \indent that puts TeX into horizontal mode (even if the
+% label itself is empty); otherwise, the hanging indentation will get
+% messed up in certain circumstances.
+%
+\def\biblabelprint#1{%
+ \noindent\hbox to \biblabelwidth{\biblabelcontents{#1}\hss}\enspace}%
+%
+% By default the labels are typeset in \bblrm, and enclosed in brackets.
+%
+\def\biblabelcontents#1{\bblrm [#1]}%
+%
+% The main text, too, is typeset using \bblrm, which is \rm by default.
+%
+\def\bblrm{\rm}%
+%
+% Emphasis for producing, e.g., titles, is done with \it by default.
+%
+\def\bblem{\it}%
+%
+% Some styles use a caps-and-small-caps font for author names. LaTeX
+% defines an \sc command but plain TeX doesn't, so we need one here.
+% The definition below doesn't load the font unless it's needed, but it
+% tries to load only the 10pt version, because it might not exist at
+% other point sizes.
+%
+\def\bblsc{\ifx\@scfont\@undefined
+ \font\@scfont = cmcsc10
+ \fi
+ \@scfont
+}%
+%
+% The major parts of an entry are separated with \bblnewblock. The
+% numbers below are taken from LaTeX's `article' style.
+%
+\def\bblnewblock{\hskip .11em plus .33em minus .07em}%
+%
+% Here's where you stick any other bibliography-formatting goodies, or
+% redefine the values above.
+%
+\let\bblhook = \empty
+%
+%
+% Here are the four default definitions for formatting the in-text
+% citations. These are what you redefine (after your \input btxmac but
+% before your \bibliography) to get parens instead of brackets, or
+% superscripts, or footnotes, or whatever.
+%
+\def\printcitestart{[}% left bracket
+\def\printcitefinish{]}% right bracket
+\def\printbetweencitations{, }% comma, space
+\def\printcitenote#1{, #1}% comma, space, note (if it exists)
+%
+% That scheme is pretty flexible. For example you could use
+% \def\printcitestart{$^\bgroup}
+% \def\printcitefinish{\egroup$}
+% \def\printbetweencitations{,}
+% \def\printcitenote#1{\hbox{\sevenrm\space (#1)}}
+% to get superscripted in-text citations. To get something radically
+% different, however, you'll have to define your own \cite command.
+%
+% When we read this from the .aux file, \citation means nothing.
+%
+\let\citation = \@gobble
+%
+%
+% Now comes the stuff for dealing with LaTeX's \newcommand. As
+% mentioned earlier, this \newcommand will redefine a preexisting
+% command; that's different from how LaTeX's \newcommand behaves.
+%
+\@innernewcount\@numparams
+%
+% \newcommand{\foo}[n]{text} defines the control sequence \foo to have
+% n parameters, and replacement text `text'.
+%
+\def\newcommand#1{%
+ \def\@commandname{#1}%
+ \futurelet\@next\@continuenewcommand
+}%
+%
+% Figure out if this definition has parameters.
+%
+\def\@continuenewcommand{\begingroup
+ \if [\@next
+ \aftergroup\@newcommandwithargs
+ \else
+ \global\@numparams = 0
+ \aftergroup\@newcommand
+ \fi
+\endgroup}%
+%
+\def\@newcommandwithargs[#1]{%
+ \global\@numparams = #1
+ \@newcommand
+}%
+%
+% \@numparams is how many arguments this command has. The name of the
+% command is \@commandname. The replacement text for the new macro is #1.
+%
+\def\@newcommand#1{%
+ \def\@startdef{\expandafter\edef\@commandname}%
+ \ifnum\@numparams=0
+ \let\@paramdef = \empty
+ \else
+ \ifnum\@numparams>9
+ \errmessage{\the\@numparams\space is too many parameters}%
+ \else
+ \ifnum\@numparams<0
+ \errmessage{\the\@numparams\space is too few parameters}%
+ \else
+ \edef\@paramdef{%
+ % This is disgusting, but \loop doesn't work inside \edef,
+ % because \body isn't defined.
+ %
+ \ifcase\@numparams
+ \empty No arguments.
+ \or ####1%
+ \or ####1####2%
+ \or ####1####2####3%
+ \or ####1####2####3####4%
+ \or ####1####2####3####4####5%
+ \or ####1####2####3####4####5####6%
+ \or ####1####2####3####4####5####6####7%
+ \or ####1####2####3####4####5####6####7####8%
+ \or ####1####2####3####4####5####6####7####8####9%
+ \fi
+ }%
+ \fi
+ \fi
+ \fi
+ \expandafter\@startdef\@paramdef{#1}%
+}%
+%
+%% [[[end of BibTeX-specific stuff]]]
+%
+%
+% Names of references (arguments given in the \cite and \nocite
+% commands) and file names (arguments given in the \bibliography and
+% \bibliographystyle commands) are recorded in \jobname.aux, called the
+% \@auxfile in these macros. Here's how they get read in.
+%
+\def\@readauxfile{%
+ \if@auxfiledone \else % remember: \@auxfiledonetrue if \noauxfile is defined
+ \global\@auxfiledonetrue
+ \@testfileexistence{aux}%
+ \if@fileexists
+ \begingroup
+ % Because we might be in horizontal mode when \@readauxfile
+ % is called (if it's in response to a \cite or \nocite), we
+ % want to ignore all the would-be spaces at the ends of
+ % lines in the aux file. Fortunately, there are never any
+ % (non-pathological) cases where an end-of-line might
+ % actually be desired. If you really need to do something
+ % strange, you can redefine \@setletters to do something
+ % besides what it does now (this is intentionally left as
+ % being somewhat painful to do).
+ \endlinechar = -1
+ \@setletters
+ \input \jobname.aux
+ \endgroup
+ \else
+ \message{\@undefinedmessage}%
+ \global\@citewarningfalse
+ \fi
+ \immediate\openout\@auxfile = \jobname.aux
+ \fi
+}%
+%
+% The \@readauxfile macro does all that work the first time it's called.
+% Since it's called once for every \cite, \nocite, \bibliography, and
+% \bibliographystyle command that the user issues, we need to remember
+% whether the work's been done. It's considered done if we're not to do
+% it---that is, if \noauxfile is defined.
+%
+\newif\if@auxfiledone
+\ifx\noauxfile\@undefined \else \@auxfiledonetrue\fi
+%
+% Since lots of characters are allowable inside reference names, and
+% since a reference name can get converted into a control sequence,
+% \@readauxfile must treat many characters as letters. It does that by
+% calling \@setletters, which changes the category code of all \@other
+% characters to \@letter. The 128/256 business arises because character
+% codes go up to 256 starting with TeX 3.0, but up to only 128 with
+% earlier versions.
+%
+\def\@setletters{%
+ \count255 = 0
+ \edef\temp{\ifx\inputlineno\@undefined 128\else 256\fi}%
+ \loop
+ \ifnum\catcode\count255 = \@other
+ \catcode\count255 = \@letter
+ \fi
+ \advance\count255 by 1
+ \ifnum\count255<\temp
+ \repeat
+ % The Eplain package uses underscores to construct the label names.
+ \catcode`\_ = \@letter
+}%
+%
+% It's conceivable you'd want to change how other characters are read;
+% to do that, change their category code before doing \input btxmac.
+%
+%
+% After reading the .aux file, \@readauxfile opens it for writing.
+% The \@writeaux macro does the actual writing (as long as
+% \noauxfile is undefined).
+%
+\@innernewwrite\@auxfile
+\def\@writeaux#1{\ifx\noauxfile\@undefined \write\@auxfile{#1}\fi}%
+%
+%
+% A macro package that uses btxmac.tex might define
+% \@undefinedmessage (before doing an \input btxmac).
+%
+\ifx\@undefinedmessage\@undefined
+ \def\@undefinedmessage{No .aux file; I won't give you warnings about
+ undefined citations.}%
+\fi
+%
+% Even if citations are undefined, we want to complain only if
+% \@citewarningtrue. The default is to set \@citewarningtrue unless
+% \noauxfile is defined. Again, a macro package that uses
+% btxmac.tex might want to redefine this.
+%
+\@innernewif\if@citewarning
+\ifx\noauxfile\@undefined \@citewarningtrue\fi
+%
+%
+% Finally, before leaving we restore @'s old category code.
+%
+\catcode`@ = \@oldatcatcode