summaryrefslogtreecommitdiff
path: root/info/digests/texhax/txh
diff options
context:
space:
mode:
Diffstat (limited to 'info/digests/texhax/txh')
-rw-r--r--info/digests/texhax/txh/abbott.txh284
-rw-r--r--info/digests/texhax/txh/animals.txh301
-rw-r--r--info/digests/texhax/txh/bell.txh272
-rw-r--r--info/digests/texhax/txh/bellmac.txh255
-rw-r--r--info/digests/texhax/txh/bowen.txh729
-rw-r--r--info/digests/texhax/txh/gatzka.txh548
-rw-r--r--info/digests/texhax/txh/kesner.txh475
-rw-r--r--info/digests/texhax/txh/king.txh1579
-rw-r--r--info/digests/texhax/txh/kingold.txh875
-rw-r--r--info/digests/texhax/txh/kwok.txh339
-rw-r--r--info/digests/texhax/txh/labrec.txh208
-rw-r--r--info/digests/texhax/txh/leichter.txh489
-rw-r--r--info/digests/texhax/txh/mackay.txh753
-rw-r--r--info/digests/texhax/txh/martensson.txh246
-rw-r--r--info/digests/texhax/txh/mcpherson.txh434
-rw-r--r--info/digests/texhax/txh/mkdiffs.txh924
-rw-r--r--info/digests/texhax/txh/muller.txh373
-rw-r--r--info/digests/texhax/txh/multihyph.txh529
-rw-r--r--info/digests/texhax/txh/oostrum.txh239
-rw-r--r--info/digests/texhax/txh/pavel1.txh778
-rw-r--r--info/digests/texhax/txh/pavel2.txh2541
-rw-r--r--info/digests/texhax/txh/pretex.txh390
-rw-r--r--info/digests/texhax/txh/ramsdell.txh477
-rw-r--r--info/digests/texhax/txh/relate.txh288
-rw-r--r--info/digests/texhax/txh/rogers.txh336
-rw-r--r--info/digests/texhax/txh/rokicki.txh836
-rw-r--r--info/digests/texhax/txh/scheme.txh751
-rw-r--r--info/digests/texhax/txh/schrod.txh367
-rw-r--r--info/digests/texhax/txh/shapin.txh958
-rw-r--r--info/digests/texhax/txh/springer.txh623
-rw-r--r--info/digests/texhax/txh/taj.txh341
-rw-r--r--info/digests/texhax/txh/takagi.txh388
-rw-r--r--info/digests/texhax/txh/vulis.txh267
-rw-r--r--info/digests/texhax/txh/wolczko.txh261
-rw-r--r--info/digests/texhax/txh/wujastyk.txh2280
-rw-r--r--info/digests/texhax/txh/wujastyk2.txh554
36 files changed, 22288 insertions, 0 deletions
diff --git a/info/digests/texhax/txh/abbott.txh b/info/digests/texhax/txh/abbott.txh
new file mode 100644
index 0000000000..70e50909d1
--- /dev/null
+++ b/info/digests/texhax/txh/abbott.txh
@@ -0,0 +1,284 @@
+ 7-Oct-87 23:29:16-PDT,9090;000000000000
+Return-Path: <@Cs.Ucl.AC.UK:ABBOTTP@mail.aston.ac.uk>
+From: ABBOTTP <@Cs.Ucl.AC.UK:ABBOTTP@mail.aston.ac.uk>
+To: TEXHAX <@Cs.Ucl.AC.UK:TEXHAX@score.stanford.edu>
+
+
+Date: 8-Oct-1987 07:11 BST
+Subject: Aston Archive update
+From: Peter Abbott <ABBOTTP@uk.ac.aston>
+Dept: Computing Service
+Tel No: 021 359 5492 -direct
+
+ PUBLIC account at Aston University UK October 5 1987
+
+This text is available in
+
+ aston.kirk::[public]000aston.readme
+
+The ID is PUBLIC and the password PUBLIC
+
+For each set of software an index file has been created with the name
+
+ 000index.list
+
+and is stored in the top directory of the set of software. Each set of
+software is stored below PUBLIC and where relevant in further sub
+directories.
+
+I have a copy of VMS_SHAR and am awaiting a suitable SHAR for `UNIX'. I can
+also create `TAR' files for FTP but at present the TRANSFER/BINARY fails
+(DEC have been notified).
+
+Further items are always welcome.
+
+Peter Abbott
+
+
+TeX DVI Driver Family - Release 2.08
+=====================================
+
+This is the updated set of files from UTAH.
+
+Index file kirk::[public.texdvi208]000index.list
+
+ID and password both PUBLIC
+
+
+PSPRINT
+DVITOVDU (both from Andrew Trevorrow see TugBoat Vol 8 No 1 page 42)
+========
+
+PSPRINT files aston.kirk::[public.psprint]000fetch.list
+
+DVITOVDU files aston.kirk::[public.dvitovdu]000fetch.list
+
+
+
+TEXHAX Contains back numbers of the TeXhax digests. The files are named
+======
+
+ TEX87.nn where nn is the issue number
+
+Index list aston.kirk::[public.texhax]000index.list
+Digest files aston.kirk::[public.texhax]tex87.nn
+
+UKTeX Contains back numbers of the UKTeX material. The files are named
+=====
+
+ UKTEX87.nn where nn is the issue number
+
+Index list aston.kirk::[public.uktex]000index.list
+files aston.kirk::[public.uktex]uktex87.nn
+
+
+PSFIGTEX
+========
+
+PSfigTeX is a set of TeX macros to make it easy to include PostScript (and
+Macintosh) figures inside a TeX document. It was written by Trevor Darrell
+at the University of Pennsylvania, who retains copyright. See the file
+COPYRIGHT for details. It arrived as a set of SHAR files, and again, the
+structure here is the same as that to be found in the SHAR files.
+
+ Features:
+ Simple, clean interface
+ Psfig automatically positions the figure at the current pen position
+ Figures can be scaled easily
+ Implemented as a TeX macro package; has been brought up under unix,
+ VMS and OS4000. (Please contact HINES@UK.AC.DARESBURY.MAIL for
+ the OS4000 version)
+
+PSFIGTEX files aston.kirk::[public.psfigtex]000index.list
+
+This file contains a directory listing (including subdirectories) with
+each file listed and its size. The user need not adhere to the directory
+structure, it has been used to make maintenance easier.
+
+
+
+LATEXSTYLE
+==========
+
+This group is the LaTeX Style collection based on TuGboat Volume 8 No 2. The
+`shar' files are included in the directory and will eventually be also
+provided in subdirectories once I can overcome the problem of the limitation
+of VAX/VMS and files which have a non numeric third part to the name.
+
+LATEXSTYLE files aston.kirk::[public.latexstyle]000index.list
+
+CRUDETYPE
+=========
+
+Crudetype an adaptable device driver (TUGboat Volume 7 (1986) No 3 p 159)
+R M Damerell Royal Holloway and Bedford College.
+
+This software has been improved since the publication of the article.
+
+CRUDETYPE files aston.kirk::[public.crudetype]000index.list
+
+PL and TFM files for Apple Laserwriter
+======================================
+
+Files of TFM and PL for resident fonts for the Apple Laserwriter and
+Laserwriter+ from Sebastian Rahtz Southampton.
+
+PL TFM files aston.kirk::[public.apple.pl]000index.list
+
+
+SAUTER
+======
+
+This section contains the John Sauter files for creating the cm fonts for
+LN03 (see Tugboat Volume 8 (1987) No 2 page 129). The created font files
+will be available later.
+
+Index file aston.kirk::[public.sauter]000index.list
+
+
+CTEX 2.1
+========
+
+This group contains CTEX version 2.1
+
+Index file aston.kirk::[public.ctex_2_1]000index.list
+
+
+PAVEL
+=====
+
+This group was contributed by John Pavel and some material is duplicated
+elsewhere in the archive. These duplications will be removed as time permits.
+The subdirectory structure is I hope self explanatory and is attached here.
+There are a lot of files and we hope to provide batching facilities in the
+future.
+
+Index file aston.kirk::[public.pavel]000index.list
+
+
+[PUBLIC.PAVEL]
+[PUBLIC.PAVEL.LIB]
+[PUBLIC.PAVEL.LIB.TEX]
+[PUBLIC.PAVEL.MAIL]
+[PUBLIC.PAVEL.TEX]
+[PUBLIC.PAVEL.TEX.DOC]
+[PUBLIC.PAVEL.TEX.DVIDOC_OLD]
+[PUBLIC.PAVEL.TEX.INDEX]
+[PUBLIC.PAVEL.TEX.LATEX-STYLE]
+[PUBLIC.PAVEL.TEX.MF84]
+[PUBLIC.PAVEL.TEX.MF84.MFCONFIG]
+[PUBLIC.PAVEL.TEX.MIT-XX]
+[PUBLIC.PAVEL.TEX.TEXTYL]
+[PUBLIC.PAVEL.TEX.UTAH-SCIENCE]
+[PUBLIC.PAVEL.TEXDIST]
+[PUBLIC.PAVEL.TEXDIST.BABEL]
+[PUBLIC.PAVEL.TEXDIST.BABEL.PORTUGUESE]
+[PUBLIC.PAVEL.TEXDIST.FONTS]
+[PUBLIC.PAVEL.TEXDIST.FONTS.AMSFONTS]
+[PUBLIC.PAVEL.TEXDIST.FONTS.AMSFONTS.GF]
+[PUBLIC.PAVEL.TEXDIST.FONTS.CMFONTS]
+[PUBLIC.PAVEL.TEXDIST.FONTS.CMFONTS.CMTEST]
+[PUBLIC.PAVEL.TEXDIST.FONTS.CMFONTS.GF]
+[PUBLIC.PAVEL.TEXDIST.FONTS.LATEXFONTS]
+[PUBLIC.PAVEL.TEXDIST.FONTS.LATEXFONTS.GF]
+[PUBLIC.PAVEL.TEXDIST.FONTS.UTILITYFONTS]
+[PUBLIC.PAVEL.TEXDIST.MF84]
+[PUBLIC.PAVEL.TEXDIST.MF84.MFCONFIG]
+[PUBLIC.PAVEL.TEXDIST.TEX82]
+[PUBLIC.PAVEL.TEXDIST.TEX82.LATEX]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONFIG]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB.RUSTY]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB.SALKIND]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB.SAUTER]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB.TIB]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB.TRICKEY]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB.URBAN]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB.UW]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB.VAN]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXCONTRIB.VAN.TGRIND]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXDEVICES]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXDEVICES.CTEX]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXDEVICES.CTEX.LIB]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXDEVICES.LN01]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXDEVICES.LN03]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXDEVICES.MITDRIVERS]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXDEVICES.QMS]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXDOC]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXMACROS]
+[PUBLIC.PAVEL.TEXDIST.TEX82.TEXMISC]
+[PUBLIC.PAVEL.TEXDIST.TEX82.UNSUPPORTED]
+[PUBLIC.PAVEL.TEXDIST.TEX82.UNSUPPORTED.COMMONTEX]
+[PUBLIC.PAVEL.TEXDIST.TEX82.UNSUPPORTED.COMMONTEX.BIG]
+[PUBLIC.PAVEL.TEXDIST.TEX82.UNSUPPORTED.COMMONTEX.BIGG]
+[PUBLIC.PAVEL.TEXDIST.TEX82.UNSUPPORTED.SEQUENT]
+
+
+
+REPORTS
+=======
+
+This group contains miscellaneous material which is normally too large for
+UKTeX.
+
+Index file aston.kirk::[public.reports]000index.list
+
+
+Please contact me if you have any problems accessing the files.
+
+--------------
+
+The following command procedures have been sent to me to enable VMS users
+to 'pull' the files and may be useful to others.
+
+(Thanks to Phil Taylor of RHBNC)
+
+============================== F E T C H . C O M ==============================
+
+$ @sys$utilities:pull uk.ac.aston.kirk [public.beebe]'p1' 'p1' public public
+
+=============================== P U L L . C O M ===============================
+$ set noon
+$ loop_1:
+$ delete temp.tmp;*
+$ assign/user temp.tmp sys$Output
+$ list
+$ count = 0
+$ open/read/error=20$ input temp.tmp
+$ loop_2:
+$ read/error=20$ /end=10$ input buffer
+$ count = count + 1
+$ goto loop_2
+$ 10$:
+$ close input
+$ if count .le. 4 then goto 20$
+$ wait 00:00:30.00
+$ goto loop_1
+$ 20$:
+$ remote_site = p1
+$ remote_file = p2
+$ local_file = p3
+$ remote_user = p4
+$ remote_pswd = p5
+$ transfer -
+ 'remote_site'::'remote_file' -
+ 'local_file' -
+ /user='remote_user','remote_pswd'
+============================= End of Information ==============================
+
+Please send me your JANET name and address to be added to the circulation
+list if you want to receive details of updates.
+
+Peter
+______________________
+
+Computing Service JANET abbottp@uk.ac.aston.mail
+Aston University ARPA pabbott@nss.cs.ucl.ac.uk
+Aston Triangle or abbottp%uk.ac.aston.mail@nss.cs.ucl.ac.uk
+Birmingham B4 7ET UUCP ...!ukc!aston!abbottp
+U.K. BITNET abbottp%uk.ac.aston.mail@ac.uk
+Tel (+44) 21 359 5492
+____________________
+
+-------
+
diff --git a/info/digests/texhax/txh/animals.txh b/info/digests/texhax/txh/animals.txh
new file mode 100644
index 0000000000..cb6ada0ac3
--- /dev/null
+++ b/info/digests/texhax/txh/animals.txh
@@ -0,0 +1,301 @@
+29-Apr-88 15:25:54-PDT,8851;000000000000
+Return-Path: <amgreene@ATHENA.MIT.EDU>
+From: <amgreene@ATHENA.MIT.EDU>
+Subject: Animals
+Date: Fri, 29 Apr 88 18:26:35 EDT
+
+Here's a small diversion for those who are sick and tired of TeX files that
+produce useful output.
+
+It's an implementation of the classic pseudo-Artificial-Intelligence game
+``Animals.'' For those who are unfamiliar with the game, the user thinks
+of an animal, and the program asks a whole bunch of yes/no questions about
+the animal, stepping down a binary tree until it gets to a guess: ``Is it
+a fish?'' If the guess is wrong, the program adds the user's animal and
+a question to tell them apart to the database.
+
+This program was written to prove that TeX can really be used as a regular
+programming language. Thanks for inspiration go to Mark Eichin and
+Jonathan Kamens, both members of the Studnet Information Processing Board
+at MIT, for telling me they'd believe it could be done when they saw it.
+
+There are two places in the program where filenames appear. These will
+have to be modified for your system, unless you have a directory called
+/mit/amgreene/texhax. These can be found quickly by searching for the
+flag *FLAG*.
+
+- Andrew Marc Greene (amgreene@athena.mit.edu)
+ Student Information Processing Board, MIT
+
+---------cut here for animals.tex-----------------------------------
+% Animals (in TeX, no less!!!)
+%
+% This is the program that uses a binary tree of questions to
+% guess the type of animal of which the user is thinking.
+%
+% Andrew Marc Greene, March-April 1988
+%
+% Moral support (i.e., ``You can't do that! Show us!'')
+% provided by the Student Information Processing Board
+% of MIT.
+%
+
+% Instructions on running this program:
+%
+% tex animals
+%
+% Think of an animal. The program will try to guess your animal.
+%
+% You will be asked a whole bunch of yes/no questions. This is a
+% spartan implementation, so answer with a capital Y or N. When
+% the program finishes going through its tree, it will either have
+% guessed your animal or it will ask you to enter a question that
+% it can ask to differentiate between your animal and its guess.
+% It will then ask you which one is `yes.'
+
+% Here's where I declare all my variables, etc.
+%
+% ``curcode'' is the current index into the data file.
+% ``temp'' is a temporary holding variable.
+% ``lc'' is a loop counter
+% ``ifamg'' is a general-purpose flag. amg are my initials.
+% ``ifreploop'' controls loop repetitions.
+% ``ifmainlooprep'' controls repetitions of the main loop.
+% ``inp'' is the input file.
+% ``outp'' is the output file.
+% ``amgY'' and ``amgN'' are character constants. Why I did it this way I
+% don't remember.
+%
+\newcount\curcode\curcode=1\newcount\temp\temp=0\newcount\lc
+\newif\ifamg\newif\ifyn\newif\ifreploop\newif\ifmainlrep
+\newread\inp\newwrite\outp\def\foo{}
+\def\amgY{Y}\def\amgN{N}
+
+% The data file consists of records stored in the following format:
+%
+% Record Number <newline>
+% Question <newline>
+% If-Yes-Goto-Record Number <newline>
+% If-No-Goto-Record Number <newline>
+%
+% The following routine scans the data file until it reaches the
+% record requested in \curcode
+%
+\def\Scan{
+{\loop
+ \global\read\inp to \foo
+ \ifnum\foo=\curcode\amgfalse\else\amgtrue\fi
+ \ifamg\read\inp to \foo\read\inp to \foo\read\inp to \foo
+\repeat}}
+
+% The following routine displays the question and waits for a Y or N
+% answer
+%
+\def\Query{
+{\read\inp to \foo
+\immediate\write16{}
+\message{\foo}
+\GetYN
+\ifyn
+ \read\inp to \foo\global\curcode=\foo\read\inp to \foo
+\else
+ \read\inp to \foo\read\inp to \foo\global\curcode=\foo
+\fi
+}}
+
+% The following routines deal with the user's input
+% \vread (verbatim read) ignores <newline>s and makes <space>s normal
+% \GetYN gets input and repeats until it gets a Y or N response.
+%
+\def\vread#1{\catcode`\^^M=9\catcode`\ =12\global\read-1 to #1}
+\def\GetYN{
+{\loop
+\vread{\bar}
+\def\baz{\bar}
+\reploopfalse
+%\message{\baz}
+\if\amgY\baz\global\yntrue\else
+ \if\amgN\baz\global\ynfalse\else\replooptrue\fi\fi
+\ifreploop
+\immediate\write16{Hey, you! Answer Y or N, please.}
+\message{Please enter Y or N -->}
+\repeat
+}}
+
+% The following routine is called if the ``Goto-Record'' is -1,
+% meaning that the program didn't guess correctly and is clueless.
+% It gets the new animal and the differentiating question, and
+% modifies the data file. Actually, it makes a modified copy of
+% the file, then copies the temporary new one over the old outdated
+% one.
+%
+\def\NewAnimal{
+\immediate\write16{Well, I'm stumped. What animal did you have in mind?}
+\vread{\usersanimal}
+\immediate\write16{OK. What question would let me tell the difference?}
+\vread{\userquery}
+\immediate\write16{Is the answer to that question Yes or No if I ask about}
+\message{\usersanimal?}
+\curcode=-1
+\GetYN
+\Scan
+\read\inp to \lastcode\lc=\lastcode
+\closein\inp
+%
+% Open up the files. These names are system-dependent. *FLAG*
+%
+\openin\inp=/mit/amgreene/texhax/animal.dat
+\immediate\openout\outp=/tmp/animal-new.dat
+%
+% Read through the inp file, copying all records that don't need to
+% be changed, outputting modified versions of the changed ones (and
+% discarding the old), and appending the new records.
+%
+{\loop
+ \read\inp to \foo
+ \amgtrue
+ \ifnum\foo=\temp\amgfalse\fi
+ \ifnum\foo=-1=\amgfalse\fi
+ \ifamg\immediate\write\outp{\foo}
+ \read\inp to \foo\immediate\write\outp{\foo}
+ \read\inp to \foo\immediate\write\outp{\foo}
+ \read\inp to \foo\immediate\write\outp{\foo}
+ \amgtrue
+ \else\ifnum\foo=\temp
+ \immediate\write\outp{\foo}
+ \immediate\write\outp{\userquery}
+ \immediate\write\outp{\number\lc}
+ \global\advance\lc by 1
+ \immediate\write\outp{\number\lc}
+ \read\inp to \animal\read\inp to \foo\read\inp to \foo
+ \amgtrue
+ \else
+ \lc=\lastcode
+ \ifyn\WriteUsers\WriteAnimal
+ \else\WriteAnimal\WriteUsers
+ \amgfalse\fi
+ \fi\fi
+ \ifamg
+\repeat}
+\immediate\write\outp{-1}
+\immediate\write\outp{\number\lc}
+\closeout\outp
+\closein\inp
+%
+% Now copy the temporary file over the original one
+%
+% These filenames are also system-dependent. *FLAG*
+%
+\openin\inp=/tmp/animal-new.dat
+\immediate\openout\outp=/mit/amgreene/texhax/animal.dat
+{\loop
+ \read\inp to \foo
+ \immediate\write\outp{\foo}
+ \amgtrue
+ \ifeof\inp\amgfalse\fi
+ \ifamg\repeat}
+
+}
+
+% This routine is called by NewAnimal and writes the record for
+% the user's new animal
+%
+\def\WriteUsers{
+\immediate\write\outp{\number\lc}
+\immediate\write\outp{Is it \usersanimal?}
+\immediate\write\outp{0}
+\immediate\write\outp{-1}
+\global\advance\lc by 1}
+
+% This one writes the modified old animal
+%
+\def\WriteAnimal{
+\immediate\write\outp{\number\lc}
+\immediate\write\outp{\animal}
+\immediate\write\outp{0}
+\immediate\write\outp{-1}
+\global\advance\lc by 1}
+\openin\inp=/mit/amgreene/texhax/animal.dat
+
+% Now we get into the main routine.
+% It simply repeats the scan-query loop until it gets a 0 (right answer)
+% or a -1 (wrong answer, I'm stumped), and calls the appropriate routine.
+%
+\loop
+ \temp=\curcode
+ \Scan\Query
+ \mainlreptrue
+ \ifnum\curcode=0
+ \immediate\write16{Thank you for using Animals. I'm glad I got it right.}
+ \mainlrepfalse
+ \else
+ \ifnum\curcode=-1\NewAnimal\mainlrepfalse\fi
+ \fi
+\ifmainlrep
+\repeat
+
+% Ah, the joys of a job well-done. We can now exit to the system, knowing
+% that the world is a slightly better place for our efforts.
+%
+% The following line of code, probably the most profound in the entire
+% program, sums up this philosophy of life in four characters. The
+% Puritan work ethic is embodied in this amazingly meaning-laden
+% command designed by Donald Knuth.
+
+\end
+-----------------------cut here, too---------------------------------
+
+The following is the data file:
+
+-----------------------cut once again for animal.dat-----------------
+1
+Does it fly?
+2
+3
+2
+Does it live on statues?
+4
+5
+3
+Does it have wings?
+8
+9
+4
+Is it grey?
+6
+7
+5
+Is it a condor?
+0
+-1
+6
+Is it a pigeon?
+0
+-1
+7
+Is it a sparrow?
+0
+-1
+8
+Does it look like it is wearing a tuxedo?
+10
+11
+9
+Is it a moose?
+0
+-1
+10
+Is it a penguin?
+0
+-1
+11
+Is it a turkey?
+0
+-1
+-1
+12
+----------------------this is the last cut-----------------------------
+
+
+-------
+
diff --git a/info/digests/texhax/txh/bell.txh b/info/digests/texhax/txh/bell.txh
new file mode 100644
index 0000000000..89fa425450
--- /dev/null
+++ b/info/digests/texhax/txh/bell.txh
@@ -0,0 +1,272 @@
+% BELL.TXH; reference in TeXhax.8730
+
+Date: Thu, 16 Apr 87 17:37:57 PST
+From: <BELL%UKANVAX.BITNET>
+Subject: Documentation for earlier form letter submission.
+
+ Well, after receiving numerous responses regarding my form
+ letter format for (need I reiterate) PLAIN TeX, I realized
+ that I provided no way for people to guess what the correct
+ format for the letter file(s) and/or address file(s) are.
+
+ I am sending on a text version of our local guide as to the
+ usage. Unfortunately, since it uses a format that I developed
+ here for producing TeXnical Memoranda, I am unable to send
+ a TeXable version. Also, the examples refer to DCL (VAX/VMS)
+ commands---users of other operating systems forgive me. I am
+ certain that the file is too big to post in TeXhax, so hopefully
+ it will be archived along with the macro files sent earlier.
+
+ Ed Bell
+ Dept. of Physics and Astronomy
+ University of Kansas
+ Bitnet: BELL@UKANVAX
+ SPAN: KUPHSX::BELL (7.220)
+
+
+--------------------------Beginning of Document--------------------------------
+
+
+ AutoLetter
+ A TeX Letter Formatting Facility
+ E. V. Bell, II
+
+AutoLetter is a facility available for producing high quality letters capable
+of handling any number of people in a mailing list. Although the format of the
+address file is somewhat restrictive, it is still possible to create a form
+letter destined to be sent to a wide variety of people and still personalize
+each one.
+
+This document is designed to explain: (1) the few commands necessary to format
+the letter and personalize it; (2) the format of the address file; and,
+(3) how to generate labels for the letters.
+
+
+ Getting started
+
+For each form letter, you must create two files. The first is a file containing
+a list of the names and addresses of the people to whom the letters are being
+mailed. The second is a file containing the letter. Once these files have been
+created, you are ready to TeX them. There are relatively few TeX commands
+required in the letter, although any valid TeX command will work, including
+macro definitions, font changes, etc. In this way you can still utilize the
+power of TeX without sacrificing the simplicity of typing a form letter.
+Once these files are created, then type the following at DCL level:
+
+ $ tex autoletter
+
+AutoLetter will then read in some files and will prompt you for the names of
+the address and letter files. It handles everything from there. If you should
+happen to have TeX errors present in the letter, you should correct them
+before attempting to print the file. Your resulting DVI file will be called
+AUTOLETTER.DVI. LNTeX this file and print it to the laser printer.
+
+The way in which labels are formatted is similar. In this case, a different
+TeX facility is used (LABELS) and only the address file is needed. In
+this manner, it is not necessary to create labels for a group of letters unless
+it is desired. Also, it is possible to maintain a mailing list for the purpose
+of generating mailing labels without using the AutoLetter procedure.
+
+
+ The letter file
+
+There are relatively few special commands required for producing a letter with
+AutoLetter. Many of them are similar to or exactly the same as the ones listed
+in Appendix E of The TeXbook.
+
+The very first line in the file should contain the command \letterbody. This
+merely informs TeX to set up some parameters in a particular way. The
+salutation then follows. The salutation may include some commands which will
+personalize the letter in a number of different ways. If you wish to refer to
+the person by title and last name (e.g., Dr. Davidson, Mr. Desko, Ms. Comfort,
+etc.), you need only use the command \person. The persons title and last name
+will be substituted anywhere in the document where you use this command. If the
+person should have no known title, the phrase ``Sir or Madam'' is substituted.
+
+An alternative way to address someone would be by their first name. This could
+be whatever name you specify as the persons first name in the address file or
+an optional nickname. You may do this with the \familiar command.
+
+Finally, if in the salutation line you wish to refer to the addressee formally,
+you may use the \formal command. If, then, the persons title is Mr., the word
+``Sir'' will be substituted. If the persons title is Mrs., Ms., or Miss, the
+word ``Madam'' will be substituted. Finally, if the title is none of the above,
+it is the same result as typing \person).
+
+There are no special commands which are needed to produce the file from that
+point onward. You may specify any form of type you wish to use (roman,
+boldface, etc.) with the usual TeX commands. The letter is typeset by default
+in twelve-point roman and TeX places the date on every copy of the letter. Also
+by default, paragraphs are not indented. If you wish to have an paragraph
+indented on both sides, you can use the \narrow and \wide commands. TeXhax
+users should know at this point that these commands have been defined as:
+
+ \def\narrow{\advance\leftskip by3em \advance\rightskip by3em}
+ \def\wide{\advance\leftskip by-3em \advance\rightskip by-3em}
+
+When the body of the letter is finished, you specify the closing of the letter
+with the \closing command on a line by itself. The next line then contains the
+closing you wish to specify (e.g., Sincerely, Yours truly, etc., including the
+punctuation). The following lines until AutoLetter reaches a blank line, or one
+of the commands discussed below will be the placed after the signature space.
+The form, then, would be
+
+ \closing
+ Sincerely,
+ J. P. Davidson
+ Chairman
+
+The \annotations command is used to specify any special annotations required of
+the letter. These are specified no differently than any normal letter would be
+typed. Again, the \annotations command would be on a line by itself and each
+following line until a blank line is found would be typeset as a separate line.
+
+The \ps command is used to specify any post-scripts the author may wish. You
+need not type the usual ``P.S.'', however, as AutoLetter takes care of it.
+Again, leave a blank line after the post-script is finished.
+
+Finally, the last line in the document should have the command \endletter. This
+finishes the general description of the letter file. An example file follows
+(the result of which produces the last three pages of this document):
+
+--------------------------------Example----------------------------------------
+
+\letterbody
+Dear \familiar,
+
+This is the first in what I expect to be a series of canned \TeX\ routines
+for the office staff of the University of Kansas' Department of Physics and
+Astronomy. The obvious intent is to facilitate the usage of the departments
+VAX 11-750 computer and ease the shock of transition for either those not
+used to working on computers in general or those simply not used to working
+on a VMS system.
+
+I hope to provide to the department a durable but relatively flexible system
+whereby the office staff will be able to:
+
+\narrow
+\item{1.}Create standardized form letters for mailing to a large group of
+people.
+\vskip-\parskip
+\item{2.}Allow creation of book and journal formats which will allow for
+providing camera-ready text for publication.
+\vskip-\parskip
+\item{3.}Provide for both a means of uniformity of appearance of departmental
+documents when that is desired and for diversity of appearance when personal
+taste dictates.
+
+\wide
+This will, I trust, give you a brief idea of what I have intended. A format for
+producing an interdepartmental memo already exists and the ability to produce
+dissertations exists in at least two formats. This letter proves the capability
+of creating mass mailings or even of a single letter in a uniform format. I
+hope that you will all find these routines useful and productive.
+
+\closing
+Sincerely,
+E. V. Bell, II
+System \TeX nician
+
+\ps
+The \TeX\ routine which produced this letter is called AutoLetter. It is
+available to everyone on the system and users manuals are available.
+
+\endletter
+
+-----------------------------End of Example------------------------------------
+
+
+ The address file
+
+The format of the address file is very specific. The first six lines are
+reserved for the name of the addressee and the address as it is to appear in
+the letter follows on subsequent lines. Each entry is separated by an asterisk
+(*) on a line by itself. An example of an address file might be:
+
+--------------------------------Example----------------------------------------
+Mr.
+Edwin
+Ed
+V.
+Bell
+II
+1011 Indiana, Apt. \#6
+Lawrence, KS\ \ \ 66044-2952
+*
+
+Dept. of Physics and Astronomy
+
+
+
+
+University of Kansas
+Lawrence, KS\ \ \ 66045
+*
+Mr.
+R.
+Rick
+D.
+Desko
+
+Dept. of Physics and Astronomy
+University of Kansas
+Lawrence, KS\ \ \ 66045
+*
+-----------------------------End of Example------------------------------------
+
+Note that each part of the persons name (including their title) appears on a
+line by itself. The lines for the addressees name are:
+
+ (1) The persons title (e.g., Prof., Mr., Ms., etc.).
+ (2) The persons first name or initial.
+ (3) The name to use other than their first name if the salutation is
+ \familiar. (This can either be the same as (2) or a nickname.)
+ (4) The persons middle name(s) or initial(s).
+ (5) The persons last name.
+ (6) Additional name information (used for such things as ``Jr.'',
+ ``II'', or other things).
+
+Even if one or more parts of the name is unknown or irrelevant, a blank must
+be left for the entry. AutoLetter will reassemble the name as appropriate to
+certain commands. Also notice that if the letter is to an organization, as in
+the second entry, that you should leave all name lines blank except the one
+reserved for the first name. All other information would then appear as part of
+the address.
+
+
+ The LABELS facility
+
+The ability to create mailing labels, while not necessarily useful only in the
+generation of form letters, is still so closely tied to the subject that I
+hesitated to write another manual iterating much of the same material. It is
+useful to be able to generate mailing labels both in coordination with and
+separately from the AutoLetter facility. It is therefore provided as a separate
+utility.
+
+The LABELS procedure creates a page containing 33 labels, three columns of
+eleven labels. In order to use it, have the address file (described above)
+already created and type at DCL:
+
+ $ tex labels
+
+LABELS will then read in some files and will prompt you for the name of the
+address file, just as AutoLetter does. It handles everything from there. As
+always, if you should happen to have TeX errors present in the letter, you
+should correct them before attempting to print the file.
+
+Similarly to the AutoLetter procedure, your resulting DVI file will be called
+(this time) LABELS.DVI. LNTeX this file and print it to the laser printer.
+
+
+
+If you do not wish to use the AutoLetter facility directly, it is possible to
+just input the letter format file (with \input letter_format), but you will
+need to control the positioning of the date (as well as many other things)
+yourself. Enjoy!
+
+ E. V. Bell, II
+
+-----------------------------Ending of Document--------------------------------
+
+-------
+
diff --git a/info/digests/texhax/txh/bellmac.txh b/info/digests/texhax/txh/bellmac.txh
new file mode 100644
index 0000000000..db79d857cb
--- /dev/null
+++ b/info/digests/texhax/txh/bellmac.txh
@@ -0,0 +1,255 @@
+% BELLMAC.TXH; reference in TeXhax.8724
+
+Date: Wed, 25 Mar 87 21:06 CST
+From: <BELL@UKANVAX.BITNET>
+Subject: Form letter/mailing list processing.
+
+ In Vol. 87, Issue 22, Eric Skinner inquires about a set of TeX
+ macros which will produce form letters. I developed such a
+ procedure here (in plain TeX) at the University of Kansas for use
+ by our departmental secretaries, and it has been in use now for
+ several months. John Lee in the October 1986 issue of TUGBoat asked
+ the same question and the result was a reply which I expect to appear
+ in the March 1987 TUGBoat along with another reply in LaTeX. For
+ those of you who do not receive TUGBoat (or are impatient) here is
+ a copy of it as I sent it. A label formatting procedure utilizing
+ the same address file is also available.
+
+ Ed Bell
+ BITnet: BELL@UKANVAX
+ SPAN: KUPHSX::BELL
+
+ --------------------------------------------------------------------------
+
+\title AutoLetter: A \TeX\ form letter procedure.
+\\Edwin V. Bell, II\cr
+ Department of Physics and Astronomy
+ University of Kansas
+\endx
+
+\pagexref{bell}
+
+The inquiry from John Lee (\TUB, October 1986) concerning form letters was
+particularly interesting to me as I had recently completed such a procedure
+at the request of our office staff. The procedure (called AutoLetter) is
+a ``plain'' \TeX\ procedure which requires two files, one containing a
+delimited listing of names and addresses, the other a generic form letter.
+
+Each entry in the address file is followed by a line containing a single
+asterisk. The last entry must also be followed by this line, which in turn
+{\it must} be followed by the end-of-file mark. Each individual entry consists
+of six lines for the addressee's title, name, etc., followed by as many
+address lines as desired. The lines for the addressee's name are:
+
+\item{(1)}Title (Prof., Mr., Ms., etc.)
+\item{(2)}First name/initial
+\item{(3)}Name to be used as a familiar form of address.
+\item{(4)}Middle name(s)/initial(s)
+\item{(5)}Last/family name
+\item{(6)}Additional name information (Jr., II, Esq., etc.)
+
+\noindent
+These lines are then used to reconstruct the persons name for various forms
+of address (including for the address block) and to address the person formally
+(Sir, Madam, Sir or Madam), familiarly (by item (3) above or, if (3) is
+blank, by first name), or by title and last name. If any of these lines
+are left blank, AutoLetter doesn't mind, but if the entry is irrelevant
+or absent from the persons name, {\it it must still be left blank}. An example
+of an address entry might be:
+\begintt
+Mr.
+Edwin
+Ed
+V.
+Bell
+II
+Department of Physics \& Astronomy
+University of Kansas
+Lawrence, KS\ \ \ 66045
+*
+\endtt
+
+The letter file is quite simple and used macros that are the same as or
+slight variations of those listed in Appendix E of {\sl The \TeX book}.
+AutoLetter takes care of the placement of the date and address block (and
+could as well the letterhead, although I have not yet implemented that here
+as yet), so the letter file might appear as:
+\begintt
+\letterbody
+Dear \person--
+
+...text...
+
+\closing
+Sincerely,
+...
+
+\annotations...
+\ps...
+
+\endletter
+\endtt
+
+AutoLetter consists of two files, on the \TeX\ procedure itself, the other
+containing the letter-formatting macros (and local macros, if desired).
+The AutoLetter procedure looks like:
+\begintt
+\input letter_format
+
+\message{+------------------------------------------+}
+\message{| AutoLetter Version 1.1 -- 9 October 1986 |}
+\message{+------------------------------------------+}
+
+\newread\addressfile
+
+\message{Enter name of file containing the addresses:}
+\read-1 to\addfile
+\openin\addressfile=\addfile
+
+\message{Enter name of file containing the body of the letter:}
+\read-1 to\letfile
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Now read in an entry containing the person to whom to send the letter
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\endlinechar=-1
+\read\addressfile to\text \let\title=\text
+
+\loop
+ \read\addressfile to\text \let\firstname=\text
+ \read\addressfile to\text \let\nickname=\text
+ \read\addressfile to\text \let\middlename=\text
+ \read\addressfile to\text \let\lastname=\text
+ \read\addressfile to\text
+ \ifx\text\blank\def\jr{}\else\def\jr{, \text}\fi
+ \endlinechar='015
+ \message{Now processing letter to \addressee.}
+ \getaddress
+ \doletter
+ \endlinechar=-1
+ \read\addressfile to\text \let\title=\text
+ \ifeof\addressfile\endfalse\else\endtrue\fi
+ \ifend
+\repeat
+
+\bye
+\endtt
+
+\noindent
+Our local letter-formatting macros are:
+\begintt
+\input whatever local macro package you wish here
+
+\twelvept % 12-point size is so much easier to read
+
+\hsize=6.5truein
+\vsize=8.0truein
+\hoffset=1.0truein
+\voffset=1.5truein
+
+\raggedbottom
+\interlinepenalty=1000
+\parindent=0pt
+\parskip=0pt
+
+\nopagenumbers
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Define some stuff so that the headlines will come out the way
+% we want them to be.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\newbox\headbox
+\headline={\ifnum\pageno>1
+ {\twelverm
+ \global\setbox\headbox=\vbox\bgroup%
+ \leftline{\addressee}
+ \leftline{\today}
+ \leftline{Page \folio}\egroup}\copy\headbox
+ \else\hfil\fi}
+
+\def\makeheadline{\vbox to 0pt{\vskip-70.6pt
+ \line{\vbox to30.6pt{}\the\headline}\vss}
+ \nointerlineskip}
+
+\newif\ifend
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for reading in the address from the file.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\def\blank{}
+
+\def\endletter{\endmode\vfill\eject\pageno=1}
+
+\newdimen\longindentation \longindentation=10truecm
+\newbox\theaddress
+\newif\ifast
+\def\aster{* }
+\def\getaddress{{\global\setbox\theaddress=\vbox\bgroup\raggedright%
+ \hsize=\longindentation
+ \everypar{\hangindent2em}
+ \line{\vbox to10.2pt{}\addressee\hss}\egroup%
+ {\loop{\read\addressfile to\text
+ \ifx\text\aster\astfalse\else\asttrue\fi
+ \ifast\global\setbox\theaddress=\vbox\bgroup\unvbox\theaddress
+ \line{\vbox to 10.2pt{}\text\hss}\egroup}\repeat}}}
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for formatting the letter.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\def\letterbody{\beginparmode}
+\def\closing{\beginlinemode\getclosing}
+{\obeylines\gdef\getclosing #1
+ #2
+ {#1\nobreak\bigskip \leftskip=\longindentation #2
+ \nobreak\bigskip\bigskip\bigskip\bigskip % space for signature
+ \def
+ {\endgraf\nobreak}}}
+\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par}
+\def\ps{\beginparmode\nobreak
+ \interlinepenalty5000\def\par{\endgraf\penalty5000}
+ P.cS.\ }
+
+\def\address{\beginlinemode \copy\theaddress \endgroup}
+\def\doletter{{\leftskip=\longindentation%
+ \rm\today\bigskip\address\bigskip}
+ \input \letfile}
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for setting up forms of salutation.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\def\mr{Mr.}
+\def\ms{Ms.}
+\def\mrs{Mrs.}
+\def\miss{Miss}
+
+\def\addressee{\ifx\blank\title\else\title\space\fi%
+ \firstname\space\ifx\blank\middlename\else\middlename\space\fi%
+ \lastname\jr}
+\def\person{\ifx\blank\title Sir or Madam\else\title\space\lastname\fi}
+\def\familiar{\ifx\blank\nickname \firstname\else\nickname\fi}
+\def\formal{\ifx\mr\title Sir\else{\ifx\ms\title Madam\else%
+ {\ifx\mrs\title Madam\else{\ifx\miss\title Madam\else{\person}\fi}%
+ \fi}\fi}\fi}
+\endtt
+
+The AutoLetter procedure prompts the user for the names of the address and
+letter files and then goes to work. A similar procedure (called {\smc Labels})
+can also be used with the address file to produce 33 labels/page (3 columns
+of 11 labels). This enables us to produce form letters with or without labels
+or to maintain mailing lists without requiring letters (for abstract mailings,
+for example).
+
+If anyone is interested in having these procedures, drop me a line. If response
+is high, I would be more than willing to provide them to the \TeX\ community
+at large. Mail may be sent to:
+
+\leftline{Bitnet: Bell@UKANVAX}
+\leftline{SPAN: KUPHSX::Bell}
+
+-------
+
diff --git a/info/digests/texhax/txh/bowen.txh b/info/digests/texhax/txh/bowen.txh
new file mode 100644
index 0000000000..625d22a104
--- /dev/null
+++ b/info/digests/texhax/txh/bowen.txh
@@ -0,0 +1,729 @@
+Subject: refer to BiBTeX conversion
+
+Further to Peter King's message in TeXhax Digest V88 #79, I have a
+program which is also based on "awk" and "sed", called "ref2bib" which
+will convert "refer" format to "BibTeX" format. The heuristics have
+been developed by applying the program to a number of "refer" format
+databases here at Oxford. Ref2bib can produce most of the types of
+record which are allowed by BibTeX. Since it is a shell script, ref2bib
+can easily be modified if required. Additionally, if a file called
+".ref2bib" exists in the user's home directory, then this is used as a
+"sed" script source for individual customization. Note that ref2bib
+was developed entirely separately from r2bib and Peter King's program.
+It may or may not make a better job of conversion, depending on the
+"refer" format input supplied. It also has options to determine the
+naming of entries and the folding of output.
+
+The program is accessible from the Programming Research Group archive
+server at Oxford University by mailing a message containing:
+
+ send prog ref2bib.shar
+
+to <archive-server@prg.oxford.ac.uk> or <archive-server@ox-prg.uucp>.
+A message containing "help" can also be sent for more information on
+using the archive server. I am happy for this program to be placed
+on any archive server, etc., in the US and elsewhere to reduce
+international traffic.
+
+
+Jonathan Bowen
+Oxford University Computing Laboratory
+Programming Research Group
+England
+JANET: bowen@uk.ac.oxford.prg
+ARPA: bowen%prg.oxford.ac.uk@nss.cs.ucl.ac.uk
+UUCP: bowen@ox-prg.uucp (...!uunet!mcvax!ukc!ox-prg!bowen)
+------------- snip snip ---------------
+#! /bin/sh
+# This is a shell archive, meaning:
+# 1. Remove everything above the #! /bin/sh line.
+# 2. Save the resulting text in a file.
+# 3. Execute the file with /bin/sh (not csh) to create the files:
+# README
+# Makefile
+# example.ref2bib
+# ref2bib
+# ref2bib.1
+# This archive created: Thu Jun 23 14:22:17 1988
+# By: Jonathan Bowen (Programming Research Group, Oxford University, UK)
+export PATH; PATH=/bin:$PATH
+echo shar: extracting "'README'" '(841 characters)'
+if test -f 'README'
+then
+ echo shar: will not over-write existing file "'README'"
+else
+sed 's/^ X//' << \SHAR_EOF > 'README'
+ XThese files relate to the ``ref2bib'' command for converting
+ Xrefer format bibliographic database files to BibTeX format
+ Xfiles for use with LaTeX. The files include:
+ X
+ X README this file
+ X Makefile make and install files
+ X example.ref2bib example ".ref2bib" file
+ X ref2bib shell script which does the work
+ X ref2bib.1 manual page
+ X
+ X
+ XWritten by
+ X Jonathan Bowen, October 1987.
+ X Oxford University Computing Laboratory,
+ X Programming Research Group,
+ X 8-11 Keble Road,
+ X Oxford OX1 3QD,
+ X England.
+ X Tel: +44-865-272574 (Sec: +44-865-273840)
+ X
+ XCopyright (C) 1987,1988 by J.P.Bowen
+ X
+ XPermission is granted to copy these files for
+ Xnon-profit purposes, provided this notice is left intact.
+ X
+ X JANET: bowen@uk.ac.oxford.prg
+ X ARPA: bowen%prg.oxford.ac.uk@nss.cs.ucl.ac.uk
+ X UUCP: ...!uunet!mcvax!ukc!ox-prg!bowen
+ X
+SHAR_EOF
+if test 841 -ne "`wc -c < 'README'`"
+then
+ echo shar: error transmitting "'README'" '(should have been 841 characters)'
+fi
+fi # end of overwriting check
+echo shar: extracting "'Makefile'" '(329 characters)'
+if test -f 'Makefile'
+then
+ echo shar: will not over-write existing file "'Makefile'"
+else
+sed 's/^ X//' << \SHAR_EOF > 'Makefile'
+ XBIN=/usr/local/bin
+ XMAN=/usr/man/man1
+ XSRC=README Makefile example.ref2bib ref2bib ref2bib.1
+ X
+ Xinstall:
+ X chmod +x ref2bib
+ X cp ref2bib $(BIN)/ref2bib
+ X cp ref2bib.1 $(MAN)/ref2bib.1
+ X chown root $(BIN)/ref2bib $(MAN)/ref2bib.1
+ X chgrp system $(BIN)/ref2bib $(MAN)/ref2bib.1
+ X
+ Xshar:
+ X shar -a $(SRC) > ref2bib.shar
+ X compress ref2bib.shar
+ X
+SHAR_EOF
+if test 329 -ne "`wc -c < 'Makefile'`"
+then
+ echo shar: error transmitting "'Makefile'" '(should have been 329 characters)'
+fi
+fi # end of overwriting check
+echo shar: extracting "'example.ref2bib'" '(226 characters)'
+if test -f 'example.ref2bib'
+then
+ echo shar: will not over-write existing file "'example.ref2bib'"
+else
+sed 's/^ X//' << \SHAR_EOF > 'example.ref2bib'
+ Xs/Sorensen/S{\\o}rensen/g
+ Xs/Jorgensen/J{\\o}rgensen/g
+ Xs/Molgaard/M{\\o}lgaard/g
+ X/^ TITLE = /s/\([{ ]\)Z\([ :\.,}]\)/\1{Z}\2/g
+ X/^ TYPE = /s/onographs}$/onograph}/
+ X/^@/s/{ed\./{Ed/
+ Xs/^ AUTHOR = {\(.*\), ed\.},$/ AUTHOR = {\1},/
+SHAR_EOF
+if test 226 -ne "`wc -c < 'example.ref2bib'`"
+then
+ echo shar: error transmitting "'example.ref2bib'" '(should have been 226 characters)'
+fi
+fi # end of overwriting check
+echo shar: extracting "'ref2bib'" '(10690 characters)'
+if test -f 'ref2bib'
+then
+ echo shar: will not over-write existing file "'ref2bib'"
+else
+sed 's/^ X//' << \SHAR_EOF > 'ref2bib'
+ X#!/bin/sh
+ X#
+ X# ref2bib - convert Unix "refer" format
+ X# to BibTeX "bib" format.
+ X#
+ X# Written by Jonathan Bowen, Oxford University, October 1987.
+ X#
+ X# Copyright (C) 1987, J.P.Bowen
+ X#
+ X# Permission is granted to copy this shell script for
+ X# non-profit purposes, provided this header is left intact.
+ X#
+ X# JANET: bowen@uk.ac.oxford.prg
+ X# ARPA: bowen%prg.oxford.ac.uk@nss.cs.ucl.ac.uk
+ X#
+ X
+ XPATH=/bin:/usr/bin:/usr/ucb
+ XPROGNAME=`basename $0`
+ XDEFAULTWIDTH=72
+ XDEBUG=false
+ XWIDTH=$DEFAULTWIDTH
+ XUSENAME=false
+ XNAMEDFILES=false
+ XBIB=bib
+ X
+ Xwhile expr X$1 : X'-' > /dev/null
+ Xdo
+ X case "$1" in
+ X -|-0|-w)
+ X WIDTH=
+ X ;;
+ X -[1-9]|-[1-9][0-9]|-[1-9][0-9][0-9])
+ X WIDTH=`expr X"$1" : X'-\(.*\)'`
+ X ;;
+ X -a) : Name by author and year
+ X USENAME=true
+ X ;;
+ X -d) : Enable debugging
+ X DEBUG=true
+ X ;;
+ X -n) : Named output files
+ X NAMEDFILES=true
+ X ;;
+ X -u|-U)
+ X echo "Usage: $PROGNAME [ options ] [ file ... ]
+ XConverts Unix \"refer\" format to \"BibTeX\" database format.
+ X-a name entries by author and year (default=$USENAME)
+ X-d enable debugging (default=$DEBUG)
+ X-n output to named files (ext \".$BIB\") (default=$NAMEDFILES)
+ X-w no maximum width
+ X-u display usage information
+ X-N maximum width of N characters (1-999) (default=$DEFAULTWIDTH)"
+ X exit 0
+ X ;;
+ X -*)
+ X echo "Usage: $PROGNAME [ -a -[width] ] [ file ... ]"
+ X exit 0
+ X ;;
+ X esac
+ X shift
+ Xdone
+ X
+ XGEN=`date -u`" on "`hostname`
+ XNAME=$BIB
+ XEDITFILE=$HOME/.$PROGNAME
+ XSTDIN=''
+ XNEWFILE=""
+ X
+ X$DEBUG && echo "Generated: <$GEN>" 1>&2
+ X$DEBUG && echo "Width: <$WIDTH>" 1>&2
+ X
+ X# Process each file, or if none given, standard input
+ Xfor FILE in ${*-$STDIN}
+ Xdo
+ X
+ X# First set up shell variables as required
+ X if [ "$FILE" = "$STDIN" ]
+ X then
+ X NEWFILE=$NAME.$BIB
+ X else
+ X if [ -r "$FILE" -a -f "$FILE" ]
+ X then
+ X NAME=`basename $FILE`
+ X NEWFILE=$FILE.$BIB
+ X else
+ X NAME=""
+ X echo "$PROGNAME: Can't read $FILE" 1>&2
+ X fi
+ X fi
+ X
+ X# If all is OK, read input and terminate with a blank line.
+ X if [ "$NAME" ]
+ X then
+ X if [ "$FILE" = "$STDIN" ]
+ X then
+ X# If no files given, read from standard input.
+ X $DEBUG && echo "Reading from standard input" 1>&2
+ X cat
+ X echo
+ X else
+ X $DEBUG && echo "Reading <$FILE>" 1>&2
+ X cat $FILE
+ X echo
+ X fi |
+ X
+ X# Expand and remove trailing spaces if present
+ Xexpand | sed 's/ *$//' |
+ X
+ X# Next do the real work
+ Xawk 'BEGIN { # Initialization
+ X gen="'"$GEN"'"
+ X default="'"$NAME"'"
+ X }
+ X/^%/ { # Any % line
+ X entry=substr($0,4)
+ X percent=1
+ X }
+ X/^%A / { # Author
+ X if (author == "") {
+ X name4 = substr($NF,1,4)
+ X author = entry
+ X }
+ X else author = sprintf("%s and %s",author,entry)
+ X }
+ X/^%B / { # Book
+ X if (booktitle == "") booktitle = entry
+ X else booktitle = sprintf("%s %s",booktitle,entry)
+ X entrytype = "INCOLLECTION"
+ X }
+ X/^%C / { # City
+ X if (address == "") address = entry
+ X else address = sprintf("%s %s",address,entry)
+ X }
+ X/^%D / { # Date
+ X if (year == "") {
+ X year = $NF
+ X year2 = substr($NF,length($NF)-1)
+ X }
+ X if (month == "" && NF > 2)
+ X month = substr(entry,1,length(entry)-length($NF)-1)
+ X }
+ X/^%E / { # Editor
+ X if (editor == "") editor = entry
+ X else editor = sprintf("%s and %s",editor,entry)
+ X if (entrytype == "") entrytype = "BOOK"
+ X }
+ X/^%F / { # Footnote
+ X if (note == "") note = entry
+ X else note = sprintf("%s %s",note,entry)
+ X }
+ X/^%G / { # Government order number
+ X }
+ X/^%H / { # Header
+ X if (annote == "") annote = entry
+ X else annote = sprintf("%s %s",annote,entry)
+ X }
+ X/^%I / { # Issuer
+ X if (institution == "") institution = entry
+ X else institution = sprintf("%s %s",institution,entry)
+ X }
+ X/^%J / { # Journal
+ X if (index(entry,"Proc.") > 0 || index(entry,"Proceedings") || \
+ X index(entry,"Conference") > 0) {
+ X if (booktitle == "") booktitle = entry
+ X else booktitle = sprintf("%s, %s",booktitle,entry)
+ X entrytype = "INPROCEEDINGS"
+ X }
+ X else {
+ X if (journal == "") journal = entry
+ X else journal = sprintf("%s %s",journal,entry)
+ X entrytype = "ARTICLE"
+ X }
+ X }
+ X/^%K / { # Keyword
+ X if (keywords == "") keywords = entry
+ X else keywords = sprintf("%s, %s",keywords,entry)
+ X }
+ X/^%L / { # Label
+ X if (label == "") label = $2
+ X }
+ X/^%M / { # Memorandum
+ X }
+ X/^%N / { # Number
+ X if (number == "") number = entry
+ X }
+ X/^%O / { # Other (conference)
+ X if (conference == "") conference = entry
+ X else conference = sprintf("%s %s",conference,entry)
+ X entrytype = "INPROCEEDINGS"
+ X }
+ X/^%P / { # Page(s)
+ X if (index(entry,"-") > 0 || index(entry,",") > 0) {
+ X if (pages == "") pages = entry
+ X else pages = sprintf("%s,%s",pages,entry)
+ X }
+ X else if (numberofpages == "") numberofpages = entry
+ X }
+ X/^%Q / { # Corporate or foreign author (surname first)
+ X if (author == "") {
+ X name4 = substr($2,1,4)
+ X author = entry
+ X }
+ X else author = sprintf("%s and %s",author,entry)
+ X }
+ X/^%R / { # Report, paper or thesis (i.e. unpublished)
+ X if (index(entry,"Ph") > 0) entrytype="PHDTHESIS"
+ X if (index(entry,"hesis") > 0) entrytype="PHDTHESIS"
+ X if (index(entry,"Sc") > 0) entrytype="MASTERSTHESIS"
+ X if (index(entry,"aster") > 0) entrytype="MASTERSTHESIS"
+ X if (index(entry,"ech") > 0) entrytype="TECHREPORT"
+ X if (index(entry,"eport") > 0) entrytype="TECHREPORT"
+ X if (index(entry,"aper") > 0) entrytype="UNPUBLISHED"
+ X if (index(entry,"orking") > 0) entrytype="UNPUBLISHED"
+ X if (index(entry,"npub") > 0) entrytype="UNPUBLISHED"
+ X if (index(entry,"ocument") > 0) entrytype="MANUAL"
+ X if (index(entry,"anual") > 0) entrytype="MANUAL"
+ X if (entrytype=="UNPUBLISHED") {
+ X if (note == "") note = entry
+ X else note = sprintf("%s %s",note,entry)
+ X }
+ X else {
+ X if (type == "") type = entry
+ X }
+ X }
+ X/^%S / { # Series title
+ X if (series == "") series = entry
+ X else series = sprintf("%s %s",series,entry)
+ X if (index(entry,"Tech") > 0) entrytype="TECHREPORT"
+ X }
+ X/^%T / { # Title
+ X if (title == "") title = entry
+ X else title = sprintf("%s %s",title,entry)
+ X }
+ X/^%U / { # Unused
+ X }
+ X/^%V / { # Volume
+ X if (volume == "") volume = entry
+ X }
+ X/^%X / { # Abstract
+ X abstract[++xcount] = entry
+ X }
+ X/^%Y / { # Unused
+ X }
+ X/^%Z / { # Can be used to supply an entry name
+ X name = entry
+ X }
+ X/^[^%]/ { # Other lines - abstract if started by "%X" field
+ X if (xcount != 0)
+ X abstract[++xcount] = $0
+ X }
+ X/^$/ { # Empty line delimits a record
+ X if (percent == 1) { # End of a record
+ X if (index(entrytype,"BOOK") > 0) {
+ X publisher = institution
+ X institution = ""
+ X }
+ X if (entrytype == "" || entrytype == "BOOK") {
+ X if (pages != "") {
+ X if (booktitle != "") entrytype = "INCOLLECTION"
+ X else entrytype = "INBOOK"
+ X }
+ X }
+ X if (entrytype == "MANUAL" || index(entrytype,"PROCEEDINGS") > 0) {
+ X organization = institution
+ X institution = ""
+ X }
+ X if (entrytype == "TECHREPORT") {
+ X if (type == "") {
+ X type = series
+ X if (substr(type,length(type)) == "s") {
+ X type = substr(type,1,length(type)-1)
+ X }
+ X series = ""
+ X }
+ X if (number == "") {
+ X number = volume
+ X volume = ""
+ X }
+ X }
+ X if (index(entrytype,"THESIS") > 0) {
+ X school = institution
+ X institution = ""
+ X }
+ X if ("'"$USENAME"'" == "true") name = sprintf("%s%s",name4,year2)
+ X if (name == "") name = default;
+ X if (entrytype == "") entrytype = "MISC";
+ X printf "\n@%s{%s:%03d,\n",entrytype,name,++num
+ X if (author != "")
+ X printf "\tAUTHOR = {%s},\n",author;
+ X if (editor != "")
+ X printf "\tEDITOR = {%s},\n",editor;
+ X if (title != "")
+ X printf "\tTITLE = {%s},\n",title;
+ X if (booktitle != "")
+ X printf "\tBOOKTITLE = {%s},\n",booktitle;
+ X if (journal != "")
+ X printf "\tJOURNAL = {%s},\n",journal;
+ X if (volume != "")
+ X printf "\tVOLUME = {%s},\n",volume;
+ X if (number != "")
+ X printf "\tNUMBER = {%s},\n",number;
+ X if (pages != "")
+ X printf "\tPAGES = {%s},\n",pages;
+ X if (type != "")
+ X printf "\tTYPE = {%s},\n",type;
+ X if (series != "")
+ X printf "\tSERIES = {%s},\n",series;
+ X if (institution != "")
+ X printf "\tINSTITUTION = {%s},\n",institution;
+ X if (organization != "")
+ X printf "\tORGANIZATION = {%s},\n",organization;
+ X if (school != "")
+ X printf "\tSCHOOL = {%s},\n",school;
+ X if (publisher != "")
+ X printf "\tPUBLISHER = {%s},\n",publisher;
+ X if (address != "")
+ X printf "\tADDRESS = {%s},\n",address;
+ X if (conference != "")
+ X printf "\tCONFERENCE = {%s},\n",conference;
+ X if (key != "")
+ X printf "\tKEY = {%s},\n",key;
+ X if (keywords != "") # Non-standard keyword field
+ X printf "\tKEYWORDS = {%s},\n",keywords;
+ X if (label != "") # Non-standard label field
+ X printf "\tLABEL = {%s},\n",label;
+ X if (numberofpages != "") # Non-standard length (in pages) field
+ X printf "\tLENGTH = {%s},\n",numberofpages;
+ X if (year != "")
+ X printf "\tYEAR = {%s},\n",year;
+ X if (month != "")
+ X printf "\tMONTH = {%s},\n",month;
+ X if (annote != "")
+ X printf "\tANNOTE = {%s},\n",annote;
+ X if (note != "")
+ X printf "\tNOTE = {%s},\n",note;
+ X if (xcount != 0) {
+ X printf "\tABSTRACT = {%s",abstract[1];
+ X for (i=2; i<=xcount; i++)
+ X printf "\n\t\t%s",abstract[i];
+ X printf "},\n"
+ X }
+ X printf "\tGENERATED = {%s}\n}\n",gen
+ X }
+ X author=""
+ X booktitle=""
+ X address=""
+ X year=""
+ X month=""
+ X editor=""
+ X annote=""
+ X note=""
+ X institution=""
+ X organization=""
+ X school=""
+ X publisher=""
+ X address=""
+ X conference=""
+ X journal=""
+ X key=""
+ X keywords=""
+ X label=""
+ X number=""
+ X pages=""
+ X numberofpages=""
+ X type=""
+ X series=""
+ X title=""
+ X volume=""
+ X name=""
+ X entrytype=""
+ X name4=""
+ X year2=""
+ X percent=0
+ X xcount=0
+ X }' |
+ X
+ X# Some things can be automatically edited
+ X sed 's/\([\\\$&#^_]\)/\\\1/g
+ Xs/\([{ ]\)LaTeX\([} :]\)/\1{\\LaTeX}\2/g
+ Xs/\([{ ]\)TeX\([} :]\)/\1{\\TeX}\2/g
+ X/^ TITLE = /{
+ X s/\([{ ]\)\([B-Z]\)\([ :\.,}]\)/\1{\2}\3/g
+ X s/\([{ ]\)\([A-Z][A-Z][A-Z]*\)\([ :\.,}]\)/\1{\2}\3/g
+ X}
+ Xs/\\0/\~/g
+ Xs/"\([^"]*\)"/``\1'"''"'/g
+ Xs/ - / --- /g
+ Xs/\([0-9]\)-\([0-9]\)/\1--\2/g' |
+ X
+ X# Other edits can be customised by the user
+ X if [ -r $EDITFILE -a -f $EDITFILE ]
+ X then
+ X sed -f $EDITFILE
+ X else
+ X cat
+ X fi |
+ X
+ X# Optionally fold lines
+ X if [ "$WIDTH" ]
+ X then
+ X awk 'BEGIN {width='"$WIDTH"'}
+ X/^[^ ]|^$/ {printf "\n%s",$0} # Print most lines normally
+ X/^ [^ ]/ { # Fold lines starting with a single tab
+ X i=1
+ X while (i <= NF) {
+ X if (i > 1) {
+ X printf "\n\t\t%s",$i
+ X pos = 16+length($i)
+ X }
+ X else {
+ X printf "\n\t%s",$i
+ X pos = 8+length($i)
+ X }
+ X if (++i <= NF) {
+ X pos += 1+length($i)
+ X while (pos <= width) {
+ X printf " %s",$i
+ X if (++i > NF) break
+ X pos += 1+length($i)
+ X }
+ X }
+ X }
+ X }
+ X/^ / { # Fold multiple lines starting with a double tab
+ X i=1
+ X while (i <= NF) {
+ X pos += 1+length($i)
+ X if (pos > width) {
+ X printf "\n\t\t%s",$i
+ X pos = 16+length($i)
+ X }
+ X else {
+ X printf " %s",$i
+ X }
+ X if (++i <= NF) {
+ X pos += 1+length($i)
+ X while (pos <= width) {
+ X printf " %s",$i
+ X if (++i > NF) break
+ X pos += 1+length($i)
+ X }
+ X }
+ X }
+ X }
+ XEND {printf "\n"}'
+ X else
+ X cat
+ X fi |
+ X
+ X# Finally, output to named files or standard output
+ X if $NAMEDFILES
+ X then
+ X $DEBUG && echo "Output to <$NEWFILE>" 1>&2
+ X cat > $NEWFILE
+ X else
+ X cat
+ X fi
+ X
+ X fi
+ Xdone
+ X
+ Xexit 0
+SHAR_EOF
+echo shar: 1 control character may be missing from "'ref2bib'"
+if test 10690 -ne "`wc -c < 'ref2bib'`"
+then
+ echo shar: error transmitting "'ref2bib'" '(should have been 10690 characters)'
+fi
+chmod +x 'ref2bib'
+fi # end of overwriting check
+echo shar: extracting "'ref2bib.1'" '(3078 characters)'
+if test -f 'ref2bib.1'
+then
+ echo shar: will not over-write existing file "'ref2bib.1'"
+else
+sed 's/^ X//' << \SHAR_EOF > 'ref2bib.1'
+ X.TH REF2BIB 1L "23 October 1987"
+ X.UC
+ X.SH NAME
+ Xref2bib \- convert refer formatted records to BibTeX format
+ X.SH SYNOPSIS
+ X.B ref2bib
+ X[ options ] [ file ... ]
+ X.SH DESCRIPTION
+ X.I Ref2bib
+ Xreads input from a number of files or standard input.
+ XGroups of consecutive lines starting with a ``%'' character
+ Xare assumed to be records in \fIrefer\fP(1) format
+ Xseparated by one or more empty lines.
+ X(See the \fIaddbib\fP(1) manual page for further details.)
+ XThese are translated into BibTeX database format records on
+ Xstandard output.
+ XOther lines are ignored and thrown away except for
+ Xlines after an ``%X'' field in a record (see below).
+ XDetails of the BibTeX format may be found in the
+ XLaTeX User's Guide & Reference Manual on pp140\-147.
+ X.PP
+ XThe BibTeX records are given names of the form ``filename:ddd''
+ Xwhere ``filename'' is the basename of the current file
+ X(or ``bib'' if reading from standard input), and ``ddd'' is
+ Xa three digit number starting from ``001''.
+ XThe filename may be replaced by including a (normally unused)
+ X``%Z'' field in the refer record.
+ X.PP
+ XThe ``%X'' field may be used to hold an abstract.
+ XAny lines in a record after a ``%X'' which do not start
+ Xwith a ``%'' are considered to hold further abstract details
+ Xand are included in the corresponding BibTeX record.
+ X.PP
+ XSome words and character sequences (such as ``LaTeX'') are detected
+ Xin the input automatically and converted to a suitable LaTeX form.
+ XThe BibTeX output may be further massaged through \fIsed\fP(1)
+ Xby placing a \fIsed\fP script in the file \fI$HOME/.ref2bib\fP.
+ XFor example, accents for known names may be added automatically.
+ XE.g.:
+ X.IP
+ Xs/Sorensen/S{\\\\o}rensen/g
+ X.LP
+ XNote that backslashes need to be doubled up since they are normally
+ Xused as an escape sequence.
+ X.PP
+ XThe output is normally folded at word boundaries to ensure that
+ Xlines do not become too long on output.
+ X.SH OPTIONS
+ XThe following options are available:
+ X.TP 10
+ X.B \-N
+ XSpecify a maximum width for the output.
+ XThe default is 72 characters.
+ XIf N is omitted then lines are not folded and may be of any length.
+ X.TP 10
+ X.B \-a
+ XName the record using the first four letters of the first author's
+ Xsurname and the last two digits of the year, rather than using
+ Xthe filename (e.g. ``Bowe87:001'').
+ X.TP 10
+ X.B \-n
+ XUse the name of the input file(s) to produce output file(s) with
+ Xthe same name and extension ``.bib'' rather than sending the output
+ Xto standard output.
+ X.TP 10
+ X.B \-u
+ XDisplay the usage of the command.
+ X.TP 10
+ X.B \-w
+ XDo not fold the output. Lines may be of any length.
+ X.SH FILES
+ X.PD 0
+ X.TP 40
+ X$HOME/.ref2bib
+ X\fIsed\fP script for output
+ X.TP 40
+ X*.bib
+ XBibTeX database files
+ X.TP 40
+ X*.bst
+ XBibTeX style files
+ X.PD
+ X.SH "SEE ALSO"
+ Xaddbib(1),
+ Xbibtex(1),
+ Xfold(1),
+ Xlatex(1),
+ Xrefer(1),
+ Xsed(1),
+ X.br
+ X``LaTeX User's Guide & Reference Manual'' by Leslie Lamport
+ X.SH AUTHOR
+ XJonathan Bowen, Oxford University
+ X.SH BUGS
+ XThis program is not perfect, needless to say, and thus
+ Xthe output produced may require further hand editing.
+ X.PP
+ XThe shell script and manual page may change without notice.
+ X.PP
+ XPlease report problems to \fI<bowen@uk.ac.oxford.prg>\fP.
+SHAR_EOF
+if test 3078 -ne "`wc -c < 'ref2bib.1'`"
+then
+ echo shar: error transmitting "'ref2bib.1'" '(should have been 3078 characters)'
+fi
+fi # end of overwriting check
+# End of shell archive
+exit 0
+
+-------
+
diff --git a/info/digests/texhax/txh/gatzka.txh b/info/digests/texhax/txh/gatzka.txh
new file mode 100644
index 0000000000..f5bd3c6665
--- /dev/null
+++ b/info/digests/texhax/txh/gatzka.txh
@@ -0,0 +1,548 @@
+Date: Mon, 27-Jul-1987 19:55:05.68 GMT+1
+From: <zrgc002%dtupev5a.bitnet@forsythe.stanford.edu> (Christoph D. Gatzka)
+Subject: New files, mail access...
+To: <texhax@score.stanford.edu>
+
+In the continued effort to make our life a little bit harder, the system
+manager left node DTUZDV5A down for nearly 10 days. Therefore access to
+INTERACT@DTUPEV5A was impossible. The file server being part of INTERACT
+now also accepts two types of files:
+
+ 1) Any file understood by Jnet systems that is not mail. Commands must
+ be present in the file one per line. All files will be sent directly
+ from INTERACT to you.
+
+ 2) Mail that contains a VALID RFC822 header and somewhere in the mail body
+ the following lines starting with column 1.
+
+ @
+ your-mail-address
+ command-1
+ command-2
+ .
+ .
+ .
+ @
+
+ Where 'your-mail-address' is your mail address as understood by the
+ Columbia mailer running at DEARN. All files will be returned as mail.
+ For VAX/VMS systems there is a neat pascal program that restores all
+ files with decoding and 'un'wrapping from the output from EXTRACT in
+ mail - send the 'SOFT MFTU' command to INTERACT.
+
+ This means that the file server portion of INTERACT is now also available
+ to people on other nets or to people, to whom the direct routing of files
+ is impossible due to old routing tables.
+
+If you are not familiar with the file server, try 'HELP' as command. It now
+features the following files: (LaTeXstyles, CTeX, DVIdrivers ...)
+
+The name in <> is the product name that must be specified when requesting the
+files from INTERACT. There is also a short help available (send the message
+'HELP' to INTERACT@DTUPEV5A). Standard VMS wildcards may be used in the product
+name. For instance <LATEXSTYLE...> would send you all the files available.
+Please be very reasonable when requesting files, since this server is not an
+official one and is located at a bitnet end node, whose purpose is NOT to act
+as a file server. Thus please request ONLY THOSE FILES you really can use/need.
+For instance to request the file siam10.sty, which is in product group
+<LATEXSTYLE.SIAM> send the message 'SOFT LATEXSTYLE.SIAM' to INTERACT@DTUPEV5A.
+
+On a VAX/VMS system you would type:
+
+$ SEND INTERACT@DTUPEV5A SOFT LATEXSTYLE.SIAM
+
+or use the mail/file methods as described above.
+
+All suggestions and complaints should be sent to ZRGC002@DTUPEV5A, nowhere else.
+Please note that the files cannot be sent in any other format.
+
+Please note that all files had their TABs expanded before sending, thus you
+will have to take special care of the Unix Makefiles, FormFeeds were expanded
+to exactly TEN new lines.
+
+<LATEXSTYLE.DOUBLESPACE>
+doublespace.sty Double spacing in text
+
+<LATEXSTYLE.DRAFTHEAD>
+drafthead.sty Prints DRAFT in heading
+
+<LATEXSTYLE.SIAM>
+siam10.doc SIAM LaTeX style and BibTeX style
+siam10.sty
+siam11.sty
+siam12.sty
+siam.doc
+siam.sty
+siam.bst
+siam.tex
+siam.bib
+
+<LATEXSTYLE.IEEETR>
+ieeetr.bst IEEE Transactions BibTeX style
+
+<LATEXSTYLE.ACM>
+acm.bst ACM BibTeX style
+
+<LATEXSTYLE.VDM>
+vdm.tex Vienna Development Method LaTeX style
+vdm.doc
+vdm.sty
+
+<LATEXSTYLE.SUTHESIS>
+suthesis.doc Stanford U thesis style
+suthesis.sty
+
+<LATEXSTYLE.DEPROC>
+deproc.sty DECUS proceedings style
+deprocldc.tex Paper that describes the above
+
+<LATEXSTYLE.DOCSTY>
+docsty.c Program to convert .doc to .sty by stripping comments
+docsty.readme
+
+<LATEXSTYLE.FULLPAGE>
+fullpage.doc Get more out of a page
+fullpage.sty
+
+<LATEXSTYLE.SLEM>
+slem.doc Change \sl to \em
+slem.sty
+
+<LATEXSTYLE.NOPAGENUMBERS>
+nopagenumbers.doc Remove page numbers
+nopagenumbers.sty
+
+<LATEXSTYLE.TEXNAMES>
+texnames.doc Define a couple more TeX names
+texnames.sty
+
+<LATEXSTYLE.NEWALPHA>
+newalpha.bst Modified alphabetic BibTeX style
+
+<LATEXSTYLE.SPACECITES>
+spacecites.doc Modified to give spacing between citations.
+spacecites.sty
+
+<LATEXSTYLE.WSLTEX>
+wsltex.p Wordstar to LaTeX filter
+ws87.p Wordstar 8 bit filter
+wsltex.c C version
+
+<LATEXSTYLE.LAYOUT>
+layout.tex Prints nice diagram showing page parameters
+layout.readme
+
+<LATEXSTYLE.UCTHESIS>
+ucthesis.readme U of California thesis style
+ucthesis.doc
+uct10.doc
+uct11.doc
+uct12.doc
+
+<LATEXSTYLE.LFONTSAMS>
+lfonts_ams.readme Use AMS symbols in LaTeX
+lfonts_ams.tex
+
+<LATEXSTYLE.A4>
+a4.sty Set page size to A4
+a4wide.sty Adjusts width too to suit A4
+
+<LATEXSTYLE.BIIHEAD>
+biihead.sty Underlined heading
+
+<LATEXSTYLE.EPIC>
+epic.sty Extended picture environment
+misc.sty
+picman.tex
+picman-fig1.tex
+picman-fig2.tex
+picman-fig3.tex
+readme.epic
+sqrt.tex
+
+<LATEXSTYLE.LGRAPH>
+lgraph.doc Data to graph command filter in Pascal
+lgraph.p
+lgraph.skel
+
+<LATEXSTYLE.DVIDOC>
+doc.pl DVIDOC, DVI to character device filter for Unix
+docmac.tex BSD systems
+dvidoc.1
+dvidoc.web
+dvityext.c
+dvityext.h
+makefile
+readme
+texpaths.h
+dvidoc.sty Style file to substitute all fonts with doc font
+
+<LATEXSTYLE.THREEPART>
+threepart.sty Three part page headers
+
+<LATEXSTYLE.FORMAT>
+format.sty Print FP numbers in fixed format
+
+<LATEXSTYLE.TEXINDEX>
+texindex.doc Style file and processor for index entries. Works
+texindex.pas under VMS.
+texindex.sty
+
+<LATEXSTYLE.AMSSYMBOLS>
+amssymbols.sty Load AMS font
+
+<LATEXSTYLE.CYRILLIC>
+cyrillic.sty Load Cyrillic font
+
+<LATEXSTYLE.AGU>
+agugrl.sty AGU Geophysical Research Letters style
+agujgr.sty AGU Journal of Geophysical Research style
+
+<LATEXSTYLE.GEOPHYSICS>
+geophysics.sty Geophysics journal style
+
+<LATEXSTYLE.NATSCI>
+natsci.bst natural sciences generic BibTeX style
+
+<LATEXSTYLE.AAAI>
+aaai.sty Style file for AAAI conference 1987
+aaai_named.bst BibTeX style to accompany
+aaai_instructions.tex Instructions to authors
+
+<LATEXSTYLE.DAYOFWEEK>
+dayofweek.tex Macros to compute day of week and phase of moon
+ Examples of how to use TeX arithmetic capabilities
+
+<LATEXSTYLE.CTEX>
+ctex.readme Sources to Pat Monardo's Common-TeX in C
+00readme.
+align.c
+align.h
+arith.c
+arith.h
+box.c
+box.h
+boxlists.c
+boxlists.h
+char.c
+char.h
+cmds.c
+cmds.h
+cond.c
+cond.h
+copyright.
+def.c
+def.h
+dvi.c
+dvi.h
+eq.c
+eq.h
+eqstack.c
+eqstack.h
+error.c
+error.h
+eval.c
+eval.h
+evalstack.c
+evalstack.h
+expand.c
+expand.h
+file.c
+file.h
+fix.text
+fmt.c
+fmt.h
+hash.c
+hash.h
+heap.c
+heap.h
+hyph.c
+hyph.h
+io.c
+io.h
+makefile.
+math.c
+math.h
+mathlists.c
+mathlists.h
+mlist_hlist.c
+mlist_hlist.h
+pack.c
+pack.h
+page.c
+page.h
+par.c
+par.h
+print.c
+print.h
+read17.
+scan.c
+scan.h
+src.
+string.c
+string.h
+tex.c
+tex.h
+texext.c
+texext.h
+tfm.c
+tfm.h
+token.c
+token.h
+tokenlists.c
+tokenlists.h
+tokenstack.c
+tokenstack.h
+
+
+<LATEXSTYLE.LCUSTOM>
+lcustom.tex Useful macros and definitions for LaTeX
+
+<LATEXSTYLE.SFWMAC>
+sfwmac.sty Useful macros for Unix documentation
+
+<LATEXSTYLE.TGRIND>
+tgrind.sty Tgrind macros for LaTeX instead of TeX
+
+<LATEXSTYLE.TRADEMARK>
+trademark.sty Definitions of common trademarks
+
+<LATEXSTYLE.XXX>
+xxxcustom.tex Supplementary macros for xxx-tex, for some xxx
+xxxslides.sty Supplementary macros for SliTeX, includes slides.sty
+
+<LATEXSTYLE.LOCAL>
+local.suppl Supplement to local guide that describes last 6 files
+
+<LATEXSTYLE.REMARK>
+remark.sty Like newtheorem but no \it
+
+The following files are unique to this file server and are not present at
+rochester:
+
+<LATEXSTYLE.TEXTOOLS>
+textools.sh Useful tools for TeX on Unix from Kamal Al-Yahya
+
+<LATEXSTYLE.TROFFTOTEX>
+tr2tex.sh Troff to TeX Converter from Kamal Al-Yahya runs on Unix
+
+<LATEXSTYLE.DVIBEEBE...>
+This directory tree contains the Public-Domain DVI drivers written in C from
+Nelson F. Beebe. You will need the specific driver PLUS the contents of the
+HFILES directory PLUS the contents of the operating system directory. All
+drivers compile under TOPS-20, UNIX 4.1BSD, HP-UX, VMS, EUNICE, IBM PC Lattice,
+Wizard and Microsoft as well as under many other C compilers.
+
+<LATEXSTYLE.DVIBEEBE.DOCUMENTATION>
+drinotice.stx Short notice on driver family
+
+dvidriver.aux
+dvidriver.ids
+dvidriver.idx
+dvidriver.ltx Driver internals description
+dvidriver.sty
+dvidriver.toc
+
+dviman.aux
+dviman.ltx Driver user's manual
+dviman.texinfo
+dviman.toc
+
+00mail.1 Some mails describing problems and solutions
+00mail.2
+00mail.3
+00mail.4
+00mail.5
+00mail.6
+
+00readme.txt Information about distribution files
+00revhst.txt Revision history
+dvi.hlp Help file
+dvi.lrf Cross-reference map
+story.tex canonical TeX test file
+texidx.hlp Help file for Texidx.exe
+dvi.info TOPS-20 emacs xinfo file
+tex.info TOPS-20 emacs xinfo file
+tex.ulp source for TEX.INFO
+makefile. General unix makefile
+
+<LATEXSTYLE.DVIBEEBE.DVIALW>
+dvialw.c Driver for the Apple Laserwriter
+dvialw.ps PostScript header macros for DVIALW
+
+<LATEXSTYLE.DVIBEEBE.DVIBIT>
+dvibit.c Driver for the BBN Bitgraph terminal
+
+<LATEXSTYLE.DVIBEEBE.DVICAN>
+dvican.c Driver for the Canon LBP-8 A1/A2 Laser printer
+canon.ltx Description of printer commands
+
+<LATEXSTYLE.DVIBEEBE.DVIIMP>
+dviimp.c
+
+<LATEXSTYLE.DVIBEEBE.DVIGD>
+dvigd.c Driver for the Golden Dawn Golden Laser 100 printer
+
+<LATEXSTYLE.DVIBEEBE.DVIJET>
+dvijet.c Driver for the HP Laserjet printer
+
+<LATEXSTYLE.DVIBEEBE.DVIJEP>
+dvijep.c Driver for the HP Laserjet Plus printer
+
+<LATEXSTYLE.DVIBEEBE.DVIL75>
+dvil75.c
+
+<LATEXSTYLE.DVIBEEBE.DVIM72>
+dvim72.c Driver for the Apple Imagewriter printer in 72 dpi mode
+
+<LATEXSTYLE.DVIBEEBE.DVIMAC>
+dvimac.c Driver for the Apple Imagewriter printer in 144 dpi mode
+
+<LATEXSTYLE.DVIBEEBE.DVIMPI>
+dvimpi.c Driver for the MPI Sprinter printer
+
+<LATEXSTYLE.DVIBEEBE.DVIO72>
+dvio72.c Driver for the Okidata Pacemark 2410 in 72 dpi mode
+
+<LATEXSTYLE.DVIBEEBE.DVIOKI>
+dvioki.c Driver for the Okidata Pacemark 2410 in 144 dpi mode
+
+<LATEXSTYLE.DVIBEEBE.DVIPRX>
+dviprx.c Driver for the Printronix printer family
+
+<LATEXSTYLE.DVIBEEBE.DVITOS>
+dvitos.c Driver 24-pin printers, like the Toshiba P-1351
+derun.c Program for run-length coding debugging
+tosprx.c Toshiba P1351 to Printronix 300/600 plot file translator
+
+<LATEXSTYLE.DVIBEEBE.EUN>
+makefile.eun Eunice makefile
+
+<LATEXSTYLE.DVIBEEBE.HFILES>
+abortrun.h
+actfact.h
+alldone.h
+bitmap.h
+bopact.h
+chargf.h
+charpk.h
+charpxl.h
+clrbmap.h
+clrrow.h
+commands.h
+dispchar.h
+dumpchar.h
+dvifile.h
+dvihead.h
+dviinit.h
+dviterm.h
+eopact.h
+f20open.h
+fatal.h
+fillrect.h
+findpost.h
+fixpos.h
+fontfile.h
+fontsub.h
+gblprocs.h
+gblvars.h
+gendefs.h
+getbmap.h
+getbytes.h
+getfntdf.h
+getpgtab.h
+inch.h
+initglob.h
+keydef.h
+loadchar.h
+machdefs.h
+main.h
+movedown.h
+moveover.h
+moveto.h
+nosignex.h
+openfont.h
+option.h
+outrow.h
+prtpage.h
+prxbmap.h
+readfont.h
+readgf.h
+readpk.h
+readpost.h
+readpxl.h
+reldfont.h
+rulepxl.h
+setchar.h
+setfntnm.h
+setrule.h
+signex.h
+skgfspec.h
+skipfont.h
+skpkspec.h
+special.h
+strchr.h
+strcm2.h
+strid2.h
+strrchr.h
+tctos.h
+typedefs.h
+usage.h
+warning.h
+getlog.c
+keybrd.c
+keytest.c
+
+<LATEXSTYLE.DVIBEEBE.IBMPC>
+makefile.1 IBM PC makefile 1/3
+makefile.2 IBM PC makefile 2/3
+makefile.msc IBM PC makefile 3/3
+errshow.c Microsoft C program to format error messages.
+
+<LATEXSTYLE.DVIBEEBE.LPTOPS>
+lpt.ps PostScript header macros for printing text files
+lptops.hlp Help file for LPTOPS.EXE
+lptops.c C source for LPTOPS.EXE
+lptops.1l Troff source for LPTOPS help
+
+<LATEXSTYLE.DVIBEEBE.LW78>
+lw78 Apple Laserwriter copy utility
+
+<LATEXSTYLE.DVIBEEBE.TEST>
+00ARIT.C Tests compiler arithmetic
+
+<LATEXSTYLE.DVIBEEBE.TOPS20>
+makefile.d20 Makefiles for the DEC TOPS-20 operating system
+makefile.t20
+makefile.kcc
+makefile.pcc
+zrmkcc.c TOPS-20 fast memory clear
+zerom.mac TOPS-20 fast memory clear
+
+<LATEXSTYLE.DVIBEEBE.TEXIDX>
+texidx.c TeX index program
+gnuindex.sty Style file for indexer
+
+<LATEXSTYLE.DVIBEEBE.VMS>
+makefile.vms1 Makefiles for the VAX/VMS operating system
+makefile.vms2
+vaxvms.c Alternatives for unacceptable VAX/VMS library functions
+00make.com To provide a distribution for VAX/VMS sites without C
+ccom.com Comand file to build executables
+
+<LATEXSTYLE.DVIBEEBE.XXU>
+xxu.c Converts 'strange' file names to Unix syntax
+
+
+Here are some special characters that may have been badly translated: Open
+brace ({), close brace (}), exclamation mark (!), vertical line (|), open
+bracket ([), close bracket (]).
+
+ Christoph D. Gatzka zrgc002@dtupev5a.bitnet
+ Student of medicine
+
+ University of Tuebingen
+ Germany
+
+-------
+
diff --git a/info/digests/texhax/txh/kesner.txh b/info/digests/texhax/txh/kesner.txh
new file mode 100644
index 0000000000..3beb36bc04
--- /dev/null
+++ b/info/digests/texhax/txh/kesner.txh
@@ -0,0 +1,475 @@
+Subject: Hershey fonts
+
+This submission is being sent in response to a question in texhax [#70].
+I (jok@gpu.utcs.toronto.edu) am posting this submission for my father, Oliver.
+Consequently, everything after this paragraph is written by him. I will
+accept any responses and forward them to him. His interest in TeX
+revolves around multi-lingual (hobby) desktop publishing.
+
+Hershey fonts for the IBM PC are available from SoftCraft, Inc., and from
+Austin Code Works. The SoftCraft set consists of four separate databases:
+ HERSHEY.CHR 1594 characters
+ ORIENT.CHR 758 char.
+ PERSIAN.CHR 135 char.
+ HEBREW.CHR 49 char.
+The HERSHEY.CHR database includes, besides several Roman typefaces, Greek,
+Russian, German Fraktur, and a variety of graphic symbols; the ORIENT.CHR
+database has hiragana, katakana, and 623 kanji characters.
+
+The format of the SoftCraft Hershey databases is given in their "Font Editing:
+EFONT/CFONT User's Manual" on p. A5-2. Using this description, I wrote the
+following Turbo Pascal 4.0 program to generate METAFONT source code from the
+Hershey plotter directives:
+
+HERSHEY.PAS
+-----------
+{$R-} {Range checking off}
+{$B-} {Short-circuit Boolean evaluation}
+{$S-} {Stack checking off}
+{$I+} {I/O checking on}
+{$N-} {Numeric coprocessor absent}
+{$M 65500, 16384, 655360} {Turbo 3 default stack and heap}
+
+program Hershey; {generates METAFONT source code from a Hershey character
+ database in SoftCraft format}
+const
+ NMax = 157; {maximum number of plotter pen movement commands for one
+ character in the databases}
+ PenUp = $4000;
+ EndOfChar = 0;
+var
+ H : file of integer; {Hershey database input}
+ Log : text; {METAFONT source output}
+ Code, Depth, EndChar, Height, I, J, K, N, StartChar, Width, XMax, XMin, Y0,
+ YMax, YMin : integer;
+ XY : array[0..NMax] of integer; {(x, y) coordinates}
+ Z : array[1..NMax] of byte; {METAFONT variables}
+ Database : string[7]; {database filename without extension}
+
+procedure ReadH; {reads a plotter directive from the input file}
+begin
+ if Eof(H) then
+ begin
+ Writeln('End of file at char = ', Code);
+ Close(H);
+ Close(Log);
+ Halt;
+ end;
+ Inc(N);
+ Read(H, XY[N]);
+end; {ReadH}
+
+begin
+ if ParamCount <> 3 then
+ begin
+ Writeln('Usage: HERSHEY database start end');
+ Halt;
+ end;
+ Database := ParamStr(1);
+ for Code := 1 to 7 do
+ Database[Code] := UpCase(Database[Code]);
+ Val(ParamStr(2), StartChar, Code);
+ if Code <> 0 then
+ begin
+ Writeln('Starting character not an integer');
+ Halt;
+ end;
+ Val(ParamStr(3), EndChar, Code);
+ if Code <> 0 then
+ begin
+ Writeln('Ending character not an integer');
+ Halt;
+ end;
+ Assign(H, Database + '.CHR');
+ Reset(H);
+ Assign(Log, Database + '.LOG');
+ Rewrite(Log);
+ Writeln(Log, '% ', Database + '.CHR ', StartChar, ' to ', EndChar);
+ for Code := 0 to StartChar do
+ begin
+ N := -1;
+ repeat
+ ReadH;
+ until XY[N] = EndOfChar;
+ end; {skip forward to specified start character}
+ Z[1] := 1;
+ for Code := StartChar to EndChar do
+ begin
+ Writeln(Log);
+ Writeln(Log, 'cmchar "', Database, ' ', Code, '";');
+ N := -1;
+ ReadH; {the width bytes}
+ XMin := Lo(XY[0]); {minimum x coordinate}
+ XMax := Hi(XY[0]); {maximum x coordinate}
+ Width := XMax - XMin; {width of character}
+ Y0 := 73; {default y bias}
+ if Database = 'HERSHEY' then
+ case Code of
+ 0..88: Y0 := 68;
+ 397..672: Y0 := 70;
+ end;
+ {Find minimum and maximum y values.}
+ YMax := 0;
+ YMin := 256;
+ repeat
+ ReadH;
+ if (XY[N] <> PenUp) and (XY[N] <> EndOfChar) then
+ begin
+ if Hi(XY[N]) > YMax then
+ YMax := Hi(XY[N]);
+ if Hi(XY[N]) < YMin then
+ YMin := Hi(XY[N]);
+ end; {if a real coordinate}
+ until XY[N] = EndOfChar;
+ Height := Y0 - YMin;
+ if YMax > Y0 then
+ Depth := YMax - Y0
+ else
+ Depth := 0;
+ Writeln(Log, 'beginchar(', Code mod 128, ', ', Width, 'u#, ', Height,
+ 'u#, ', Depth, 'u#);');
+ Writeln(Log, 'adjust_fit(0, 0);');
+ Writeln(Log, 'pickup plotter_pen;');
+ for I := 2 to Pred(N) do
+ begin {enumerate unique coordinates}
+ Z[I] := 0;
+ if XY[I] <> PenUp then
+ begin
+ for J := Pred(I) downto 1 do
+ if XY[I] = XY[J] then
+ Z[I] := J;
+ if Z[I] = 0 then
+ Z[I] := I;
+ end;
+ end;
+ for I := 1 to Pred(N) do
+ if Z[I] = I then
+ Writeln(Log, 'z', I, ' = (', Lo(XY[I]) - XMin, 'u, ', Y0 - Hi(XY[I]),
+ 'u);');
+ I := 0;
+ J := 1;
+ repeat
+ Inc(I);
+ if (XY[I] = PenUp) or (XY[I] = EndOfChar) then
+ begin
+ case I - J of {number of points joined by consecutive line segments}
+ 0: ;
+ 1: Writeln(Log, 'drawdot z', Z[J], ';');
+ 2: if Z[J] = Z[Succ(J)] then
+ Writeln(Log, 'drawdot z', Z[J], ';')
+ else
+ Writeln(Log, 'draw z', Z[J], '--z', Z[Succ(J)], ';');
+ else
+ begin
+ Write(Log, 'draw z', Z[J]);
+ for K := Succ(J) to Pred(I) do
+ Write(Log, '--z', Z[K]);
+ Writeln(Log, ';');
+ end; {3 or more}
+ end; {case}
+ J := Succ(I);
+ end; {if a real coordinate}
+ until I = N;
+ Writeln(Log, 'endchar;');
+ end; {specified range of characters}
+ Close(H);
+ Close(Log);
+end.
+
+As a test case I used the DOS command
+ hershey orient 0 1
+to produce the following output:
+
+ORIENT.LOG
+----------
+% ORIENT.CHR 0 to 1
+
+cmchar "ORIENT 0";
+beginchar(0, 27u#, 12u#, 0u#);
+adjust_fit(0, 0);
+pickup plotter_pen;
+z1 = (3u, 10u);
+z2 = (25u, 10u);
+z3 = (22u, 12u);
+z4 = (20u, 10u);
+z7 = (23u, 11u);
+draw z1--z2--z3--z4;
+draw z4--z7;
+endchar;
+
+cmchar "ORIENT 1";
+beginchar(1, 27u#, 22u#, 0u#);
+adjust_fit(0, 0);
+pickup plotter_pen;
+z1 = (3u, 20u);
+z2 = (25u, 20u);
+z3 = (23u, 22u);
+z4 = (21u, 20u);
+z7 = (24u, 21u);
+z9 = (13u, 20u);
+z10 = (12u, 13u);
+z11 = (11u, 9u);
+z12 = (10u, 7u);
+z13 = (8u, 4u);
+z14 = (6u, 2u);
+z15 = (3u, 0u);
+z17 = (14u, 20u);
+z18 = (13u, 13u);
+z19 = (12u, 9u);
+z20 = (10u, 5u);
+z21 = (8u, 3u);
+z22 = (5u, 1u);
+z25 = (13u, 14u);
+z26 = (21u, 14u);
+z28 = (20u, 14u);
+z29 = (21u, 15u);
+z30 = (23u, 14u);
+z31 = (21u, 11u);
+z34 = (20u, 7u);
+z35 = (19u, 3u);
+z36 = (18u, 2u);
+z37 = (16u, 1u);
+z38 = (13u, 2u);
+z40 = (19u, 2u);
+z41 = (18u, 1u);
+z42 = (17u, 1u);
+z44 = (22u, 14u);
+z45 = (21u, 7u);
+z46 = (20u, 3u);
+z47 = (19u, 1u);
+z48 = (18u, 0u);
+z49 = (17u, 0u);
+draw z1--z2--z3--z4;
+draw z4--z7;
+draw z9--z10--z11--z12--z13--z14--z15;
+draw z17--z18--z19--z20--z21--z22--z15;
+draw z25--z26;
+draw z28--z29--z30--z31;
+draw z26--z34--z35--z36--z37--z38;
+draw z40--z41--z42;
+draw z44--z45--z46--z47--z48--z49--z37;
+endchar;
+
+
+I used the following METAFONT parameter file:
+
+ORIENT.MF
+---------
+% This is ORIENT.MF in text format, as of May 6, 1988.
+% Based on Computer Modern Roman 10 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ORIENT"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=87/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=25/36pt#; % lowercase stem breadth
+curve#:=30/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=32/36pt#; % uppercase stem breadth
+cap_curve#:=37/36pt#; % uppercase curve breadth
+cap_ess#:=35/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=20/36pt#; % vertical distance from serif base to tangent
+jut#:=28/36pt#; % protrusion of lowercase serifs
+cap_jut#:=37/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=11/36pt#; % lowercase bar thickness
+slab#:=11/36pt#; % serif and arm thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+cap_band#:=11/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=8/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+font_coding_scheme:="Hershey ORIENT.CHR";
+
+mode_setup; font_setup;
+
+px#:=rule_thickness#; % horizontal thickness of pen
+py#:=.9px#; % vertical pen thickness
+define_blacker_pixels(px,py);
+pickup pencircle xscaled px yscaled py;
+plotter_pen:=savepen;
+input \ff\orient.log
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#; fi
+bye.
+
+The following sequence of DOS commands
+ cd\ff
+ hershey orient 0 127
+ cd\pcmf
+ mf &cm \mode=epson; \mag=magstep 0; input orient /a=99/t
+produced ORIENT.240 and ORIENT.TFM in \pcmf for my Epson FX-85 printer,
+containing the first 128 characters of ORIENT.CHR.
+
+The characters in the Austin Code Works Hershey database are numbered 1--4326,
+with gaps, for a total of 1,377 different alphabetic and graphic characters.
+The format is described in Norman M. Wolcott and Joseph Hilsenrath, "A
+Contribution to Computer Typesetting Techniques: Tables of Coordinates for
+Hershey's Repertory of Occidental Type Fonts and Graphic Symbols," U.S.
+Department of Commerce, National Bureau of Standards, April 1976. In any case,
+the following Turbo Pascal 4.0 program converts the ACW Hershey database to
+SoftCraft format for further processing.
+
+ACWTOSC.PAS
+-----------
+{$R-} {Range checking off}
+{$B-} {Short-circuit Boolean evaluation}
+{$S-} {Stack checking off}
+{$I+} {I/O checking on}
+{$N-} {No numeric coprocessor}
+{$M 65500, 16384, 655360} {Turbo 3 default stack and heap}
+
+program ACWtoSC; {converts the Hershey font tables distributed by The Austin
+ Code Works to the format expected by the Cfont program of SoftCraft, Inc.}
+const
+ PenUp : integer = $4000;
+type
+ S3 = string[3];
+var
+ Buf1 : array[1..$2000] of char;
+ F1 : text;
+ H : file of integer;
+ L1 : string[80];
+ Fn : array[1..2] of string[64];
+ Code, I, L, M, XY : integer;
+ X, Y : array[1..144] of integer;
+ Eoc : boolean;
+
+function V(S : S3) : integer;
+var
+ I : integer;
+begin
+ Val(S, I, Code);
+ if (Code <> 0) or ((I < -49) and (I <> -64)) or (I > 49) then
+ begin
+ Writeln(L1);
+ Writeln('Code = ', Code);
+ Halt(3);
+ end;
+ V := I;
+end;
+
+begin
+ if ParamCount <> 2 then
+ begin
+ Writeln('Usage: ACWTOSC file1 file2');
+ Halt(3);
+ end;
+ for L := 1 to 2 do
+ begin
+ Fn[L] := ParamStr(L);
+ for M := 1 to Length(Fn[L]) do
+ Fn[L][M] := UpCase(Fn[L][M]);
+ end;
+ Assign(F1, Fn[1]);
+ SetTextBuf(F1, Buf1);
+ {$I-} Reset(F1); {$I+}
+ if IOResult <> 0 then
+ begin
+ Writeln('Cannot open ', Fn[1]);
+ Halt(3);
+ end;
+ Assign(H, Fn[2]);
+ {$I-} Rewrite(H); {$I+}
+ if IOResult <> 0 then
+ begin
+ Writeln('Cannot open ', Fn[2]);
+ Close(F1);
+ Halt(3);
+ end;
+ while not Eof(F1) do
+ begin
+ Readln(F1, L1);
+ if Copy(L1, 5, 1) <> ' ' then
+ begin
+ M := 0;
+ Eoc := false;
+ end;
+ L := 0;
+ repeat
+ Inc(L);
+ Inc(M);
+ X[M] := V(Copy(L1, 8 * L + 1, 3));
+ Y[M] := V(Copy(L1, 8 * L + 5, 3));
+ if (X[M] = -64) and (Y[M] = -64) then
+ begin
+ Eoc := true;
+ Write(H, Code); {two bytes of zeros before each character}
+ XY := 256 * (Y[1] + 64) + X[1] + 64; {width of character}
+ Write(H, XY);
+ for I := 2 to Pred(M) do
+ if X[I] = -64 then
+ Write(H, PenUp)
+ else
+ begin
+ XY := 256 * (73 + Y[I]) + X[I] + 64;
+ Write(H, XY);
+ end;
+ end;
+ until (L = 8) or Eoc;
+ end;
+ Write(H, Code); {two bytes of zeros at end of file}
+ Close(F1);
+ Close(H);
+end.
+
+-------
+
diff --git a/info/digests/texhax/txh/king.txh b/info/digests/texhax/txh/king.txh
new file mode 100644
index 0000000000..9c916d31f3
--- /dev/null
+++ b/info/digests/texhax/txh/king.txh
@@ -0,0 +1,1579 @@
+21-Oct-88 05:55:25-PDT,41684;000000000000
+Return-Path: <pjbk%cs.heriot-watt.ac.uk@NSS.Cs.Ucl.AC.UK>
+From: Peter King <pjbk%cs.heriot-watt.ac.uk@NSS.Cs.Ucl.AC.UK>
+Date: Fri, 21 Oct 88 13:18:50 BST
+Subject: refer -> BiBTeX conversion
+
+Following feedback from a number of users, in particular Johnathan
+Bowen, I have modified and updated my 'ref2bib' script for conversion
+of refer databases to BiBTeX format.
+
+The files can now be extracted with a name of the user's choosing, to
+avoid clashes with Johnathan Bowen's 'ref2bib', although that remains
+the default.
+
+The heuristics for assigning the type of reference have been augmented,
+and a number of options are now selectable at run time, including the
+length and number of authors to be used in generating keys.
+
+Since the script is so long, it will probably be stored in the
+appropriate archives, but I am happy to mail it to people who do not
+have easy access to them.
+
+Peter King, Computer Science Department JANET: pjbk@uk.ac.hw.cs
+ Heriot-Watt University ARPA: pjbk@cs.hw.ac.uk
+ 79 Grassmarket, Edinburgh EH1 2HJ or pjbk%cs.hw.ac.uk@ucl-cs
+Phone: (+44) 31 225 6465 Ext. 555 UUCP: ..!ukc!cs.hw.ac.uk!pjbk
+
+%%%
+%%% This version also includes a bug fix that was submitted by Peter
+%%% on 10/25/88. Malcolm Brown, TeXhax moderator
+%%%
+-----cut here-----------
+export PATH || exec /bin/sh $0 $*
+: "This is a shar archive; use /bin/sh to extract"
+: "Extracted files will be owned by you, and will have"
+: "default permissions"
+: "to have a name other than the default 'ref2bib' give"
+: "the new name as a second argument to sh, after this shar file name"
+PRGRM=ref2bib
+if [ -n "$1" ]
+then
+ PRGRM=$1
+fi
+PATH=/bin:/usr/bin
+echo If this archive is complete, \"End of archive\" will appear at the end
+echo Extracting $PRGRM
+sed 's/^X//' <<'End-of-file' >$PRGRM
+X#!/bin/sh
+X#
+X# shell script to convert refer (or bib) databases to BiBTeX format
+X#
+X# Most of the shell script is based on that by Jonathan Bowen
+X# The awk and sed scripts are the work of Peter King
+X# with some ideas stolen from Jonathan Bowen
+X#
+X#
+XSEDFILE=${TMP-/tmp}/ref2b$$.sed
+XAWKFILE=${TMP-/tmp}/ref2b$$.awk
+XKEYFILE=${TMP-/tmp}/ref2b$$.key
+XNKEYFILE=${TMP-/tmp}/ref2b$$.nkey
+XAKEYFILE=
+XCAPSFILE=
+XPROGNAME=`basename $0`
+XNAUTHOR=3
+XLAUTHOR=3
+XERRFILE=${PROGNAME}.errs
+XDEFAULTWIDTH=72
+XWIDTH=$DEFAULTWIDTH
+XNAMEDFILES=false
+XBIB=bib
+XDEBUG=false
+X
+XGEN=`date`" on "`hostname`
+XNAME=$BIB
+XSTDIN=''
+XNEWFILE=""
+X
+Xwhile expr X$1 : X'-' > /dev/null
+Xdo
+X case "$1" in
+X -|-0|-w)
+X WIDTH=-1
+X ;;
+X -[1-9]|-[1-9][0-9]|-[1-9][0-9][0-9])
+X WIDTH=`expr X"$1" : X'-\(.*\)'`
+X ;;
+X -c) : capitals file
+X CAPSFILE="$2"
+X shift
+X ;;
+X -d) : Enable debugging
+X DEBUG=true
+X ;;
+X -e) : error file
+X ERRFILE="$2"
+X shift
+X ;;
+X -kf) : key used file
+X AKEYFILE=$2
+X shift
+X ;;
+X -k) : no of authors in key
+X NAUTHOR=$2
+X shift
+X ;;
+X -l) : no of authors name letters to use
+X LAUTHOR=$2
+X shift
+X ;;
+X -n) : Named output files
+X NAMEDFILES=true
+X ;;
+X -u|-U)
+X echo "Usage: $PROGNAME [ options ] [ file ... ]
+XConverts Unix \"refer\" format to \"BibTeX\" database format.
+X-c file Use file as source of protected words in titles
+X-d enable debugging (default=$DEBUG)
+X-e file error output in "file" (default=$ERRFILE)
+X-kf file Use file to initialise keys used
+X-k N Use N author's names for key (default=$NAUTHOR)
+X-l N Use N characters of author's name for key (default=$LAUTHOR)
+X-n output to named files (ext \".$BIB\") (default=$NAMEDFILES)
+X-w no maximum width
+X-u display usage information
+X-N maximum width of N characters (1-999) (default=$DEFAULTWIDTH)"
+X exit 0
+X ;;
+X -*)
+X echo "Usage: $PROGNAME [ -[width] ] [ file ... ]"
+X exit 0
+X ;;
+X esac
+X shift
+Xdone
+X
+Xtrap "rm -f $SEDFILE $AWKFILE $KEYFILE $NKEYFILE ;exit" 0 1 2 3 15
+X
+Xcat </dev/null > $ERRFILE
+Xcat </dev/null > $KEYFILE
+X[ $AKEYFILE ] && [ -r $AKEYFILE ] && cat $AKEYFILE > $KEYFILE
+X
+X# although # introduces a comment to sed, this is undocumented,
+X# and we might as well strip it first if the file is to be used many times
+X# but this should work with cat replacing the sed -e here
+X
+Xsed -e '/^#/d' << 'ZZ' >$SEDFILE
+X#
+X# sed script to do some of the ref to bib database conversion
+X#
+X# written by Peter King, Heriot-Watt University
+X# You may do anything you like with this code
+X# EXCEPT claim that you wrote it
+X#
+X# remove as many redundant characters as possible
+Xs/ / /g
+Xs/ */ /g
+X# convert dashes
+Xs/ - / --- /g
+Xs/ $//
+X#
+X# First alter the TeX special characters
+X# but not the first %
+Xs/\(.\)%/\1{\\%}/g
+X#
+Xs/[&#_{}]/{\\&}/g
+X# you may want to leave dollars (especially if you have eqn in your refs
+Xs/\$/\\$/g
+X# convert the special characters and accents from troff to BibTeX
+X# assumes the accents are those of the Berkeley -ms with .AM
+X#
+X# convert any font rubbish (assumes that \fR is the default )
+X/\\\\*f./{
+X s/\\\\*f[I2]/{\\em /g
+X s/\\\\*f[B3]/{\\bf /g
+X s/\\\\*f[1PR]/}/g
+X}
+X/\\\\*[-*0('`^:~_/o,v".8?!QU ]/{
+X s/\(.\)\\\\*\*'/{\\'\1}/g
+X s/\(.\)\\\\*\*`/{\\`\1}/g
+X s/\(.\)\\\\*\*^/{\\^\1}/g
+X s/\(.\)\\\\*\*:/{\\"\1}/g
+X s/\(.\)\\\\*\*~/{\\~\1}/g
+X s/\(.\)\\\\*\*_/{\\=\1}/g
+X s/\([oO]\)\\\\*\*\//{\\\1}/g
+X s/\([aA]\)\\\\*\*o/{\\\1\1}/g
+X s/\(.\)\\\\*\*,/{\\c{\1}}/g
+X s/\(.\)\\\\*\*v/{\\v{\1}}/g
+X s/\(.\)\\\\*\*"/{\\H{\1}}/g
+X s/\(.\)\\\\*\*\./{\\d{\1}}/g
+X s/\\\\*\*8/{\\ss}/g
+X s/\\\\*\*?/{?`}/g
+X s/\\\\*\*!/{!`}/g
+X s/\\\\*\*(P\([lL]\)/{\\\1}/g
+X s/\\\\*\*(ae\//{\\ae}/g
+X s/\\\\*\*(Ae\//{\\AE}/g
+X s/\\\\*\*(oe\//{\\oe}/g
+X s/\\\\*\*(Oe\//{\\OE}/g
+X# quotes
+X s/\\\\*\*Q/``/g
+X s/\\\\*\*U/''/g
+X s/\\\\*\*-/---/g
+X# convert \[space] to \0 for convenience
+X s/\\\\* /\\0/g
+X# \0 as space between surname de\0Souza etc.
+X s/\\\\*0\([a-z]*\)\\\\*0/\\0\1 /g
+X s/ \([a-z]*\)\\\\*0/ \1 /g
+X# but trap the ones that start with a capital letter and convert them to
+X# ties
+X s/\\\\*0/~/g
+X#
+X# now deal with special characters and Greek
+X s/\\\\*(hy/-/g
+X s/\\\\*(em/---/g
+X s/\\\\*(co/{\\copyright}/g
+X s/\\\\*(sc/{\\S}/g
+X s/\\\\*(if/$\\infty$/g
+X s/\\\\*(\*a/$\\alpha$/g
+X s/\\\\*(\*b/$\\beta$/g
+X s/\\\\*(\*g/$\\gamma$/g
+X s/\\\\*(\*d/$\\delta$/g
+X s/\\\\*(\*e/$\\epsilon$/g
+X s/\\\\*(\*z/$\\zeta$/g
+X s/\\\\*(\*y/$\\eta$/g
+X s/\\\\*(\*h/$\\theta$/g
+X s/\\\\*(\*i/$\\iota$/g
+X s/\\\\*(\*k/$\\kappa$/g
+X s/\\\\*(\*l/$\\lambda$/g
+X s/\\\\*(\*m/$\\mu$/g
+X s/\\\\*(\*n/$\\nu$/g
+X s/\\\\*(\*c/$\\xi$/g
+X s/\\\\*(\*o/$o$/g
+X s/\\\\*(\*p/$\\pi$/g
+X s/\\\\*(\*r/$\\rho$/g
+X s/\\\\*(\*s/$\\sigma$/g
+X s/\\\\*(\*t/$\\tau$/g
+X s/\\\\*(\*u/$\\upsilon$/g
+X s/\\\\*(\*f/$\\phi$/g
+X s/\\\\*(\*x/$\\chi$/g
+X s/\\\\*(\*q/$\\psi$/g
+X s/\\\\*(\*w/$\\omega$/g
+X s/\\\\*(\*A/A/g
+X s/\\\\*(\*B/B/g
+X s/\\\\*(\*G/$\\Gamma$/g
+X s/\\\\*(\*D/$\\Delta$/g
+X s/\\\\*(\*E/E/g
+X s/\\\\*(\*Z/Z/g
+X s/\\\\*(\*Y/H/g
+X s/\\\\*(\*H/$\\Theta$/g
+X s/\\\\*(\*I/I/g
+X s/\\\\*(\*K/K/g
+X s/\\\\*(\*L/$\\Lambda$/g
+X s/\\\\*(\*M/M/g
+X s/\\\\*(\*N/N/g
+X s/\\\\*(\*C/$\\Xi$/g
+X s/\\\\*(\*O/$O$/g
+X s/\\\\*(\*P/$\\Pi$/g
+X s/\\\\*(\*R/P/g
+X s/\\\\*(\*S/$\\Sigma$/g
+X s/\\\\*(\*T/T/g
+X s/\\\\*(\*U/$\\Upsilon$/g
+X s/\\\\*(\*F/$\\Phi$/g
+X s/\\\\*(\*X/X/g
+X s/\\\\*(\*Q/$\\Psi$/g
+X s/\\\\*(\*W/$\\Omega$/g
+X}
+X# Now trap title words that must be capitalised
+X/^%[^T]/b
+X#
+X# first all words that are all capitals (at least two consecutive)
+X# we need the slashes to allow for M/M/1 queues
+Xs;[A-Z][A-Z/][A-Z/0-9]*;{&};g
+X# and single letters (except A!)
+Xs/\([{ ]\)\([B-Z]\)\([ :\.,}]\)/\1{\2}\3/g
+Xs/ \([B-Z]\)$/ {\1}/
+XZZ
+X
+X# Now append to this any proper name that might appear in titles
+X# Use sed to generate a sed script !
+X# the input is a list of words which must remain capitalised
+X# one to a line
+X# a trailing * will be converted into a pattern at the end to get Markov,
+X# Markovian, etc.
+X
+Xcat - $CAPSFILE << ZZ | sed -e '/^#/d;s/\*$/[^ -,;]*/;s=^..*$=s/&/{\&}/g=' >> $SEDFILE
+X# File of Title information that must maintain its capitalised state
+X#
+X# some proper names
+X#
+X# first some mathematicians
+XAbel
+XBernoulli
+XBessel
+XBeta
+XBorel
+XCauchy
+XChurch
+XRosser
+XDedekind
+XDescartes
+XDirichlet
+XEuclid*
+XEuler
+XFibonacci
+XFermat
+XFourier
+XFresnel
+XFrobenius
+XPerron
+XGamma
+XGauss*
+XHadamard
+XHilbert
+XHorner
+XHolder
+XJacobi*
+XJensen
+XMarkov*
+XArnoldi
+XLaplace
+XLaguerre
+XLagrang*
+XLegendre
+XLeibnitz
+XLipschitz
+X# this is really Poincare (acute accent), but the accent processing will disrupt it
+XPoincar
+XHermite
+XRayleigh
+XRitz
+XRiemann
+X# this is really Rouche (acute accent), but the accent processing will disrupt it
+XRouch
+XStieltjes
+XStiener
+XSchwarz
+XWeibull
+XWald
+XKronecker
+XKarmarkar
+XKendall
+XDiophantine
+XDelbrouck
+XBayes*
+XSchafer
+XDempster
+XRunge
+XKutta
+XPollaczek
+XKhinchin
+XPalm
+XErlang
+XEngset
+XLittle's
+XKosten
+XGittins
+XFeller
+XCox*
+XPoisson
+XChapman
+XKolmogorov
+XSmirnov
+XWeiner
+XHopf
+XStirling
+X
+X# computing
+XBuzen
+XGordon
+XNewell
+XLemoine
+XPierce
+XJackson
+XNewhall
+XTuring
+XNorton
+XPetri
+XWilkinson
+XSkinner
+XHarrison
+XCambridge
+XEthernet
+XAloha
+X
+X# coding theory
+XHamming
+XHuffman
+XReed
+XShannon
+XSolomon
+XViterbi
+XZZ
+X
+X# strip out the comments from the AWKFILE, just to cut down on the character count
+X# that awk needs to read before starting. For a single file conversion
+X# this will probably make no difference
+X# but this should work with cat replacing the sed -e here
+X
+Xsed -e '/^[ ]*#/d' -e '/#/s/[ ]*#.*$//' << 'ZZ' > $AWKFILE
+X#
+X# awk script to convert refer (or bib) format databases
+X# to BiBTeX format.
+X#
+X# written by Peter King, Heriot-Watt University
+X# use freely, but don't claim that you wrote it
+X#
+X# Generates keys using authors names and year
+X#
+X# You may wish to alter treatment of key fields that are ignored
+X# such as %U %W %Y etc.
+X#
+X# NB because awk recognises end of line as a statement terminator
+X# you cannot reliably split the long lines in the script
+X#
+X# regular expressions should be sorted according to frequency
+X# so that minimal tests are made
+X# From tests in a local data base the order given appears quite good
+X# 2883 %A
+X# 1813 blank lines
+X# 1774 %T
+X# 1764 %D
+X# 1505 %P
+X# 1347 %J
+X# 1331 %V
+X# 1201 %N
+X# 773 .. continuation lines
+X# 501 %C
+X# 424 %I
+X# 192 %B
+X# 187 %E
+X# 92 %S
+X# 89 %R
+X# 33 %X
+X# 30 %K
+X# 16 %O
+X#
+XBEGIN {
+X # suffices for the key generation process
+X for(i=1;i<=26;i++)
+X addkey[i] = substr("abcdefghijklmnopqrstuvwxyz",i,1)
+X # standard BiBTeX types so that you can change the case to BOOK
+X # or book, as required. Not all are used
+X article = "Article" # the @ will be added later
+X book = "Book"
+X booklet = "Booklet"
+X inbook = "InBook"
+X incollection = "InCollection"
+X inproceedings = "InProceedings"
+X manual = "Manual"
+X mastersthesis = "MastersThesis"
+X misc = "Misc"
+X phdthesis = "PhDThesis"
+X proceedings = "Proceedings"
+X techreport = "TechReport"
+X unpublished = "Unpublished"
+X
+X bibtype = misc
+XZZ
+X
+X# the following 'echo' commands communicate shell variables to
+X# the awk script.
+X
+Xecho >> $AWKFILE lkey = $LAUTHOR # number of characters used from authors to make key
+Xecho >> $AWKFILE maxauthor = $NAUTHOR # maximum number of authors to use in
+X # constructing key
+Xecho >> $AWKFILE errfil = \"$ERRFILE\"
+Xecho >> $AWKFILE keyfil = \"$KEYFILE\"
+Xecho >> $AWKFILE nkeyfil = \"$NKEYFILE\"
+Xecho >> $AWKFILE lwidth = $WIDTH
+Xecho >> $AWKFILE print \"@Comment{ Database converted by $PROGNAME\\n\\t$GEN}\\n\"
+X
+Xsed -e '/^[ ]*#/d' -e '/#/s/[ ]*#.*$//' << 'ZZ' >> $AWKFILE
+X rx = 1
+X percent = 0 # not in a reference
+X }
+X
+X/[^{$]\\/ || /^\\/ { # we've protecetd all the \ we introduced in {}
+X err = 1
+X print "Non translated \\ symbol : Reference " rx >> errfil
+X print $0 >> errfil
+X }
+X
+X/^%/ { # any % entry
+X percent = 1 # in a reference
+X entry = substr($0,4)
+X pctchar = substr($0,2,1)
+X }
+X
+X/^%[AQ]/ { # authors (multiple occurrences possible)
+X A ++
+X if ( $1 == "%A" ) authors[A] = entry
+X else authors[A] = "{"entry"}" # corporate authors need protection!
+X if (A> maxauthor) next
+X # generate the key string
+X ic = 0
+X lc = 1
+X if ( $1 == "%A" ) keyfield = $NF
+X else keyfield = $2 # corporate authors use first word
+X while(ic < lkey && lc <= length(keyfield) ){
+X kc = substr( keyfield, lc, 1)
+X if ( kc ~ /[a-zA-Z]/ ){
+X keys = keys kc
+X ic++
+X if (ic==lkey) next
+X }
+X else if ( kc == "\\" ) lc ++
+X lc ++
+X }
+X next
+X }
+X
+X/^$/ { # blank line
+X if (percent) {
+X # end of a reference
+X refs ++
+X if (T==0) print "No title : Reference "refs" "keys >> errfil
+X if (A==0) print "No author : Reference "refs" "keys >> errfil
+X if (D==0) print "No date : Reference "refs" "keys >> errfil
+X if ((!T)||(!A)||(!D))err=1
+X
+X
+X # date processing
+X nf = split(date,z)
+X year = date
+X kyear = year
+X if(nf>1){
+X xmonth = z[1]
+X mm = 1
+X i = 2
+X while ( z[i] !~ /^[0-9][0-9][0-9][0-9]/ ) {
+X xmonth = xmonth " " z[i]
+X i++
+X mm = 0
+X }
+X month = "{ " xmonth " }"
+X
+X year = z[i]
+X kyear = year # in case there is any extraneous info
+X i++
+X while ( i <= nf ) {
+X year = year " " z[i]
+X i++
+X }
+X if((mm) && ( xmonth ~ /^[A-Za-z.]*$/ )){
+X #if the month is only letters and .
+X if(xmonth ~ /^Ja/) month = "jan"
+X if(xmonth ~ /^Fe/) month = "feb"
+X if(xmonth ~ /^Mar/) month = "mar"
+X if(xmonth ~ /^Ap/) month = "apr"
+X if(xmonth ~ /^May/) month = "may"
+X if(xmonth ~ /^Jun/) month = "jun"
+X if(xmonth ~ /^Jul/) month = "jul"
+X if(xmonth ~ /^Aug/) month = "jan"
+X if(xmonth ~ /^Se/) month = "sep"
+X if(xmonth ~ /^O/) month = "oct"
+X if(xmonth ~ /^N/) month = "nov"
+X if(xmonth ~ /^D/) month = "dec"
+X }
+X }
+X if ( year !~ /^[0-9][0-9]*$/ ) year = "{ " year " }"
+X
+X # sort out the editors
+X if (E) {
+X tew = split(alleditors,z)
+X E = 1
+X editor[E] = z[1]
+X sc = " "
+X i = 2
+X while( i <= tew ){
+X if ( z[i] == "and" ) {
+X E++
+X editor[E] = ""
+X sc = ""
+X }
+X else {
+X lastc = substr(z[i],length(z[i]),1)
+X if(lastc == "," && z[i+1] !~ /^Jn*r\./ ) {
+X editor[E] = editor[E] sc substr(z[i], 1, length(z[i])-1)
+X if ( z[i+1] != "and" ) {
+X E++
+X editor[E] = ""
+X sc = ""
+X }
+X }
+X else {
+X editor[E] = editor[E] sc z[i]
+X sc = " "
+X }
+X }
+X i++
+X }
+X }
+X
+X # classify the reference
+X
+X if (J) {
+X #journal or conference
+X
+X if (C||I||((!V)&&(!N))) {
+X # its a conference if there is a city, publisher
+X # or no volume or issue number
+X conf++
+X bibtype = inproceedings
+X jnl = "Booktitle"
+X jtype = "Conference proceedings"
+X }
+X else {
+X jour ++
+X bibtype = article
+X jnl = "Journal"
+X jtype = "Journal"
+X }
+X
+X if ( B||E||R||(!P)) {
+X err=1
+X if (B||E||R)
+X print "Journal & book?: Reference "refs" "keys >> errfil
+X if (!P) print "No page nos.? : Reference "refs" "keys >> errfil
+X }
+X if (err){
+X print jtype " reference in error" >> errfil
+X }
+X }
+X else
+X if (B) {
+X # article in book
+X bibtype = incollection
+X
+X if (N||R||(!E)||(!I)||(!C)||(!P)||(V&&(!S))){
+X err=1
+X if (!E) print "No editor? Reference "refs" " keys >> errfil
+X if (!I) print "No publisher? Reference "refs" " keys >> errfil
+X if (!C) print "No city? Reference "refs" " keys >> errfil
+X if (!P) print "No page nos.? Reference "refs" " keys >> errfil
+X if (V&&(!S)) print "Volume but no Series Reference "refs" " keys >> errfil
+X if (N) print "Issue no.? Reference "refs" " keys >> errfil
+X if (R) print "Report? Reference "refs" " keys >> errfil
+X
+X }
+X if (err) print "Article in book reference in error" >> errfil
+X }
+X else
+X if (R) {
+X #report
+X bibtype = techreport
+X
+X if (E||N){
+X err=1
+X if (N) print "Issue no.? Reference "refs" " keys >> errfil
+X if (E) print "Editor? Reference "refs" " keys >> errfil
+X }
+X if (err) print "Report reference in error" >> errfil
+X if ( report ~ /M.*[Tt]hesis/ ) bibtype = mastersthesis
+X if ( report ~ /M.*[Dd]issert/ ) bibtype = mastersthesis
+X if ( report ~ /D.*[Tt]hesis/ ) bibtype = phdthesis
+X if ( report ~ /D.*[Dd]issert/ ) bibtype = phdthesis
+X # Working papers and preprints are classified as techreports
+X # if ( report ~ /[Ww]orking/ ) bibtype = unpublished
+X # if ( report ~ /[Pp]reprint/ ) bibtype = unpublished
+X if ( report ~ /[Uu]npublish/ ) bibtype = unpublished
+X if ( report ~ /[Mm]anual/ ) bibtype = manual
+X
+X if (bibtype== unpublished ) {
+X if (other == "") other = report
+X else other = report " " other
+X R = 0
+X report = ""
+X O = 1
+X }
+X else
+X if (bibtype == manual ) {
+X TY = 1
+X type = report
+X # the publisher is really the organisation
+X report = publisher
+X R = I
+X I = 0
+X institute = "Organization"
+X }
+X else
+X if ( bibtype == techreport ) {
+X trw = split(report,z)
+X if ( trw == 1 ) {
+X N = 1
+X number = z[1]
+X }
+X else {
+X if ( ( z[1] ~ /^Tech/ ) && ( z[2] ~ /^Rep/ ) )
+X {
+X z[1] = ""
+X z[2] = ""
+X TY = 0
+X number = z[3]
+X for(i=4;i<=trw;i++)
+X number = number " " z[i]
+X if (trw >=3) N = 1
+X }
+X else {
+X type = z[1]
+X i = 2
+X while( i <= trw && ( z[i] !~ /^[0-9A-Z-]*$/ ) ) {
+X type = type " " z[i]
+X i++
+X }
+X if(i<trw || z[trw] ~ /^[0-9A-Z][0-9A-Z-]*$/ )
+X N = 1
+X while ( i <= trw ) {
+X number = number " " z[i]
+X i++
+X }
+X TY = 1
+X }
+X }
+X # the publisher is really the institution
+X report = publisher
+X R = I
+X I = 0
+X institute = "Institution"
+X }
+X else
+X if ( (bibtype == mastersthesis ) || ( bibtype = phdthesis )) {
+X type = report
+X TY = 1 # the publisher is really the school
+X report = publisher
+X R = I
+X I = 0
+X institute = "School"
+X if ( ( bibtype == phdthesis ) && ( type ~ /^ *PhD *thesis *$/ ) ) {
+X type = ""
+X TY = 0
+X }
+X if ( ( bibtype == mastersthesis ) && ( type ~ /^ *Master's *thesis *$/ ) ) {
+X type = ""
+X TY = 0
+X }
+X }
+X }
+X else
+X if (I) {
+X # book
+X bibtype = book
+X
+X if (N||E||(!C)||(V&&(!S))) {
+X err=1
+X if (!C) print "No city? Reference "refs" " keys >> errfil
+X if (N) print "Issue no.? Reference "refs" " keys >> errfil
+X if (E) print "Editor? Reference "refs" " keys >> errfil
+X if (V&&(!S)) print "Volume but no Series Reference "refs" " keys >> errfil
+X }
+X if (err) print "Book reference in error" >> errfil
+X
+X if (S && (( series ~ /[Tt]ech.*[Rr]eport/ ) || ( series ~ /[Tt]ech.*[Mm]ono/ ))){
+X bibtype = techreport
+X type = series
+X TY = 0
+X if ( series ~ /[Mm]ono/ ) TY = 1
+X institute = "Institution"
+X R = I
+X I = 0
+X report = publisher
+X publisher = ""
+X }
+X }
+X else {
+X bibtype = misc
+X err=1
+X if( other ~ /[Uu]npublished/ ) bibtype = unpublished
+X print "Unclassified reference" >> errfil
+X }
+X
+X # generate key
+X if(keys == "") keys = "ANON"
+X keys = keys substr(kyear,3,2)
+X if(keyused[keys] >=1) {
+X key_suffix = keyused[keys]++
+X keys = keys addkey[key_suffix]
+X }
+X else keyused[keys] = 1
+X
+X if (err) {
+X print "Key: " keys >> errfil
+X if(A) for (i=1;i<=A;i++)
+X print "%A " authors[i] >> errfil
+X if(T) print "%T " title >> errfil
+X if(J) print "%J "journal >> errfil
+X if(B) print "%B "booktitle >> errfil
+X if(V) print "%V "volume >> errfil
+X if(N) print "%N "number >> errfil
+X if(I) print "%I "publisher >> errfil
+X if(C) print "%C "city >> errfil
+X if(E) for (i=1;i<=E;i++)
+X print "%E "editor[i] >> errfil
+X if(S) print "%S "series >> errfil
+X if(P) print "%P "pages >> errfil
+X if(R) print "%R "report >> errfil
+X if(D) print "%D "date >> errfil
+X if(O) print "%O "other >> errfil
+X print "" >> errfil
+X }
+X
+X if ( other ~ /[Uu]npublished/ ) bibtype = unpublished
+X if ( other ~ /[Ee]dition/ ) {
+X twc = split(other,z)
+X for(i=1;i<=twc;i++)
+X if(z[i] ~ /[Ee]dition/) {
+X edition = z[i-1]
+X z[i-1] = ""
+X z[i] = ""
+X }
+X other = z[1];
+X for(i=2;i<=twc;i++) {
+X other = other " " z[i]
+X }
+X if(!(other ~ /[^ ]/ )) {
+X # no non space characters
+X other = ""
+X O = 0
+X }
+X }
+X
+X if(O&&H) other = header " " other
+X else if(H) {
+X O = H
+X other = header
+X }
+X
+X if (J) {
+X
+X # substitute the journal abbreviations from the standard styles
+X
+X journal = "{ " journal " }"
+X # {acmcs} {"ACM Computing Surveys"}
+X if ( journal ~ /Comp.* Sur/ ) journal = "acmcs"
+X # {acta} {"Acta Informatica"}
+X if ( journal ~ /Acta Inf/ ) journal = "acta"
+X # {cacm} {"Communications of the ACM"}
+X if ( journal ~ /Com.* ACM/ ) journal = "cacm"
+X if ( journal ~ /CACM/ ) journal = "cacm"
+X # {ibmjrd} {"IBM Journal of Research and Development"}
+X if ( journal ~ /IBM J.*R.*D/ ) journal = "ibmjrd"
+X # {ibmsj} {"IBM Systems Journal"}
+X if ( journal ~ /IBM Sy.*J/ ) journal = "ibmsj"
+X # {ieeese} {"IEEE Transactions on Software Engineering"}
+X if ( journal ~ /IEEE Tran.*Soft.*Eng/ ) journal = "ieeese"
+X # {ieeetc} {"IEEE Transactions on Computers"}
+X if ( journal ~ /IEEE Tran.*Computers/ ) journal = "ieeetc"
+X # {ieeetcad}
+X if ( journal ~ /IEEE Tran.*Comp.*Desig/ ) journal = "ieeetcad"
+X # {ipl} {"Information Processing Letters"}
+X if ( journal ~ /Inf.*Proc.*Lett/ ) journal = "ipl"
+X # {jacm} {"Journal of the ACM"}
+X if ( journal ~ /Jou.* ACM/ ) journal = "jacm"
+X if ( journal ~ /JACM/ ) journal = "jacm"
+X # {jcss} {"Journal of Computer and System Sciences"}
+X if ( journal ~ /J.*Comp.*Sys.*Sc/ ) journal = "jcss"
+X # {scp} {"Science of Computer Programming"}
+X if ( journal ~ /Sc.*Comp.*Prog/ ) journal = "scp"
+X # {sicomp} {"SIAM Journal on Computing"}
+X if ( journal ~ /SIAM .*Comp/ ) journal = "sicomp"
+X # {tocs} {"ACM Transactions on Computer Systems"}
+X if ( journal ~ /ACM Tran.*Comp.*Sys/ ) journal = "tocs"
+X # {tods} {"ACM Transactions on Database Systems"}
+X if ( journal ~ /ACM Tran.*Data.*Sys/ ) journal = "tods"
+X # {tog} {"ACM Transactions on Graphics"}
+X if ( journal ~ /ACM Tran.*Grap/ ) journal = "tog"
+X # {toms} {"ACM Transactions on Mathematical Software"}
+X if ( journal ~ /ACM Tran.*Math.*Soft/ ) journal = "toms"
+X # {toois} {"ACM Transactions on Office Information Systems"}
+X if ( journal ~ /ACM Tran.*Off.*Inf.*Sys/ ) journal = "toois"
+X # {toplas} {"ACM Transactions on Programming Languages and Systems"}
+X if ( journal ~ /ACM Tran.*Prog.*Lan.*Sys/ ) journal = "toplas"
+X # {tcs} {"Theoretical Computer Science"}
+X if ( journal ~ /Th.*Comp.*Sci/ ) journal = "tcs"
+X
+X }
+X
+X if(lwidth>0) { # split lines of potential over length
+X # titles, book titles, notes, abstracts, addresses,
+X # journals ( which may be conference proceedings) and institutions
+X if(T){
+X twc = split(title,z)
+X title = z[1];
+X lt = length(z[1])+13+length("Title")
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= lwidth)
+X {sc = "\n\t\t";lt = 15;}
+X else sc = " ";
+X title = title sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X
+X if(J){ # it may be a conference
+X twc = split(journal,z)
+X journal = z[1];
+X if(twc>1) { # if its 1 then we have an abbreviation
+X lt = length(z[1])+11+length(jnl)
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= lwidth)
+X {sc = "\n\t\t";lt = 15;}
+X else sc = " ";
+X journal = journal sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X }
+X
+X if(B){
+X twc = split(booktitle,z)
+X booktitle = z[1];
+X lt = length(z[1])+13+length("Booktitle")
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= lwidth)
+X {sc = "\n\t\t";lt = 15;}
+X else sc = " ";
+X booktitle = booktitle sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X
+X if(C){
+X twc = split(city,z)
+X city = z[1];
+X lt = length(z[1])+13+length("Address")
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= lwidth)
+X {sc = "\n\t\t";lt = 15;}
+X else sc = " ";
+X city = city sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X
+X if(O){
+X twc = split(other,z)
+X other = z[1];
+X lt = length(z[1])+13+length("Note")
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= lwidth)
+X {sc = "\n\t\t";lt = 15;}
+X else sc = " ";
+X other = other sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X
+X if(R){
+X twc = split(report,z)
+X report = z[1];
+X lt = length(z[1])+13+length( institute )
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= lwidth)
+X {sc = "\n\t\t";lt = 15;}
+X else sc = " ";
+X report = report sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X
+X if(X){
+X twc = split(abstr,z)
+X abstr = z[1];
+X lt = length(z[1])+13+length("Annote")
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= lwidth)
+X {sc = "\n\t\t";lt = 15;}
+X else sc = " ";
+X abstr = abstr sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X }
+X
+X # fiddle fields that might contain only digits
+X if ( volume !~ /^ *[0-9][0-9]* *$/ ) volume = "{ " volume " }"
+X if ( number !~ /^ *[0-9][0-9]* *$/ ) number = "{ " number " }"
+X if ( pages !~ /^ *[0-9][0-9]* *$/ ) pages = "{ " pages " }"
+X # print the reference
+X
+X bibs[bibtype] ++;
+X printf "@%s{\t%s",bibtype,keys
+X if(A) {
+X printf ",\n\tAuthor = { %s",authors[1]
+X for(i=2;i<=A;i++) printf " and\n\t\t%s",authors[i]
+X printf " }"
+X }
+X if(TY) printf ",\n\tType = { %s }", type
+X if(T) printf ",\n\tTitle = { %s }", title
+X if(B) printf ",\n\tBooktitle = { %s }", booktitle
+X if(E) {
+X printf ",\n\tEditor = { %s", editor[1]
+X for(i=2;i<=E;i++) printf " and\n\t\t%s", editor[i]
+X printf " }"
+X }
+X if(J) printf ",\n\t%s = %s", jnl, journal
+X if(S) printf ",\n\tSeries = { %s }", series
+X if(V) printf ",\n\tVolume = %s", volume
+X if(N) printf ",\n\tNumber = %s", number
+X if(P) printf ",\n\tPages = %s", pages
+X if(O) printf ",\n\tNote = { %s }", other
+X if( edition != "" )
+X printf ",\n\tEdition = { %s }", edition
+X if(R) printf ",\n\t%s = { %s }", institute, report
+X # Non standard fields start
+X if(G) printf ",\n\tGovernmentNo = { %s }", govtorder
+X if(M) printf ",\n\tBellLabsMemo = { %s }", bellmemo
+X # Non standard end
+X if(I) printf ",\n\tPublisher = { %s }", publisher
+X if(C) printf ",\n\tAddress = { %s }", city
+X if(month != "") printf ",\n\tMonth = %s", month
+X if(D) printf ",\n\tYear = %s", year
+X if(L) printf ",\n\tKey = { %s }", label
+X if(K) printf ",\n\tKeywords = { %s }", keywords
+X if(X) printf ",\n\tAnnote = { %s }", abstr
+X printf "\t}\n\n"
+X
+X # initialise for next reference
+X
+X A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;I=0;J=0;
+X K=0;L=0;M=0;N=0;O=0;P=0;Q=0;R=0;S=0;T=0;
+X U=0;V=0;W=0;X=0;Y=0;Z=0; TY=0;
+X bibtype = misc
+X edition = ""
+X type = ""
+X institute = ""
+X booktitle = ""
+X title = ""
+X volume = ""
+X alleditors = ""
+X city = ""
+X date = ""
+X month = ""
+X xmonth = ""
+X kyear = ""
+X year = ""
+X publisher = ""
+X journal = ""
+X number = ""
+X other = ""
+X page = ""
+X report = ""
+X series = ""
+X abstr = ""
+X bellmemo = ""
+X govtorder = ""
+X keywords = ""
+X label = ""
+X keys = ""
+X toterr +=err
+X rx++
+X }
+X else if (comment) print "\t}\n"
+X err = 0
+X percent = 0 # not in a reference
+X comment = 0 # not in a comment
+X pctchar = ""
+X next
+X }
+X
+X/^%T/ {
+X T ++
+X if (T>1) {
+X err=1
+X print "Two titles: Reference " rx >> errfil
+X print title >> errfil
+X }
+X title = entry
+X next
+X }
+X
+X/^%D/ {
+X D ++
+X if (D>1) {
+X err=1
+X print "Two dates: Reference " rx >> errfil
+X print date >> errfil
+X }
+X if (($NF<1900)||($NF>=2000)) {
+X err=1
+X print "Date error? : Reference " rx >> errfil
+X }
+X date = entry
+X next
+X }
+X
+X/^%P/ {
+X P ++
+X if ( P>1 ) {
+X err=1
+X print "Two page nos? : Reference " rx >> errfil
+X print pages >> errfil
+X }
+X pages = entry
+X next
+X }
+X
+X/^%J/ {
+X J ++
+X if ( J>1 ) {
+X err=1
+X print "Two journals: Reference " rx >> errfil
+X print journal >> errfil
+X }
+X journal = entry
+X next
+X }
+X
+X/^%V/ {
+X V ++
+X if ( V>1 ) {
+X err=1
+X print "Two volumes: Reference " rx >> errfil
+X print volume >> errfil
+X }
+X volume = entry
+X next
+X }
+X
+X/^%N/ {
+X N ++
+X if ( N>1 ) {
+X err=1
+X print "Two issue numbers: Reference " rx >> errfil
+X print number >> errfil
+X }
+X number = entry
+X next
+X }
+X
+X/^[^%]/ { # non-blank-non-% lines
+X
+X if(FILENAME == keyfil )
+X keyused[$1] = $2
+X else
+X if(percent)
+X { # in the references
+X
+X if( pctchar == "A") authors[A] = authors[A] " " $0
+X if( pctchar == "B") booktitle = booktitle " " $0
+X if( pctchar == "C") city = city " " $0
+X if( pctchar == "D") date = date " " $0
+X if( pctchar == "E") alleditors = alleditors " " $0
+X if( pctchar == "G") govtorder = govtorder " " $0
+X if( pctchar == "H") header = header " " $0
+X if( pctchar == "I") publisher = publisher " " $0
+X if( pctchar == "J") journal = journal " " $0
+X if( pctchar == "K") keywords = keywords " " $0
+X if( pctchar == "L") label = label " " $0
+X if( pctchar == "M") bellmemo = bellmemo " " $0
+X if( pctchar == "N") number = number " " $0
+X if( pctchar == "O") other = other " " $0
+X if( pctchar == "P") pages = pages " " $0
+X if( pctchar == "Q") authors[A] = authors[A] " " $0
+X if( pctchar == "R") report = report " " $0
+X if( pctchar == "S") series = series " " $0
+X if( pctchar == "T") title = title " " $0
+X if( pctchar == "V") volume = volume " " $0
+X if( pctchar == "X") abstr = abstr " " $0
+X }
+X else {
+X if (!comment) print "@Comment{"
+X print $0
+X comment = 1
+X }
+X next
+X }
+X
+X/^%C/ {
+X C ++
+X if ( C>1 ) {
+X err=1
+X print "Two cities: Reference " rx >> errfil
+X print city >> errfil
+X }
+X city = entry
+X next
+X }
+X
+X/^%I/ {
+X I ++
+X if ( I>1 ) {
+X err=1
+X print "Two publishers: Reference " rx >> errfil
+X print publisher >> errfil
+X }
+X publisher = entry
+X next
+X }
+X
+X/^%B/ {
+X B ++
+X if ( B>1 ) {
+X err=1
+X print "Two books: Reference " rx >> errfil
+X print booktitle >> errfil
+X }
+X booktitle = entry
+X next
+X }
+X
+X/^%E/ { # this really deals with 'bib' format which allows multiple
+X # %E fields
+X # refer only allows one %E field
+X # we split it when the reference is printed
+X E++
+X if ( alleditors == "" ) alleditors = entry
+X else alleditors = alleditors " and " entry
+X next
+X }
+X
+X/^%O/ {
+X O ++
+X if ( O>1 ) {
+X err=1
+X print "Two others: Reference " rx >> errfil
+X print other >> errfil
+X }
+X other = entry
+X next
+X }
+X
+X/^%H/ {
+X H ++
+X if ( H>1 ) {
+X err=1
+X print "Two headers: Reference " rx >> errfil
+X print header >> errfil
+X }
+X header = entry
+X next
+X }
+X
+X/^%S/ {
+X S ++
+X if ( S>1 ) {
+X err=1
+X print "Two series: Reference " rx >> errfil
+X print series >> errfil
+X }
+X series = entry
+X next
+X }
+X
+X/^%R/ {
+X R ++
+X if ( R>1 ) {
+X err=1
+X print "Two reports: Reference " rx >> errfil
+X print report >> errfil
+X }
+X report = entry
+X next
+X }
+X
+X/^%X/ {
+X X ++
+X abstr = entry
+X if ( X>1 ) {
+X err=1
+X print "Two abstracts: Reference " rx >> errfil
+X }
+X next
+X }
+X
+X/^%K/ {
+X K++
+X if (K>1) {
+X err=1
+X print "Two keywords: Reference " rx >> errfil
+X print keywords >> errfil
+X }
+X keywords = entry
+X next
+X }
+X
+X/^%L/ {
+X L++
+X if (L>1) {
+X err=1
+X print "Two labels: Reference " rx >> errfil
+X print label >> errfil
+X }
+X label = entry
+X next
+X }
+X
+X/^%G/ {
+X G++
+X if (G>1) {
+X err=1
+X print "Two Gov't order Nos: Reference " rx >> errfil
+X print govtorder >> errfil
+X }
+X govtorder = entry
+X next
+X }
+X
+X/^%M/ {
+X M++
+X if (M>1) {
+X err=1
+X print "Two Bell Labs Memo Nos: Reference " rx >> errfil
+X print bellmemo >> errfil
+X }
+X bellmemo = entry
+X next
+X }
+X
+X/^%/ { # should not get these
+X F ++
+X print "Unexpected flag: Reference " rx >> errfil
+X print $0 >> errfil
+X err = 1
+X next
+X }
+X
+XEND {
+X print refs " references" >> errfil
+X if(toterr) print toterr " erroneous" >> errfil
+X if(bibs[article]>0) print bibs[article], " journal articles" >> errfil
+X if(bibs[book]>0) print bibs[book], " books" >> errfil
+X if(bibs[booklet]>0) print bibs[booklet], " booklets" >> errfil
+X if(bibs[inbook]>0) print bibs[inbook], " book extracts" >> errfil
+X if(bibs[incollection]>0) print bibs[incollection], " book articles" >> errfil
+X if(bibs[inproceedings]>0) print bibs[inproceedings], " conference papers" >> errfil
+X if(bibs[manual]>0) print bibs[manual], " manuals" >> errfil
+X if(bibs[mastersthesis]>0) print bibs[mastersthesis], " Master's theses" >> errfil
+X if(bibs[misc]>0) print bibs[misc], " miscellaneous" >> errfil
+X if(bibs[phdthesis]>0) print bibs[phdthesis], " PhD theses" >> errfil
+X if(bibs[proceedings]>0) print bibs[proceedings], " conference proceedings" >> errfil
+X if(bibs[techreport]>0) print bibs[techreport], " technical reports" >> errfil
+X if(bibs[unpublished]>0) print bibs[unpublished], " unpublished papers" >> errfil
+X
+X for(k in keyused) print k, keyused[k] > nkeyfil
+X
+X }
+XZZ
+X
+X$DEBUG && echo "Generated: <$GEN>" 1>&2
+X$DEBUG && echo "Width: <$WIDTH>" 1>&2
+X$DEBUG && echo "Errors in: <$ERRFILE>" 1>&2
+X$DEBUG && echo "Authors used in Keys: <$NAUTHOR>" 1>&2
+X$DEBUG && echo "Characters/Author used in Keys: <$LAUTHOR>" 1>&2
+X
+X# Process each file, or if none given, standard input
+Xfor FILE in ${*-$STDIN}
+Xdo
+X cp $KEYFILE $NKEYFILE
+X
+X# First set up shell variables as required
+X if [ "$FILE" = "$STDIN" ]
+X then
+X NEWFILE=$NAME.$BIB
+X else
+X if [ -r "$FILE" -a -f "$FILE" ]
+X then
+X NAME=`basename $FILE`
+X NEWFILE=$FILE.$BIB
+X else
+X NAME=""
+X echo "$PROGNAME: Can't read $FILE" 1>&2
+X fi
+X fi
+X
+X# If all is OK, read input and terminate with a blank line.
+X if [ "$NAME" ]
+X then
+X if [ "$FILE" = "$STDIN" ]
+X then
+X# If no files given, read from standard input.
+X $DEBUG && echo "Reading from standard input" 1>&2
+X cat
+X echo
+X else
+X $DEBUG && echo "Reading <$FILE>" 1>&2
+X cat $FILE
+X echo
+X fi |
+X# do the conversions
+X sed -f $SEDFILE |
+X awk -f $AWKFILE $KEYFILE - |
+X# Finally, output to named files or standard output
+X if $NAMEDFILES
+X then
+X $DEBUG && echo "Output to <$NEWFILE>" 1>&2
+X cat > $NEWFILE
+X else
+X cat
+X fi
+X fi
+X cp $NKEYFILE $KEYFILE
+Xdone
+X
+Xecho >> $ERRFILE Key Frequencies
+Xsort < $KEYFILE >> $ERRFILE
+X[ $AKEYFILE ] && [ -w $AKEYFILE ] && cat $KEYFILE > $AKEYFILE
+Xexit 0
+End-of-file
+echo Extracting $PRGRM.1
+sed -e 's/^X//' -e 's/prgrm/'$PRGRM'/' <<'End-of-file' >$PRGRM.1
+X.TH prgrm 1-local
+X.SH NAME
+Xprgrm \- convert refer input files to bibtex .bib files
+X.SH SYNOPSIS
+X.B prgrm
+X[options ...] [files ...]
+X.br
+X.SH DESCRIPTION
+X.B prgrm
+Xreads the
+X.I files
+Xand produces a
+X.B bibtex
+Xreference list (a .bib file) on the standard output.
+XIf no files are given, prgrm reads
+Xstandard input.
+X.PP
+XA rudimentary attempt is made to convert
+X.I troff
+Xspecial characters and accents to the equivalent
+X.I TeX
+Xones.
+XThe file ``prgrm.errs'' contains complaints about references that were
+Xnot recognised, and other problems, as well as a summary of the
+Xnumber of conversions completed.
+X.PP
+XSince
+X.B refer
+Xfiles are inherently unstructured (compared to
+X.B bibtex )
+X.B prgrm
+Xonly does a passable job. In particular
+X.B refer
+Xdoesn't require a keyword, while
+X.B bibtex
+Xdoes.
+X.B prgrm
+Xgenerates one using the following procedure:
+Xthe first three characters of the last names of the first three authors
+Xare concatenated, (preserving the capital letters), and the last two
+Xdigits of the date are appended. If this key has already been used,
+Xthen 'a', 'b', 'c', are appended as needed.
+XThere is an optional facility to start the key useage where it left off
+Xin some previous conversion, by supplying a file containing the keys used.
+X.PP
+XJournal entries that appear to be in the standard bibliography style
+Xfiles list of @strings, are converted.
+XThe %D field is converted to month and year entries if there are two
+Xfields, otherwise it is assumed to contain only the year.
+XA large number of proper names, such as Hilbert, Turing, etc.,
+Xwhich are often found in the titles of articles are enclosed in braces
+X{} to protect them. This treatment is also applied to any strings of
+Xtwo or more consecutive capital letters, or to any isolated single
+Xcapital letter (except A).
+XThe user can supply an extra list of names to have their capitalisation
+Xprotected.
+X.PP
+XTo determine the type of reference that the
+X.B refer
+Xentry is,
+X.B prgrm
+Xhas to do some ``calculated guessing''. The heuristic used
+Xhere (again, in order of precedence) is:
+X.PP
+X1. If it has a journal entry (%J) then it's considered to
+Xbe an @article, unless there is a city entry (%C) or a publisher entry
+X(%I) as well, in which case it's treated as an @inproceedings.
+XIf there is no volume or number (%V or %N) entry it will be considered a
+Xconference proceedings.
+X.PP
+X2. If it has a book entry (%B) then it's considered to
+Xbe an @incollection.
+X.PP
+X3. If it has a report entry (%R) then it's considered to
+Xbe a @techreport.
+XIf the %R field contains the word ``Dissertation'' or ``Thesis'',
+Xthe classification will be @phdthesis or @mastersthesis.
+XIf the %R field contains the word ``Manual'' then it will be classified
+Xas a @manual, and if it contains ``Unpublished''
+Xit will be classified as a @unpublished.
+X.PP
+X4. If it has a issuer entry (%I) then it's considered to
+Xbe a @book.
+X.PP
+X5. Otherwise it's considered to be a @misc, or @unpublished.
+XAll these entries are listed in the ``prgrm.errs'' file.
+XThe decision to classify it as @unpublished is made if the
+Xword ``unpublished'' appears in the %O field. This word is deleted.
+X.PP
+XQuite often
+X.B prgrm
+Xwill misguess and you will need to edit (by hand) the resulting .bib
+Xfile.
+X.PP
+XAny fields that
+X.B prgrm
+Xdoesn't know about it will ignore (and complain about on stderr).
+X.PP
+XThe output is normally folded at word boundaries to ensure that
+Xlines do not become too long on output.
+XJournal entries that correspond to the abbreviations in the standard
+Xbibliography styles are abbreviated, as are months mentioned in the date
+Xfield.
+X.PP
+XNon blank lines that appear outside a reference are accumulated
+Xand printed as a @comment section. In fact BiBTeX would ignore them
+Xas refer does, but identifying them separately seems cleaner, and might
+Xmake prgrm suitable for converting refer bibliographies to scribe
+Xformat.
+X.SH OPTIONS
+XThe following options are available:
+X.TP 10
+X.BI \- num
+XSpecify a maximum width for the output.
+XThe default is 72 characters.
+XIf
+X.I num
+Xis omitted then lines are not folded and may be of any length.
+X.TP 10
+X.BI \-e " file"
+XUse the next argument as the file name in which to print the errors
+Xand summary of output.
+X.TP 10
+X.BI \-kf " file"
+XUse the next argument as a file name to read the current state of key
+Xusage from, and to save the key usage data at the end of the conversion.
+XThis allows extra databases to be converted, without having to convert
+Xall the old ones, and keeps the keys unique over all the databases.
+X.TP 10
+X.BI \-k " n"
+XUse the next argument to decide how many authors names to use in generating the
+Xkey. (Default 3).
+X.TP 10
+X.BI \-l " n"
+XUse the next argument to decide how many charcters from each authors name
+Xto use in generating the key. (Default 3).
+X.TP 10
+X.B \-n
+XUse the name of the input file(s) to produce output file(s) with
+Xthe same name and extension ``.bib'' rather than sending the output
+Xto standard output.
+X.TP 10
+X.B \-u
+XDisplay the usage of the command.
+X.TP 10
+X.B \-w
+XDo not fold the output. Lines may be of any length.
+X.SH ACKNOWLEDGMENT
+XThis manual page is based on the manual page for
+X.I r2bib ,
+Xa program which performs a simpler version of the same conversion,
+Xwritten by
+XRusty Wright, Center For Music Experiment, University of California San
+XDiego.
+XThe options and their processing is based on the
+X.I ref2bib
+Xwritten independently by Jonathan Bowen of the Programming Research Group,
+XOxford University.
+XA number of the heuristics are also copied from Jonathan Bowen's
+Xscript.
+X.SH AUTHOR
+XPeter King, Computer Science Department, Heriot-Watt University,
+XEdinburgh.
+X.SH BUGS
+XImplemented as a
+X.I sh(1)
+Xscript, using
+X.I sed(1)
+Xand
+X.I awk(1) .
+XThis makes the conversion very slow, but also means that it is easily
+Xmodified to alter the heuristics. In particular, the key generation
+Xalgorithm is easily changed.
+X
+XThe heuristics for identifying theses, unpublished papers, etc. are
+Xrather crude.
+End-of-file
+echo End of archive
+exit 0
+-------
diff --git a/info/digests/texhax/txh/kingold.txh b/info/digests/texhax/txh/kingold.txh
new file mode 100644
index 0000000000..e2b9eb8769
--- /dev/null
+++ b/info/digests/texhax/txh/kingold.txh
@@ -0,0 +1,875 @@
+26-Aug-88 06:58:29-PDT,25088;000000000000
+Return-Path: <pjbk%cs.heriot-watt.ac.uk@NSS.Cs.Ucl.AC.UK>
+From: Peter King <pjbk%cs.heriot-watt.ac.uk@NSS.Cs.Ucl.AC.UK>
+Date: Fri, 26 Aug 88 14:46:57 BST
+Subject: refer to BiBTeX conversion
+
+I have written a shell script (using both sed and awk) which
+will convert refer (or bib) databases to BiBTeX format. The program
+r2bib on the UNIX tape does a similar job, but I belive my script
+is more useful because it
+ a) does a better job of generating keys
+ b) converts accents and (some) troff special characters
+ c) is readily customisable (if you know awk)
+ d) does a slightly better job of classification
+ of type of reference.
+
+It's probably too long (c. 850 lines) to include in the mailshot,
+but here it is for archiving. I have sent Pierre MacKay a copy.
+The manual page was adapted from the r2bib manual page.
+
+Peter King
+Peter King, Computer Science Department JANET: pjbk@uk.ac.hw.cs
+ Heriot-Watt University ARPA: pjbk@cs.hw.ac.uk
+ 79 Grassmarket, Edinburgh EH1 2HJ or pjbk%cs.hw.ac.uk@ucl-cs
+Phone: (+44) 31 225 6465 Ext. 555 UUCP: ..!ukc!cs.hw.ac.uk!pjbk
+------------------------------Cut here-----------------------------------
+export PATH || exec /bin/sh $0 $*
+: "This is a shar archive; use /bin/sh to extract"
+: "Extracted files will be owned by you, and will have"
+: "default permissions"
+PATH=/bin:/usr/bin
+echo If this archive is complete, \"End of archive\" will appear at the end
+echo Extracting ref2bib
+sed 's/^X//' <<'End-of-file' >ref2bib
+X#!/bin/sh
+X#
+X# shell script to convert refer (or bib) databases to BiBTeX format
+X#
+X# reads its arguments (or standard input)
+X# and writes the BibTeX to standard output
+X#
+X# the in-line files ref2b*.{sed,awk} do not change, and could be
+X# stored in a library somewhere. The sed script can actually be
+X# given as an argument in ' ' quotes provided the ' in the
+X# file are replaced with '\'' !!
+X# the awk script is too large for this treatment.
+X#
+X# The gnereation of keys can be altered by changing the
+X# values of some awk variables
+X#
+X# errors etc. in ref2bib.errs
+X#
+Xcat << 'ZZ' >ref2b$$.sed
+X#
+X# sed script to do some of the ref to bib database conversion
+X#
+X# written by Peter King, Heriot-Watt University
+X# You may do anything you like with this code
+X# EXCEPT claim that you wrote it
+X#
+X# First alter the TeX special characters
+Xs/\(.\)%/\1\\%/g
+Xs/&/\\&/g
+Xs/\$/\\$/g
+Xs/#/\\#/g
+Xs/_/\\_/g
+Xs/{/\\{/g
+Xs/}/\\}/g
+X# convert the special characters and accents from troff to BibTeX
+X# assumes the accents are those of the Berkeley -ms with .AM
+X#
+X/\\/s/\(.\)\\\\*\*'/{\\'\1}/g
+X/\\/s/\(.\)\\\\*\*`/{\\`\1}/g
+X/\\/s/\(.\)\\\\*\*^/{\\^\1}/g
+X/\\/s/\(.\)\\\\*\*:/{\\"\1}/g
+X/\\/s/\(.\)\\\\*\*~/{\\~\1}/g
+X/\\/s/\(.\)\\\\*\*_/{\\=\1}/g
+X/\\/s/\([oO]\)\\\\*\*\//{\\\1}/g
+X/\\/s/\([aA]\)\\\\*\*o/{\\\1\1}/g
+X/\\/s/\(.\)\\\\*\*,/{\\c{\1}}/g
+X/\\/s/\(.\)\\\\*\*v/{\\v{\1}}/g
+X/\\/s/\(.\)\\\\*\*"/{\\H{\1}}/g
+X/\\/s/\(.\)\\\\*\*\./{\\d{\1}}/g
+X/\\/s/\\\\*\*8/{\\ss}/g
+X/\\/s/\\\\*\*(P\([lL]\)/{\\\1}/g
+X/\\/s/\\\\*\*(\([oO]\)\//{\\\1}/g
+X# quotes
+X/\\/s/\\\\*\*Q/``/g
+X/\\/s/\\\\*\*U/''/g
+X/\\/s/\\\\*\*-/---/g
+X# \0 as space between surname de\0Souza etc.
+X/\\/s/\\\\*0\([a-z]*\)\\\\*0/\\0\1 /g
+X/\\/s/ \([a-z]*\)\\\\*0/ \1 /g
+X# but trap the ones that start with a capital letter and convert them to
+X# ties
+X/\\/s/\\\\*0/~/g
+X#
+X# now deal with special characters and Greek
+X/\\/s/\\\\*(em/---/g
+X/\\/s/\\\\*(if/$\\infty$/g
+X/\\/s/\\\\*(\*a/$\\alpha$/g
+X/\\/s/\\\\*(\*b/$\\beta$/g
+X/\\/s/\\\\*(\*g/$\\gamma$/g
+X/\\/s/\\\\*(\*d/$\\delta$/g
+X/\\/s/\\\\*(\*e/$\\epsilon$/g
+X/\\/s/\\\\*(\*z/$\\zeta$/g
+X/\\/s/\\\\*(\*y/$\\eta$/g
+X/\\/s/\\\\*(\*h/$\\theta$/g
+X/\\/s/\\\\*(\*i/$\\iota$/g
+X/\\/s/\\\\*(\*k/$\\kappa$/g
+X/\\/s/\\\\*(\*l/$\\lambda$/g
+X/\\/s/\\\\*(\*m/$\\mu$/g
+X/\\/s/\\\\*(\*n/$\\nu$/g
+X/\\/s/\\\\*(\*c/$\\xi$/g
+X/\\/s/\\\\*(\*o/$o$/g
+X/\\/s/\\\\*(\*p/$\\pi$/g
+X/\\/s/\\\\*(\*r/$\\rho$/g
+X/\\/s/\\\\*(\*s/$\\sigma$/g
+X/\\/s/\\\\*(\*t/$\\tau$/g
+X/\\/s/\\\\*(\*u/$\\upsilon$/g
+X/\\/s/\\\\*(\*f/$\\phi$/g
+X/\\/s/\\\\*(\*x/$\\chi$/g
+X/\\/s/\\\\*(\*q/$\\psi$/g
+X/\\/s/\\\\*(\*w/$\\omega$/g
+X/\\/s/\\\\*(\*A/A/g
+X/\\/s/\\\\*(\*B/B/g
+X/\\/s/\\\\*(\*G/$\\Gamma$/g
+X/\\/s/\\\\*(\*D/$\\Delta$/g
+X/\\/s/\\\\*(\*E/E/g
+X/\\/s/\\\\*(\*Z/Z/g
+X/\\/s/\\\\*(\*Y/H/g
+X/\\/s/\\\\*(\*H/$\\Theta$/g
+X/\\/s/\\\\*(\*I/I/g
+X/\\/s/\\\\*(\*K/K/g
+X/\\/s/\\\\*(\*L/$\\Lambda$/g
+X/\\/s/\\\\*(\*M/M/g
+X/\\/s/\\\\*(\*N/N/g
+X/\\/s/\\\\*(\*C/$\\Xi$/g
+X/\\/s/\\\\*(\*O/$O$/g
+X/\\/s/\\\\*(\*P/$\\Pi$/g
+X/\\/s/\\\\*(\*R/P/g
+X/\\/s/\\\\*(\*S/$\\Sigma$/g
+X/\\/s/\\\\*(\*T/T/g
+X/\\/s/\\\\*(\*U/$\\Upsilon$/g
+X/\\/s/\\\\*(\*F/$\\Phi$/g
+X/\\/s/\\\\*(\*X/X/g
+X/\\/s/\\\\*(\*Q/$\\Psi$/g
+X/\\/s/\\\\*(\*W/$\\Omega$/g
+X# Now trap title words that must be capitalised
+X/^%[^T]/b
+X#
+X# first all words that are all capitals (at least two consecutive)
+X# we need the slashes to allow for M/M/1 queues
+Xs;[A-Z][A-Z/][A-Z/0-9]*;{&};g
+X#
+X# then some proper names
+X# first some mathematicians
+X# (for some I've added the Pattern [^ -]* toe the end to get Markov,
+X# Markovian, etc.
+Xs/Abel/{&}/g
+Xs/Bernoulli/{&}/g
+Xs/Bessel/{&}/g
+Xs/Beta/{&}/g
+Xs/Borel/{&}/g
+Xs/Cauchy/{&}/g
+Xs/Church/{&}/g
+Xs/Rosser/{&}/g
+Xs/Dedekind/{&}/g
+Xs/Descartes/{&}/g
+Xs/Dirichlet/{&}/g
+Xs/Euclid[^ -,;]*/{&}/g
+Xs/Euler/{&}/g
+Xs/Fibonacci/{&}/g
+Xs/Fermat/{&}/g
+Xs/Fourier/{&}/g
+Xs/Fresnel/{&}/g
+Xs/Frobenius/{&}/g
+Xs/Perron/{&}/g
+Xs/Gamma/{&}/g
+Xs/Gauss[^ -,;]*/{&}/g
+Xs/Hilbert/{&}/g
+Xs/Horner/{&}/g
+Xs/Holder/{&}/g
+Xs/Jacobi[^ -,;]*/{&}/g
+Xs/Jensen/{&}/g
+Xs/Markov[^ -,;]*/{&}/g
+Xs/Arnoldi/{&}/g
+Xs/Laplace/{&}/g
+Xs/Laguerre/{&}/g
+Xs/Lagrange/{&}/g
+Xs/Legendre/{&}/g
+Xs/Leibnitz/{&}/g
+Xs/Rayleigh/{&}/g
+Xs/Ritz/{&}/g
+Xs/Riemann/{&}/g
+X# this is really Rouche (acute accent) , but the accent processing will disrupt it
+Xs/Rouch/{&}/g
+Xs/Stieltjes/{&}/g
+Xs/Stiener/{&}/g
+Xs/Schwarz/{&}/g
+Xs/Weibull/{&}/g
+Xs/Wald/{&}/g
+Xs/Kronecker/{&}/g
+Xs/Diophantine/{&}/g
+Xs/Delbrouck/{&}/g
+Xs/Bayes[^ -,;]*/{&}/g
+Xs/Jackson/{&}/g
+Xs/Newhall/{&}/g
+Xs/Turing/{&}/g
+Xs/Norton/{&}/g
+Xs/Petri/{&}/g
+Xs/Wilkinson/{&}/g
+Xs/Skinner/{&}/g
+Xs/Schafer/{&}/g
+Xs/Dempster/{&}/g
+Xs/Runge/{&}/g
+Xs/Kutta/{&}/g
+Xs/Pollaczek/{&}/g
+Xs/Khinchin/{&}/g
+Xs/Palm/{&}/g
+Xs/Erlang/{&}/g
+Xs/Engset/{&}/g
+Xs/Little's/{&}/g
+Xs/Kosten/{&}/g
+Xs/Gittins/{&}/g
+Xs/Feller/{&}/g
+Xs/Cox/{&}/g
+Xs/Poisson/{&}/g
+Xs/Chapman/{&}/g
+Xs/Kolmogorov/{&}/g
+Xs/Smirnov/{&}/g
+Xs/Weiner/{&}/g
+Xs/Hopf/{&}/g
+Xs/Stirling/{&}/g
+X
+X# computing
+Xs/Buzen/{&}/g
+Xs/Gordon/{&}/g
+Xs/Newell/{&}/g
+Xs/Lemoine/{&}/g
+Xs/Pierce/{&}/g
+Xs/Harrison/{&}/g
+Xs/Cambridge/{&}/g
+Xs/Ethernet/{&}/g
+Xs/Aloha/{&}/g
+X
+X# coding theory
+Xs/Hamming/{&}/g
+Xs/Huffman/{&}/g
+Xs/Reed/{&}/g
+Xs/Shannon/{&}/g
+Xs/Solomon/{&}/g
+Xs/Viterbi/{&}/g
+XZZ
+Xcat << 'ZZ' > ref2b$$.awk
+X#
+X# awk script to convert refer (or bib) format databases
+X# to BiBTeX format.
+X#
+X# written by Peter King, Heriot-Watt University
+X# use freely, but dont claim that you wrote it
+X#
+X# Generates keys using authors names and year (see %A entry )
+X#
+X# You may wish to alter treatment of key fields that are ignored
+X# such as %U %W %Y %K etc.
+X#
+X# regular expressions should be sorted according to frequency
+X# so that minimal tests are made
+X# From tests in a local data base the order given appears quite good
+X# 2883 %A
+X# 1813 blank lines
+X# 1774 %T
+X# 1764 %D
+X# 1505 %P
+X# 1347 %J
+X# 1331 %V
+X# 1201 %N
+X# 773 .. continuation lines
+X# 501 %C
+X# 424 %I
+X# 192 %B
+X# 187 %E
+X# 92 %S
+X# 89 %R
+X# 33 %X
+X# 30 %K
+X# 16 %O
+X# 12 %any other % lines
+X#
+XBEGIN {
+X for(i=1;i<=27;i++)
+X addkey[i] = substr(" abcdefghijklmnopqrstuvwxyz",i,1);
+X lkey = 3; # number of characters used from authors to make key
+X maxauthor = 3; # maximum number of authors to use in
+X # constructing key
+X rx = 1
+X }
+X
+X/\\[*u0]/ || /\\d[^{]/|| /\\s[^s]/ {
+X err = 1
+X print "Non translated \\ symbol : Reference " rx > "ref2bib.errs"
+X print $0 > "ref2bib.errs"
+X }
+X
+X/^%A/ {
+X if (A==0) keys="";
+X A ++; lastx = "A";
+X authors[A] = substr($0,4)
+X if(A> maxauthor) next
+X ic = 0
+X lc = 1
+X while(ic < lkey && lc <= length($NF) ){
+X kc = substr( $NF, lc, 1)
+X if ( kc ~ /[a-zA-Z]/ ){
+X keys = keys kc
+X ic++
+X if(ic==lkey) next
+X }
+X else if ( kc == "\\" ) lc ++;
+X lc ++;
+X }
+X next
+X }
+X
+X/^$/ {
+X if(NR==pr+1){
+X }
+X else {
+X refs ++
+X # if FILENAME != prevname then new file
+X acnt[A]++;if(A>MaxA)MaxA=A;
+X if(T==0)print "No title : Reference "refs" "keys > "ref2bib.errs"
+X if(A==0)print "No author : Reference "refs" "keys > "ref2bib.errs"
+X if(D==0)print "No date : Reference "refs" "keys > "ref2bib.errs"
+X if( (!T)||(!A)||(!D))err=1;
+X # classify the reference
+X if(J){
+X #journal or conference
+X if(B||E||R)print "Journal & book?: Reference "refs" "keys > "ref2bib.errs"
+X if(C||I) {conf++
+X type = "Inproceedings"
+X }
+X else{
+X jour ++;
+X type = "Article"
+X }
+X if(!P) print "No page nos.? : Reference "refs" "keys > "ref2bib.errs"
+X if( B||E||R||(!P))err=1
+X if(err){
+X print "Journal reference in error" > "ref2bib.errs"
+X }
+X }
+X else
+X if(B){
+X # article in book
+X type = "Incollection"
+X bookart++
+X if(N||R||(!E)||(!I)||(!C)||(!P)||(V&&(!S)))err=1
+X if(!E) print "No editor? Reference "refs" " keys > "ref2bib.errs"
+X if(!I) print "No publisher? Reference "refs" " keys > "ref2bib.errs"
+X if(!C) print "No city? Reference "refs" " keys > "ref2bib.errs"
+X if(!P) print "No page nos.? Reference "refs" " keys > "ref2bib.errs"
+X if(V&&(!S))print "Volume but no Series Reference "refs" " keys > "ref2bib.errs"
+X if(N)print "Issue no.? Reference "refs" " keys > "ref2bib.errs"
+X if(R)print "Report? Reference "refs" " keys > "ref2bib.errs"
+X if(err){
+X print "Book reference in error" > "ref2bib.errs"
+X }
+X }
+X else if(R){
+X #report
+X type = "Techreport"
+X reps++
+X if(E||N)err=1
+X if(N)print "Issue no.? Reference "refs" " keys > "ref2bib.errs"
+X if(E) print "Editor? Reference "refs" " keys > "ref2bib.errs"
+X if(err){
+X print "Report reference in error" > "ref2bib.errs"
+X }
+X }
+X else if(I){
+X wholebook ++
+X type = "Book"
+X # book
+X if(N||R||E||(!C)||(V&&(!S)))err=1
+X if(!C) print "No city? Reference "refs" " keys > "ref2bib.errs"
+X if(N)print "Issue no.? Reference "refs" " keys > "ref2bib.errs"
+X if(E)print "Editor? Reference "refs" " keys > "ref2bib.errs"
+X if(V&&(!S))print "Volume but no Series Reference "refs" " keys > "ref2bib.errs"
+X if(err){
+X print "Book reference in error" > "ref2bib.errs"
+X }
+X }
+X else {
+X unclass ++
+X type = "Misc"
+X err=1
+X print "Unclassified reference in error" > "ref2bib.errs"
+X }
+X
+X # generate date
+X ndate = split(date,df)
+X if ( ndate > 2) print " Funny date " date > "ref2bib.errs"
+X if (ndate == 1 ) { df[2] = df[1]; df[1] = ""; }
+X
+X
+X # generate key
+X if(keys == "") keys = "ANON"
+X keys = keys substr(df[2],3,2)
+X if(keyused[keys] >=1) {
+X key_suffix = keyused[keys]++;
+X keys = keys addkey[key_suffix];
+X }
+X else keyused[keys] = 1
+X if (err) {
+X print "Key: " keys > "ref2bib.errs"
+X if(A) for (i=1;i<=A;i++)
+X print "%A " authors[i] > "ref2bib.errs"
+X if(T) print "%T " title > "ref2bib.errs"
+X if(J) print "%J "journal > "ref2bib.errs"
+X if(B) print "%B "book > "ref2bib.errs"
+X if(V) print "%V "volume > "ref2bib.errs"
+X if(N) print "%N "number > "ref2bib.errs"
+X if(I) print "%I "publisher > "ref2bib.errs"
+X if(C) print "%C "city > "ref2bib.errs"
+X if(E) for (i=1;i<=E;i++)print "%E "editor[i] > "ref2bib.errs"
+X if(S) print "%S "series > "ref2bib.errs"
+X if(P) print "%P "pages > "ref2bib.errs"
+X if(R) print "%R "report > "ref2bib.errs"
+X if(D) print "%D "date > "ref2bib.errs"
+X if(O) print "%O "other > "ref2bib.errs"
+X print "" > "ref2bib.errs"
+X }
+X
+X if(T){
+X twc = split(title,z)
+X title = z[1]; lt = length(z[1]);
+X for(i=2;i<=twc;i++) {
+X if(lt +length(z[i]) >= 55) {sc = "\n\t\t";lt = 0;}
+X else sc = " ";
+X title = title sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X if(O){
+X twc = split(other,z)
+X other = z[1]; lt = length(z[1]);
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= 55) {sc = "\n\t\t";lt = 0;}
+X else sc = " ";
+X other = other sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X if(X){
+X twc = split(abstr,z)
+X abstr = z[1]; lt = length(z[1]);
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= 55) {sc = "\n\t\t";lt = 0;}
+X else sc = " ";
+X abstr = abstr sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X
+X printf "@%s{\t%s",type,keys
+X if(A) {
+X printf ",\n\tAuthor = { %s",authors[1]
+X for(i=2;i<=A;i++) printf " and\n\t\t%s",authors[i]
+X printf " }"
+X }
+X if(T) printf ",\n\tTitle = { %s }",title
+X if(B) printf ",\n\tBooktitle = { %s }",book
+X if(E) {
+X printf ",\n\tEditor = { %s",editor[1]
+X for(i=2;i<=E;i++) printf " and\n\t\t%s",editor[i]
+X printf " }"
+X }
+X if(I) printf ",\n\tPublisher = { %s }",publisher
+X if(C) printf ",\n\tAddress = { %s }",city
+X if(J) { # substitute the journal abbreviations from the standard styles
+X journal = "{ " journal " }"
+X # {acmcs} {"ACM Computing Surveys"}
+X if ( journal ~ /Comp.* Sur/ ) journal = "acmcs"
+X # {acta} {"Acta Informatica"}
+X if ( journal ~ /Acta Inf/ ) journal = "acta"
+X # {cacm} {"Communications of the ACM"}
+X if ( journal ~ /Com.* ACM/ ) journal = "cacm"
+X if ( journal ~ /CACM/ ) journal = "cacm"
+X # {ibmjrd} {"IBM Journal of Research and Development"}
+X if ( journal ~ /IBM J.*R.*D/ ) journal = "ibmjrd"
+X # {ibmsj} {"IBM Systems Journal"}
+X if ( journal ~ /IBM Sy.*J/ ) journal = "ibmsj"
+X # {ieeese} {"IEEE Transactions on Software Engineering"}
+X if ( journal ~ /IEEE Tran.*Soft.*Eng/ ) journal = "ieeese"
+X # {ieeetc} {"IEEE Transactions on Computers"}
+X if ( journal ~ /IEEE Tran.*Computers/ ) journal = "ieeetc"
+X # {ieeetcad}
+X if ( journal ~ /IEEE Tran.*Comp.*Desig/ ) journal = "ieeetcad"
+X # {ipl} {"Information Processing Letters"}
+X if ( journal ~ /Inf.*Proc.*Lett/ ) journal = "ipl"
+X # {jacm} {"Journal of the ACM"}
+X if ( journal ~ /Jou.* ACM/ ) journal = "jacm"
+X if ( journal ~ /JACM/ ) journal = "jacm"
+X # {jcss} {"Journal of Computer and System Sciences"}
+X if ( journal ~ /J.*Comp.*Sys.*Sc/ ) journal = "jcss"
+X # {scp} {"Science of Computer Programming"}
+X if ( journal ~ /Sc.*Comp.*Prog/ ) journal = "scp"
+X # {sicomp} {"SIAM Journal on Computing"}
+X if ( journal ~ /SIAM .*Comp/ ) journal = "sicomp"
+X # {tocs} {"ACM Transactions on Computer Systems"}
+X if ( journal ~ /ACM Tran.*Comp.*Sys/ ) journal = "tocs"
+X # {tods} {"ACM Transactions on Database Systems"}
+X if ( journal ~ /ACM Tran.*Data.*Sys/ ) journal = "tods"
+X # {tog} {"ACM Transactions on Graphics"}
+X if ( journal ~ /ACM Tran.*Grap/ ) journal = "tog"
+X # {toms} {"ACM Transactions on Mathematical Software"}
+X if ( journal ~ /ACM Tran.*Math.*Soft/ ) journal = "toms"
+X # {toois} {"ACM Transactions on Office Information Systems"}
+X if ( journal ~ /ACM Tran.*Off.*Inf.*Sys/ ) journal = "toois"
+X # {toplas} {"ACM Transactions on Programming Languages and Systems"}
+X if ( journal ~ /ACM Tran.*Prog.*Lan.*Sys/ ) journal = "toplas"
+X # {tcs} {"Theoretical Computer Science"}
+X if ( journal ~ /Th.*Comp.*Sci/ ) journal = "tcs"
+X
+X printf ",\n\tJournal = %s",journal
+X }
+X if(V) printf ",\n\tVolume = { %s }",volume
+X if(N) printf ",\n\tNumber = { %s }",number
+X if(P) printf ",\n\tPages = { %s }",pages
+X if(O) printf ",\n\tNote = { %s }",other
+X if(R) printf ",\n\tNumber = { %s }",report
+X if(S) printf ",\n\tSeries = { %s }",series
+X if(df[1] != "")
+X printf ",\n\tMonth = { %s }",df[1]
+X if(D) printf ",\n\tYear = { %s }",df[2]
+X if(X) printf ",\n\tAnnote = { %s }",abstr
+X if(L) printf ",\n\tKey = { %s }",label
+X printf "\t}\n\n"
+X
+X A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;I=0;J=0;
+X K=0;L=0;M=0;N=0;O=0;P=0;Q=0;R=0;S=0;T=0;
+X U=0;V=0;W=0;X=0;Y=0;Z=0;
+X type = ""
+X book=""
+X title = ""
+X volume = ""
+X city = ""
+X date = ""
+X publisher = ""
+X journal = ""
+X number = ""
+X other = ""
+X page = ""
+X report = ""
+X series = ""
+X toterr +=err
+X rx++
+X }
+X err = 0
+X pr = NR
+X next
+X }
+X
+X/^%T/ {
+X T ++; lastx = "T"
+X if(T>1){err=1
+X print "Two titles: Reference " rx > "ref2bib.errs"
+X print title > "ref2bib.errs"
+X }
+X title = substr($0,4)
+X next
+X }
+X
+X/^%D/ {
+X D ++; lastx = "D"
+X if(D>1){err=1
+X print "Two dates: Reference " rx > "ref2bib.errs"
+X print date > "ref2bib.errs"
+X }
+X if(($NF<1900)||($NF>=2000)){err=1
+X print "Date error? : Reference " rx > "ref2bib.errs"
+X }
+X date = substr($0,4);
+X next
+X }
+X
+X/^%P/ {
+X P ++; lastx = "P"
+X if(P>1){err=1
+X print "Two page nos? : Reference " rx > "ref2bib.errs"
+X print pages > "ref2bib.errs"
+X }
+X pages = substr($0,4)
+X next
+X }
+X
+X/^%J/ {
+X J ++; lastx = "J"
+X if(J>1){err=1
+X print "Two journals: Reference " rx > "ref2bib.errs"
+X print journal > "ref2bib.errs"
+X }
+X journal = substr($0,4)
+X next
+X }
+X
+X/^%V/ {
+X V ++; lastx = "V"
+X if(V>1){err=1
+X print "Two volumes: Reference " rx > "ref2bib.errs"
+X print volume > "ref2bib.errs"
+X }
+X volume = substr($0,4)
+X next
+X }
+X
+X/^%N/ {
+X N ++; lastx = "N"
+X if(N>1){err=1
+X print "Two issue numbers: Reference " rx > "ref2bib.errs"
+X print number > "ref2bib.errs"
+X }
+X number = substr($0,4)
+X next
+X }
+X
+X/^[^%]/ {
+X if( lastx == "A") authors[A] = authors[A] " " $0
+X if( lastx == "B") book = book " " $0
+X if( lastx == "C") city = city " " $0
+X if( lastx == "D") date = date " " $0
+X if( lastx == "E") editor[E] = editor[E] " " $0
+X if( lastx == "I") publisher = publisher " " $0
+X if( lastx == "J") journal = journal " " $0
+X if( lastx == "L") label = label " " $0
+X if( lastx == "N") number = number " " $0
+X if( lastx == "O") other = other " " $0
+X if( lastx == "P") pages = pages " " $0
+X if( lastx == "R") report = report " " $0
+X if( lastx == "S") series = series " " $0
+X if( lastx == "T") title = title " " $0
+X if( lastx == "V") volume = volume " " $0
+X if( lastx == "X") abstr = abstr " " $0
+X next
+X }
+X
+X/^%C/ {
+X C ++; lastx = "C"
+X if(C>1){err=1
+X print "Two cities: Reference " rx > "ref2bib.errs"
+X print city > "ref2bib.errs"
+X print " 2 cities " FILENAME, pr+1, NR > "ref2bib.errs"
+X }
+X city = substr($0,4)
+X next
+X }
+X
+X/^%I/ {
+X I ++; lastx = "I"
+X if(I>1){err=1
+X print "Two publishers: Reference " rx > "ref2bib.errs"
+X print publisher > "ref2bib.errs"
+X }
+X publisher = substr($0,4)
+X next
+X }
+X
+X/^%B/ {
+X B ++; lastx = "B"
+X if(B>1){err=1
+X print "Two books: Reference " rx > "ref2bib.errs"
+X print book > "ref2bib.errs"
+X }
+X book = substr($0,4)
+X next
+X }
+X
+X/^%E/ { # this really deals with 'bib' format
+X # refer only allows one %E fielsd, so we ought to
+X # split it somehow
+X E ++; lastx = "E"
+X editor[E] = substr($0,4)
+X next
+X }
+X
+X/^%[^ABCDEIJKLNOPRSTVX]/ {
+X F ++; lastx = "F"; # should not get these
+X print "Unexpected flag: Reference " rx > "ref2bib.errs"
+X print $0 > "ref2bib.errs"
+X err = 1
+X next
+X }
+X
+X/^%O/ {
+X O ++; lastx = "O"
+X if(O>1){err=1
+X print "Two others: Reference " rx > "ref2bib.errs"
+X print other > "ref2bib.errs"
+X }
+X other = substr($0,4)
+X next
+X }
+X
+X/^%S/ {
+X S ++; lastx = "S"
+X if(S>1){err=1
+X print "Two series: Reference " rx > "ref2bib.errs"
+X print series > "ref2bib.errs"
+X }
+X series = substr($0,4)
+X next
+X }
+X
+X/^%R/ {
+X R ++; lastx = "R"
+X if(R>1){err=1
+X print "Two reports: Reference " rx > "ref2bib.errs"
+X print report > "ref2bib.errs"
+X }
+X report = substr($0,4)
+X next
+X }
+X
+X/^%X/ {
+X X ++; lastx = "X"
+X abstr = substr($0,4)
+X if(X>1){err=1
+X print "Two abstracts: Reference " rx > "ref2bib.errs"
+X }
+X next
+X }
+X
+X/^%K/ {
+X lastx = "K"
+X next
+X }
+XEND {
+X print refs " references" > "ref2bib.errs"
+X if(toterr) print toterr " erroneous" > "ref2bib.errs"
+X if(conf) print conf " conference papers" > "ref2bib.errs"
+X if(jour) print jour " journal articles" > "ref2bib.errs"
+X if(wholebook) print wholebook " books" > "ref2bib.errs"
+X if(totB) print totB " book articles" > "ref2bib.errs"
+X if(reps) print reps " reports" > "ref2bib.errs"
+X if(unclass) print unclass " Unclassified" > "ref2bib.errs"
+X if(totO) print totO " have additional information." > "ref2bib.errs"
+X if(totK) print totK " have additional keywords." > "ref2bib.errs"
+X if(totX) print totX " have abstracts/commentaries." > "ref2bib.errs"
+X print totA " authors" > "ref2bib.errs"
+X for(i=0;i<=MaxA;i++)if(acnt[i]){
+X print i, " authors ", acnt[i] > "ref2bib.errs"
+X av += i*acnt[i]
+X }
+X print "Average ", av/refs > "ref2bib.errs"
+X print totT " titles" > "ref2bib.errs"
+X print "Key frequencies" > "ref2bib.errs"
+X for(k in keyused) print k, keyused[k] > "ref2bib.errs"
+X
+X }
+XZZ
+Xsed -f ref2b$$.sed $* | awk -f ref2b$$.awk
+Xrm -f ref2b$$.sed ref2b$$.awk
+End-of-file
+echo Extracting ref2bib.1
+sed 's/^X//' <<'End-of-file' >ref2bib.1
+X.TH REF2BIB 1-local
+X.SH NAME
+Xref2bib \- convert refer input files to bibtex .bib files
+X.SH SYNOPSIS
+X.B r2bib
+Xfile ...
+X.br
+X.SH DESCRIPTION
+X.B ref2bib
+Xreads the
+X.I files
+Xand produces a
+X.B bibtex
+Xreference list (a .bib file) on the standard output.
+XIf no files are given, ref2bib reads
+Xstandard input.
+X.PP
+XA rudimentary attempt is made to convert
+X.I troff
+Xspecial characters and accents to the equivalent
+X.I TeX
+Xones.
+XThe file ``ref2bib.errs'' contains complaints about references that were
+Xnot recognised, and other problems, as well as a summary of the
+Xnumber of conversions completed.
+X.PP
+XSince
+X.B refer
+Xfiles are inherently unstructured (compared to
+X.B bibtex )
+X.B ref2bib
+Xonly does a passable job. In particular
+X.B refer
+Xdoesn't require a keyword, while
+X.B bibtex
+Xdoes.
+X.B ref2bib
+Xgenerates one using the following procedure:
+Xthe first 3 characters of the last names of the first three authors
+Xare concatenated, (preserving the capital letters), and the last two
+Xdigits of the date are appended. If this key has already been used,
+Xthen 'a', 'b', 'c', are appended as needed.
+X.PP
+XJournal entries that appear to be in the standard bibliography style
+Xfiles list of @strings, are converted.
+XThe %D field is converted to month and year entries if there are two
+Xfields, otherwise it is assumed to contain only the year.
+XA large number of proper names, such as Hilbert, Turing, etc.,
+Xwhich are often found in the titles of articles are enclosed in braces
+X{} to protect them. This treatment is also applied to any strings of
+Xmore than two consecutive capital letters.
+X.PP
+XTo determine the type of reference that the
+X.B refer
+Xentry is,
+X.B ref2bib
+Xhas to do some ``calculated guessing''. The heuristic used
+Xhere (again, in order of precedence) is:
+X.PP
+X1. If it has a journal entry (%J) then it's considered to
+Xbe an @article, unless there is a city entry (%C) or a publisher entry
+X(%I) as well, in which case it's
+Xtreated as an @inproceedings.
+X.PP
+X2. If it has a book entry (%B) then it's considered to
+Xbe an @incollection.
+X.PP
+X3. If it has a report entry (%R) then it's considered to
+Xbe a @techreport.
+X.PP
+X4. If it has a issuer entry (%I) then it's considered to
+Xbe a @book.
+X.PP
+X5. Otherwise it's considered to be a @misc.
+XAll @misc entries are listed in the ``ref2bib.errs'' file.
+X.PP
+XQuite often
+X.B ref2bib
+Xwill misguess and you will need to edit (by hand) the resulting .bib
+Xfile.
+X.PP
+XAny fields that
+X.B ref2bib
+Xdoesn't know about it will ignore (and complain about on stderr).
+X.SH ACKNOWLEDGMENT
+XThis manual page is based on the manual page for
+X.I r2bib ,
+Xa program which performs a simpler version of the same conversion,
+Xwriotten by
+XRusty Wright, Center For Music Experiment, University of California San
+XDiego.
+X.SH AUTHOR
+XPeter King, Computer Science Department, Heriot-Watt University,
+XEdinburgh.
+X.SH BUGS
+XImplemented as a
+X.I sh(1)
+Xscript, using
+X.I sed(1)
+Xand
+X.I awk(1) .
+XThis makes the conversion very slow, but also means that it is easily
+Xmodified to alter the heuristics. In particular, the key generation
+Xalgorithm is easily changed.
+End-of-file
+echo End of archive
+exit 0
+-------
diff --git a/info/digests/texhax/txh/kwok.txh b/info/digests/texhax/txh/kwok.txh
new file mode 100644
index 0000000000..aceb5ffb2f
--- /dev/null
+++ b/info/digests/texhax/txh/kwok.txh
@@ -0,0 +1,339 @@
+
+
+13-Apr-88 21:17:28-PDT,11449;000000000000
+Return-Path: <kwok@iris.ucdavis.edu>
+Date: Wed, 13 Apr 88 21:22:46 PDT
+From: kwok@iris.ucdavis.edu (Conrad Kwok)
+Subject: macros for use with LaTeX picture environment.
+
+The macros are for use with LaTeX picture environment.
+They modify \circle and \line to allows you to draw circle
+of any size and line with any slope and any length.
+Commands for drawing \ellipse and \arc are provided also.
+
+A new command for setting line width \Thicklines is included.
+The command affects line width for circle, ellipse and line too.
+
+Details can be found in the READ.ME file.
+
+--Conrad
+
+---------------------Cut Here----------------------------
+#! /bin/sh
+# This is a shell archive, meaning:
+# 1. Remove everything above the #! /bin/sh line.
+# 2. Save the resulting text in a file.
+# 3. Execute the file with /bin/sh (not csh) to create the files:
+# READ.ME
+# spgraph.tex
+# testgph.tex
+# This archive created: Mon Apr 11 10:48:00 1988
+export PATH; PATH=/bin:$PATH
+if test -f 'READ.ME'
+then
+ echo shar: will not over-write existing file "'READ.ME'"
+else
+sed 's/^X//' << \SHAR_EOF > 'READ.ME'
+X
+X SpGraph Version 0.0
+X
+X Written by Conrad Kwok
+X April 10,1988
+X
+X All files related to SpGraph are in public domain.
+X You may distribute and modify the files in any ways
+X you like. The files are provided as is. I provide
+X absolutely no warranty of any kind.
+X
+XSpGraph is a macro file for use with the LaTeX picture environment.
+XIt is much less powerful but much faster than PiCTeX. Another
+Xadvantage is that the macros are compatible with LaTeX. You
+Xdon't have to learn anything new if you already know how to use LaTeX.
+XThe macros generate \special commands for drawing lines, circles,
+Xellipsis and circular arc at any line width. Since they generate
+X\special commands, you need to have a cmpatible dvi-to-printer program.
+X
+XThe \special commands they generated are subset of commands used by
+Xtpic (tpic is a pic like program for use with TeX). If your site
+Xsupports tpic, you will definitely be able to use it. If not,
+Xyou have to check the dvi-to-printer program you are using by running
+Xthe test program (testgph.tex) included.
+X
+XMany of the new dvi-to-printer program supports those \special.
+XSuch as imagen1, texx and texsun distributed by U. Of Illinois (I
+Xthink those programs are currently distributed with TeX82, please
+Xlet me know if I am wrong.) and several others written in UC Irvine.
+X
+XTo use the macros, include the line
+X \include spgraph
+Xafter the line \documentstyle...
+X
+XThe macros replace some of the original LaTeX macros but their
+Xfunctionalities are extension of the original ones. Hence they
+Xshould be transparent to the users unless extended features are
+Xused.
+X
+X
+XThe commands \line and \circle are extend in the following ways:
+X
+X\line You may specify any slope and any length (no minimum length)
+X but the two numbers for the slope must still be integers.
+X\circle (but not \circle*) Any radii are allowed.
+X
+XThree new commands are provided.
+X
+X\ellipse{x}{y}
+X Draws ellipse with the x-axis and y-axis length equal to x
+Xand y respectively. When x is equal to y. The command is identical to
+X\circle{x}.
+X
+X\arc{r}{s}{e}
+X Draws a circular arc. Starting angle is s and ending angle
+Xis e. Both are in radian. s must be between 0 and 2*PI. and e > s and
+Xmust be less than s + 2*PI. Therefore e could be greater than 2*PI.
+XThe point corresponds to angle 0 is the on the right of the center and
+Xthe arc is drawn in clockwise direction.
+X
+X\Thicklines
+X Line width is 1.5 times of \thicklines. This also affects
+Xthe line width for \line, \circle, \ellipse and \arc.
+X
+X
+X
+XBUGS
+X1. The two number for specifying the slope of \vector must still
+X be between -4 and 4. Although line of any slope can be drawn,
+X the head of the arrow still come from the LaTeX fonts. The
+X line width of vector is affected by \Thicklines also.
+X
+X2. The round corners for \oval are still come from the LaTeX
+X fonts. When \Thicklines is selected, the width of the
+X horizontal and vertical lines will be slightly greater than
+X the corners.
+X
+X
+XFurture Directions
+X
+X1. Extend the \vector command to draw \vector with any slope.
+X
+X2. Provide new commands for drawing spline, polygon and path as soon as
+X I figure out how to write a command that accepts variable
+X numbers of arguments. For example \spline{(0,0)(1,3)....(x,y)}
+X or \spline{0,0 1,3 . . . . x,y} and similarly for \path and \polygon.
+X If any one out there already know how to do this, please
+X e-mail me an example. I will appreciate you help.
+X
+X3. Fix the \oval problem for thicker lines.
+X
+X4. Provide commands for setting line width.
+X
+XAll comments, suggestions or bug reports are welcome.
+XMy e-mail addresses are:
+Xinternet: kwok@iris.ucdavis.edu
+Xcsnet: kwok@ucd.csnet
+Xcsnet: kwok%iris.ucdavis.edu@csnet.relay
+Xuucp: ...ucbvax!ucdavis!iris!kwok
+X
+SHAR_EOF
+fi # end of overwriting check
+if test -f 'spgraph.tex'
+then
+ echo shar: will not over-write existing file "'spgraph.tex'"
+else
+sed 's/^X//' << \SHAR_EOF > 'spgraph.tex'
+X% SpGpraph Version 0.0 < April 6, 1988 >
+X% Written by Conrad Kwok
+X%
+X% The macros are in public domain.
+X% You may distribute or modify it in any ways you like.
+X%
+X% You need an dvi-to-printer program that supports the \special
+X% commands used by the macros. The commands are subset of the commands
+X% used by tpic program. For more information, read the READ.ME file
+X%
+X% Usage:
+X% For LaTeX
+X% Include the file after the \documentstyle command by saying
+X% \include spgraph
+X%
+X% For TeX
+X% Include the file after including the file latexpicobjs.tex
+X% \include latexpicobj
+X% \include spgraph
+X% in the beginning of the TeX file.
+X%
+X% The macros are for use with LaTeX picture environment
+X% By including the macro file, you can draw
+X% 1) \line in any slope
+X% 2) \circle with any radius
+X% 3) \ellipse with any x-axis and y-axis length
+X% 4) Circular \arc by giving starting and ending angle (in radius)
+X%
+X% Furthermore you may draw lines in any thickness.
+X%
+X%
+X\makeatletter
+X
+X% Create a new counter to store the line thickness in thousandth of an inch
+X\newcount\@gphlinewidth
+X\@gphlinewidth\@wholewidth \divide\@gphlinewidth 4736
+X
+X% Redefine \thinlines, \thicklines and define \Thickline
+X% See also latex.tex
+X\def\thinlines{\let\@linefnt\tenln \let\@circlefnt\tencirc
+X \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth
+X \@gphlinewidth\@wholewidth \divide\@gphlinewidth 4736\relax}
+X\def\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
+X \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth
+X \@gphlinewidth\@wholewidth \divide\@gphlinewidth 4736
+X \advance\@gphlinewidth\@ne % Make the output looks better
+X \relax}
+X\def\Thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
+X \@wholewidth\fontdimen8\tenlnw \@wholewidth 1.5\@wholewidth
+X \@halfwidth .5\@wholewidth
+X \@gphlinewidth\@wholewidth \divide\@gphlinewidth 4736\relax}
+X%
+X% Generate the \special command for drawing arc
+X\def\@circlespecial#1#2#3#4{%
+X \special{pn \the\@gphlinewidth}%
+X \special{ar 0 0 #1 #2 #3 #4}
+X}
+X%
+X% Command for drawing an arc. Elliptical arc command can be generated
+X% but all iptex program I saw so far does not support that.
+X\def\@arc#1#2#3#4{%
+X% convert TeX dimension to length in terms thousandth of an inch
+X \@tempdima #1\unitlength
+X \@tempdimb #2\unitlength
+X \@tempcnta\@tempdima \advance\@tempcnta 4736 \divide\@tempcnta 9473
+X \@tempcntb\@tempdimb \advance\@tempcntb 4736 \divide\@tempcntb 9473
+X \setbox\@tempboxa\hbox{%
+X \@circlespecial{\the\@tempcnta}{\the\@tempcntb}{#3}{#4}}%
+X \wd\@tempboxa\z@ \box\@tempboxa
+X}
+X%
+X% Command for drawing Circle and Ellipse in terms of \@arc
+X% replace original \@circle
+X\def\@circle#1{\@arc{#1}{#1}{0}{6.2832}}
+X\def\ellipse#1#2{\@arc{#1}{#2}{0}{6.2832}}
+X\def\arc#1#2#3{\@arc{#1}{#1}{#2}{#3}}
+X%
+X% Generate \special commands for drawing line
+X\def\@linespecial#1#2{%
+X \special{pn \the\@gphlinewidth}%
+X \special{pa 0 0}%
+X \special{pa #1 #2}%
+X \special{fp}
+X}
+X%
+X% Replace original \@sline
+X% For description, see latex.tex
+X\def\@sline{%
+X \ifnum\@xarg< 0
+X \@negargtrue \@xarg -\@xarg \@tempdima -\@linelen
+X \else
+X \@negargfalse \@tempdima\@linelen
+X \fi
+X% truncation is used in arithmetic
+X \@tempcnta\@linelen \divide\@tempcnta 4736
+X \@yyarg -\@yarg \multiply\@yyarg \@tempcnta \divide\@yyarg\@xarg
+X \if@negarg
+X \@tempcnta -\@tempcnta
+X \fi
+X \setbox\@linechar\hbox{\@linespecial{\the\@tempcnta}{\the\@yyarg}}%
+X \wd\@linechar\@tempdima
+X \@clnht\@linelen
+X \multiply\@clnht\@yarg
+X \divide\@clnht\@xarg
+X \ifnum\@yarg< 0
+X \@clnht -\@clnht
+X \ht\@linechar\z@ \dp\@linechar\@clnht
+X \else
+X \ht\@linechar\@clnht \dp\@linechar\z@
+X \fi
+X \box\@linechar
+X% Codes below (till end of the command) is only necessary
+X% when used with \@svector
+X \if@negarg
+X \@yyarg -\@yarg
+X \else
+X \@yyarg \@yarg
+X \fi
+X \setbox\@linechar\hbox{\@linefnt\@getlinechar(\@xarg,\@yyarg)}%
+X \ifnum\@yarg> 0
+X \let\@upordown\raise
+X \advance\@clnht -\ht\@linechar
+X \else
+X \let\@upordown\lower
+X \fi
+X \if@negarg \kern\wd\@linechar \fi
+X}
+X%
+X\makeatother
+X
+SHAR_EOF
+fi # end of overwriting check
+if test -f 'testgph.tex'
+then
+ echo shar: will not over-write existing file "'testgph.tex'"
+else
+sed 's/^X//' << \SHAR_EOF > 'testgph.tex'
+X\documentstyle{article}
+X\input spgraph
+X\begin{document}
+X\verb|\thinlines|
+X
+X\begin{picture}(100,100)(0,0)
+X\thinlines
+X\put(50,50){\circle{20}}
+X\put(50,50){\circle*{5}}
+X\put(50,50){\vector(4,3){20}}
+X\put(100,50){\arc{20}{0}{5}}
+X\put(100,50){\vector(-4,3){20}}
+X\put(150,50){\ellipse{20}{14}}
+X\put(150,50){\vector(-4,-3){20}}
+X\put(200,50){\ellipse{20}{10}}
+X\put(200,50){\vector(4,-3){20}}
+X\put(125,50){\oval(230,40)}
+X\end{picture}
+X
+X\bigskip
+X\verb|\thicklines|
+X
+X\begin{picture}(100,100)(0,0)
+X\thicklines
+X\put(50,50){\circle{20}}
+X\put(50,50){\circle*{5}}
+X\put(50,50){\vector(4,3){20}}
+X\put(100,50){\arc{20}{0}{5}}
+X\put(100,50){\vector(-4,3){20}}
+X\put(150,50){\ellipse{20}{14}}
+X\put(150,50){\vector(-4,-3){20}}
+X\put(200,50){\ellipse{20}{10}}
+X\put(200,50){\vector(4,-3){20}}
+X\put(125,50){\oval(230,40)}
+X\end{picture}
+X
+X\bigskip
+X\verb|\Thicklines|
+X
+X\begin{picture}(100,100)(0,0)
+X\Thicklines
+X\put(50,50){\circle{20}}
+X\put(50,50){\circle*{5}}
+X\put(50,50){\vector(4,3){20}}
+X\put(100,50){\arc{20}{0}{5}}
+X\put(100,50){\vector(-4,3){20}}
+X\put(150,50){\ellipse{20}{14}}
+X\put(150,50){\vector(-4,-3){20}}
+X\put(200,50){\ellipse{20}{10}}
+X\put(200,50){\vector(4,-3){20}}
+X\put(125,50){\oval(230,40)}
+X\end{picture}
+X\end{document}
+SHAR_EOF
+fi # end of overwriting check
+# End of shell archive
+exit 0
+
+
diff --git a/info/digests/texhax/txh/labrec.txh b/info/digests/texhax/txh/labrec.txh
new file mode 100644
index 0000000000..c4400f9022
--- /dev/null
+++ b/info/digests/texhax/txh/labrec.txh
@@ -0,0 +1,208 @@
+Date: Fri, 7 Aug 87 10:19:38 EST
+From: crl@maxwell.physics.purdue.edu (Charles R. LaBrec)
+To: TEXHAX@score.stanford.edu
+Subject: Mode definitions for LN03 and LN03+
+
+I have recently been playing with metafont for an LN03, and have come
+up with something that seem to produce acceptable output, but is by no
+means "completely" tested. The problem with the write-white LN03 is
+that you cannot use a one-pixel wide line ever, since it becomes far,
+far too light. This is why my previous version of the LN03 mode used
+a "blacker" parameter that was very big. From metafont 1.3, I started
+using the write-white cmbase, but even this didn't provide a wide
+enough line in various places. It was really obvious for things that
+used only the light_rule.nib pen. This fact made me notice that even
+though all sorts of parameters were set to a minimum of two, the pens
+that were saved could have widths of one. I thus decided to try to
+modify cmbase further, setting minimum pencircle widths of two. I
+enclose the decln mode I've used, along with a diff of the write-white
+version of cmbase.mf. I am VERY interested in comments/suggestions as
+to whether everyone thinks this solution is valid/produces good
+output. If so, then perhaps metafont should get a new mode parameter
+which is the minimum pen{circle/square} scaling, so that such things
+could be more easily handled in base files.
+
+Charles LaBrec
+crl @ maxwell.physics.purdue.edu
+
+% decln mode: for the DEC LN03 (Ricoh engine, a write-white device)
+mode_def decln = % decln mode
+ proofing:=0; % no, we're not making proofs
+ fontmaking:=1; % yes, we are making a font
+ tracingtitles:=0; % no, don't show titles in the log
+ pixels_per_inch:=300;
+ blacker:=0.2; % make pens a bit blacker
+ fillin:=-0.2; % darken diagonals a bit
+ o_correction:=0.5; % don't overshoot as much
+ enddef;
+
+*** /tmp/,RCSt1007354 Fri Aug 7 09:53:44 1987
+--- cmbase.mf Fri Aug 7 09:52:44 1987
+***************
+*** 385,391
+ penlabels(1,2,3,4,5,6,7); enddef;
+
+ def left_angle(expr breadth) =
+! pickup pencircle scaled breadth;
+ x1=x3=good.x(w-u)+eps; lft x2=hround u-eps;
+ top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
+ draw z1--z2--z3; % diagonals
+
+--- 385,391 -----
+ penlabels(1,2,3,4,5,6,7); enddef;
+
+ def left_angle(expr breadth) =
+! pickup pencircle scaled max(breadth,2); % WRITE WHITE
+ x1=x3=good.x(w-u)+eps; lft x2=hround u-eps;
+ top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
+ draw z1--z2--z3; % diagonals
+***************
+*** 392,398
+ labels(1,2,3); enddef;
+
+ def right_angle(expr breadth) =
+! pickup pencircle scaled breadth;
+ x1=x3=good.x u-eps; rt x2=hround(w-u)+eps;
+ top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
+ draw z1--z2--z3; % diagonals
+
+--- 392,398 -----
+ labels(1,2,3); enddef;
+
+ def right_angle(expr breadth) =
+! pickup pencircle scaled max(breadth,2); % WRITE WHITE
+ x1=x3=good.x u-eps; rt x2=hround(w-u)+eps;
+ top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
+ draw z1--z2--z3; % diagonals
+***************
+*** 399,405
+ labels(1,2,3); enddef;
+
+ def big_slash(expr breadth) =
+! adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled breadth;
+ rt x1=hround(w-u); lft x2=hround u; top y1=h+eps; bot y2=1-d-eps;
+ draw z1--z2; % diagonal
+ labels(1,2); enddef;
+
+--- 399,405 -----
+ labels(1,2,3); enddef;
+
+ def big_slash(expr breadth) =
+! adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled max(breadth,2); % WRITE WHITE
+ rt x1=hround(w-u); lft x2=hround u; top y1=h+eps; bot y2=1-d-eps;
+ draw z1--z2; % diagonal
+ labels(1,2); enddef;
+***************
+*** 405,411
+ labels(1,2); enddef;
+
+ def big_blash(expr breadth) =
+! adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled breadth;
+ lft x1=hround u; rt x2=hround(w-u); top y1=h+eps; bot y2=1-d-eps;
+ draw z1--z2; % diagonal
+ labels(1,2); enddef;
+
+--- 405,411 -----
+ labels(1,2); enddef;
+
+ def big_blash(expr breadth) =
+! adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled max(breadth,2); % WRITE WHITE
+ lft x1=hround u; rt x2=hround(w-u); top y1=h+eps; bot y2=1-d-eps;
+ draw z1--z2; % diagonal
+ labels(1,2); enddef;
+***************
+*** 536,541
+ forsuffixes $=fine,crisp,tiny:
+ %%% fine $ %%%% temporary formatting convention for MFT
+ if $>fudged.hair: $:=fudged.hair; fi
+ $.breadth:=$;
+ pickup if $=0: nullpen else: pencircle scaled $; $:=$-eps fi;
+ $.nib:=savepen; breadth_[$.nib]:=$;
+
+--- 536,542 -----
+ forsuffixes $=fine,crisp,tiny:
+ %%% fine $ %%%% temporary formatting convention for MFT
+ if $>fudged.hair: $:=fudged.hair; fi
++ if $>0: $:=max($,2); fi % WRITE WHITE
+ $.breadth:=$;
+ pickup if $=0: nullpen else: pencircle scaled $; $:=$-eps fi;
+ $.nib:=savepen; breadth_[$.nib]:=$;
+***************
+*** 546,551
+ if flare<vround flare: flare:=vround flare; fi
+ forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem,bold:
+ if $<min_Vround: $:=min_Vround; fi endfor
+ pickup pencircle scaled rule_thickness; rule.nib:=savepen;
+ math_axis:=good.y(math_axis#*hppp);
+ pickup pencircle scaled if hefty:(.6[vair,fudged.hair]) else:fudged.hair fi;
+
+--- 547,559 -----
+ if flare<vround flare: flare:=vround flare; fi
+ forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem,bold:
+ if $<min_Vround: $:=min_Vround; fi endfor
++ pickup pencircle scaled max(if hefty:(.6[vair,fudged.hair]) else:fudged.hair fi,2); % WRITE WHITE
++ light_rule.nib:=savepen;
++ pickup pencircle xscaled max(cap_curve+dw,2) yscaled max(cap_hair,2) rotated 30; % WRITE WHITE
++ heavy_cal.nib:=savepen;
++ forsuffixes $=thin_join,hair,curve,flare,dot_size,cap_hair,cap_curve,cap_stem,
++ vair,bar,slab,cap_bar,cap_band,stem',cap_stem',vair',fudged.hair,
++ fudged.stem,fudged.cap_stem,rule_thickness: $:=max($,2); endfor % "WRITE WHITE" ONLY!
+ pickup pencircle scaled rule_thickness; rule.nib:=savepen;
+ math_axis:=good.y(math_axis#*hppp);
+ pickup pencircle xscaled cap_curve yscaled cap_hair rotated 30;
+***************
+*** 548,555
+ if $<min_Vround: $:=min_Vround; fi endfor
+ pickup pencircle scaled rule_thickness; rule.nib:=savepen;
+ math_axis:=good.y(math_axis#*hppp);
+- pickup pencircle scaled if hefty:(.6[vair,fudged.hair]) else:fudged.hair fi;
+- light_rule.nib:=savepen;
+ pickup pencircle xscaled cap_curve yscaled cap_hair rotated 30;
+ cal.nib:=savepen;
+ pair cal.extension; cal.extension:=(.75cap_curve,0) rotated 30;
+
+--- 556,561 -----
+ fudged.stem,fudged.cap_stem,rule_thickness: $:=max($,2); endfor % "WRITE WHITE" ONLY!
+ pickup pencircle scaled rule_thickness; rule.nib:=savepen;
+ math_axis:=good.y(math_axis#*hppp);
+ pickup pencircle xscaled cap_curve yscaled cap_hair rotated 30;
+ cal.nib:=savepen;
+ pair cal.extension; cal.extension:=(.75cap_curve,0) rotated 30;
+***************
+*** 561,568
+ med_cal.nib:=savepen;
+ pickup pencircle xscaled stem yscaled cap_hair rotated 30;
+ light_cal.nib:=savepen;
+- pickup pencircle xscaled(cap_curve+dw) yscaled cap_hair rotated 30;
+- heavy_cal.nib:=savepen;
+ bot_flourish_line:=-.5u-o;
+ pair bend; bend=(.5u,0);
+ pair flourish_change; flourish_change=(4u,.2asc_height);
+
+--- 567,572 -----
+ med_cal.nib:=savepen;
+ pickup pencircle xscaled stem yscaled cap_hair rotated 30;
+ light_cal.nib:=savepen;
+ bot_flourish_line:=-.5u-o;
+ pair bend; bend=(.5u,0);
+ pair flourish_change; flourish_change=(4u,.2asc_height);
+***************
+*** 576,584
+ body_depth:=desc_depth+body_height-asc_height;
+ shrink_fit:=1+hround(2letter_fit#*hppp)-2letter_fit;
+ if not string mode: if mode<=smoke: shrink_fit:=0; fi fi
+- forsuffixes $=thin_join,hair,curve,flare,dot_size,cap_hair,cap_curve,
+- vair,bar,slab,cap_bar,cap_band,stem',cap_stem',vair',fudged.hair,
+- fudged.stem,fudged.cap_stem: $:=max($,2); endfor % "WRITE WHITE" ONLY!
+ enddef;
+
+ def shiftdef(suffix $)(expr delta) =
+
+--- 580,585 -----
+ body_depth:=desc_depth+body_height-asc_height;
+ shrink_fit:=1+hround(2letter_fit#*hppp)-2letter_fit;
+ if not string mode: if mode<=smoke: shrink_fit:=0; fi fi
+ enddef;
+
+ def shiftdef(suffix $)(expr delta) =
+-------
diff --git a/info/digests/texhax/txh/leichter.txh b/info/digests/texhax/txh/leichter.txh
new file mode 100644
index 0000000000..da85d63baf
--- /dev/null
+++ b/info/digests/texhax/txh/leichter.txh
@@ -0,0 +1,489 @@
+Return-Path: <LEICHTER@VENUS.YCC.YALE.EDU>
+Date: Wed, 27 Jan 88 14:31 EST
+From: "Jerry Leichter (LEICHTER-JERRY@CS.YALE.EDU)"
+ <LEICHTER@VENUS.YCC.YALE.EDU>
+Subject: Bugfixes for VMS DVITYPE
+
+Enclosed below is an updated change file for DVITYPE on VMS. The first
+change is simply an update to match the latest version number string. The
+second fixes a problem that causes DVITYPE to be unable to open an TFM files
+unless you happen to have write access to them!
+
+BTW, the code for DVITYPE is full of remarks like "stupid VMS run-time bug"
+and "change me when bug is fixed". Anyone know anymore what bug was being
+worked around? This code is presumably obsolete, but without knowing what
+it was, it's impossible to know if it can be removed safely.
+
+ -- Jerry
+
+DVItype change file for Vax/VMS
+Copyright (C) 1983 by David Fuchs. All rights are reserved.
+ 7Dec87 JSL .DVIType is now at Version 2.9.
+27Jan88 JSL .Use READONLY, not OLD, when opening the TFM files.
+@x
+\pageno=\contentspagenumber \advance\pageno by 1
+@y
+\pageno=\contentspagenumber \advance\pageno by 1
+\let\maybe=\iffalse
+\def\title{DVI$\,$\lowercase{type} changes for Vax/VMS}
+@z
+
+@x
+@d banner=='This is DVItype, Version 2.9' {printed when the program starts}
+@y
+@d banner=='This is DVItype, Vax/VMS Version 2.9'
+@z
+
+@x
+@d othercases == others: {default for cases not listed explicitly}
+@y
+@d othercases == otherwise {Vax/VMS default for cases not listed explicitly}
+@z
+
+@x
+@d print(#)==write(#)
+@d print_ln(#)==write_ln(#)
+@y
+In fact, we do this under Vax/VMS. We also use double-precision for all
+real values.
+
+@d print(#)==write(type_file,#)
+@d print_ln(#)==write_ln(type_file,#)
+@d real==double
+@z
+
+@x
+@p program DVI_type(@!dvi_file,@!output);
+@y
+@p
+@\@=[inherit('sys$library:starlet')]@>@\
+ {allows us to use system symbols and routines}
+program DVI_type(@!dvi_file,@!tfm_file,@!type_file,@!input,@!output);
+@z
+
+@x
+procedure initialize; {this procedure gets things started properly}
+ var i:integer; {loop index for initializations}
+ begin print_ln(banner);@/
+@y
+@<Procedures for initialization@>@/
+procedure initialize; {this procedure gets things started properly}
+ var i:integer; {loop index for initializations}
+ begin
+ @<Preset initial values@>@/
+ print_ln(banner);@/
+@z
+
+@x
+@!byte_file=packed file of eight_bits; {files that contain binary data}
+@y
+{later we'll define files that contain binary data}
+@z
+
+@x
+@!dvi_file:byte_file; {the stuff we are \.{DVI}typing}
+@!tfm_file:byte_file; {a font metric file}
+@y
+@!dvi_file:packed file of byte_block; {the stuff we are \.{DVI}typing}
+@!tfm_file:packed file of byte_block; {a font metric file}
+@!dvi_count:integer; {number of bytes read from current block of |dvi_file|}
+@!tfm_count:integer; {number of bytes read from current block of |tfm_file|}
+@!dvi_blocks:integer; {number of blocks in |dvi_file|}
+@z
+
+@x
+begin reset(dvi_file);
+@y
+begin reset(dvi_file);
+dvi_count:=0;
+@z
+
+@x
+begin reset(tfm_file,cur_name);
+@y
+begin close(tfm_file,@=error@>:=@=continue@>); {stupid Vax/VMS run-times}
+open(tfm_file,cur_name,@=readonly@>,@=error@>:=@=continue@>);
+reset(tfm_file,@=error@>:=@=continue@>);
+tfm_count:=0;
+@z
+
+@x
+@p procedure read_tfm_word;
+begin read(tfm_file,b0); read(tfm_file,b1);
+read(tfm_file,b2); read(tfm_file,b3);
+@y
+@d read_tfm_file(#)==begin
+ if tfm_count=VAX_block_length then begin
+ get(tfm_file,@=error:=continue@>); tfm_count:=0;
+ end;
+ #:=tfm_file^[tfm_count];
+ incr(tfm_count);
+ end
+
+@p procedure read_tfm_word;
+begin read_tfm_file(b0); read_tfm_file(b1);
+read_tfm_file(b2); read_tfm_file(b3);
+@z
+
+@x
+@p function get_byte:integer; {returns the next byte, unsigned}
+var b:eight_bits;
+begin if eof(dvi_file) then get_byte:=0
+else begin read(dvi_file,b); incr(cur_loc); get_byte:=b;
+ end;
+end;
+@#
+function signed_byte:integer; {returns the next byte, signed}
+var b:eight_bits;
+begin read(dvi_file,b); incr(cur_loc);
+if b<128 then signed_byte:=b @+ else signed_byte:=b-256;
+end;
+@#
+function get_two_bytes:integer; {returns the next two bytes, unsigned}
+var a,@!b:eight_bits;
+begin read(dvi_file,a); read(dvi_file,b);
+cur_loc:=cur_loc+2;
+get_two_bytes:=a*256+b;
+end;
+@#
+function signed_pair:integer; {returns the next two bytes, signed}
+var a,@!b:eight_bits;
+begin read(dvi_file,a); read(dvi_file,b);
+cur_loc:=cur_loc+2;
+if a<128 then signed_pair:=a*256+b
+else signed_pair:=(a-256)*256+b;
+end;
+@#
+function get_three_bytes:integer; {returns the next three bytes, unsigned}
+var a,@!b,@!c:eight_bits;
+begin read(dvi_file,a); read(dvi_file,b); read(dvi_file,c);
+cur_loc:=cur_loc+3;
+get_three_bytes:=(a*256+b)*256+c;
+end;
+@#
+function signed_trio:integer; {returns the next three bytes, signed}
+var a,@!b,@!c:eight_bits;
+begin read(dvi_file,a); read(dvi_file,b); read(dvi_file,c);
+cur_loc:=cur_loc+3;
+if a<128 then signed_trio:=(a*256+b)*256+c
+else signed_trio:=((a-256)*256+b)*256+c;
+end;
+@#
+function signed_quad:integer; {returns the next four bytes, signed}
+var a,@!b,@!c,@!d:eight_bits;
+begin read(dvi_file,a); read(dvi_file,b); read(dvi_file,c); read(dvi_file,d);
+cur_loc:=cur_loc+4;
+if a<128 then signed_quad:=((a*256+b)*256+c)*256+d
+else signed_quad:=(((a-256)*256+b)*256+c)*256+d;
+end;
+@y
+@d read_dvi_file(#)==begin
+ if dvi_count=VAX_block_length then begin
+ get(dvi_file,@=error:=continue@>); dvi_count:=0;
+ end;
+ #:=dvi_file^[dvi_count];
+ incr(dvi_count);
+ end
+
+@p function get_byte:integer; {returns the next byte, unsigned}
+var b:eight_bits;
+begin if eof(dvi_file) then get_byte:=0
+else begin read_dvi_file(b); incr(cur_loc); get_byte:=b;
+ end;
+end;
+@#
+function signed_byte:integer; {returns the next byte, signed}
+var b:eight_bits;
+begin read_dvi_file(b); incr(cur_loc);
+if b<128 then signed_byte:=b @+ else signed_byte:=b-256;
+end;
+@#
+function get_two_bytes:integer; {returns the next two bytes, unsigned}
+var a,@!b:eight_bits;
+begin read_dvi_file(a); read_dvi_file(b);
+cur_loc:=cur_loc+2;
+get_two_bytes:=a*256+b;
+end;
+@#
+function signed_pair:integer; {returns the next two bytes, signed}
+var a,@!b:eight_bits;
+begin read_dvi_file(a); read_dvi_file(b);
+cur_loc:=cur_loc+2;
+if a<128 then signed_pair:=a*256+b
+else signed_pair:=(a-256)*256+b;
+end;
+@#
+function get_three_bytes:integer; {returns the next three bytes, unsigned}
+var a,@!b,@!c:eight_bits;
+begin read_dvi_file(a); read_dvi_file(b); read_dvi_file(c);
+cur_loc:=cur_loc+3;
+get_three_bytes:=(a*256+b)*256+c;
+end;
+@#
+function signed_trio:integer; {returns the next three bytes, signed}
+var a,@!b,@!c:eight_bits;
+begin read_dvi_file(a); read_dvi_file(b); read_dvi_file(c);
+cur_loc:=cur_loc+3;
+if a<128 then signed_trio:=(a*256+b)*256+c
+else signed_trio:=((a-256)*256+b)*256+c;
+end;
+@#
+function signed_quad:integer; {returns the next four bytes, signed}
+var a,@!b,@!c,@!d:eight_bits;
+begin read_dvi_file(a); read_dvi_file(b); read_dvi_file(c); read_dvi_file(d);
+cur_loc:=cur_loc+4;
+if a<128 then signed_quad:=((a*256+b)*256+c)*256+d
+else signed_quad:=(((a-256)*256+b)*256+c)*256+d;
+end;
+@z
+
+@x
+begin set_pos(dvi_file,-1); dvi_length:=cur_pos(dvi_file);
+@y
+begin dvi_length:=dvi_blocks*VAX_block_length-1;
+@z
+
+@x
+begin set_pos(dvi_file,n); cur_loc:=n;
+@y
+var @!blk,@!byt:integer; {block and byte number}
+begin cur_loc:=n;
+blk:=n div VAX_block_length;
+byt:=n-(blk*VAX_block_length);
+@=find@>(dvi_file,blk+1); {VMS starts counting block numbers at 1, not 0}
+dvi_count:=byt;
+@z
+
+@x
+and |term_out| for terminal output.
+@^system dependencies@>
+
+@<Glob...@>=
+@!buffer:array[0..terminal_line_length] of ASCII_code;
+@!term_in:text_file; {the terminal, considered as an input file}
+@!term_out:text_file; {the terminal, considered as an output file}
+@y
+and |term_out| for terminal output.
+@^system dependencies@>
+
+@d term_in==input {the terminal, considered as an input file}
+@d term_out==output {the terminal, considered as an output file}
+
+@<Glob...@>=
+@!buffer:array[0..terminal_line_length] of ASCII_code;
+@z
+
+@x
+@d update_terminal == break(term_out) {empty the terminal output buffer}
+@y
+On Vax/VMS, this is actually not necessary in this context, since
+|update_terminal| is always called just before a |read|.
+
+@d update_terminal == {the terminal output buffer is emptied by |read|}
+@z
+
+@x
+begin update_terminal; reset(term_in);
+if eoln(term_in) then read_ln(term_in);
+k:=0;
+while (k<terminal_line_length)and not eoln(term_in) do
+ begin buffer[k]:=xord[term_in^]; incr(k); get(term_in);
+ end;
+buffer[k]:=" ";
+@y
+begin update_terminal;
+k:=0;
+while (k<terminal_line_length)and not eoln(term_in) do
+ begin buffer[k]:=xord[term_in^]; incr(k); get(term_in);
+ end;
+buffer[k]:=" ";
+read_ln(term_in);
+@z
+
+@x
+ begin incr(buf_ptr); resolution:=k/get_integer;
+@y
+ begin incr(buf_ptr); resolution:=@=dble@>(k)/get_integer;
+@z
+
+@x
+if eof(tfm_file) then
+@y
+if status(tfm_file)<>0 then
+@z
+
+@x
+@d default_directory_name=='TeXfonts:' {change this to the correct name}
+@d default_directory_name_length=9 {change this to the correct length}
+@y
+@d default_directory_name=='TEX$FONTS:' {change this to the correct name}
+@d default_directory_name_length=10 {change this to the correct length}
+@z
+
+@x
+m:=n-4;
+@y
+m:=n;
+repeat if m=0 then bad_dvi('all 0s');
+@.all 0s@>
+move_to_byte(m); k:=get_byte; decr(m);
+until k<>0;
+if k<>223 then bad_dvi('223 byte is ',k:1);
+@.223 byte is wrong@>
+@z
+
+@x
+while (m=223)and not eof(dvi_file) do m:=get_byte;
+@y
+while ((m=223) or (m=0)) and not eof(dvi_file) do m:=get_byte;
+@z
+
+@x
+final_end:end.
+@y
+close(type_file,@=disposition:=save@>,@=error:=continue@>);
+final_end:end.
+@z
+
+@x
+This section should be replaced, if necessary, by changes to the program
+that are necessary to make \.{DVItype} work at a particular installation.
+It is usually best to design your change file so that all changes to
+previous sections preserve the section numbering; then everybody's version
+will be consistent with the printed program. More extensive changes,
+which introduce new sections, can be inserted here; then only the index
+itself will get a new section number.
+@y
+Here are the remaining changes to the program
+that are necessary to make \.{DVItype} work on Vax/VMS.
+
+@<Const...@>==
+@!VAX_block_length=512;
+
+@ @<Types...@>==
+@!byte_block=packed array [0..VAX_block_length-1] of 0..255;
+
+@ On Vax/VMS we need the following special definitions, types, variables
+and procedures to be able to get the file name from the command line,
+or to prompt for them.
+
+@d VAX_direct==@=direct@>
+@d VAX_fixed==@=fixed@>
+@d VAX_volatile==@=volatile@>
+@d VAX_immed==@=%immed @>
+@d VAX_external==@=external@>
+@d VAX_stdescr==@=%stdescr @>
+@d VAX_lib_get_foreign==@= lib$get_foreign@>
+@d VAX_length==@=length @>
+@d VAX_fab_type==@= FAB$TYPE @>
+@d VAX_rab_type==@= RAB$TYPE @>
+@d VAX_xab_type==@= XAB$TYPE @>
+@d VAX_fab_xab==@= FAB$L_XAB @>
+@d VAX_xab_nxt==@= XAB$L_NXT @>
+@d VAX_xab_cod==@= XAB$B_COD @>
+@d VAX_xab_fhc==@= XAB$C_FHC @>
+@d VAX_xab_ebk==@= XAB$L_EBK @>
+
+@ @<Types...@>=
+@!sixteen_bits= 0..65535;
+
+@ @<Glob...@>==
+@!type_file: text;
+@!command_line:packed array[1..300] of char;
+@!cmd_len:sixteen_bits;
+@!cmd_i:integer;
+@!file_name,@!def_file_name:varying [300] of char;
+@!ask,@!got_file_name: boolean;
+
+@ @<Preset init...@>=
+open(output,'SYS$OUTPUT',@=error:=continue@>); {FIX ME! JUNK FOR RUN-TIME BUG}
+
+cmd_i:=0;
+VAX_lib_get_foreign(command_line,,cmd_len,cmd_i);
+cmd_i:=1; while (cmd_i<=cmd_len) and (command_line[cmd_i]=' ') do incr(cmd_i);
+got_file_name:=cmd_i<=cmd_len;
+if got_file_name then
+ def_file_name:=substr(command_line,cmd_i,cmd_len-cmd_i+1);
+
+if got_file_name then begin
+ file_name:=def_file_name+'.DVI';
+ open(dvi_file,file_name,@=readonly@>,,VAX_direct,
+ VAX_fixed,@=user_action:=@>dvi_open,@=error:=continue@>);
+ ask:=status(dvi_file)<>0;
+ if ask then write_ln('Couldn''t open ',file_name);
+ end
+else ask:=true;
+while ask do begin
+ got_file_name:=false;
+ write('DVI file: ');
+ if eof then goto 9999;
+ read_ln(file_name);
+ open(dvi_file,file_name,@=readonly@>,,VAX_direct,
+ VAX_fixed,@=user_action:=@>dvi_open,@=error:=continue@>);
+ ask:=status(dvi_file)<>0;
+ if ask then write_ln('Couldn''t open ',file_name);
+ end;
+
+if got_file_name then begin
+ cmd_i:=1;
+ for cmd_len:=1 to def_file_name.VAX_length do
+ if (def_file_name[cmd_len]=']')
+ or (def_file_name[cmd_len]=':')
+ then cmd_i:=cmd_len+1;
+ if cmd_i<=def_file_name.VAX_length then
+ def_file_name:=substr(def_file_name,cmd_i,
+ def_file_name.VAX_length-cmd_i+1);
+ file_name:=def_file_name+'.TYP';
+ open(type_file,file_name,@=new,32767,disposition:=delete@>,
+ @=error:=continue@>);
+ ask:=status(type_file)>0;
+ if ask then write_ln('Couldn''t open ',file_name);
+ end
+else ask:=true;
+while ask do begin
+ write('TYPE file: ');
+ if eof then goto 9999;
+ read_ln(file_name);
+ if file_name.VAX_length=0 then file_name:='SYS$OUTPUT';
+ open(type_file,file_name,@=new,32767,disposition:=delete@>,
+ @=error:=continue@>);
+ ask:=status(type_file)>0;
+ if ask then write_ln('Couldn''t open ',file_name);
+ end;
+rewrite(type_file);
+
+@ Here is the library procedure that gets the user's command line.
+
+@<Procedures for ...@>=
+[VAX_external] function VAX_lib_get_foreign(
+ VAX_stdescr cmdlin:[VAX_volatile] packed array [$l1..$u1:integer] of char
+ := VAX_immed 0;
+ VAX_stdescr prompt:[VAX_volatile] packed array [$l2..$u2:integer] of char
+ := VAX_immed 0;
+ var len : [VAX_volatile] sixteen_bits := VAX_immed 0;
+ var flag : [VAX_volatile] integer := VAX_immed 0)
+ :integer; extern;
+
+@ Here is how we intervene to find out the length of the |dvi_file|.
+
+@<Procedures for ...@>=
+function dvi_open(var fab:VAX_fab_type; var rab:VAX_rab_type):integer;
+ type XAB_ptr = ^VAX_xab_type;
+ var user_status:integer;
+ xab,fhc:XAB_ptr;
+ begin
+ user_status:=@= $OPEN@>(fab);
+ if odd(user_status) then @= $CONNECT@>(rab);
+ xab:=fab.VAX_fab_xab::XAB_ptr;
+ fhc:=nil;
+ while (xab<>nil) and (fhc=nil) do
+ if xab^.VAX_xab_cod=VAX_xab_fhc then fhc:=xab
+ else xab:=xab^.VAX_xab_nxt::XAB_ptr;
+ if fhc<>nil then dvi_blocks:=int(fhc^.VAX_xab_ebk)
+ else dvi_blocks:=0;
+
+ dvi_open:=user_status;
+ end;
+
+@z
+-------
diff --git a/info/digests/texhax/txh/mackay.txh b/info/digests/texhax/txh/mackay.txh
new file mode 100644
index 0000000000..d66dd31fc1
--- /dev/null
+++ b/info/digests/texhax/txh/mackay.txh
@@ -0,0 +1,753 @@
+%%% MACKAY.TXH
+
+Date: Fri, 30 Oct 87 23:44:09 PST
+From: mackay@june.cs.washington.edu (Pierre MacKay)
+Subject: TeXhax Digest V87 #86 RE: FTPing Unix-TeX
+
+ [ for text of message, see TeXhax8790 ]
+
+========================TeX2.1 to TeX2.3 ==========================
+*** /src/tex/tex82/tex.web Sat Mar 7 12:38:15 1987
+--- ../TEX.WEB/TEX.WEB Tue Sep 22 20:42:16 1987
+***************
+*** 5,10 ****
+--- 5,13 ----
+ % See Appendix H of the WEB manual for hints on how to install this program.
+ % And see Appendix A of the TRIP manual for details about how to validate it.
+
++ % TeX is a trademark of the American Mathematical Society.
++ % METAFONT is a tradement of Addison-Wesley Publishing Company.
++
+ % Version 0 was released in September 1982 after it passed a variety of tests.
+ % Version 1 was released in November 1983 after thorough testing.
+ % Version 1.1 fixed ``disappearing font identifiers'' et alia (July 1984).
+***************
+*** 14,19 ****
+--- 17,24 ----
+ % Version 1.5 fixed \the\toks after other expansion in \edefs (August 1985).
+ % Version 2.0 (almost identical to 1.5) corresponds to "Volume B" (April 1986).
+ % Version 2.1 corrects anomalies in discretionary breaks (January 1987).
++ % Version 2.2 corrects "(Please type...)" with null \endlinechar (April 1987).
++ % Version 2.3 avoids incomplete page in premature termination (August 1987).
+
+ % A reward of $40.96 will be paid to the first finder of any remaining bug.
+ % (This amount will double again in 1988.)
+***************
+*** 36,41 ****
+--- 41,47 ----
+ \def\MF{{\logo META}\-{\logo FONT}}
+ \def\<#1>{$\langle#1\rangle$}
+ \def\section{\mathhexbox278}
++ \chardef\%=`\%
+
+ \def\(#1){} % this is used to make section names sort themselves better
+ \def\9#1{} % this is used for sort keys in the index via @@:sort key}{entry@@>
+***************
+*** 153,159 ****
+ known as `\TeX' [cf.~Stanford Computer Science report CS1027,
+ November 1984].
+
+! @d banner=='This is TeX, Version 2.1' {printed when \TeX\ starts}
+
+ @ Different \PASCAL s have slightly different conventions, and the present
+ @!@:PASCAL H}{\ph@>
+--- 159,165 ----
+ known as `\TeX' [cf.~Stanford Computer Science report CS1027,
+ November 1984].
+
+! @d banner=='This is TeX, Version 2.3' {printed when \TeX\ starts}
+
+ @ Different \PASCAL s have slightly different conventions, and the present
+ @!@:PASCAL H}{\ph@>
+***************
+*** 766,773 ****
+ $$\vbox{\halign{#\hfil\qquad&#\hfil\cr
+ |reset(f,@t\\{name}@>,'/O')|&for input;\cr
+ |rewrite(f,@t\\{name}@>,'/O')|&for output.\cr}}$$
+! The `\\{name}' parameter, which is of type `\ignorespaces|packed
+! array[@t\<\\{any}>@>] of text_char|', stands for the name of
+ the external file that is being opened for input or output.
+ Blank spaces that might appear in \\{name} are ignored.
+
+--- 772,779 ----
+ $$\vbox{\halign{#\hfil\qquad&#\hfil\cr
+ |reset(f,@t\\{name}@>,'/O')|&for input;\cr
+ |rewrite(f,@t\\{name}@>,'/O')|&for output.\cr}}$$
+! The `\\{name}' parameter, which is of type `{\bf packed array
+! $[\langle\\{any}\rangle]$ of \\{char}}', stands for the name of
+ the external file that is being opened for input or output.
+ Blank spaces that might appear in \\{name} are ignored.
+
+***************
+*** 860,866 ****
+ @!max_buf_stack:0..buf_size; {largest index used in |buffer|}
+
+ @ The |input_ln| function brings the next line of input from the specified
+! field into available positions of the buffer array and returns the value
+ |true|, unless the file has already been entirely read, in which case it
+ returns |false| and sets |last:=first|. In general, the |ASCII_code|
+ numbers that represent the next line of the file are input into
+--- 866,872 ----
+ @!max_buf_stack:0..buf_size; {largest index used in |buffer|}
+
+ @ The |input_ln| function brings the next line of input from the specified
+! file into available positions of the buffer array and returns the value
+ |true|, unless the file has already been entirely read, in which case it
+ returns |false| and sets |last:=first|. In general, the |ASCII_code|
+ numbers that represent the next line of the file are input into
+***************
+*** 1721,1730 ****
+ before we get to |error| itself.
+
+ It is possible for |error| to be called recursively if some error arises
+! when |get_token| is being used to delete a token, or if some fatal error
+ occurs while \TeX\ is trying to fix a non-fatal one. But such recursion
+ @^recursion@>
+! is never more than one level deep.
+
+ @<Error handling...@>=
+ procedure@?normalize_selector; forward;@t\2@>@/
+--- 1727,1736 ----
+ before we get to |error| itself.
+
+ It is possible for |error| to be called recursively if some error arises
+! when |get_token| is being used to delete a token, and/or if some fatal error
+ occurs while \TeX\ is trying to fix a non-fatal one. But such recursion
+ @^recursion@>
+! is never more than two levels deep.
+
+ @<Error handling...@>=
+ procedure@?normalize_selector; forward;@t\2@>@/
+***************
+*** 2661,2667 ****
+ end;
+ r:=q-s;
+ if r>p+1 then @<Allocate from the top of node |p| and |goto found|@>;
+! if r=p then if ((rlink(p)<>rover) or (llink(p)<>rover)) then
+ @<Allocate entire node |p| and |goto found|@>;
+ node_size(p):=q-p {reset the size in case it grew}
+
+--- 2667,2673 ----
+ end;
+ r:=q-s;
+ if r>p+1 then @<Allocate from the top of node |p| and |goto found|@>;
+! if r=p then if rlink(p)<>p then
+ @<Allocate entire node |p| and |goto found|@>;
+ node_size(p):=q-p {reset the size in case it grew}
+
+***************
+*** 2764,2775 ****
+ @^oriental characters@>@^Chinese characters@>@^Japanese characters@>
+ and styles of type. It is suggested that Chinese and Japanese fonts be
+ handled by representing such characters in two consecutive |char_node|
+! entries: The first of these would identify the font and the character
+! dimensions, and it would also link to the second, where the full halfword
+! |info| field would address the desired character. Such an extension of
+! \TeX\ would not be difficult; further details are left to the reader.
+ The saving feature about oriental characters is that most of them have
+! the same box dimensions.
+
+ In order to make sure that the |character| code fits in a quarterword,
+ \TeX\ adds the quantity |min_quarterword| to the actual code.
+--- 2770,2784 ----
+ @^oriental characters@>@^Chinese characters@>@^Japanese characters@>
+ and styles of type. It is suggested that Chinese and Japanese fonts be
+ handled by representing such characters in two consecutive |char_node|
+! entries: The first of these has |font=font_base|, and its |link| points
+! to the second;
+! the second identifies the font and the character dimensions.
+ The saving feature about oriental characters is that most of them have
+! the same box dimensions. The |character| field of the first |char_node|
+! is a ``\\{charext}'' that distinguishes between graphic symbols whose
+! dimensions are identical for typesetting purposes. (See the \MF\ manual.)
+! Such an extension of \TeX\ would not be difficult; further details are
+! left to the reader.
+
+ In order to make sure that the |character| code fits in a quarterword,
+ \TeX\ adds the quantity |min_quarterword| to the actual code.
+***************
+*** 3197,3204 ****
+ symbolic names to the fixed positions. Static variable-size nodes appear
+ in locations |mem_bot| through |lo_mem_stat_max|, and static single-word nodes
+ appear in locations |hi_mem_stat_min| through |mem_top|, inclusive. It is
+! harmless to let |lig_trick|, |garbage|, and |backup_head| share the same
+! location of |mem|.
+
+ @d zero_glue==mem_bot {specification for \.{0pt plus 0pt minus 0pt}}
+ @d fil_glue==zero_glue+glue_spec_size {\.{0pt plus 1fil minus 0pt}}
+--- 3206,3212 ----
+ symbolic names to the fixed positions. Static variable-size nodes appear
+ in locations |mem_bot| through |lo_mem_stat_max|, and static single-word nodes
+ appear in locations |hi_mem_stat_min| through |mem_top|, inclusive. It is
+! harmless to let |lig_trick| and |garbage| share the same location of |mem|.
+
+ @d zero_glue==mem_bot {specification for \.{0pt plus 0pt minus 0pt}}
+ @d fil_glue==zero_glue+glue_spec_size {\.{0pt plus 1fil minus 0pt}}
+***************
+*** 3275,3281 ****
+ @t\hskip1em@>@!was_free: packed array [mem_min..mem_max] of boolean;
+ {previously free cells}
+ @t\hskip1em@>@!was_mem_end,@!was_lo_max,@!was_hi_min: pointer;
+! {previous |mem_end|, |lo_mem_max|,and |hi_mem_min|}
+ @t\hskip1em@>@!panicking:boolean; {do we want to check memory constantly?}
+ gubed
+
+--- 3283,3289 ----
+ @t\hskip1em@>@!was_free: packed array [mem_min..mem_max] of boolean;
+ {previously free cells}
+ @t\hskip1em@>@!was_mem_end,@!was_lo_max,@!was_hi_min: pointer;
+! {previous |mem_end|, |lo_mem_max|, and |hi_mem_min|}
+ @t\hskip1em@>@!panicking:boolean; {do we want to check memory constantly?}
+ gubed
+
+***************
+*** 3426,3432 ****
+
+ @p procedure short_display(@!p:integer); {prints highlights of list |p|}
+ var n:integer; {for replacement counts}
+! begin while p>null do
+ begin if is_char_node(p) then
+ begin if p<=mem_end then
+ begin if font(p)<>font_in_short_display then
+--- 3434,3440 ----
+
+ @p procedure short_display(@!p:integer); {prints highlights of list |p|}
+ var n:integer; {for replacement counts}
+! begin while p>mem_min do
+ begin if is_char_node(p) then
+ begin if p<=mem_end then
+ begin if font(p)<>font_in_short_display then
+***************
+*** 3562,3568 ****
+ contains a scaled integer, if |p| is a pointer that has been
+ clobbered or chosen at random.
+
+! @p procedure show_node_list(@!p:pointer); {prints a node list symbolically}
+ label exit;
+ var n:integer; {the number of items already printed at this level}
+ @!g:real; {a glue ratio, as a floating point number}
+--- 3570,3576 ----
+ contains a scaled integer, if |p| is a pointer that has been
+ clobbered or chosen at random.
+
+! @p procedure show_node_list(@!p:integer); {prints a node list symbolically}
+ label exit;
+ var n:integer; {the number of items already printed at this level}
+ @!g:real; {a glue ratio, as a floating point number}
+***************
+*** 3572,3578 ****
+ return;
+ end;
+ n:=0;
+! while p>null do
+ begin print_ln; print_current_string; {display the nesting history}
+ if p>mem_end then {pointer out of range}
+ begin print("Bad link, display aborted."); return;
+--- 3580,3586 ----
+ return;
+ end;
+ n:=0;
+! while p>mem_min do
+ begin print_ln; print_current_string; {display the nesting history}
+ if p>mem_end then {pointer out of range}
+ begin print("Bad link, display aborted."); return;
+***************
+*** 6389,6395 ****
+ are declared to be \.{\\outer}.
+
+ A variable called |scanner_status| tells \TeX\ whether or not to complain
+! when a subfile ends. This variable has five possible values:
+
+ \yskip\hang|normal|, means that a subfile can safely end here without incident.
+
+--- 6397,6403 ----
+ are declared to be \.{\\outer}.
+
+ A variable called |scanner_status| tells \TeX\ whether or not to complain
+! when a subfile ends. This variable has six possible values:
+
+ \yskip\hang|normal|, means that a subfile can safely end here without incident.
+
+***************
+*** 7311,7317 ****
+ end;
+ if selector<log_only then open_log_file;
+ if interaction>nonstop_mode then
+! begin if limit=start then {previous line was empty}
+ print_nl("(Please type a command or say `\end')");
+ @.Please type...@>
+ print_ln; first:=start;
+--- 7319,7326 ----
+ end;
+ if selector<log_only then open_log_file;
+ if interaction>nonstop_mode then
+! begin if (end_line_char<0)or(end_line_char>127) then incr(limit);
+! if limit=start then {previous line was empty}
+ print_nl("(Please type a command or say `\end')");
+ @.Please type...@>
+ print_ln; first:=start;
+***************
+*** 9415,9421 ****
+ end;
+
+ @ When we begin to process a new \.{\\if}, we set |if_limit:=if_code|; then
+! if \.{\\or} or \.{\\else} or \.{\\fi} occurs before the current \.{\\if}
+ condition has been evaluated, \.{\\relax} will be inserted.
+ For example, a sequence of commands like `\.{\\ifvoid1\\else...\\fi}'
+ would otherwise require something after the `\.1'.
+--- 9424,9430 ----
+ end;
+
+ @ When we begin to process a new \.{\\if}, we set |if_limit:=if_code|; then
+! if\/ \.{\\or} or \.{\\else} or \.{\\fi} occurs before the current \.{\\if}
+ condition has been evaluated, \.{\\relax} will be inserted.
+ For example, a sequence of commands like `\.{\\ifvoid1\\else...\\fi}'
+ would otherwise require something after the `\.1'.
+***************
+*** 10208,10217 ****
+ last gives the ``face byte.'' The program that converts \.{DVI} files
+ to Xerox printing format gets this information by looking at the \.{TFM}
+ file, which it needs to read anyway because of other information that
+! is not explicitly repeated in \.{DVI} format. Extensions of \TeX\ for
+! oriental languages should be able to identify oriental fonts by means
+! of this additional header information.
+! @^oriental characters@>@^Chinese characters@>@^Japanese characters@>
+
+ \yskip\hang|header[0]| is a 32-bit check sum that \TeX\ will copy into
+ the \.{DVI} output file. Later on when the \.{DVI} file is printed,
+--- 10217,10223 ----
+ last gives the ``face byte.'' The program that converts \.{DVI} files
+ to Xerox printing format gets this information by looking at the \.{TFM}
+ file, which it needs to read anyway because of other information that
+! is not explicitly repeated in \.{DVI} format.
+
+ \yskip\hang|header[0]| is a 32-bit check sum that \TeX\ will copy into
+ the \.{DVI} output file. Later on when the \.{DVI} file is printed,
+***************
+*** 10594,10600 ****
+ malformed; if there's no room for this font, say so and |goto
+ done|; otherwise |incr(font_ptr)| and |goto done|@>;
+ bad_tfm: @<Report that the font won't be loaded@>;
+! done: b_close(tfm_file); read_font_info:=g;
+ end;
+
+ @ There are programs called \.{TFtoPL} and \.{PLtoTF} that convert
+--- 10600,10607 ----
+ malformed; if there's no room for this font, say so and |goto
+ done|; otherwise |incr(font_ptr)| and |goto done|@>;
+ bad_tfm: @<Report that the font won't be loaded@>;
+! done: if file_opened then b_close(tfm_file);
+! read_font_info:=g;
+ end;
+
+ @ There are programs called \.{TFtoPL} and \.{PLtoTF} that convert
+***************
+*** 10875,10881 ****
+ begin m:=cur_chr; scan_four_bit_int; f:=equiv(m+cur_val);
+ end
+ else begin print_err("Missing font identifier");
+! @.Undefined font code@>
+ help2("I was looking for a control sequence whose")@/
+ ("current meaning has been defined by \font.");
+ back_error; f:=null_font;
+--- 10882,10888 ----
+ begin m:=cur_chr; scan_four_bit_int; f:=equiv(m+cur_val);
+ end
+ else begin print_err("Missing font identifier");
+! @.Missing font identifier@>
+ help2("I was looking for a control sequence whose")@/
+ ("current meaning has been defined by \font.");
+ back_error; f:=null_font;
+***************
+*** 11497,11503 ****
+
+ @ @<Set init...@>=
+ total_pages:=0; max_v:=0; max_h:=0; max_push:=0; last_bop:=-1;
+! doing_leaders:=false; dead_cycles:=0;
+
+ @ The \.{DVI} bytes are output to a buffer instead of being written directly
+ to the output file. This makes it possible to reduce the overhead of
+--- 11504,11510 ----
+
+ @ @<Set init...@>=
+ total_pages:=0; max_v:=0; max_h:=0; max_push:=0; last_bop:=-1;
+! doing_leaders:=false; dead_cycles:=0; cur_s:=-1;
+
+ @ The \.{DVI} bytes are output to a buffer instead of being written directly
+ to the output file. This makes it possible to reduce the overhead of
+***************
+*** 11921,11931 ****
+ @!dvi_h,@!dvi_v:scaled; {a \.{DVI} reader program thinks we are here}
+ @!cur_h,@!cur_v:scaled; {\TeX\ thinks we are here}
+ @!dvi_f:internal_font_number; {the current font}
+! @!cur_s:integer; {current depth of output box nesting}
+
+ @ @<Initialize variables as |ship_out| begins@>=
+ dvi_h:=0; dvi_v:=0; cur_h:=h_offset; dvi_f:=null_font;
+! cur_s:=-1; ensure_dvi_open;
+ if total_pages=0 then
+ begin dvi_out(pre); dvi_out(id_byte); {output the preamble}
+ @^preamble of \.{DVI} file@>
+--- 11928,11938 ----
+ @!dvi_h,@!dvi_v:scaled; {a \.{DVI} reader program thinks we are here}
+ @!cur_h,@!cur_v:scaled; {\TeX\ thinks we are here}
+ @!dvi_f:internal_font_number; {the current font}
+! @!cur_s:integer; {current depth of output box nesting, initially $-1$}
+
+ @ @<Initialize variables as |ship_out| begins@>=
+ dvi_h:=0; dvi_v:=0; cur_h:=h_offset; dvi_f:=null_font;
+! ensure_dvi_open;
+ if total_pages=0 then
+ begin dvi_out(pre); dvi_out(id_byte); {output the preamble}
+ @^preamble of \.{DVI} file@>
+***************
+*** 12003,12011 ****
+ begin synch_h; synch_v;
+ repeat f:=font(p); c:=character(p);
+ if f<>dvi_f then @<Change font |dvi_f| to |f|@>;
+! if c<qi(128) then dvi_out(qo(c))
+! else begin dvi_out(set1); dvi_out(qo(c));
+! end;
+ cur_h:=cur_h+char_width(f)(char_info(f)(c));
+ p:=link(p);
+ until not is_char_node(p);
+--- 12010,12017 ----
+ begin synch_h; synch_v;
+ repeat f:=font(p); c:=character(p);
+ if f<>dvi_f then @<Change font |dvi_f| to |f|@>;
+! if c>=qi(128) then dvi_out(set1);
+! dvi_out(qo(c));@/
+ cur_h:=cur_h+char_width(f)(char_info(f)(c));
+ p:=link(p);
+ until not is_char_node(p);
+***************
+*** 12108,12114 ****
+ results for the |div| operation when |cur_h| is less than |left_edge|.
+
+ In the case of |c_leaders| (centered leaders), we want to increase |cur_h|
+! by half of the excess space not occupied by the leaders; and in the case of
+ case of |x_leaders| (expanded leaders) we increase |cur_h|
+ by $1/(q+1)$ of this excess space, where $q$ is the number of times the
+ leader box will be replicated. Slight inaccuracies in the division might
+--- 12114,12120 ----
+ results for the |div| operation when |cur_h| is less than |left_edge|.
+
+ In the case of |c_leaders| (centered leaders), we want to increase |cur_h|
+! by half of the excess space not occupied by the leaders; and in the
+ case of |x_leaders| (expanded leaders) we increase |cur_h|
+ by $1/(q+1)$ of this excess space, where $q$ is the number of times the
+ leader box will be replicated. Slight inaccuracies in the division might
+***************
+*** 12345,12351 ****
+ dvi_four(last_bop); last_bop:=page_loc;
+ cur_v:=height(p)+v_offset; temp_ptr:=p;
+ if type(p)=vlist_node then vlist_out@+else hlist_out;
+! dvi_out(eop); incr(total_pages);
+ done:
+
+ @ Sometimes the user will generate a huge page because other error messages
+--- 12351,12357 ----
+ dvi_four(last_bop); last_bop:=page_loc;
+ cur_v:=height(p)+v_offset; temp_ptr:=p;
+ if type(p)=vlist_node then vlist_out@+else hlist_out;
+! dvi_out(eop); incr(total_pages); cur_s:=-1;
+ done:
+
+ @ Sometimes the user will generate a huge page because other error messages
+***************
+*** 12379,12384 ****
+--- 12385,12396 ----
+ An integer variable |k| will be declared for use by this routine.
+
+ @<Finish the \.{DVI} file@>=
++ while cur_s>-1 do
++ begin if cur_s>0 then dvi_out(pop)
++ else begin dvi_out(eop); incr(total_pages);
++ end;
++ decr(cur_s);
++ end;
+ if total_pages=0 then print_nl("No pages of output.")
+ @.No pages of output@>
+ else begin dvi_out(post); {beginning of the postamble}
+***************
+*** 13195,13203 ****
+ subsidiary to the |nucleus| field of some noad; the dot is replaced by
+ `\.[' or `\.(' or `\./' or `\.\\' if |p| is descended from the |subscr|
+ or |supscr| or |denominator| or |numerator| fields of noads. For example,
+! the current string would be `\.{.(.[/}' if |p| points to the |ord_noad| for
+! |x| in the (ridiculous) formula `\.{\$\\sqrt\{a\^\{\{b\_\{c\\over x+y\}
+! \}\}\}\$}'.
+
+ @<Cases of |show_node_list| that arise...@>=
+ style_node:print_style(subtype(p));
+--- 13207,13215 ----
+ subsidiary to the |nucleus| field of some noad; the dot is replaced by
+ `\.[' or `\.(' or `\./' or `\.\\' if |p| is descended from the |subscr|
+ or |supscr| or |denominator| or |numerator| fields of noads. For example,
+! the current string would be `\.{.\^.\_/}' if |p| points to the |ord_noad| for
+! |x| in the (ridiculous) formula
+! `\.{\$\\sqrt\{a\^\{\\mathinner\{b\_\{c\\over x+y\}\}\}\}\$}'.
+
+ @<Cases of |show_node_list| that arise...@>=
+ style_node:print_style(subtype(p));
+***************
+*** 13645,13652 ****
+
+ @ The next subroutine is much simpler; it is used for numerators and
+ denominators of fractions as well as for displayed operators and
+! their limits above and below. It takes a given hlist box |b| and
+! changes it so that the new box is centered in a box of width |w|.
+ The centering is done by putting \.{\\hss} glue at the left and right
+ of the list inside |b|, then packaging the new box; thus, the
+ actual box might not really be centered, if it already contains
+--- 13657,13664 ----
+
+ @ The next subroutine is much simpler; it is used for numerators and
+ denominators of fractions as well as for displayed operators and
+! their limits above and below. It takes a given box~|b| and
+! changes it so that the new box is centered in a box of width~|w|.
+ The centering is done by putting \.{\\hss} glue at the left and right
+ of the list inside |b|, then packaging the new box; thus, the
+ actual box might not really be centered, if it already contains
+***************
+*** 15702,15708 ****
+ @<Glob...@>=
+ @!passive:pointer; {most recent node on passive list}
+ @!printed_node:pointer; {most recent node that has been printed}
+! @!pass_number:pointer; {the number of passive nodes allocated on this pass}
+
+ @ The active list also contains ``delta'' nodes that help the algorithm
+ compute the badness of individual lines. Such nodes appear only between two
+--- 15714,15720 ----
+ @<Glob...@>=
+ @!passive:pointer; {most recent node on passive list}
+ @!printed_node:pointer; {most recent node that has been printed}
+! @!pass_number:halfword; {the number of passive nodes allocated on this pass}
+
+ @ The active list also contains ``delta'' nodes that help the algorithm
+ compute the badness of individual lines. Such nodes appear only between two
+***************
+*** 17148,17154 ****
+ \.{abcdef} is a word in a font for which the only ligatures are \.{b\!c},
+ \.{c\!d}, \.{d\!e}, and \.{e\!f}. If this word is to permit hyphenation
+ between \.b and \.c, the two patterns with and without hyphenation are
+! $\.a\,\.{b\!c}\,\.{d\!e}\,\.f$ and $\.a\,\.b\,\.-\,\.{c\!d}\,\.{e\!f}$.
+ Thus the insertion of a hyphen might cause effects to ripple arbitrarily
+ far into the rest of the word. A further complication arises if additional
+ hyphens appear together with such rippling, e.g., if the word in the
+--- 17160,17166 ----
+ \.{abcdef} is a word in a font for which the only ligatures are \.{b\!c},
+ \.{c\!d}, \.{d\!e}, and \.{e\!f}. If this word is to permit hyphenation
+ between \.b and \.c, the two patterns with and without hyphenation are
+! $\.a\,\.b\,\.-\,\.{c\!d}\,\.{e\!f}$ and $\.a\,\.{b\!c}\,\.{d\!e}\,\.f$.
+ Thus the insertion of a hyphen might cause effects to ripple arbitrarily
+ far into the rest of the word. A further complication arises if additional
+ hyphens appear together with such rippling, e.g., if the word in the
+***************
+*** 17351,17357 ****
+ When a word |hc[1..hn]| has been set up to contain a candidate for hyphenation,
+ \TeX\ first looks to see if it is in the user's exception dictionary. If not,
+ hyphens are inserted based on patterns that appear within the given word,
+! using an algorithm due to Frank M. Liang.
+ @^Liang, Franklin Mark@>
+
+ Let's consider Liang's method first, since it is much more interesting than the
+--- 17363,17369 ----
+ When a word |hc[1..hn]| has been set up to contain a candidate for hyphenation,
+ \TeX\ first looks to see if it is in the user's exception dictionary. If not,
+ hyphens are inserted based on patterns that appear within the given word,
+! using an algorithm due to Frank~M. Liang.
+ @^Liang, Franklin Mark@>
+
+ Let's consider Liang's method first, since it is much more interesting than the
+***************
+*** 17874,17880 ****
+ end;
+
+ @ By making sure that |trie_max| is at least |h+128|, we can be sure that
+! |trie_max>z|, since |h=z+c|. It follows that location |trie_max| will
+ never be occupied in |trie|, and we will have |trie_max>=trie_link(z)|.
+
+ @<Ensure that |trie_max>=h+128|@>=
+--- 17886,17892 ----
+ end;
+
+ @ By making sure that |trie_max| is at least |h+128|, we can be sure that
+! |trie_max>z|, since |h=z-c|. It follows that location |trie_max| will
+ never be occupied in |trie|, and we will have |trie_max>=trie_link(z)|.
+
+ @<Ensure that |trie_max>=h+128|@>=
+***************
+*** 18640,18646 ****
+ label exit,done,done1,continue,contribute,update_heights;
+ var p:pointer; {the node being appended}
+ @!q,@!r:pointer; {nodes being examined}
+! @!b,c:integer; {badness and cost of current page}
+ @!pi:integer; {penalty to be added to the badness}
+ @!n:min_quarterword..255; {insertion box number}
+ @!delta,@!h,@!w:scaled; {sizes used for insertion calculations}
+--- 18652,18658 ----
+ label exit,done,done1,continue,contribute,update_heights;
+ var p:pointer; {the node being appended}
+ @!q,@!r:pointer; {nodes being examined}
+! @!b,@!c:integer; {badness and cost of current page}
+ @!pi:integer; {penalty to be added to the badness}
+ @!n:min_quarterword..255; {insertion box number}
+ @!delta,@!h,@!w:scaled; {sizes used for insertion calculations}
+***************
+*** 23606,23612 ****
+ @d close_node=2 {|subtype| in whatsits that represent streams to \.{\\closeout}}
+ @d special_node=3 {|subtype| in whatsits that represent \.{\\special} things}
+ @d write_tokens(#) == link(#+1) {reference count of token list to write}
+! @d write_stream(#) == info(#+1) {stream number (0 to 16)}
+ @d open_name(#) == link(#+1) {string number of file name to open}
+ @d open_area(#) == info(#+2) {string number of file area for |open_name|}
+ @d open_ext(#) == link(#+2) {string number of file extension for |open_name|}
+--- 23618,23624 ----
+ @d close_node=2 {|subtype| in whatsits that represent streams to \.{\\closeout}}
+ @d special_node=3 {|subtype| in whatsits that represent \.{\\special} things}
+ @d write_tokens(#) == link(#+1) {reference count of token list to write}
+! @d write_stream(#) == info(#+1) {stream number (0 to 17)}
+ @d open_name(#) == link(#+1) {string number of file name to open}
+ @d open_area(#) == info(#+2) {string number of file area for |open_name|}
+ @d open_ext(#) == link(#+2) {string number of file extension for |open_name|}
+
+==============================TeX2.3 to TeX2.5========================
+*** TEX2.3.WEB Tue Sep 22 20:42:16 1987
+--- TEX.WEB Wed Oct 14 07:03:19 1987
+***************
+*** 19,24 ****
+--- 19,26 ----
+ % Version 2.1 corrects anomalies in discretionary breaks (January 1987).
+ % Version 2.2 corrects "(Please type...)" with null \endlinechar (April 1987).
+ % Version 2.3 avoids incomplete page in premature termination (August 1987).
++ % Version 2.4 fixes \noaligned rules in indented displays (August 1987).
++ % Version 2.5 saves cur_order when expanding tokens (September 1987).
+
+ % A reward of $40.96 will be paid to the first finder of any remaining bug.
+ % (This amount will double again in 1988.)
+***************
+*** 159,165 ****
+ known as `\TeX' [cf.~Stanford Computer Science report CS1027,
+ November 1984].
+
+! @d banner=='This is TeX, Version 2.3' {printed when \TeX\ starts}
+
+ @ Different \PASCAL s have slightly different conventions, and the present
+ @!@:PASCAL H}{\ph@>
+--- 161,167 ----
+ known as `\TeX' [cf.~Stanford Computer Science report CS1027,
+ November 1984].
+
+! @d banner=='This is TeX, Version 2.5' {printed when \TeX\ starts}
+
+ @ Different \PASCAL s have slightly different conventions, and the present
+ @!@:PASCAL H}{\ph@>
+***************
+*** 2517,2523 ****
+ If the available-space list is empty, i.e., if |avail=null|,
+ we try first to increase |mem_end|. If that cannot be done, i.e., if
+ |mem_end=mem_max|, we try to decrease |hi_mem_min|. If that cannot be
+! done, i.e., if |hi_mem_min=low_mem_max+1|, we have to quit.
+
+ @p function get_avail : pointer; {single-word node allocation}
+ var p:pointer; {the new node being got}
+--- 2519,2525 ----
+ If the available-space list is empty, i.e., if |avail=null|,
+ we try first to increase |mem_end|. If that cannot be done, i.e., if
+ |mem_end=mem_max|, we try to decrease |hi_mem_min|. If that cannot be
+! done, i.e., if |hi_mem_min=lo_mem_max+1|, we have to quit.
+
+ @p function get_avail : pointer; {single-word node allocation}
+ var p:pointer; {the new node being got}
+***************
+*** 7450,7465 ****
+ @!p,@!q,@!r:pointer; {for list manipulation}
+ @!j:0..buf_size; {index into |buffer|}
+ @!cv_backup:integer; {to save the global quantity |cur_val|}
+! @!cvl_backup,@!radix_backup:small_number; {to save |cur_val_level| and |radix|}
+ @!backup_backup:pointer; {to save |link(backup_head)|}
+ @!save_scanner_status:small_number; {temporary storage of |scanner_status|}
+ begin cv_backup:=cur_val; cvl_backup:=cur_val_level; radix_backup:=radix;
+! backup_backup:=link(backup_head);
+ if cur_cmd<call then @<Expand a nonmacro@>
+ else if cur_cmd<end_template then macro_call
+ else @<Insert a |frozen_endv| token@>;
+ cur_val:=cv_backup; cur_val_level:=cvl_backup; radix:=radix_backup;
+! link(backup_head):=backup_backup;
+ end;
+
+ @ @<Expand a nonmacro@>=
+--- 7452,7468 ----
+ @!p,@!q,@!r:pointer; {for list manipulation}
+ @!j:0..buf_size; {index into |buffer|}
+ @!cv_backup:integer; {to save the global quantity |cur_val|}
+! @!cvl_backup,@!radix_backup,@!co_backup:small_number;
+! {to save |cur_val_level|, etc.}
+ @!backup_backup:pointer; {to save |link(backup_head)|}
+ @!save_scanner_status:small_number; {temporary storage of |scanner_status|}
+ begin cv_backup:=cur_val; cvl_backup:=cur_val_level; radix_backup:=radix;
+! co_backup:=cur_order; backup_backup:=link(backup_head);
+ if cur_cmd<call then @<Expand a nonmacro@>
+ else if cur_cmd<end_template then macro_call
+ else @<Insert a |frozen_endv| token@>;
+ cur_val:=cv_backup; cur_val_level:=cvl_backup; radix:=radix_backup;
+! cur_order:=co_backup; link(backup_head):=backup_backup;
+ end;
+
+ @ @<Expand a nonmacro@>=
+***************
+*** 15395,15401 ****
+ pack_begin_line:=0
+
+ @ @<Set the glue in all the unset...@>=
+! q:=link(head);
+ while q<>null do
+ begin if type(q)=unset_node then
+ @<Set the unset box |q| and the unset boxes in it@>
+--- 15398,15404 ----
+ pack_begin_line:=0
+
+ @ @<Set the glue in all the unset...@>=
+! q:=link(head); s:=head;
+ while q<>null do
+ begin if type(q)=unset_node then
+ @<Set the unset box |q| and the unset boxes in it@>
+***************
+*** 15402,15408 ****
+ else if type(q)=rule_node then
+ @<Make the running dimensions in rule |q| extend to the
+ boundaries of the alignment@>;
+! q:=link(q);
+ end
+
+ @ @<Make the running dimensions in rule |q| extend...@>=
+--- 15405,15411 ----
+ else if type(q)=rule_node then
+ @<Make the running dimensions in rule |q| extend to the
+ boundaries of the alignment@>;
+! s:=q; q:=link(q);
+ end
+
+ @ @<Make the running dimensions in rule |q| extend...@>=
+***************
+*** 15409,15414 ****
+--- 15412,15421 ----
+ begin if is_running(width(q)) then width(q):=width(p);
+ if is_running(height(q)) then height(q):=height(p);
+ if is_running(depth(q)) then depth(q):=depth(p);
++ if o<>0 then
++ begin r:=link(q); link(q):=null; q:=hpack(q,natural);
++ shift_amount(q):=o; link(q):=r; link(s):=q;
++ end;
+ end
+
+ @ The unset box |q| represents a row that contains one or more unset boxes,
+
+=============================end of diffs ===========================
+
+ Pierre A. MacKay
+ TUG Site Coordinator for
+ Unix-flavored TeX
+
+-------
diff --git a/info/digests/texhax/txh/martensson.txh b/info/digests/texhax/txh/martensson.txh
new file mode 100644
index 0000000000..8a7bb77b39
--- /dev/null
+++ b/info/digests/texhax/txh/martensson.txh
@@ -0,0 +1,246 @@
+ 4-Mar-88 04:21:48-PST,10031;000000000001
+Return-Path: <unido!ubrinf!mond!bengt@uunet.UU.NET>
+Date: Thu, 3 Mar 88 15:49:50 PST
+From: unido!ubrinf!mond!bengt@uunet.UU.NET (Bengt Martensson)
+Subject: Re: delatex
+
+Delatex etc is frequently discussed in this forum. Last summer I
+wrote some GNU Emacs functions for this. It does a more complete job
+than other approaches I have seen, and it is customizable. It can
+both be used as is (although it is slightly--but not
+prohibitively--slow of course), but in particular I would like to
+regard it as a part of the discussion. Among its features is that all
+environments in a user modifiable list are deleted. A selected number
+of commands (defined in another user definable list) will get their
+arguments junked. It is easily adaptable to other TeX-dialects, using
+all kinds of weird characters for escape and grouping.
+
+I include the file in this mailing, although I suspect that the
+moderator will find it to large and file it at a ftp-able location
+instead.
+
+Bengt Martensson +49 421 218-2948
+Institut fur Dynamische Systeme, Universitat Bremen +49 421 171713 (home)
+Postfach 330 440, D-2800 Bremen 33
+F.R.G. UUCP: ...unido!ubrinf!mond!bengt
+
+
+;;; Detex
+;;; Bengt Martensson
+;;; LastEditDate="Sun Oct 4 17:54:06 1987"
+
+;;; For redistribution the same rules apply as for GNU Emacs.
+
+(defvar detex-tex-commands-with-garbage-argument
+ '("input" "special" "message")
+ "List of TeX-commands for which their argument should be filtered out
+by detex.")
+
+(defvar detex-latex-commands-with-garbage-argument
+ (append detex-tex-commands-with-garbage-argument
+ '("documentstyle" "pagestyle" "thispagestyle"
+ "pagenumbering" "typeout" "typein" "label" "ref" "pageref"
+ "bibliography" "bibitem" "bibliographystyle"
+ "cite" "include" "includeonly" "begin" "end"))
+ "List of LaTeX-commands for which their argument should be filtered out
+by delatex.")
+
+(defvar detex-latex-garbage-environments
+ '("array" "equation" "eqnarray" "eqnarray*" "verbatim" "displaymath")
+ "List of LaTeX environments which will be deleted by delatex.")
+
+(defvar detex-tex-escape "" "TeX escape character used by detex.")
+(defvar detex-re-tex-escape ""
+ "Regular expression for TeX escape character. Used by detex.")
+(defvar detex-not-tex-escape ""
+ "Regular expression that matches anything but TeX escape character.
+Used by detex.")
+(defvar detex-latex-optional-left ""
+ "LaTeX character denoting left bracket for optional argument.
+Used by detex.")
+(defvar detex-tex-left "" "TeX left group character used by detex.")
+(defvar detex-tex-right "" "TeX right group character used by detex.")
+
+(make-variable-buffer-local 'detex-tex-escape)
+(make-variable-buffer-local 'detex-re-tex-escape)
+(make-variable-buffer-local 'detex-not-tex-escape)
+(make-variable-buffer-local 'detex-latex-optional-left)
+(make-variable-buffer-local 'detex-tex-left)
+(make-variable-buffer-local 'detex-tex-right)
+
+(set-default 'detex-tex-escape "\\")
+(set-default 'detex-re-tex-escape "\\\\")
+(set-default 'detex-not-escape "[^\\\\]")
+(set-default 'detex-latex-optional-left "\\[")
+(set-default 'detex-tex-left "{")
+(set-default 'detex-tex-right "}")
+
+(defun detex-remove-latex-commands-with-garbage-argument ()
+ "Deletes latex-commands in detex-latex-commands-with-garbage-argument
+together with their arguments."
+ ;;(message "detex-remove-latex-commands-with-garbage-argument...")
+ (mapcar 'detex-remove-latex-command-with-garbage-argument
+ detex-latex-commands-with-garbage-argument))
+
+(defun detex-remove-tex-commands-with-garbage-argument ()
+ "Deletes tex-commands in detex-tex-commands-with-garbage-argument
+together with their arguments."
+ (mapcar 'detex-remove-tex-command-with-garbage-argument
+ detex-tex-commands-with-garbage-argument))
+
+(defun detex-remove-latex-command-with-garbage-argument (com)
+"Deletes latex-command COM together with its arguments."
+ (let ((command (concat detex-tex-escape com))
+ (re-command (concat detex-re-tex-escape com "\\b"))
+ b)
+ (goto-char (point-min))
+ (while (re-search-forward re-command (point-max) t)
+ (search-backward command)
+ (setq b (point))
+ (search-forward command)
+ (re-search-forward "[ \t]*")
+ (if (looking-at detex-latex-optional-left)
+ (forward-sexp 1))
+ (re-search-forward "[ \t]*")
+ (if (looking-at detex-tex-left)
+ (forward-sexp 1)
+ (forward-word 1))
+ (delete-region b (point)))))
+
+(defun detex-remove-tex-command-with-garbage-argument (com)
+"Deletes tex-command COM together with its arguments."
+ (let ((command (concat detex-tex-escape com))
+ (re-command (concat detex-re-tex-escape com "\\b"))
+ b)
+ (goto-char (point-min))
+ (while (re-search-forward re-command (point-max) t)
+ (search-backward command)
+ (setq b (point))
+ (search-forward command)
+ (re-search-forward "[ \t]*")
+ (if (looking-at detex-tex-left)
+ (forward-sexp 1)
+ (forward-word 1))
+ (delete-region b (point)))))
+
+(defun detex-remove-latex-garbage-environments ()
+ "Deletes the latex environments in detex-latex-garbage-environments."
+ ;;(message "detex-remove-latex-garbage-environments")
+ (mapcar 'detex-remove-latex-environment detex-latex-garbage-environments))
+
+(defun detex-remove-latex-environment (env)
+ "Deletes latex environment ENV."
+ (goto-char (point-min))
+ (while (search-forward
+ (concat detex-tex-escape "begin" detex-tex-left env) (point-max) t)
+ (search-backward detex-tex-escape)
+ (setq b (point))
+ (if (search-forward
+ (concat detex-tex-escape "end" detex-tex-left env) (point-max) t)
+ (if (looking-at detex-tex-right)
+ (delete-region b (1+ (point)))))))
+
+(defun detex-remove-discretionary-hyphens ()
+ "Removes \\-."
+ ;;(message "detex-remove-hyphens...")
+ (goto-char (point-min))
+ (while (re-search-forward (concat detex-re-tex-escape "-") (point-max) t)
+ (replace-match "")))
+
+(defun detex-remove-display (&optional flavor)
+ "Deletes displays delimited by ""$$"". If optional argument FLAVOR is
+""latex"", then it also recognizes LaTeX displays."
+ (let (beg)
+ (goto-char (point-min))
+ ;;(message "detex-remove-display...")
+ (while (re-search-forward (concat detex-not-escape "\\$\\$") (point-max) t)
+ (setq beg (- (point) 2))
+ (if (re-search-forward (concat detex-not-escape "\\$\\$") (point-max) t)
+ (delete-region beg (point))))
+ (if (equal flavor "latex")
+ (progn
+ (goto-char (point-min))
+ (while (search-forward (concat detex-tex-escape "[") (point-max) t)
+ (setq beg (- (point) 2))
+ (if (search-forward (concat detex-tex-escape "]") (point-max) t)
+ (delete-region beg (point))))))))
+
+(defun detex-remove-math (&optional flavor)
+ "Deletes math mode. If optional argument FLAVOR is ""latex"", it also
+recognizes LaTeX constructions."
+ (let (beg)
+ ;;(message "detex-remove-math...")
+ (goto-char (point-min))
+ (while (re-search-forward (concat detex-not-escape "\\$") (point-max) t)
+ (setq beg (1- (point)))
+ (if (re-search-forward (concat detex-not-escape "\\$") (point-max) t)
+ (delete-region beg (point))))
+ (if (equal flavor "latex")
+ (progn
+ (goto-char (point-min))
+ (while (search-forward (concat detex-tex-escape "(") (point-max) t)
+ (setq beg (- (point) 2))
+ (if (search-forward (concat detex-tex-escape ")") (point-max) t)
+ (delete-region beg (point))))))))
+
+(defun detex-remove-tex-commands ()
+ ;;(message "detex-remove-tex-commands")
+ (goto-char (point-min))
+ (while (re-search-forward
+ (concat detex-re-tex-escape "[a-zA-Z]*") (point-max) t)
+ (replace-match "")))
+
+(defun detex-remove-comments ()
+ ;;(message "detex-remove-comments...")
+ (goto-char (point-min))
+ (while (re-search-forward (concat detex-not-escape "%.*$") (point-max) t)
+ (delete-region (1+ (match-beginning 0)) (match-end 0))))
+
+(defun detex-remove-font ()
+ (goto-char (point-min))
+ (while (re-search-forward (concat detex-re-tex-escape "font[^=]* *= *\\w*")
+ (point-max) t)
+ (replace-match "")))
+
+(defun detex-remove-double-single-quotes ()
+ (goto-char (point-min))
+ (replace-string "''" "" nil))
+
+;;; If using a TeX/LaTeX dialect which uses other characters for
+;;; escape and grouping, this function should be rewritten to
+;;; redefine TeX escape character etc, possibly mode-dependent.
+
+(defun detex-regler ()
+ (interactive)
+ (setq detex-tex-escape "!")
+ (setq detex-re-tex-escape "!")
+ (setq detex-not-escape "[^!]")
+ (setq detex-tex-left "<")
+ (setq detex-tex-right ">")
+ (detex))
+
+(defun delatex ()
+ (interactive)
+ ;;(define-escape-and-group)
+ (detex-remove-latex-garbage-environments)
+ (detex-remove-display "latex")
+ (detex-remove-math "latex")
+ (detex-remove-comments)
+ (detex-remove-latex-commands-with-garbage-argument)
+ (detex-remove-discretionary-hyphens)
+ (detex-remove-double-single-quotes)
+ (detex-remove-tex-commands))
+
+(defun detex ()
+ (interactive)
+ ;;(define-escape-and-group)
+ (detex-remove-display "tex")
+ (detex-remove-math "tex")
+ (detex-remove-comments)
+ (detex-remove-font)
+ (detex-remove-tex-commands-with-garbage-argument)
+ (detex-remove-discretionary-hyphens)
+ (detex-remove-double-single-quotes)
+ (detex-remove-tex-commands))
+
+-------
diff --git a/info/digests/texhax/txh/mcpherson.txh b/info/digests/texhax/txh/mcpherson.txh
new file mode 100644
index 0000000000..1dc77f66ea
--- /dev/null
+++ b/info/digests/texhax/txh/mcpherson.txh
@@ -0,0 +1,434 @@
+
+27-Jul-88 06:54:04-PDT,11115;000000000000
+Return-Path: <CGL%HGRRUG5.BITNET@Forsythe.Stanford.EDU>
+Date: Wed, 27 Jul 88 15:50 B
+From: <CGL%HGRRUG5.BITNET@Forsythe.Stanford.EDU>
+Subject: Improved `Page Layout in LaTeX' program
+
+In Groningen Jan Luyten and myself have
+improved the program
+
+***Page Layout in LaTeX***
+from Kent McPherson published in TUGBoat, 9, 1.
+
+We consider it a useful program and therefor
+offer the program machine readable.
+We welcome comments.
+
+%
+\newcommand{\bs}{\char'134}
+%
+\newcommand{\fd}[2]{
+ #1=#2
+ \divide#1 by65536
+ }
+%
+%
+%
+\newcount\hofset
+\newcount\vofset
+\newcount\hofref
+\newcount\vofref
+\newcount\omargin
+\newcount\omarginref
+\newcount\emargin
+\newcount\emarginref
+\newcount\marginref
+\newcount\tmargin
+\newcount\hheight
+\newcount\hsep
+\newcount\theight
+\newcount\twidth
+\newcount\mparsep
+\newcount\mparwidth
+\newcount\fskip
+\newcount\fheight
+\newcount\headref
+\newcount\bodyref
+\newcount\footref
+\newcount\margnoteref
+\newcount\xp
+\newcount\yp
+\newcount\oneinch
+\newcount\ypm
+\newcount\xb
+\newcount\xe
+\newcount\yb
+\newcount\ye
+\newcount\la
+%
+%x:=a+b*tel/noem
+% #1=#2+#3*#4/#5
+%
+\newcommand{\pyl}[5]{
+ #1=#3
+ \multiply#1 by #4
+ \divide#1 by #5
+ \advance#1 by #2
+ }
+%
+%
+% xbegin,ybegin,lengte,xend,text
+%
+\newcommand{\hdpyl}[5]{
+ \put(#1,#2){\vector(1,0){#3}}
+ \put(#1,#2){\makebox(#3,40){\mbox{#5}}}
+ #4=#1
+ \advance#4 by #3
+ \put(#4,#2){\vector(-1,0){#3}}
+ }
+%
+\newcommand{\hxpyl}[5]{
+ \la=#1
+ \advance\la by -40
+ \put(\la,#2){\vector(1,0){40}}
+ #4=#1
+ \advance#4 by #3
+ \put(\#4,#2){\vector(-1,0){40}}
+ }
+%
+% xbegin,ybegin,lengte,yend,text
+% yend = ybegin - lengte
+%
+\newcommand{\vdpyl}[5]{
+ \put(#1,#2){\vector(0,-1){#3}}
+ #4=#2
+ \advance#4 by -#3
+ \put(#1,#4){\vector(0,1){#3}}
+ \put(#1,#4){\makebox(40,#3){\mbox{#5}}}
+ }
+\newcommand{\layout}{
+%
+\xp=598
+\yp=846
+\oneinch=72
+\ypm=\yp
+ \advance\ypm by -\oneinch
+%
+% Op papier wordt een rand van
+% ca. 5 mm niet geprint.
+%
+\fd{\hofset}{\hoffset}
+ \hofref=\hofset
+ \advance\hofset by \oneinch
+%
+\fd{\vofset}{\voffset}
+ \vofref=\vofset
+ \vofset=\ypm
+ \advance\vofset by -\vofref
+%
+\fd{\tmargin}{\topmargin}
+%
+\fd{\hheight}{\headheight}
+%
+\headref=\ypm
+ \advance\headref by -\vofref
+ \advance\headref by -\tmargin
+ \advance\headref by -\hheight
+%
+\fd{\hsep}{\headsep}
+%
+\fd{\theight}{\textheight}
+%
+\bodyref=\headref
+ \advance\bodyref by -\hsep
+ \advance\bodyref by -\theight
+%
+\fd{\fskip}{\footskip}
+%
+\fd{\fheight}{\footheight}
+ \footref=\bodyref
+ \advance\footref by -\fskip
+%
+\fd{\omargin}{\oddsidemargin}
+ \omarginref=\omargin
+ \advance\omarginref by \oneinch
+ \advance\omarginref by \hofref
+%
+\fd{\emargin}{\evensidemargin}
+ \emarginref=\emargin
+ \advance\emarginref by \hofset
+%
+\fd{\twidth}{\textwidth}
+%
+\fd{\mparsep}{\marginparsep}
+%
+\fd{\mparwidth}{\marginparwidth}
+%
+% Odd page
+\margnoteref=\oneinch
+ \advance\margnoteref by \hofref
+ \advance\margnoteref by \omargin
+ \marginref=\margnoteref
+ \advance\margnoteref by \twidth
+ \advance\margnoteref by \mparsep
+%
+\typeout{Begin oneven blz.}
+%
+Streepjeslijnen geven
+{\tt\bs hoffset} en
+{\tt\bs voffset}\newline
+Oneven pagina; diagram is 0.4 van werkelijke grootte.\newline
+\setlength{\unitlength}{0.4pt}
+\begin{picture}(\xp,\yp)
+% Page
+\put(0,0){\framebox(\xp,\yp){}}
+% dashed lines
+\put(0,\vofset){\dashbox{10}(\xp,0){}}
+\put(\hofset,0){\dashbox{10}(0,\yp){}}
+% header
+\put(\marginref,\headref){\framebox(\twidth,
+ \hheight){\footnotesize Kopregel}}
+% body
+\put(\marginref,\bodyref){\framebox(\twidth,
+ \theight){Tekst}}
+% footer
+\put(\marginref,\footref){\framebox(\twidth,
+ \fheight){\footnotesize Voetregel}}
+% margin
+\put(\margnoteref,\bodyref){\framebox(\mparwidth,
+ \theight){\footnotesize\shortstack{Kantlijn\\opmerkingen}}}
+% Hor. arrows
+%
+% #1
+ \xb=0
+ \pyl{\yb}{\bodyref}{\theight}{1}{2}
+ \hdpyl{\xb}{\yb}{\hofset}{\xe}{1}
+%
+% #2
+%
+ \pyl{\yb}{\bodyref}{\theight}{5}{6}
+ \xb=\xe
+ \hdpyl{\xb}{\yb}{\omargin}{\xe}{2}
+%
+% #3
+%
+ \xb=\xe
+ \pyl{\yb}{\bodyref}{\theight}{1}{6}
+ \hdpyl{\xb}{\yb}{\twidth}{\xe}{3}
+%
+% #4
+%
+ \pyl{\yb}{\bodyref}{\theight}{11}{12}
+ \xb=\xe
+ \hdpyl{\xb}{\yb}{\mparsep}{\xe}{4}
+%
+% #5
+%
+ \pyl{\yb}{\bodyref}{\theight}{5}{6}
+ \xb=\xe
+ \hdpyl{\xb}{\yb}{\mparwidth}{\xe}{5}
+%
+% indicate how much space is left?
+%
+% vertical arrows
+%
+%
+% #6
+%
+ \yb=\yp
+ \la=\yp
+ \advance\la by -\vofset
+ \pyl{\xb}{\marginref}{\twidth}{1}{2}
+ \vdpyl{\xb}{\yp}{\la}{\ye}{6}
+%
+% #7
+%
+ \pyl{\xb}{\marginref}{\twidth}{1}{8}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\tmargin}{\ye}{7}
+%
+% #8
+%
+ \pyl{\xb}{\marginref}{\twidth}{1}{4}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\hheight}{\ye}{8}
+%
+% #9
+%
+ \pyl{\xb}{\marginref}{\twidth}{3}{8}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\hsep}{\ye}{9}
+%
+% #10
+%
+ \pyl{\xb}{\marginref}{\twidth}{3}{4}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\theight}{\ye}{10}
+%
+% #11
+%
+ \pyl{\xb}{\marginref}{\twidth}{1}{8}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\fskip}{\ye}{11}
+%
+% #12
+%
+ \pyl{\xb}{\marginref}{\twidth}{1}{4}
+ \yb=\ye
+ \advance\yb by \fheight
+ \vdpyl{\xb}{\yb}{\fheight}{\ye}{12}
+%
+\end{picture}
+\newline
+%
+{\tt
+\begin{tabular}{l@{\hspace{20pt}}l}
+1\ \ \bs{}hoffset = \number\hofref pt&
+2\ \ \bs{}oddsidemargin = \number\omargin pt\\
+3\ \ \bs{}textwidth = \number\twidth pt&
+4\ \ \bs{}marginparsep = \number\mparsep pt\\
+5\ \ \bs{}marginparwidth= \number\mparwidth pt&
+6\ \ \bs{}voffset = \number\vofref pt\\
+7\ \ \bs{}topmargin = \number\tmargin pt&
+8\ \ \bs{}headheight = \number\hheight pt\\
+9\ \ \bs{}headsep = \number\hsep pt&
+10\ \bs{}textheight = \number\theight pt\\
+11\ \bs{}footskip = \number\fskip pt&
+12\ \bs{}footheight = \number\fheight\\
+\multicolumn{2}{c}{72pt $\approx$ 1 inch}
+\end{tabular}
+ }
+%
+\typeout{Oneven klaar, nu even.}
+\if@twoside
+\newpage
+%
+% Even page
+%
+\margnoteref=\oneinch
+ \advance\margnoteref by \hofref
+ \advance\margnoteref by \emargin
+ \marginref=\margnoteref
+ \advance\margnoteref by -\mparsep
+ \advance\margnoteref by -\mparwidth
+
+Streepjeslijnen duiden op
+{\tt\bs hoffset} en
+{\tt\bs voffset}.\newline
+Even page; diagram 0.4 actual size.\newline
+\begin{picture}(\xp,\yp)
+% Page
+\put(0,0){\framebox(\xp,\yp){}}
+% dashed lines
+\put(0,\vofset){\dashbox{10}(\xp,0){}}
+\put(\hofset,0){\dashbox{10}(0,\yp){}}
+% header
+\put(\marginref,\headref){\framebox(\twidth,
+ \hheight){\footnotesize Kopregel}}
+% body
+\put(\marginref,\bodyref){\framebox(\twidth,
+ \theight){Tekst}}
+% footer
+\put(\marginref,\footref){\framebox(\twidth,
+ \fheight){\footnotesize Voetregel}}
+% margin
+\put(\margnoteref,\bodyref){\framebox(\mparwidth,
+ \theight){\footnotesize\shortstack{Kantlijn\\opmerkingen}}}
+% Hor. arrows
+%
+% #1
+ \xb=0
+ \pyl{\yb}{\bodyref}{\theight}{1}{2}
+ \hdpyl{\xb}{\yb}{\hofset}{\xe}{1}
+%
+% #2
+%
+ \pyl{\yb}{\bodyref}{\theight}{5}{6}
+ \xb=\xe
+ \hdpyl{\xb}{\yb}{\emargin}{\xe}{2}
+%
+% #3
+%
+ \xb=\xe
+ \pyl{\yb}{\bodyref}{\theight}{1}{6}
+ \hdpyl{\xb}{\yb}{\twidth}{\xe}{3}
+%
+% #5
+%
+ \pyl{\yb}{\bodyref}{\theight}{2}{3}
+ \xb=\xe
+ \hdpyl{\margnoteref}{\yb}{\mparwidth}{\xe}{5}
+%
+% #4
+%
+ \pyl{\yb}{\bodyref}{\theight}{11}{12}
+ \xb=\xe
+ \hdpyl{\xb}{\yb}{\mparsep}{\xe}{4}
+%
+%
+% indicate how much space is left?
+%
+% vertical arrows
+%
+%
+% #6
+%
+ \yb=\yp
+ \la=\yp
+ \advance\la by -\vofset
+ \pyl{\xb}{\marginref}{\twidth}{1}{2}
+ \vdpyl{\xb}{\yp}{\la}{\ye}{6}
+%
+% #7
+%
+ \pyl{\xb}{\marginref}{\twidth}{1}{8}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\tmargin}{\ye}{7}
+%
+% #8
+%
+ \pyl{\xb}{\marginref}{\twidth}{1}{4}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\hheight}{\ye}{8}
+%
+% #9
+%
+ \pyl{\xb}{\marginref}{\twidth}{3}{8}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\hsep}{\ye}{9}
+%
+% #10
+%
+ \pyl{\xb}{\marginref}{\twidth}{3}{4}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\theight}{\ye}{10}
+%
+% #11
+%
+ \pyl{\xb}{\marginref}{\twidth}{1}{8}
+ \yb=\ye
+ \vdpyl{\xb}{\yb}{\fskip}{\ye}{11}
+%
+% #12
+%
+ \pyl{\xb}{\marginref}{\twidth}{1}{4}
+ \yb=\ye
+ \advance\yb by \fheight
+ \vdpyl{\xb}{\yb}{\fheight}{\ye}{12}
+\end{picture}
+\newline
+%
+{\tt
+\begin{tabular}{l@{\hspace{20pt}}l}
+1\ \ \bs{}hoffset = \number\hofref pt&
+2\ \ \bs{}evensidemargin = \number\emargin pt\\
+3\ \ \bs{}textwidth = \number\twidth pt&
+4\ \ \bs{}marginparsep = \number\mparsep pt\\
+5\ \ \bs{}marginparwidth = \number\mparwidth pt&
+6\ \ \bs{}voffset = \number\vofref pt\\
+7\ \ \bs{}topmargin = \number\tmargin pt&
+8\ \ \bs{}headheight = \number\hheight pt\\
+9\ \ \bs{}headsep = \number\hsep pt&
+10\ \bs{}textheight = \number\theight pt\\
+11\ \bs{}footskip = \number\fskip pt&
+12\ \bs{}footheight = \number\fheight\\
+\multicolumn{2}{c}{72pt $\approx$ 1 inch}
+\end{tabular}
+ }
+\else
+\fi
+\typeout{Even ook klaar}
+ }
+
+
diff --git a/info/digests/texhax/txh/mkdiffs.txh b/info/digests/texhax/txh/mkdiffs.txh
new file mode 100644
index 0000000000..c82f8fd590
--- /dev/null
+++ b/info/digests/texhax/txh/mkdiffs.txh
@@ -0,0 +1,924 @@
+11-Mar-88 14:35:25-PST,35785;000000000000
+Return-Path: <mackay@june.cs.washington.edu>
+Date: Fri, 11 Mar 88 14:35:06 PST
+From: mackay@june.cs.washington.edu (Pierre MacKay)
+Subject: LaTeX-3Jan_to_22Feb.diffs
+
+Here are the diffs for a set of new files which I got from Score just
+before TeXhax went on vacation.
+ Pierre A. MacKay
+ TUG Site Coordinator for
+ Unix-flavored TeX
+# This is a shell archive.
+# Remove everything above and including the cut line.
+# Then run the rest of the file through sh.
+#-----cut here-----cut here-----cut here-----cut here-----
+#!/bin/sh
+# shar: Shell Archiver
+# Run the following text with /bin/sh to create:
+# article.doc_diff
+# article.sty_diff
+# bk10.doc_diff
+# bk10.sty_diff
+# bk11.doc_diff
+# bk11.sty_diff
+# bk12.doc_diff
+# bk12.sty_diff
+# book.doc_diff
+# book.sty_diff
+# latex-bug.diff
+# latex.diff
+# letter.doc_diff
+# letter.sty_diff
+# rep10.doc_diff
+# rep10.sty_diff
+# rep11.doc_diff
+# rep11.sty_diff
+# rep12.doc_diff
+# rep12.sty_diff
+# report.doc_diff
+# This archive created: Fri Feb 26 15:13:51 1988
+cat << \SHAR_EOF > article.doc_diff
+1c1
+< % ARTICLE DOCUMENT STYLE -- Released 12 October 1987
+---
+> % ARTICLE DOCUMENT STYLE -- Released 5 February 1988
+3c3
+< % Copyright (C) 1987 by Leslie Lamport
+---
+> % Copyright (C) 1988 by Leslie Lamport
+5c5
+< \typeout{Document Style `article' <12 Oct 87>.}
+---
+> \typeout{Document Style `article' <5 Feb 88>.}
+341c341,343
+< #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+---
+> \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
+> \hskip -\leftskip %% 25 Jan 88 change to \numberline
+> #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+342a345
+>
+SHAR_EOF
+cat << \SHAR_EOF > article.sty_diff
+1c1
+< % article.sty 12-Oct-87
+---
+> % article.sty 5-Feb-88
+3c3
+< \typeout{Document Style `article' <12 Oct 87>.}
+---
+> \typeout{Document Style `article' <5 Feb 88>.}
+91c91,92
+< \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+---
+> \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+> \nobreak\hbox to\@pnumwidth{\hss #2}\par
+92a94
+>
+SHAR_EOF
+cat << \SHAR_EOF > bk10.doc_diff
+1c1
+< % BOOK DOCUMENT STYLE -- Released 22 Dec 87
+---
+> % BOOK DOCUMENT STYLE -- Released 19 Jan 88
+3c3
+< % Copyright (C) 1987 by Leslie Lamport
+---
+> % Copyright (C) 1988 by Leslie Lamport
+14,16d13
+< % \part:
+< % \huge\bf Part \thepart % THEN Print 'Part' and number
+< % ~~~~
+224,266c221
+< \def\part{\cleardoublepage % Starts new page.
+< \thispagestyle{plain} % Page style of part page is 'plain'
+< \if@twocolumn % IF two-column style
+< \onecolumn % THEN \onecolumn
+< \@tempswatrue % @tempswa := true
+< \else \@tempswafalse % ELSE @tempswa := false
+< \fi % FI
+< \hbox{}\vfil % Add fil glue to center title
+< \bgroup \centering % BEGIN centering
+< \secdef\@part\@spart}
+<
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \refstepcounter{part} % THEN step part counter
+< \addcontentsline{toc}{part}{\thepart % add toc line
+< \hspace{1em}#1}\else % ELSE add unnumbered line
+< \addcontentsline{toc}{part}{#1}\fi % FI
+< \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \huge\bf Part \thepart % THEN Print 'Part' and number
+< \par % in \huge bold.
+< \vskip 20pt \fi % Add space before title.
+< \Huge \bf % FI
+< #1\@endpart} % Print Title in \Huge bold.
+<
+<
+< % \@endpart finishes the part page
+< %
+< \def\@endpart{\par\egroup % END centering
+< \vfil\newpage % End page with 1fil glue.
+< \if@twoside % IF twoside printing
+< \hbox{} % THEN Produce totally blank page
+< \thispagestyle{empty}
+< \newpage
+< \fi % FI
+< \if@tempswa % IF @tempswa = true
+< \twocolumn % THEN \twocolumn
+< \fi} % FI
+<
+< \def\@spart#1{\Huge \bf % Print title in \huge boldface
+< #1\@endpart}
+<
+<
+---
+> % Definition of \part moved to book.doc 19 Jan 88
+SHAR_EOF
+cat << \SHAR_EOF > bk10.sty_diff
+1c1
+< % bk10.sty 22-Dec-87
+---
+> % bk10.sty 19-Jan-88
+55,69d54
+< \def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+< \@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+< \secdef\@part\@spart}
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+< \addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+< \addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+< \Huge \bf #1\@endpart}
+< \def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+< \thispagestyle{empty}
+< \newpage
+< \fi \if@tempswa \twocolumn \fi}
+< \def\@spart#1{\Huge \bf #1\@endpart}
+<
+SHAR_EOF
+cat << \SHAR_EOF > bk11.doc_diff
+1c1
+< % BOOK DOCUMENT STYLE -- Released 22 Dec 87
+---
+> % BOOK DOCUMENT STYLE -- Released 19 Jan 88
+3c3
+< % Copyright (C) 1987 by Leslie Lamport
+---
+> % Copyright (C) 1988 by Leslie Lamport
+14,16d13
+< % \part:
+< % \huge\bf Part \thepart % THEN Print 'Part' and number
+< % ~~~~
+219,261c216
+<
+< \def\part{\cleardoublepage % Starts new page.
+< \thispagestyle{plain} % Page style of part page is 'plain'
+< \if@twocolumn % IF two-column style
+< \onecolumn % THEN \onecolumn
+< \@tempswatrue % @tempswa := true
+< \else \@tempswafalse % ELSE @tempswa := false
+< \fi % FI
+< \hbox{}\vfil % Add fil glue to center title
+< \bgroup \centering % BEGIN centering
+< \secdef\@part\@spart}
+<
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \refstepcounter{part} % THEN step part counter
+< \addcontentsline{toc}{part}{\thepart % add toc line
+< \hspace{1em}#1}\else % ELSE add unnumbered line
+< \addcontentsline{toc}{part}{#1}\fi % FI
+< \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \huge\bf Part \thepart % THEN Print 'Part' and number
+< \par % in \huge bold.
+< \vskip 20pt \fi % Add space before title.
+< \Huge \bf % FI
+< #1\@endpart} % Print Title in \Huge bold.
+<
+<
+< % \@endpart finishes the part page
+< %
+< \def\@endpart{\par\egroup % END centering
+< \vfil\newpage % End page with 1fil glue.
+< \if@twoside % IF twoside printing
+< \hbox{} % THEN Produce totally blank page
+< \thispagestyle{empty}
+< \newpage
+< \fi % FI
+< \if@tempswa % IF @tempswa = true
+< \twocolumn % THEN \twocolumn
+< \fi} % FI
+<
+< \def\@spart#1{\Huge \bf % Print title in \huge boldface
+< #1\@endpart}
+<
+---
+> % Definition of \part moved to book.doc 19 Jan 88
+SHAR_EOF
+cat << \SHAR_EOF > bk11.sty_diff
+1c1
+< % bk11.sty 22-Dec-87
+---
+> % bk11.sty 19-Jan-88
+55,68d54
+< \def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+< \@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+< \secdef\@part\@spart}
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+< \addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+< \addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+< \Huge \bf #1\@endpart}
+< \def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+< \thispagestyle{empty}
+< \newpage
+< \fi \if@tempswa \twocolumn \fi}
+< \def\@spart#1{\Huge \bf #1\@endpart}
+SHAR_EOF
+cat << \SHAR_EOF > bk12.doc_diff
+1c1
+< % BOOK DOCUMENT STYLE -- Released 22 Dec 87
+---
+> % BOOK DOCUMENT STYLE -- Released 19 Jan 88
+3c3
+< % Copyright (C) 1987 by Leslie Lamport
+---
+> % Copyright (C) 1988 by Leslie Lamport
+14,16d13
+< % \part:
+< % \huge\bf Part \thepart % THEN Print 'Part' and number
+< % ~~~~
+222,261c219
+<
+< \def\part{\cleardoublepage % Starts new page.
+< \thispagestyle{plain} % Page style of part page is 'plain'
+< \if@twocolumn % IF two-column style
+< \onecolumn % THEN \onecolumn
+< \@tempswatrue % @tempswa := true
+< \else \@tempswafalse % ELSE @tempswa := false
+< \fi % FI
+< \hbox{}\vfil % Add fil glue to center title
+< \bgroup \centering % BEGIN centering
+< \secdef\@part\@spart}
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \refstepcounter{part} % THEN step part counter
+< \addcontentsline{toc}{part}{\thepart % add toc line
+< \hspace{1em}#1}\else % ELSE add unnumbered line
+< \addcontentsline{toc}{part}{#1}\fi % FI
+< \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \huge\bf Part \thepart % THEN Print 'Part' and number
+< \par % in \huge bold.
+< \vskip 20pt \fi % Add space before title.
+< \Huge \bf % FI
+< #1\@endpart} % Print Title in \Huge bold.
+<
+< % \@endpart finishes the part page
+< %
+< \def\@endpart{\par\egroup % END centering
+< \vfil\newpage % End page with 1fil glue.
+< \if@twoside % IF twoside printing
+< \hbox{} % THEN Produce totally blank page
+< \thispagestyle{empty}
+< \newpage
+< \fi % FI
+< \if@tempswa % IF @tempswa = true
+< \twocolumn % THEN \twocolumn
+< \fi} % FI
+<
+< \def\@spart#1{\Huge \bf % Print title in \huge boldface
+< #1\@endpart}
+---
+> % Definition of \part moved to book.doc 19 Jan 88
+SHAR_EOF
+cat << \SHAR_EOF > bk12.sty_diff
+1c1
+< % bk12.sty 22-Dec-87
+---
+> % bk12.sty 19-Jan-88
+55,67d54
+< \def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+< \@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+< \secdef\@part\@spart}
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+< \addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+< \addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+< \Huge \bf #1\@endpart}
+< \def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+< \thispagestyle{empty}
+< \newpage
+< \fi \if@tempswa \twocolumn \fi}
+< \def\@spart#1{\Huge \bf #1\@endpart}
+SHAR_EOF
+cat << \SHAR_EOF > book.doc_diff
+1c1
+< % BOOK DOCUMENT STYLE -- Released 12 October 1987
+---
+> % BOOK DOCUMENT STYLE -- Released 5 February 88
+3c3
+< % Copyright (C) 1987 by Leslie Lamport
+---
+> % Copyright (C) 1988 by Leslie Lamport
+5c5
+< \typeout{Document Style `book' <12 Oct 87>.}
+---
+> \typeout{Document Style `book' <5 Feb 88>.}
+46a47,49
+> % \part:
+> % \huge\bf Part \thepart % THEN Print 'Part' and number
+> % ~~~~
+254a258,260
+> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+> % PART %
+> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+255a262,306
+> \def\part{\cleardoublepage % Starts new page.
+> \thispagestyle{plain} % Page style of part page is 'plain'
+> \if@twocolumn % IF two-column style
+> \onecolumn % THEN \onecolumn
+> \@tempswatrue % @tempswa := true
+> \else \@tempswafalse % ELSE @tempswa := false
+> \fi % FI
+> \hbox{}\vfil % Add fil glue to center title
+> %% \bgroup \centering % BEGIN centering %% Removed 19 Jan 88
+> \secdef\@part\@spart}
+>
+>
+> \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+> \refstepcounter{part} % THEN step part counter
+> \addcontentsline{toc}{part}{\thepart % add toc line
+> \hspace{1em}#1}\else % ELSE add unnumbered line
+> \addcontentsline{toc}{part}{#1}\fi % FI
+> \markboth{}{}
+> {\centering % %% added 19 Jan 88
+> \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+> \huge\bf Part \thepart % THEN Print 'Part' and number
+> \par % in \huge bold.
+> \vskip 20pt \fi % Add space before title.
+> \Huge \bf % FI
+> #1\par}\@endpart} % Print Title in \Huge bold.
+>
+>
+> % \@endpart finishes the part page
+> %
+> \def\@endpart{\vfil\newpage % End page with 1fil glue.
+> \if@twoside % IF twoside printing
+> \hbox{} % THEN Produce totally blank page
+> \thispagestyle{empty}
+> \newpage
+> \fi % FI
+> \if@tempswa % IF @tempswa = true
+> \twocolumn % THEN \twocolumn
+> \fi} % FI
+>
+> \def\@spart#1{{\centering % %% added 19 Jan 88
+> \Huge \bf % Print title in \huge boldface
+> #1\par}\@endpart}
+>
+>
+>
+334c385,387
+< #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+---
+> \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
+> \hskip -\leftskip %% 25 Jan 88 change to \numberline
+> #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+336c389
+<
+---
+>
+SHAR_EOF
+cat << \SHAR_EOF > book.sty_diff
+1c1
+< % book.sty 12-Oct-87
+---
+> % book.sty 5-Feb-88
+3c3
+< \typeout{Document Style `book' <12 Oct 87>.}
+---
+> \typeout{Document Style `book' <5 Feb 88>.}
+73a74,86
+> \def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+> \@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \secdef\@part\@spart}
+>
+> \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+> \addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+> \addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+> {\centering \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par
+> \vskip 20pt \fi \Huge \bf #1\par}\@endpart}
+> \def\@endpart{\vfil\newpage \if@twoside \hbox{} \thispagestyle{empty}
+> \newpage
+> \fi \if@tempswa \twocolumn \fi}
+> \def\@spart#1{{\centering \Huge \bf #1\par}\@endpart}
+>
+95c108,109
+< \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+---
+> \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+> \nobreak\hbox to\@pnumwidth{\hss #2}\par
+SHAR_EOF
+cat << \SHAR_EOF > latex-bug.diff
+3,11c3,11
+< ADDENDUM.TEX 8 Jan 88 ARTICLE.DOC/STY 12 Oct 87 LATEX.INS 17 Jan 87
+< IDX.TEX 22 Jan 85 ART10.DOC/STY 22 Dec 87 LATEX.BUG 8 Jan 88
+< LABLST.TEX 5 Jan 85 ART11.DOC/STY 22 Dec 87 LOCAL.GID 24 Sep 85
+< LATEX.TEX 3 Jan 88 ART12.DOC/STY 22 Dec 87 LFONTS.AMR 6 May 86
+< LFONTS.TEX 11 Nov 86 BEZIER.DOC/STY 17 Dec 85
+< LOCAL.TEX 17 Jan 87 BOOK.DOC/STY 12 Oct 87
+< LPLAIN.TEX 24 Jul 87 BK10.DOC/STY 22 Dec 87
+< MAKEINDEX.TEX 17 Feb 87 BK11.DOC/STY 22 Dec 87
+< SAMPLE.TEX 9 Apr 86 BK12.DOC/STY 22 Dec 87
+---
+> ADDENDUM.TEX 8 Jan 88 ARTICLE.DOC/STY 5 Feb 88 LATEX.BUG 22 Feb 88
+> IDX.TEX 22 Jan 85 ART10.DOC/STY 22 Dec 87 LATEX.DIF 22 Feb 88
+> LABLST.TEX 5 Jan 85 ART11.DOC/STY 22 Dec 87 LATEX.INS 15 Jan 88
+> LATEX.TEX 25 Jan 88 ART12.DOC/STY 22 Dec 87 LOCAL.GID 24 Sep 85
+> LFONTS.TEX 11 Nov 86 BEZIER.DOC/STY 17 Dec 85 LFONTS.AMR 6 May 86
+> LOCAL.TEX 12 Feb 88 BOOK.DOC/STY 5 Feb 88
+> LPLAIN.TEX 24 Jul 87 BK10.DOC/STY 19 Jan 88
+> MAKEINDEX.TEX 17 Feb 87 BK11.DOC/STY 19 Jan 88
+> SAMPLE.TEX 9 Apr 86 BK12.DOC/STY 19 Jan 88
+14c14
+< SMALL.TEX 5 Jul 85 LETTER.DOC/STY 22 Dec 87
+---
+> SMALL.TEX 5 Jul 85 LETTER.DOC/STY 20 Jan 88
+19,23c19,23
+< REPORT.DOC/STY 12 Oct 87
+< REP10.DOC/STY 22 Dec 87
+< REP11.DOC/STY 22 Dec 87
+< REP12.DOC/STY 22 Dec 87
+< SHOWIDX.DOC/STY 29 Oct 85
+---
+> REPORT.DOC/STY 5 Feb 88
+> REP10.DOC/STY 19 Jan 88
+> REP11.DOC/STY 19 Jan 88
+> REP12.DOC/STY 19 Jan 88
+> SHOWIDX.DOC/STY 22 Feb 88
+571a572,573
+> 124. The \frame command put an extra space after the box.
+> (Discovered by John Hershberger, corrected 14 Jan 88.)
+572a575,577
+> 125. \parskip wasn't restored in parboxes and footnotes, so it would
+> have the wrong value when a parbox or footnote appeared in a list
+> environment. (Discovered by Dominik Wujastyk, corrected 20 Jan 88.)
+573a579,594
+> 126. The leaders were not properly aligned in multiple-line
+> table-of-contents entries. (Discovered by Gunther Hartmann, corrected
+> 25 Jan 88.)
+>
+> 127. Strange things can happen if a command like \footnotemark that
+> doesn't generate in-line text appears between a \paragraph or
+> \subparagraph command (or any sectioning command that produces a
+> heading that's part of the following paragraph) and the following text.
+> What happens is that TeX sees the \footnotemark command before it sees
+> the argument to the \{sub}paragraph command, which can lead to
+> incorrect numbering and who knows what else. Any attempted fix is
+> likely to break other things, so I will not try to fix this.
+> (Discovered by Ed Zalta and Emma Pease.)
+>
+>
+>
+708a730,741
+>
+> 39. The \label command did not work for cross-referencing parts.
+> (Reported by Paul Karger, corrected 19 January 1988.)
+>
+> 40. Changes made to \l@section command (article style) and \l@chapter
+> command (book, report styles) for making table of contents entries to
+> conform to 25 Jan 88 change to \numberline. (Reported by
+> Gunther Hartmann, corrected 5 February 88.)
+>
+> 41. \protect did not work in the argumment to an \index command
+> when the showidx style option is used. (Reported by Nelson Beebe.
+> Corrected 22 Feb 88.)
+SHAR_EOF
+cat << \SHAR_EOF > latex.diff
+1c1
+< % LATEX VERSION 2.09 <3 Jan 1988>
+---
+> % LATEX VERSION 2.09 <25 Jan 1988>
+4,5c4,5
+< \everyjob{\typeout{LaTeX Version 2.09 <3 Jan 1988>}}
+< \immediate\write10{LaTeX Version 2.09 <3 Jan 1988>}
+---
+> \everyjob{\typeout{LaTeX Version 2.09 <25 Jan 1988>}}
+> \immediate\write10{LaTeX Version 2.09 <25 Jan 1988>}
+3692a3693
+> % \parskip = 0pt %% added 20 Jan 87
+3819a3821
+> %% (Extra space removed 14 Jan 88)
+3822,3826c3824,3827
+< \vbox{\vskip-\@wholewidth
+< \hrule \@height\@wholewidth
+< \hbox{\vrule \@width\@wholewidth #1\vrule \@width \@wholewidth}
+< \hrule \@height \@wholewidth\vskip -\@halfwidth}
+< \hskip-\@wholewidth}}
+---
+> \vbox{\vskip-\@wholewidth
+> \hrule \@height\@wholewidth
+> \hbox{\vrule \@width\@wholewidth #1\vrule \@width\@wholewidth}\hrule
+> \@height \@wholewidth\vskip -\@halfwidth}\hskip-\@wholewidth}}
+3880c3881
+< \parindent\z@
+---
+> \parindent\z@ \parskip\z@
+6088c6089,6091
+< % \numberline command.
+---
+> % \numberline command.
+> % As of 25 Jan 88, this is also the amount of extra indentation
+> % added to second and later lines of a multiple line entry.
+6090a6094
+> %
+6102c6106
+< {\hangindent #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+---
+> {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+6106c6110
+< \@tempdima #3\relax
+---
+> \@tempdima #3\relax \advance\leftskip \@tempdima \hbox{}\hskip -\leftskip
+6109a6114
+>
+6111a6117,6119
+> %%%
+> %%% Changed 25 Jan 88 to use \leftskip instead of \hangindent so
+> %%% leaders of multiple-line contents entries would line up properly.
+6113d6120
+<
+6115,6116c6122,6124
+< % It puts NUMBER flushleft in a box of width \@tempdima and adds
+< % \@tempdima to the hanging indentation.
+---
+> % It puts NUMBER flushleft in a box of width \@tempdima
+> % (Before 25 Jan 88 change, it also added \@tempdima to the hanging
+> % indentation.)
+6118c6126
+< \def\numberline#1{\advance\hangindent\@tempdima \hbox to\@tempdima{#1\hfil}}
+---
+> \def\numberline#1{\hbox to\@tempdima{#1\hfil}}
+6121d6128
+<
+6577c6584
+< { \end@float %%%% BRACE MATCHING} %% by 15 Dec 87 change
+---
+> % { \end@float %%%% BRACE MATCHING} %% by 15 Dec 87 change
+SHAR_EOF
+cat << \SHAR_EOF > letter.doc_diff
+1c1
+< % LETTER DOCUMENT STYLE -- Released 22 Dec 87
+---
+> % LETTER DOCUMENT STYLE -- Released 20 Jan 88
+5c5
+< \typeout{Document Style `letter' <22 Dec 87>.}
+---
+> \typeout{Document Style `letter' <20 Jan 88>.}
+368c368
+< \long\def\closing#1{\par\nobreak\vspace{\parskip}
+---
+> \long\def\closing#1{\par\nobreak\vspace{\parskip}
+374c374
+< \ignorespaces #1\\[6\parskip]
+---
+> \ignorespaces #1\\[6\medskipamount]%% changed 20 Jan 88
+SHAR_EOF
+cat << \SHAR_EOF > letter.sty_diff
+1c1
+< % letter.sty 22-Dec-87
+---
+> % letter.sty 20-Jan-88
+3c3
+< \typeout{Document Style `letter' <22 Dec 87>.}
+---
+> \typeout{Document Style `letter' <20 Jan 88>.}
+128c128
+< \long\def\closing#1{\par\nobreak\vspace{\parskip}
+---
+> \long\def\closing#1{\par\nobreak\vspace{\parskip}
+134,135c134
+< \ignorespaces #1\\[6\parskip]
+< \ifx\@empty\fromsig
+---
+> \ignorespaces #1\\[6\medskipamount] \ifx\@empty\fromsig
+SHAR_EOF
+cat << \SHAR_EOF > rep10.doc_diff
+1c1
+< % REPORT DOCUMENT STYLE -- Released 22 Dec 87
+---
+> % REPORT DOCUMENT STYLE -- Released 19 Jan 88
+3c3
+< % Copyright (C) 1986 by Leslie Lamport
+---
+> % Copyright (C) 1988 by Leslie Lamport
+14,16d13
+< % \part:
+< % \huge\bf Part \thepart % THEN Print 'Part' and number
+< % ~~~~
+227,269c224
+< \def\part{\cleardoublepage % Starts new page.
+< \thispagestyle{plain} % Page style of part page is 'plain'
+< \if@twocolumn % IF two-column style
+< \onecolumn % THEN \onecolumn
+< \@tempswatrue % @tempswa := true
+< \else \@tempswafalse % ELSE @tempswa := false
+< \fi % FI
+< \hbox{}\vfil % Add fil glue to center title
+< \bgroup \centering % BEGIN centering
+< \secdef\@part\@spart}
+<
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \refstepcounter{part} % THEN step part counter
+< \addcontentsline{toc}{part}{\thepart % add toc line
+< \hspace{1em}#1}\else % ELSE add unnumbered line
+< \addcontentsline{toc}{part}{#1}\fi % FI
+< \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \huge\bf Part \thepart % THEN Print 'Part' and number
+< \par % in \huge bold.
+< \vskip 20pt \fi % Add space before title.
+< \Huge \bf % FI
+< #1\@endpart} % Print Title in \Huge bold.
+<
+<
+< % \@endpart finishes the part page
+< %
+< \def\@endpart{\par\egroup % END centering
+< \vfil\newpage % End page with 1fil glue.
+< \if@twoside % IF twoside printing
+< \hbox{} % THEN Produce totally blank page
+< \thispagestyle{empty}
+< \newpage
+< \fi % FI
+< \if@tempswa % IF @tempswa = true
+< \twocolumn % THEN \twocolumn
+< \fi} % FI
+<
+< \def\@spart#1{\Huge \bf % Print title in \huge boldface
+< #1\@endpart}
+<
+<
+---
+> % Definition of \part moved to report.doc on 19 Jan 88
+SHAR_EOF
+cat << \SHAR_EOF > rep10.sty_diff
+1c1
+< % rep10.sty 22-Dec-87
+---
+> % rep10.sty 19-Jan-88
+58,72d57
+< \def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+< \@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+< \secdef\@part\@spart}
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+< \addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+< \addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+< \Huge \bf #1\@endpart}
+< \def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+< \thispagestyle{empty}
+< \newpage
+< \fi \if@tempswa \twocolumn \fi}
+< \def\@spart#1{\Huge \bf #1\@endpart}
+<
+SHAR_EOF
+cat << \SHAR_EOF > rep11.doc_diff
+1c1
+< % REPORT DOCUMENT STYLE -- Released 22 Dec 87
+---
+> % REPORT DOCUMENT STYLE -- Released 19 Jan 88
+3c3
+< % Copyright (C) 1987 by Leslie Lamport
+---
+> % Copyright (C) 1988 by Leslie Lamport
+14,16d13
+< % \part:
+< % \huge\bf Part \thepart % THEN Print 'Part' and number
+< % ~~~~
+226,267c223
+< \def\part{\cleardoublepage % Starts new page.
+< \thispagestyle{plain} % Page style of part page is 'plain'
+< \if@twocolumn % IF two-column style
+< \onecolumn % THEN \onecolumn
+< \@tempswatrue % @tempswa := true
+< \else \@tempswafalse % ELSE @tempswa := false
+< \fi % FI
+< \hbox{}\vfil % Add fil glue to center title
+< \bgroup \centering % BEGIN centering
+< \secdef\@part\@spart}
+<
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \refstepcounter{part} % THEN step part counter
+< \addcontentsline{toc}{part}{\thepart % add toc line
+< \hspace{1em}#1}\else % ELSE add unnumbered line
+< \addcontentsline{toc}{part}{#1}\fi % FI
+< \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \huge\bf Part \thepart % THEN Print 'Part' and number
+< \par % in \huge bold.
+< \vskip 20pt \fi % Add space before title.
+< \Huge \bf % FI
+< #1\@endpart} % Print Title in \Huge bold.
+<
+<
+< % \@endpart finishes the part page
+< %
+< \def\@endpart{\par\egroup % END centering
+< \vfil\newpage % End page with 1fil glue.
+< \if@twoside % IF twoside printing
+< \hbox{} % THEN Produce totally blank page
+< \thispagestyle{empty}
+< \newpage
+< \fi % FI
+< \if@tempswa % IF @tempswa = true
+< \twocolumn % THEN \twocolumn
+< \fi} % FI
+<
+< \def\@spart#1{\Huge \bf % Print title in \huge boldface
+< #1\@endpart}
+<
+---
+> % Definition of \part moved to report.doc 19 Jan 88
+SHAR_EOF
+cat << \SHAR_EOF > rep11.sty_diff
+1c1
+< % rep11.sty 22-Dec-87
+---
+> % rep11.sty 19-Jan-88
+58,71d57
+< \def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+< \@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+< \secdef\@part\@spart}
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+< \addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+< \addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+< \Huge \bf #1\@endpart}
+< \def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+< \thispagestyle{empty}
+< \newpage
+< \fi \if@tempswa \twocolumn \fi}
+< \def\@spart#1{\Huge \bf #1\@endpart}
+SHAR_EOF
+cat << \SHAR_EOF > rep12.doc_diff
+1c1
+< % REPORT DOCUMENT STYLE -- Released 22 Dec 87
+---
+> % REPORT DOCUMENT STYLE -- Released 19 Jan 88
+3c3
+< % Copyright (C) 1987 by Leslie Lamport
+---
+> % Copyright (C) 1988 by Leslie Lamport
+14,16d13
+< % \part:
+< % \huge\bf Part \thepart % THEN Print 'Part' and number
+< % ~~~~
+226,265c223
+<
+< \def\part{\cleardoublepage % Starts new page.
+< \thispagestyle{plain} % Page style of part page is 'plain'
+< \if@twocolumn % IF two-column style
+< \onecolumn % THEN \onecolumn
+< \@tempswatrue % @tempswa := true
+< \else \@tempswafalse % ELSE @tempswa := false
+< \fi % FI
+< \hbox{}\vfil % Add fil glue to center title
+< \bgroup \centering % BEGIN centering
+< \secdef\@part\@spart}
+<
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \refstepcounter{part} % THEN step part counter
+< \addcontentsline{toc}{part}{\thepart % add toc line
+< \hspace{1em}#1}\else % ELSE add unnumbered line
+< \addcontentsline{toc}{part}{#1}\fi % FI
+< \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+< \huge\bf Part \thepart % THEN Print 'Part' and number
+< \par % in \huge bold.
+< \vskip 20pt \fi % Add space before title.
+< \Huge \bf % FI
+< #1\@endpart} % Print Title in \Huge bold.
+<
+< % \@endpart finishes the part page
+< %
+< \def\@endpart{\par\egroup % END centering
+< \vfil\newpage % End page with 1fil glue.
+< \if@twoside % IF twoside printing
+< \hbox{} % THEN Produce totally blank page
+< \thispagestyle{empty}
+< \newpage
+< \fi % FI
+< \if@tempswa % IF @tempswa = true
+< \twocolumn % THEN \twocolumn
+< \fi} % FI
+<
+< \def\@spart#1{\Huge \bf % Print title in \huge boldface
+< #1\@endpart}
+---
+> % Definition of \part moved to report.doc 19 Jan 88
+SHAR_EOF
+cat << \SHAR_EOF > rep12.sty_diff
+1c1
+< % rep12.sty 22-Dec-87
+---
+> % rep12.sty 19-Jan-88
+58,70d57
+< \def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+< \@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+< \secdef\@part\@spart}
+< \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+< \addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+< \addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+< \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+< \Huge \bf #1\@endpart}
+< \def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+< \thispagestyle{empty}
+< \newpage
+< \fi \if@tempswa \twocolumn \fi}
+< \def\@spart#1{\Huge \bf #1\@endpart}
+SHAR_EOF
+cat << \SHAR_EOF > report.doc_diff
+1c1
+< % REPORT DOCUMENT STYLE -- Released 12 October 1987
+---
+> % REPORT DOCUMENT STYLE -- Released 5 February 1988
+5c5
+< \typeout{Document Style `report' <12 Oct 87>.}
+---
+> \typeout{Document Style `report' <5 Feb 88>.}
+46a47,49
+> % \part:
+> % \huge\bf Part \thepart % THEN Print 'Part' and number
+> % ~~~~
+255a259,261
+> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+> % PART %
+> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+256a263,307
+> \def\part{\cleardoublepage % Starts new page.
+> \thispagestyle{plain} % Page style of part page is 'plain'
+> \if@twocolumn % IF two-column style
+> \onecolumn % THEN \onecolumn
+> \@tempswatrue % @tempswa := true
+> \else \@tempswafalse % ELSE @tempswa := false
+> \fi % FI
+> \hbox{}\vfil % Add fil glue to center title
+> %% \bgroup \centering % BEGIN centering %% Removed 19 Jan 88
+> \secdef\@part\@spart}
+>
+>
+> \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+> \refstepcounter{part} % THEN step part counter
+> \addcontentsline{toc}{part}{\thepart % add toc line
+> \hspace{1em}#1}\else % ELSE add unnumbered line
+> \addcontentsline{toc}{part}{#1}\fi % FI
+> \markboth{}{}
+> {\centering % %% added 19 Jan 88
+> \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+> \huge\bf Part \thepart % THEN Print 'Part' and number
+> \par % in \huge bold.
+> \vskip 20pt \fi % Add space before title.
+> \Huge \bf % FI
+> #1\par}\@endpart} % Print Title in \Huge bold.
+>
+>
+> % \@endpart finishes the part page
+> %
+> \def\@endpart{\vfil\newpage % End page with 1fil glue.
+> \if@twoside % IF twoside printing
+> \hbox{} % THEN Produce totally blank page
+> \thispagestyle{empty}
+> \newpage
+> \fi % FI
+> \if@tempswa % IF @tempswa = true
+> \twocolumn % THEN \twocolumn
+> \fi} % FI
+>
+> \def\@spart#1{{\centering % %% added 19 Jan 88
+> \Huge \bf % Print title in \huge boldface
+> #1\par}\@endpart}
+>
+>
+>
+335c386,388
+< #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+---
+> \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
+> \hskip -\leftskip %% 25 Jan 88 change to \numberline
+> #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+SHAR_EOF
+# End of shell archive
+exit 0
+
+-------
+
diff --git a/info/digests/texhax/txh/muller.txh b/info/digests/texhax/txh/muller.txh
new file mode 100644
index 0000000000..63419b1f40
--- /dev/null
+++ b/info/digests/texhax/txh/muller.txh
@@ -0,0 +1,373 @@
+Date: Tue 6 Jan 87 17:39:42-PST
+From: Eric Muller <EM@Score.Stanford.EDU>
+To: texhax@Score.Stanford.EDU
+Subject: How to cite all the keys of a bibtex database.
+
+
+I have made a simple modification to Bibtex so that it can behave as
+if all the entries of a (set of) bibliography file had been cited.
+Namely, I have added a ".aux" file command, "\citeall{}" which is
+equivalent to the list all "\citation{xxx}" commands where xxx is
+replaced by the cite-key of each entry.
+
+In conjunction with a bst-format that produces "\nocite{xxx}" as the
+bibliographic entry, where xxx is the cite-key of the entry (instead
+of the normal LaTeX commands to format the entry) and a ".aux" file of
+the form :
+
+\relax
+\bibdata{cs} % the name of the .bib file
+\citeall{} % to get all the entries of it
+\bibstyle{cite-all} % to produce a \nocite for each entry
+
+what you get after processing by Bibtex is a list of all the "\nocite"
+commands in the ".bbl" file, which you can then \input where you want.
+
+I also have a "author-index.bst" format that will produce a list of
+"\index" commands, one for each author in each entry, the text of the
+index entry being the author name and the "page number" replaced by
+the cite-key of the entry.
+
+You can also use a standard format in the "\bibstyle". The reason for
+the two step process (with the cite-all format) is linked to the
+memory allocation scheme of Bibtex I did not want to change too much.
+That is, if the format you want to use utilizes less than a certain number
+of fields in the entries (if think it is 20) then everything is fine;
+otherwise use the two step process.
+
+The rest of this message is the files mentioned above, starting with
+the change file for bibtex (I am running the modified version on a
+Tops-20 system, so that these may have to be merged with changes for
+your system), and the two format files. Files are separated by
+"@@@@@@@ <file name>" line. If you need any help, just send me mail.
+
+There may be a bug in these modifications : the last entry in the
+database may no appear; just add a dummy entry at the end (or find the
+bug !).
+
+Last detail : the modified bibtex will do whatever the old one does,
+it just has one additional command; the code for the modification is
+not really clean (especially on the Web side); you can forward this to
+anyone interested.
+
+Good luck,
+Eric Muller (em@score.stanford.edu)
+
+
+@@@@@@@ bibtex.ch
+@x
+@d n_aux_bibdata = 0 {\.{\\bibdata}}
+@d n_aux_bibstyle = 1 {\.{\\bibstyle}}
+@d n_aux_citation = 2 {\.{\\citation}}
+@d n_aux_input = 3 {\.{\\@@input}}
+@y
+@d n_aux_bibdata = 0 {\.{\\bibdata}}
+@d n_aux_bibstyle = 1 {\.{\\bibstyle}}
+@d n_aux_citation = 2 {\.{\\citation}}
+@d n_aux_input = 3 {\.{\\@@input}}
+@d n_aux_citeall = 4 {\.{\\citeall}}
+@z
+
+@x
+@<Pre-define certain strings@>=
+pre_define('\citation ',9,aux_command_ilk);
+ilk_info[pre_def_loc] := n_aux_citation;
+pre_define('\bibdata ',8,aux_command_ilk);
+ilk_info[pre_def_loc] := n_aux_bibdata;
+pre_define('\bibstyle ',9,aux_command_ilk);
+ilk_info[pre_def_loc] := n_aux_bibstyle;
+pre_define('\@@input ',7,aux_command_ilk);
+ilk_info[pre_def_loc] := n_aux_input;
+@y
+@<Pre-define certain strings@>=
+pre_define('\citation ',9,aux_command_ilk);
+ilk_info[pre_def_loc] := n_aux_citation;
+pre_define('\bibdata ',8,aux_command_ilk);
+ilk_info[pre_def_loc] := n_aux_bibdata;
+pre_define('\bibstyle ',9,aux_command_ilk);
+ilk_info[pre_def_loc] := n_aux_bibstyle;
+pre_define('\@@input ',7,aux_command_ilk);
+ilk_info[pre_def_loc] := n_aux_input;
+pre_define('\citeall ',8,aux_command_ilk);
+ilk_info[pre_def_loc] := n_aux_citeall;
+@z
+
+@x
+ case command_num of
+ n_aux_bibdata : aux_bib_data_command;
+ n_aux_bibstyle : aux_bib_style_command;
+ n_aux_citation : aux_citation_command;
+ n_aux_input : aux_input_command;
+@y
+ case command_num of
+ n_aux_bibdata : aux_bib_data_command;
+ n_aux_bibstyle : aux_bib_style_command;
+ n_aux_citation : aux_citation_command;
+ n_aux_input : aux_input_command;
+ n_aux_citeall : aux_citeall_command;
+@z
+
+@x
+procedure aux_citation_command;
+label exit;
+begin
+@y
+procedure aux_citation_command;
+label exit;
+begin
+if citeall_seen then aux_err ('illegal, \citation after a \citeall');
+@z
+
+@x
+That's it for processing \.{.aux} commands, except for finishing the
+procedural gymnastics.
+
+@<Procedures and functions for the reading and processing of input files@>=
+@<Scan for and process an \.{.aux} command@>
+@y
+That's it for processing \.{.aux} commands, except for finishing the
+procedural gymnastics.
+
+@<Procedures and functions for the reading and processing of input files@>=
+@<Procedure for processing the citeall command@>
+@<Scan for and process an \.{.aux} command@>
+@z
+
+@x
+num_cites := cite_ptr; {record the number of distinct cite keys}
+num_bib_files := bib_ptr; {and the number of \.{.bib} files}
+if (not citation_seen) then
+ aux_end_err ('I found no \citation commands')
+ else if (num_cites = 0) then
+ aux_end_err ('I found no \cite keys');
+@y
+if citeall_seen then num_cites := max_cites else num_cites := cite_ptr;
+num_bib_files := bib_ptr; {and the number of \.{.bib} files}
+if (not citeall_seen) and (not citation_seen) then
+ aux_end_err ('I found no \citeall nor \citation commands')
+else if (citation_seen) and (num_cites = 0) then
+ aux_end_err ('I found no \cite keys');
+@z
+
+@x
+ trace_pr_ln ('finished reading the database file(s)');
+ ecart@/
+@<Check for missing entries@>;
+@y
+ trace_pr_ln ('finished reading the database file(s)');
+ ecart@/
+if citeall_seen then
+ num_cites := real_num_cites
+else begin
+ @<Check for missing entries@>; end;
+@z
+
+@x
+@<Check for a database key of interest@>=
+ trace
+ trace_pr_token;
+ trace_pr_ln (' is a database key');
+ ecart@/
+tmp_ptr := buf_ptr1;
+while (tmp_ptr < buf_ptr2) do
+ begin
+ sv_buf2[tmp_ptr] := buffer[tmp_ptr];
+ incr(tmp_ptr);
+ end;
+lower_case (sv_buf2, buf_ptr1, token_len); {convert to `canonical' form}
+lc_cite_loc := str_lookup(sv_buf2,buf_ptr1,token_len,lc_cite_ilk,dont_insert);
+if (not hash_found) then
+ store_entry := false {no such cite key read on |cite_list|}
+ else
+ begin
+ store_entry := true;
+ @<Make sure this entry is ok before proceeding@>;
+ end;
+@y
+@<Check for a database key of interest@>=
+ trace
+ trace_pr_token;
+ trace_pr_ln (' is a database key');
+ ecart@/
+tmp_ptr := buf_ptr1;
+while (tmp_ptr < buf_ptr2) do
+ begin
+ sv_buf2[tmp_ptr] := buffer[tmp_ptr];
+ incr(tmp_ptr);
+ end;
+lower_case (sv_buf2, buf_ptr1, token_len); {convert to `canonical' form}
+lc_cite_loc := str_lookup(sv_buf2,buf_ptr1,token_len,lc_cite_ilk,dont_insert);
+
+if citeall_seen then begin
+ if not hash_found then begin
+ lc_cite_loc := str_lookup(sv_buf2,buf_ptr1,
+ token_len,lc_cite_ilk,do_insert);
+ trace
+ trace_pr_newline;
+ ecart@/
+ if (real_num_cites = max_cites) then
+ overflow('number of \cite keys ',max_cites);
+ cite_loc := str_lookup(buffer,buf_ptr1,token_len,cite_ilk,do_insert);
+ if (hash_found) then
+ aux_err ('this can''t happen---cite hash error');
+ cite_list[real_num_cites] := hash_text[cite_loc];
+ ilk_info[cite_loc] := real_num_cites;
+ ilk_info[lc_cite_loc] := real_num_cites;
+ incr(real_num_cites); end;
+ store_entry := true;
+ @<Make sure this entry is ok before proceeding@>; end
+
+else
+ if (not hash_found) then
+ store_entry := false {no such cite key read on |cite_list|}
+ else begin
+ store_entry := true;
+ @<Make sure this entry is ok before proceeding@>; end;
+@z
+
+@x
+@* System-dependent changes.
+@^system dependencies@>
+This section should be replaced, if necessary, by changes to the program
+that are necessary to make \BibTeX\ work at a particular installation.
+It is usually best to design your change file so that all changes to
+previous sections preserve the section numbering; then everybody's version
+will be consistent with the printed program. More extensive changes,
+which introduce new sections, can be inserted here; then only the index
+itself will get a new section number.
+@y
+@ Here are the new modules for the citation of all entries.
+We need a global variable to remember that we must cite all entries,
+and another to count the real number of entries :
+
+@<Globals in the outer block@>=
+citeall_seen : boolean;
+real_num_cites : cite_number;
+
+@ Of course, this needs some initialization.
+
+@<Set initial values of key variables@>=
+citeall_seen := false;
+real_num_cites := 0;
+
+@ Currently, we do not process arguments of the \.{\\citeall} command, but
+skip over them. However, the \.{\{} and \.{\}} must be there.
+
+@<Procedure for processing the citeall command@>=
+procedure aux_citeall_command;
+label exit;
+begin
+if citeall_seen then aux_err ('illegal, another \citeall command');
+if citation_seen then aux_err ('illegal, \citall command after some \citation command');
+
+citeall_seen := true;
+incr(buf_ptr2);
+if (not scan1 (right_brace)) then
+ aux_err ('no "',xchr[right_brace],'" for \citeall command');
+if (last > buf_ptr2 + 1) then
+ aux_err ('stuff after "', xchr[right_brace], '" for \citeall command');
+exit: end;
+
+
+@* System-dependent changes.
+@^system dependencies@>
+This section should be replaced, if necessary, by changes to the program
+that are necessary to make \BibTeX\ work at a particular installation.
+It is usually best to design your change file so that all changes to
+previous sections preserve the section numbering; then everybody's version
+will be consistent with the printed program. More extensive changes,
+which introduce new sections, can be inserted here; then only the index
+itself will get a new section number.
+@z
+
+@@@@@@@ cite-all.bst
+ENTRY
+ {none}
+ {}
+ {}
+
+FUNCTION {default.type}
+{ newline$
+ "\nocite{" write$
+ cite$ write$
+ "}" write$
+}
+
+FUNCTION {article} { default.type }
+FUNCTION {book} { default.type }
+FUNCTION {booklet} { default.type }
+FUNCTION {inbook} { default.type }
+FUNCTION {incollection} { default.type }
+FUNCTION {inproceedings} { default.type }
+FUNCTION {conference} { default.type }
+FUNCTION {manual} { default.type }
+FUNCTION {mastersthesis} { default.type }
+FUNCTION {misc} { default.type }
+FUNCTION {phdthesis} { default.type }
+FUNCTION {proceedings} { default.type }
+FUNCTION {techreport} { default.type }
+FUNCTION {unpublished} { default.type }
+
+READ
+
+ITERATE {call.type$}
+
+@@@@@@@ author-index.bst
+ENTRY
+ { author
+ editor
+ }
+ {}
+ {label}
+
+
+STRINGS { s t }
+
+INTEGERS { nameptr namesleft numnames }
+
+
+FUNCTION {format.names}
+{ 's swap$ :=
+ 'nameptr #1 :=
+ 'numnames s num.names$ :=
+ 'namesleft numnames :=
+ { namesleft #0 > }
+ {
+ "\index{" write$
+ s nameptr "{vv~}{ll}{ jj}{, ff}" format.name$ write$
+ "}{\cite{" write$ cite$ write$ "}}" write$ newline$
+ 'nameptr nameptr #1 + :=
+ 'namesleft namesleft #1 - :=
+ }
+ while$
+}
+
+FUNCTION {default.type}
+ { author missing$
+ { editor missing$
+ { skip$ }
+ { editor format.names }
+ if$ }
+ { author format.names }
+ if$ }
+
+FUNCTION {article} { default.type }
+FUNCTION {book} { default.type }
+FUNCTION {booklet} { default.type }
+FUNCTION {inbook} { default.type }
+FUNCTION {incollection} { default.type }
+FUNCTION {inproceedings} { default.type }
+FUNCTION {conference} { default.type }
+FUNCTION {manual} { default.type }
+FUNCTION {mastersthesis} { default.type }
+FUNCTION {misc} { default.type }
+FUNCTION {phdthesis} { default.type }
+FUNCTION {proceedings} { default.type }
+FUNCTION {techreport} { default.type }
+FUNCTION {unpublished} { default.type }
+
+READ
+
+ITERATE {call.type$}
+
+-------
diff --git a/info/digests/texhax/txh/multihyph.txh b/info/digests/texhax/txh/multihyph.txh
new file mode 100644
index 0000000000..a1ecafef6f
--- /dev/null
+++ b/info/digests/texhax/txh/multihyph.txh
@@ -0,0 +1,529 @@
+From: Antti Louko <alo@earn.fingate>
+To: spqr@uk.ac.soton.cm
+In-Reply-To:
+ Sebastian Rahtz's message of Wed, 20 Jul 88 17:43:37 GMT <88072017
+Subject: multiple hyphenations
+Resent-Date: Fri, 22 Jul 88 15:51:16 GMT
+Resent-From: spqr@uk.ac.soton.cm
+Resent-To: abbottp@uk.ac.aston.mail
+
+I have modified TeX to handle multiple hyphenation languages. This is
+done with integer parameter \patternsnum, which selects the pattern
+set currently used. The TeX version I modified is the web-to-c
+version. It should work with most UNIX-machines.
+
+For example:
+
+% tex
+This is TeX, C Version 2.9 (preloaded format=plain 88.7.5)
+**\relax
+
+*\patternsnum=0 % Well, this is default (English)
+
+*\showhyphens{hyphenation}
+
+Underfull \hbox (badness 10000) detected at line 0
+[] \tenrm hy-phen-ation
+
+*\showhyphens{tavutus} % tavutus = hyphenation in Finnish
+
+Underfull \hbox (badness 10000) detected at line 0
+[] \tenrm tavu-tus
+
+*\patternsnum=1 % Finnish
+
+*\showhyphens{hyphenation}
+
+Underfull \hbox (badness 10000) detected at line 0
+[] \tenrm hyp-he-na-tion
+
+*\showhyphens{tavutus}
+
+Underfull \hbox (badness 10000) detected at line 0
+[] \tenrm ta-vu-tus
+
+*\bye
+(see the transcript file for additional information)
+No pages of output.
+Transcript written on texput.log.
+%
+
+You can see how the hyphenation changes. \patternsnum is used also
+with the \patterns primitive, when TeX reads all the patterns. This is
+our /usr/lib/tex/macros/hyphen.tex file:
+
+\patternsnum=0
+\input enghyphen % English hyphenation patterns (the original hyphen.tex)
+\patternsnum=1
+\input fh % Finnish hyphenation patterns
+\patternsnum=0 % Reset to the default
+
+If \patternsnum <> 0 accents, hyphenation algorithm sees accented
+characters as pairs: \"a shows as ~~?a etc. This is useful with
+many languages.
+
+\patternsnum can be used in an environment where many languages are needed in
+the same document. \patternsnum affects when the whole paragraph is
+being hyphenated; that means that you should change change
+\patternsnum immediately after a \par.
+
+I sent diffs to ctex.ch file with this. If moderator wants to place it
+in a public place, please do so. It could be a good idea to send them
+to UNIX-TeX distributor, too.
+
+The diff is below. It passes the trip test.
+
+*** ctex.ch.orig Mon Jun 20 15:29:23 1988
+--- ctex.ch Wed Jul 13 17:16:44 1988
+***************
+*** 12,17 ****
+--- 12,19 ----
+ % (1 /14/88) ETM Brought up to TeX 2.9
+ % (2 /20/88) PAM Revised format and module numbers
+ % (3 /1 /88) ETM Eliminated some unused variables and unnecesary tests
++ % (21.6.88) alo@santra Added Finnish hyphenation
++ % (5.7.88) alo@santra Added alternate hyphenation patterns capability
+
+ % NOTE: the module numbers in this change file refer to the published
+ % text in TeX, the Program, Volume B. 1986
+***************
+*** 19,25 ****
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % [0] WEAVE: only print changes
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+! @x Tell WEAVE to print only the changes: l.69
+ \def\?##1]{\hbox to 1in{\hfil##1.\ }}
+ }
+ @y
+--- 21,28 ----
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % [0] WEAVE: only print changes
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+! % Tell WEAVE to print only the changes:
+! @x l.69
+ \def\?##1]{\hbox to 1in{\hfil##1.\ }}
+ }
+ @y
+***************
+*** 193,198 ****
+--- 196,202 ----
+ at most |max_halfword|}
+ @!trie_size=8000; {space for hyphenation patterns; should be larger for
+ \.{INITEX} than it is in production versions of \TeX}
++ @!pat_num_max=1; {maximum number of hyphenation patterns -1}
+ @!dvi_buf_size=16384; {size of the output buffer; must be a multiple of 8}
+ @!file_name_size=1024; {file names shouldn't be longer than this}
+ @!pool_name='tex.pool';
+***************
+*** 837,842 ****
+--- 841,852 ----
+ if r>toint(p+1) then @<Allocate from the top of node |p| and |goto found|@>;
+ @z
+
++ @x l.3236
++ @!k:integer; {index into |mem|, |eqtb|, etc.}
++ @y
++ @!j,k:integer; {index into |mem|, |eqtb|, etc.}
++ @z
++
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % [11.165] fix the word "free" so that it doesn't conflict with the C routine
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+***************
+*** 923,928 ****
+--- 933,976 ----
+ end
+ @z
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ % Finnish hyphenation
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ @x l.4833
++ @d new_line_char_code=49 {character that prints as |print_ln|}
++ @d int_pars=50 {total number of integer parameters}
++ @y
++ @d new_line_char_code=49 {character that prints as |print_ln|}
++ @d pat_num_code=50 {}
++ @d int_pars=51 {total number of integer parameters}
++ @z
++
++ @x l.4891
++ @d new_line_char==int_par(new_line_char_code)
++ @y
++ @d new_line_char==int_par(new_line_char_code)
++ @d pat_num==int_par(pat_num_code)
++ @z
++
++ @x l.4950
++ new_line_char_code:print_esc("newlinechar");
++ @y
++ new_line_char_code:print_esc("newlinechar");
++ pat_num_code:print_esc("patternsnum");
++ @z
++
++ @x l.5059
++ primitive("newlinechar",assign_int,int_base+new_line_char_code);@/
++ @!@:new_line_char_}{\.{\\newlinechar} primitive@>
++ @y
++ primitive("newlinechar",assign_int,int_base+new_line_char_code);@/
++ @!@:new_line_char_}{\.{\\newlinechar} primitive@>
++ primitive("patternsnum",assign_int,int_base+pat_num_code);@/
++ @!@:pat_num_}{\.{\\pat_num} primitive@>
++ @z
++
++ %% End of Finnish
++
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % [17.241] fix_date_and_time
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ @x l.5079
+***************
+*** 1148,1154 ****
+ make_name_string:=make_string;
+ end;
+
+! {The X_make_name_string functions are changed to macros in C}
+ @z
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+--- 1196,1202 ----
+ make_name_string:=make_string;
+ end;
+
+! {The |X_make_name_string| functions are changed to macros in C}
+ @z
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+***************
+*** 1259,1264 ****
+--- 1307,1449 ----
+ @z
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ % Changes for Finnish hyphenation
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++
++ @x l.16983
++ @!hu:array[1..63] of ASCII_code; {like |hc|, before conversion to lowercase}
++ @!hyf_char:integer; {hyphen character of the relevant font}
++ @y
++ @!hu:array[1..63] of ASCII_code; {like |hc|, before conversion to lowercase}
++ @!hyf_char:integer; {hyphen character of the relevant font}
++ @!hacc:array[1..63] of pointer;
++ @z
++
++ @x l.16990
++ @!c:0..255; {character being considered for hyphenation}
++ @y
++ @!c:0..255; {character being considered for hyphenation}
++ @!s2,s3:pointer;
++ @z
++
++ @x l.16998
++ begin @<Skip to node |ha|, or |goto done1| if no hyphenation
++ @y
++ begin if ((pat_num>pat_num_max)or(pat_num<0)) then pat_num:=0;
++ @<Skip to node |ha|, or |goto done1| if no hyphenation
++ @z
++
++ @x l.17002
++ at least five letters have been found, otherwise |goto done1|@>;
++ hyphenate;
++ end;
++ done1: end
++ @y
++ at least five letters have been found, otherwise |goto done1|@>;
++ hyphenate;
++ end;
++ done1: while hn>0 do begin if hacc[hn]<>null then
++ flush_node_list(hacc[hn]); decr(hn); end;
++ end
++ @z
++
++ @x l.17028
++ else if (type(s)=kern_node)and(subtype(s)=normal) then c:=128
++ @y
++ else if (type(s)=kern_node)and(subtype(s)=normal) then c:=128
++ else if (type(s)=kern_node)and(subtype(s)=acc_kern)and(pat_num<>0) then
++ begin s2:=link(s);
++ if is_char_node(s2) then
++ begin c:=qo(character(s2)); hf:=font(s2);
++ end
++ else goto done1
++ end
++ @z
++
++ @x l.17036
++ done2: hyf_char:=hyphen_char[hf];
++ if hyf_char<0 then goto done1;
++ if hyf_char>255 then goto done1;
++ @y
++ done2: hyf_char:=hyphen_char[hf];
++ if hyf_char<0 then goto done1;
++ if hyf_char>255 then goto done1;
++ for j:=1 to 63 do hacc[j]:=null;
++ @z
++
++ @x l.17053
++ @<Move the characters of a ligature node to |hu| and |hc|;
++ but |goto done3| if they are not all letters@>
++ @y
++ @<Move the characters of a ligature node to |hu| and |hc|;
++ but |goto done3| if they are not all letters@>
++ else if (type(s)=kern_node)and(subtype(s)=acc_kern)and(pat_num<>0) then
++ begin
++ s3:=link(s);
++ link(s):=null;
++ hacc[hn+1]:=copy_node_list(s);
++ link(s):=s3;
++ end
++ @z
++
++ @x l.17199
++ @ @<Look for a ligature or kern between |d| and...@>=
++ if j=n then goto done;
++ @y
++ @ @<Look for a ligature or kern between |d| and...@>=
++ if j=n then goto done;
++ if hacc[j+1]<>null then goto done;
++ @z
++
++ @x l.17251
++ @<Reconstitute nodes for the hyphenated word...@>=
++ j:=0;
++ repeat l:=j; j:=reconstitute(j+1,hn);
++ @y
++ @<Reconstitute nodes for the hyphenated word...@>=
++ j:=0;
++ repeat l:=j;
++ if hacc[j+1]<>null then
++ begin link(s):=copy_node_list(hacc[j+1]);
++ s:=link(s);
++ end;
++ j:=reconstitute(j+1,hn);
++ @z
++
++ @x l.17385
++ @ @d trie_link(#)==trie[#].rh {``downward'' link in a trie}
++ @d trie_char(#)==trie[#].b1 {character matched at this trie location}
++ @d trie_op(#)==trie[#].b0 {program for hyphenation at this trie location}
++
++ @<Glob...@>=
++ @!trie:array[trie_pointer] of two_halves; {|trie_link|, |trie_char|, |trie_op|
++ @!hyf_distance:array[quarterword] of small_number; {position |k-j| of $n_j$}
++ @!hyf_num:array[quarterword] of small_number; {value of $n_j$}
++ @!hyf_next:array[quarterword] of quarterword; {continuation of this |trie_op|}
++ @y
++ @ @d trie==trie_arr[pat_num]
++ @d trie_link(#)==trie[#].rh {``downward'' link in a trie}
++ @d trie_char(#)==trie[#].b1 {character matched at this trie location}
++ @d trie_op(#)==trie[#].b0 {program for hyphenation at this trie location}
++ @d hyf_distance==hyf_distance_arr[pat_num]
++ @d hyf_num==hyf_num_arr[pat_num]
++ @d hyf_next==hyf_next_arr[pat_num]
++ @d trie_max==trie_max_arr[pat_num]
++
++ @<Glob...@>=
++ @!trie_arr:array[0..pat_num_max] of array[trie_pointer] of two_halves;
++ {|trie_link|, |trie_char|, |trie_op|}
++ @!hyf_distance_arr:array[0..pat_num_max] of array[quarterword] of small_number
++ {position |k-j| of $n_j$}
++ @!hyf_num_arr:array[0..pat_num_max] of array[quarterword] of small_number;
++ {value of $n_j$}
++ @!hyf_next_arr:array[0..pat_num_max] of array[quarterword] of quarterword;
++ {continuation of this |trie_op|}
++ @z
++
++ %% End of Finnish
++
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % [43.944] Fix a C casting/expression evaluation problem
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ @x l.17672
+***************
+*** 1278,1283 ****
+--- 1463,1496 ----
+ 2718*toint(trie_l[p])+3142*toint(trie_r[p])) mod trie_size;
+ @z
+
++ @x l.17774
++ begin for h:=0 to trie_op_hash_size do trie_op_hash[h]:=min_quarterword;
++ @y
++ begin if ((pat_num>pat_num_max)or(pat_num<0)) then pat_num:=0;
++ for h:=0 to trie_op_hash_size do trie_op_hash[h]:=min_quarterword;
++ @z
++
++ @x l.17805
++ @t\hskip1em@>@!trie_max:trie_pointer; {largest location used in |trie|}
++ @y
++ @t\hskip1em@>@!trie_max_arr:array[0..pat_num_max] of trie_pointer;
++ {largest location used in |trie|}
++ @z
++
++ @x l.17827
++ trie_link(0):=0; trie_char(0):=0; trie_op(0):=min_quarterword;
++ for k:=1 to 127 do trie[k]:=trie[0];
++ trie_max:=127;
++ @y
++ for j:=0 to pat_num_max do
++ begin pat_num:=j;
++ trie_link(0):=0; trie_char(0):=0; trie_op(0):=min_quarterword;
++ for k:=1 to 127 do trie[k]:=trie[0];
++ trie_max:=127
++ end;
++ pat_num:=0;
++ @z
++
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % [49.1275] a_open_in of \read file needs path specifier
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+***************
+*** 1439,1445 ****
+ dump_things(eqtb[k], l-k);
+ @z
+
+! @x l.23037
+ while k<l do
+ begin dump_wd(eqtb[k]); incr(k);
+ end;
+--- 1652,1658 ----
+ dump_things(eqtb[k], l-k);
+ @z
+
+! @x l.23056
+ while k<l do
+ begin dump_wd(eqtb[k]); incr(k);
+ end;
+***************
+*** 1609,1615 ****
+ end
+ @z
+
+! @x l.23169
+ for k:=0 to trie_max do dump_hh(trie[k]);
+ dump_int(trie_op_ptr);
+ for k:=min_quarterword+1 to trie_op_ptr do
+--- 1822,1829 ----
+ end
+ @z
+
+! @x l.23168
+! dump_int(trie_max);
+ for k:=0 to trie_max do dump_hh(trie[k]);
+ dump_int(trie_op_ptr);
+ for k:=min_quarterword+1 to trie_op_ptr do
+***************
+*** 1618,1631 ****
+ dump_int(hyf_next[k]);
+ end;
+ @y
+ dump_things(trie[0], trie_max+1);
+ dump_int(trie_op_ptr);
+ dump_things(hyf_distance[min_quarterword+1], trie_op_ptr-min_quarterword);
+ dump_things(hyf_num[min_quarterword+1], trie_op_ptr-min_quarterword);
+ dump_things(hyf_next[min_quarterword+1], trie_op_ptr-min_quarterword);
+ @z
+
+! @x l.23191
+ for k:=0 to trie_max do undump_hh(trie[k]);
+ undump(min_quarterword)(max_quarterword)(trie_op_ptr);
+ for k:=min_quarterword+1 to trie_op_ptr do
+--- 1832,1852 ----
+ dump_int(hyf_next[k]);
+ end;
+ @y
++ dump_int(pat_num_max);
++ for j:=0 to pat_num_max do
++ begin
++ pat_num := j;
++ dump_int(trie_max);
+ dump_things(trie[0], trie_max+1);
+ dump_int(trie_op_ptr);
+ dump_things(hyf_distance[min_quarterword+1], trie_op_ptr-min_quarterword);
+ dump_things(hyf_num[min_quarterword+1], trie_op_ptr-min_quarterword);
+ dump_things(hyf_next[min_quarterword+1], trie_op_ptr-min_quarterword);
++ end;
+ @z
+
+! @x l.23190
+! undump_size(0)(trie_size)('trie size')(trie_max);
+ for k:=0 to trie_max do undump_hh(trie[k]);
+ undump(min_quarterword)(max_quarterword)(trie_op_ptr);
+ for k:=min_quarterword+1 to trie_op_ptr do
+***************
+*** 1634,1644 ****
+--- 1855,1872 ----
+ undump(min_quarterword)(max_quarterword)(hyf_next[k]);
+ end
+ @y
++ undump_size(0)(pat_num_max)('pat_num_max')(j);
++ for j:=0 to pat_num_max do
++ begin
++ pat_num:=j;
++ undump_size(0)(trie_size)('trie size')(trie_max);
+ undump_things(trie[0], trie_max+1);
+ undump(min_quarterword)(max_quarterword)(trie_op_ptr);
+ undump_things(hyf_distance[min_quarterword+1], trie_op_ptr-min_quarterword);
+ undump_things(hyf_num[min_quarterword+1], trie_op_ptr-min_quarterword);
+ undump_things(hyf_next[min_quarterword+1], trie_op_ptr-min_quarterword);
++ end;
++ pat_num:=0;
+ @z
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+***************
+*** 1722,1727 ****
+--- 1950,1976 ----
+ @z
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ % Finnish
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ @x l.23554
++ incompatible extensions of \TeX\ from proliferating.
++ @~system dependencies@>
++ @~extensions to \TeX@>
++
++ @y
++ incompatible extensions of \TeX\ from proliferating.
++ @~system dependencies@>
++ @~extensions to \TeX@>
++
++ The support for different hyphenation algorithms is also implemented
++ as an extension.
++ @~Finnish hyphenation@>
++
++ @z
++
++ %% End of Finnish
++
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % [54.1376] add editor-switch variables to globals
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ @x l.23926
+***************
+*** 1735,1741 ****
+ @~system dependencies@>
+ @y
+ Here is a temporary integer, used as a holder during reading and writing of
+! TFM files, and a temporary memory_word, used in reading/writing format
+ files.
+ Also, the variables used to hold ``switch-to-editor'' information.
+ @~<system dependencies@>
+--- 1984,1990 ----
+ @~system dependencies@>
+ @y
+ Here is a temporary integer, used as a holder during reading and writing of
+! TFM files, and a temporary |memory_word|, used in reading/writing format
+ files.
+ Also, the variables used to hold ``switch-to-editor'' information.
+ @~<system dependencies@>
+
+*---------------------------------------------------------------------------*
+ alo@santra.UUCP (mcvax!santra!alo) Antti Louko
+ alo@santra.hut.fi Helsinki University of Technology
+ alo@fingate.bitnet Computing Centre
+ alo%fingate.bitnet@cunyvm.cuny.edu SF-02150, Espoo
+ FINLAND
+ tel. +358 0 4512624
+*---------------------------------------------------------------------------*
+
diff --git a/info/digests/texhax/txh/oostrum.txh b/info/digests/texhax/txh/oostrum.txh
new file mode 100644
index 0000000000..0cd6df32c1
--- /dev/null
+++ b/info/digests/texhax/txh/oostrum.txh
@@ -0,0 +1,239 @@
+28-Mar-88 10:59:52-PST,12436;000000000000
+Return-Path: <mcvax!ruuinf!piet@uunet.UU.NET>
+Date: Mon, 28 Mar 88 12:42:23 +0100
+From: mcvax!ruuinf!piet@uunet.UU.NET (Piet van Oostrum)
+Subject: change the default font
+
+I have a style file to switch to laser-writer builtin fonts. This can be
+used as a model for other font changes. It changes only the \rm, \it, \sf
+\sl \tt \bf and \sc fonts and not the math mode fonts. It is basically an
+edited version of lfonts.tex
+------------------------------------------------------------------------
+\def\@@getfont#1#2#3#4#5#6#7{%
+\@ifundefined{\string #1\string #5}{\global\expandafter
+ \font \csname \string #1\string #5\endcsname #4\@ptscale{#5}\relax}{}%
+\@ifundefined{\string #1\string #6}{\global\expandafter
+ \font \csname \string #1\string #6\endcsname #4\@ptscale{#6}\relax}{}%
+\@ifundefined{\string #1\string #7}{\global\expandafter
+ \font \csname \string #1\string #7\endcsname #4\@ptscale{#7}\relax}{}%
+\@ifundefined{\string #1\string #3}{\global\expandafter
+ \let \csname \string #1\string #3\endcsname #3\relax
+ \@addfontinfo#3{\textfont #2\csname \string #1\string #5\endcsname
+ \scriptfont #2\csname \string #1\string #6\endcsname
+ \scriptscriptfont #2\csname \string #1\string #7\endcsname
+ \def#1{\fam #2\csname\string #1\string #5\endcsname}}}{}#3#1}
+\def\@@@getfont#1#2#3#4#5{%
+\@ifundefined{\string #1\string #5}{\global\expandafter
+ \font \csname \string #1\string #5\endcsname #4\@ptscale{#5}\relax}{}%
+\@ifundefined{\string #1\string #3}{\global\expandafter
+ \let \csname \string #1\string #3\endcsname #3\relax
+ \@addfontinfo#3{\def#1{\fam #2\csname\string #1\string #5\endcsname}}}{}#3#1}
+\def\@psfonts#1#2#3#4{%
+\def\prm{\@@@getfont\prm\z@#1\@mrm{#2}}%
+\def\pit{\@@getfont\pit\itfam#1\@mit{#2}{#3}{#4}}%
+\def\psl{\@@getfont\psl\slfam#1\@msl{#2}{#3}{#4}}%
+\def\pbf{\@@getfont\pbf\bffam#1\@mbf{#2}{#3}{#4}}%
+\def\ptt{\@@getfont\ptt\ttfam#1\@mtt{#2}{#3}{#4}%
+\@nohyphens\ptt {#2}\@nohyphens\ptt {#3}\@nohyphens\ptt {#4}}%
+\def\psf{\@@getfont\psf\sffam#1\@mss{#2}{#3}{#4}}%
+\def\psc{\@@getfont\psc\scfam#1\@mcsc{#2}{#3}{#4}}}
+
+\def\@mrm{t-rom}% times - roman
+\def\@mit{t-ita}% times - italic
+\def\@msl{t-obl}% times - oblique
+\def\@mbf{t-bol}% times - bold
+\def\@mtt{c-med}% courier
+\def\@mcsc{t-romsc}% times - roman - small caps
+\def\@mss{h-med}% helvetica
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\vpt{\textfont\z@\fivrm
+ \scriptfont\z@\fivrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\fivmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\fivsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\fam\@ne\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@vpt555%
+\def\ly{\fam\lyfam\fivly}\textfont\lyfam\fivly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut\rm}
+\def\@vpt{}
+\def\vipt{\textfont\z@\sixrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\sixmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\sixsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@vipt666
+\def\ly{\fam\lyfam\sixly}\textfont\lyfam\sixly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\sixly
+\@setstrut\rm}
+\def\@vipt{}
+\def\viipt{\textfont\z@\sevrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\sevmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\sevsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@viipt755%
+\def\ly{\fam\lyfam\sevly}\textfont\lyfam\sevly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+\def\@viipt{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\viiipt{\textfont\z@\egtrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\egtmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\egtsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@viiipt865%
+\def\ly{\fam\lyfam\egtly}\textfont\lyfam\egtly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+\def\@viiipt{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ixpt{\textfont\z@\ninrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\ninmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\ninsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@ixpt965%
+\def\ly{\fam\lyfam\ninly}\textfont\lyfam\ninly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+\def\@ixpt{}
+\def\xpt{\textfont\z@\tenrm
+ \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\tenmi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\tensy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\tenmi
+ \textfont\tw@\tensy \textfont\lyfam\tenly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{tenmib}{\global\font\tenmib\@mbi
+ \global\font\tensyb\@mbsy
+ \global\font\tenlyb\@lasyb\relax\@addfontinfo\@xpt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\tenmib \textfont\tw@\tensyb
+ \textfont\lyfam\tenlyb \@prtct\@boldtrue}}}{}\@xpt\boldmath}%
+\@psfonts\@xpt{10}75%
+\def\ly{\fam\lyfam\tenly}\textfont\lyfam\tenly
+ \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+\def\@xpt{}
+\def\xipt{\textfont\z@\elvrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\elvmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\elvsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\elvmi \textfont\tw@\elvsy
+ \textfont\lyfam\elvly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{elvmib}{\global\font\elvmib\@mbi\@halfmag
+ \global\font\elvsyb\@mbsy\@halfmag
+ \global\font\elvlyb\@lasyb\@halfmag\relax\@addfontinfo\@xipt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\elvmib \textfont\tw@\elvsyb
+ \textfont\lyfam\elvlyb\@prtct\@boldtrue}}}{}\@xipt\boldmath}%
+\@psfonts\@xipt{11}86%
+\def\ly{\fam\lyfam\elvly}\textfont\lyfam\elvly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+\@setstrut \rm}
+\def\@xipt{}
+\def\xiipt{\textfont\z@\twlrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\twlmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\twlsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twlmi
+ \textfont\tw@\twlsy \textfont\lyfam\twlly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{twlmib}{\global\font\twlmib\@mbi\@magscale1\global
+ \font\twlsyb\@mbsy \@magscale1\global\font
+ \twllyb\@lasyb\@magscale1\relax\@addfontinfo\@xiipt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\twlmib \textfont\tw@\twlsyb
+ \textfont\lyfam\twllyb\@prtct\@boldtrue}}}{}\@xiipt\boldmath}%
+\@psfonts\@xiipt{12}86%
+\def\ly{\fam\lyfam\twlly}\textfont\lyfam\twlly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm}
+\def\@xiipt{}
+\def\xivpt{\textfont\z@\frtnrm
+ \scriptfont\z@\tenrm \scriptscriptfont\z@\sevrm
+\textfont\@ne\frtnmi \scriptfont\@ne\tenmi \scriptscriptfont\@ne\sevmi
+\textfont\tw@\frtnsy \scriptfont\tw@\tensy \scriptscriptfont\tw@\sevsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\frtnmi \textfont\tw@\frtnsy
+ \textfont\lyfam\frtnly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{frtnmib}{\global\font
+ \frtnmib\@mbi\@magscale2\global\font\frtnsyb\@mbsy\@magscale2
+ \global\font\frtnlyb\@lasyb\@magscale2\relax\@addfontinfo\@xivpt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\frtnmib \textfont\tw@\frtnsyb
+ \textfont\lyfam\frtnlyb\@prtct\@boldtrue}}}{}\@xivpt\boldmath}%
+\@psfonts\@xivpt{14}{10}7%
+\def\ly{\fam\lyfam\frtnly}\textfont\lyfam\frtnly
+ \scriptfont\lyfam\tenly \scriptscriptfont\lyfam\sevly
+\@setstrut \rm}
+\def\@xivpt{}
+\def\xviipt{\textfont\z@\svtnrm
+ \scriptfont\z@\twlrm \scriptscriptfont\z@\tenrm
+\textfont\@ne\svtnmi \scriptfont\@ne\twlmi \scriptscriptfont\@ne\tenmi
+\textfont\tw@\svtnsy \scriptfont\tw@\twlsy \scriptscriptfont\tw@\tensy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\svtnmi \textfont\tw@\svtnsy \textfont\lyfam\svtnly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@xviipt{17}{12}{10}%
+\def\ly{\fam\lyfam\svtnly}\textfont\lyfam\svtnly
+ \scriptfont\lyfam\twlly \scriptscriptfont\lyfam\tenly
+\@setstrut \rm}
+\def\@xviipt{}
+\def\xxpt{\textfont\z@\twtyrm
+ \scriptfont\z@\frtnrm \scriptscriptfont\z@\twlrm
+\textfont\@ne\twtymi \scriptfont\@ne\frtnmi \scriptscriptfont\@ne\twlmi
+\textfont\tw@\twtysy \scriptfont\tw@\frtnsy \scriptscriptfont\tw@\twlsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@xxpt{20}{14}{12}%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\frtnly \scriptscriptfont\lyfam\twlly
+\@setstrut \rm}
+\def\@xxpt{}
+\def\xxvpt{\textfont\z@\twfvrm
+ \scriptfont\z@\twtyrm \scriptscriptfont\z@\svtnrm
+\textfont\@ne\twtymi \scriptfont\@ne\twtymi \scriptscriptfont\@ne\svtnmi
+\textfont\tw@\twtysy \scriptfont\tw@\twtysy \scriptscriptfont\tw@\svtnsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@xxvpt{25}{20}{17}%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\twtyly \scriptscriptfont\lyfam\svtnly
+\@setstrut \rm}
+\def\@xxvpt{}
+
+-------
diff --git a/info/digests/texhax/txh/pavel1.txh b/info/digests/texhax/txh/pavel1.txh
new file mode 100644
index 0000000000..1b11ecb3bf
--- /dev/null
+++ b/info/digests/texhax/txh/pavel1.txh
@@ -0,0 +1,778 @@
+ 6-Jan-87 14:26:26-PST,19188;000000000000
+Return-Path: <mcvax!nplpsg!jrp@seismo.CSS.GOV>
+Received: from seismo.CSS.GOV by SU-SCORE.ARPA with TCP; Tue 6 Jan 87 14:24:36-PST
+Received: from mcvax.UUCP by seismo.CSS.GOV (5.54/1.14) with UUCP
+ id AA12122; Tue, 6 Jan 87 17:26:41 EST
+Received: by mcvax.cwi.nl; Tue, 6 Jan 87 23:09:20 +0100 (MET)
+Received: from nplpsg.uucp by eagle.Ukc.AC.UK with UUCP id a011462;
+ 6 Jan 87 21:59 GMT
+Received: from suna by suna.psg.npl.co.uk; Tue, 6 Jan 87 21:36:58 GMT
+To: TeXhax@score.stanford.edu, unix-tex@ward.cs.washington.edu
+Subject: TeX V troff
+Return-Receipt-To: mcvax!psg.npl.co.uk!jrp@seismo.CSS.GOV
+Date: Tue, 06 Jan 87 21:36:56 GMT
+Message-Id: <3417.536967416@psg.npl.co.uk>
+From: John Pavel <mcvax!nplpsg!jrp@seismo.CSS.GOV>
+
+
+Here is a slightly more readable version of the paper that I sent out at
+the end of last year.
+
+It was processed with the dvidoc program available from ken@rochester.arpa.
+
+
+John Pavel
+----snip--------snip--------snip--------snip--------snip--------snip----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Document Preparation:
+
+ Some Notes on TeX and troff
+
+
+ John Pavel
+ National Physical Laboratory
+ Division of Information Technology and Computing
+ Protocol Standards Group
+
+ 1.15 dated 86/12/23 at 11:38:13
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Abstract
+
+ This document gives a short comparison of
+various features of the text formatters troff
+and TeX.
+ Any opinions expressed here are the personal
+opinions of the author.
+ The document is, at present incomplete. The
+main features lacking are
+1. A good bibliography;
+
+2. A list of sources;
+
+3. Some conclusions.
+
+
+
+
+
+
+Contents
+
+1The Formatters 2
+ 1.1troff ::::: :::::: ::::: :::::: ::::: ::::: : 2
+ 1.2TeX :: ::::: :::::: ::::: :::::: ::::: ::::: : 2
+
+2Cost 3
+ 2.1troff ::::: :::::: ::::: :::::: ::::: ::::: : 3
+ 2.2TeX :: ::::: :::::: ::::: :::::: ::::: ::::: : 3
+3Markup Codes 3
+ 3.1troff ::::: :::::: ::::: :::::: ::::: ::::: : 3
+ 3.2TeX :: ::::: :::::: ::::: :::::: ::::: ::::: : 4
+ 3.3Macro Packages ::: ::::: :::::: ::::: ::::: : 4
+
+4Driving Output Devices 6
+ 4.1troff ::::: :::::: ::::: :::::: ::::: ::::: : 6
+ 4.2TeX :: ::::: :::::: ::::: :::::: ::::: ::::: : 7
+
+5User Interface 8
+ 5.1troff ::::: :::::: ::::: :::::: ::::: ::::: : 8
+ 5.2TeX :: ::::: :::::: ::::: :::::: ::::: ::::: : 8
+6Fonts 8
+ 6.1Restrictions ::::: ::::: :::::: ::::: ::::: : 9
+
+7Typesetting Mathematics 9
+ 7.1troff and eqn :::: ::::: :::::: ::::: ::::: : 9
+ 7.2TeX :: ::::: :::::: ::::: :::::: ::::: ::::: : 9
+8Tables, Lines and Boxes 9
+ 8.1troff and tbl :::: ::::: :::::: ::::: ::::: : 9
+ 8.2TeX :: ::::: :::::: ::::: :::::: ::::: ::::: : 9
+
+9Graphics 10
+ 9.1troff ::::: :::::: ::::: :::::: ::::: ::::: :10
+ 9.2TeX :: ::::: :::::: ::::: :::::: ::::: ::::: :10
+
+1Documentation 11
+1Other Utilities 11
+ 11.Slide Preparation ::::: :::::: ::::: ::::: :11
+ 11.Program Grinding : ::::: :::::: ::::: ::::: :11
+ 11.Bibliographic Citation : :::::: ::::: ::::: :12
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+1 The Formatters
+
+The two computerised text formatting systems
+considered in this note are TeX and troff .
+
+
+1.1 troff
+
+troff was developed by Ossanna and is available
+only on Unix1 systems (which runs on almost
+all machines known to man. ). It is probably
+less sophisticated than TeX, but has very
+nice preprocessors for tables, mathematics and
+figures.
+
+
+1.2 TeX
+TeX was developed at Stanford by Donald Knuth.
+It runs on almost all machines known to
+man, including the VAX2 (under both ULTRIX3
+
+(4.2bsd) and VMS4), Sun, IBM PC5, the big
+IBM VMCMS7 machines, and the Macintosh8 . It
+can produce exquisite results, particularly for
+mathematics. It is especially skillful at
+line-, paragraph-, and page-break selection.
+ There is a TeX Users Group with over 1000
+members. It publishes a semi-annual journal
+----------------------
+ 1Unix is a trademark of AT&T Bell
+Laboratories.
+ 2VAX is a trademark of Digital Equipment
+Corporation.
+ 3ULTRIX is a trademark of Digital Equipment
+Corporation.
+ 4VMS is a trademark of Digital Equipment
+Corporation.
+ 5IBM PC is a trademark of International
+B6VMniss aactrademarkncoofoInternational Business
+Machines, Incorporated.
+ 7CMS is a trademark of International Business
+Machines, Incorporated.
+ 8Macintosh is a trademark of Apple Computer,
+Incorporated.
+
+
+ 2
+
+
+
+
+
+
+2 Cost
+
+2.1 troff
+
+troff comes as part of any Unix system. A
+more recent version called ditroff is available
+part of a package of tools called the
+Documentor's Work Bench (DWB) at an extra cost
+of about $3,000.
+
+
+2.2 TeX
+
+The Unix version of TeX is available for the
+cost of a magnetic tape.
+
+
+3 Markup Codes
+
+Both TeX and troff operate on formatting
+commands embedded in the source text. This
+makes it easy to
+
+ ?transfer documents using electronic mail;
+ ?use the full power of the available text
+ manipulation tools for transforming the
+ input.
+
+
+3.1 troff
+
+The majority of troff markup codes consist
+mainly of two-letter dot-prefixed commands
+starting at the beginning of a line. For
+example,
+
+This text appears on one page.
+.bp
+Starts a new page.
+.sp 3i
+leaves a three inch gap.
+
+Blank lines can be used to break paragraphs and
+ indented ones force indentation.
+
+
+ 3
+
+
+
+
+
+
+3.2 TeX
+
+The majority of TeX markup codes are backslash-
+prefixed words. Braces, or brackets enclose
+arguments and contexts. For example,
+
+Text entry is free format.
+
+However, a blank line starts off a new paragraph,
+which, in the default mode, produces no ex-
+tra vertical
+spacing, but a some extra indentation, just like in a
+proper book.
+
+{\em The text in these braces will be empha-
+sised.} While
+this following text will not.
+
+\centerline{The text in this argument will be centered}
+ When formatted, this produces
+
+ Text entry is free format.
+ However, a blank line starts off a new
+ paragraph, which, in the default mode,
+ produces no extra vertical spacing, but
+ a some extra indentation, just like in a
+ proper book.
+ The text in these braces will be
+ emphasised. While this following text
+ will not.
+ The text in this argument will be centered
+
+
+3.3 Macro Packages
+Both TeX and troff operate on very low-level
+commands. A number of macro packages exist for
+both systems to allow the user to express his
+formatting requirements at a "higher" level.
+In general, a macro cannot be distinguished
+from a more primitive command.
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+3.3.1 troff
+
+-ms: This basic package is almost universally
+available with troff , which makes it attractive
+when portability of marked texts is important.
+It is very simple to use. Although it is
+fairly restricted in scope, it suffices for the
+majority of papers and memos.
+
+-me: This package comes only with the bsd
+
+systems. It is also fairly simple (probably
+about the complexity of Pages). It is cleaner
+than the -ms macros in the sense that if you do
+have a slightly unusual requirement and need to
+descend into troff you are much less likely to
+upset the -me.
+
+-mm: This relatively recent package comes only
+with System V Unix systems and is, in some
+sense, the future standard one to be used with
+troff. It is much more extensive than the -ms
+macros and allows easier "tuning" of document
+appearance.
+
+
+3.3.2 TeX
+LaTeX: This is an excellent general-purpose
+macro, suitable for articles, reports, letters,
+books, etc. LaTeX is straightforward to
+use, although it can be frustrating if you
+want to drop into "manual override". A
+document can then be formatted according to a
+specified "style" without altering the source
+text. A number of basic styles, as well as
+styles for some well-known computing journals
+such as CACM, are available. LaTeX has good
+support for indexing and cross-referencing. It
+is rapidly becoming the standard TeX macro
+package.
+
+
+AMS-TeX : This is similar to LaTeX, but biased
+more towards mathematicians (AMS stands for the
+
+
+ 5
+
+
+
+
+
+
+American Mathematical Society).
+
+
+texinfo: This is a public-domain macro package
+for producing program documentation. It is
+a lot less powerful than any of the packages
+previously mentioned but, as well as the
+possibility of typeset output, tree-structured
+documentation packages may be produced.
+
+
+4 Driving Output Devices
+
+In both cases, the user types in a marked
+up document, processes it using TeX or troff,
+producing an output file which can be used
+to drive a huge variety of output devices,
+including the Sun screen.
+
+
+4.1 troff
+troff has a sister program called nroff which
+accepts exactly the same input as troff but is
+designed to drive fixed-width character devices
+such as daisy-wheel printers. Configuring
+a new type of printer is straightforwardly
+achieved by completing a table.
+ troff drivers are available also available
+from the suppliers of the major laser printer
+suppliers. For example,
+
+ ?Imagen (8/300, 12/300),
+
+ ?Apple (LaserWriter and LaserWriter Plus),
+
+ ?HP (Laserjet and LaserJet Plus),
+ ?QMS (800 or 1200 Lasergrafix printers),
+
+ ?Xerox laser printers.
+ Configuring troff itself for a new typesetter
+is a significantly more difficult task.
+Drivers are known to exist for the
+
+ ?Mergenthaler Linotron 202,
+
+
+ 6
+
+
+
+
+
+
+ ?Wang CAT,
+
+ ?Autologic APS-5,
+ and the
+
+ ?Monotype Lasercomp
+typesetters.
+ ditroff output may be previewed on a
+Tektronix 4014 terminal.
+
+
+4.2 TeX
+
+Configuring TeX for a new device is also a
+fairly involved task. However, many more such
+drivers exist than for troff. For example,
+
+ ?Epson, IBM, Toshiba, Okidata dot matrix
+ printers,
+ ?IBM PC with
+
+ -- Hercules Graphics Card,
+ -- IBM Enhanced Graphics Adapter,
+
+ -- Tecmar Graphics Master Card,
+ ?AT&T 6300 PC (no card required),
+
+ ?Olivetti M24 PC (no card required),
+
+ ?vt100s terminals,
+ ?the laser printers mentioned above and the
+ Data Products LNZ-2660,
+
+ ?Linotype L100 and L300 phototypesetters.
+
+ It is known that John Wiley & Sons,
+Addison-Wesley and Springer-Verlag will accept
+and assist in the publication of books and
+articles typeset using TeX.
+
+
+
+
+
+
+
+ 7
+
+
+
+
+
+
+5 User Interface
+
+5.1 troff
+
+troff is completely non-interactive. A small
+number of error messages can arise, but
+most errors are discovered by looking at the
+formatted output, usually by running through
+nroff to the VDU screen. This turns out to be
+less of a problem in practise than it might at
+first sound.
+
+
+5.2 TeX
+
+TeX complains and stops upon finding a syntax
+error in the input, allowing the user to take
+take simple remedial action (e.g., by inserting
+the correct spelling of a command, or by asking
+TeX to ignore a number of subsequent tokens).
+
+
+6 Fonts
+
+The available fonts depend on the output
+device. A number of devices use the
+public domain Computer Modern fonts designed by
+Donald Knuth with METAFONT. This font family
+comprises some 75 different fonts in the common
+sizes in the range 5 to 72 points. TeX
+can magnify these to provide an even greater
+variety. Many, many mathematical symbols,
+accent marks and other symbols are available.
+Cyrilic and OCR (Optical Character Recognition)
+fonts are also available for TeX.
+ In the unlikely event of being unable find
+a suitable special character, the expert may
+resort to METAFONT. There are also various
+public domain pixel-based character generators.
+These facilities are probably most likely to be
+required only for logo design, however.
+
+
+
+
+
+ 8
+
+
+
+
+
+
+6.1 Restrictions
+
+Older versions of troff allow no more than four
+different styles of font per document (e.g.,
+roman, bold, italic and special). There are no
+such restrictions in TeX or ditroff.
+
+
+7 Typesetting Mathematics
+
+
+7.1 troff and eqn
+troff has a preprocessor called eqn which al-
+lows the "pronounceable" entry of mathematical
+equations. It was designed to be easy to
+use for typist and casual users, assuming
+that they have an elementary comprehension of
+mathematics. It produces reasonable results.
+
+
+7.2 TeX
+
+TeX has a built-in mathematics mode. It is
+slightly more cryptic than eqn. For users
+setting a lot of mathematics, requiring perfect
+results, there is only TeX.
+
+
+8 Tables, Lines and Boxes
+
+8.1 troff and tbl
+
+troff has a preprocessor called tbl which
+permits very easy composition of tables. It
+can even be used for the production of simple
+line diagrams. This is one of troff 's
+strongest features.
+
+
+8.2 TeX
+TeX has built-in alignment facilities. These
+are very powerful, but much more frightening
+and verbose than tbl. However, LaTeX provides
+
+
+
+ 9
+
+
+
+
+
+
+table drawing facilities which are almost as
+good as tbl. All manner of lines and boxes are
+also possible.
+
+
+9 Graphics
+
+Neither troff nor TeX were designed for the
+production of sophisticated artwork and this is
+certainly an area of weakness.
+
+
+9.1 troff
+
+The Documentor's Workbench has several ditroff
+preprocessors:
+
+pic: which allow easy descriptive of line
+ figures comprised of lines, arrows, circles
+ and ellipses.
+ideal: is similar to pic, but uses simultaneous
+ equations and co-ordinates to determine the
+ positions of points. ideal can also specify
+ dashed circles and shaded regions.
+
+grap: is a preprocessor for pic for designed for
+ producing graphs. It is highly spoken of.
+
+
+9.2 TeX
+
+LaTeX has an picture sketching facility with
+similar capabilities to pic. However, it is
+much harder to use, since the user has to
+perform more of his own calculations. It
+should eventually be possible to incorporate
+pictures from the Macintosh into TeX output.
+ TeX packages for typsetting representa-
+tions of organic molecules and other semi-
+sophisticated graphics also exist.
+
+
+
+
+
+
+ 10
+
+
+
+
+
+
+10 Documentation
+
+Both troff and TeX are extensively documented.
+A wider choice of textbook is available for
+troff, since it is much older.
+
+
+11 Other Utilities
+
+
+11.1 Slide Preparation
+
+11.1.1 troff
+troff has no special facilities for producing
+slides. However, it is possible to use a
+normal macro package and large point sizes with
+reasonable success.
+ ditroff comes with a set of macros (-mv) for
+simple viewgraph and slide production.
+
+
+11.1.2 TeX
+
+SliTeX/ is a variant of the LaTeX macro
+package designed for slide production. It is
+particularly good for managing the production
+of large collections of slides and of
+multi-layer slides (overlays).
+
+11.2 Program Grinding
+
+tgrind is a useful little utility which,
+given a few facts about the punctuation of a
+programming language, will "grind" out a TeX
+source file which can be turned into a nicely
+formatted listing. A ground listing of a
+Pascal program is shown in Figure 1.
+ A similar facility for use with troff called
+vgrind also exists, but appears to function
+only on Berkeley Unix driving a Versatec
+printer.
+
+
+
+
+
+ 11
+
+
+
+
+
+-----------------------------------------------------
+
+program hello(output);
+
+ procedure welcome;
+ begin
+ writeln("Hello World.")
+ end;
+
+begin
+ f This is a little demonstration program in Pascal. g
+ 10
+ welcome
+end.
+
+-----------------------------------------------------
+
+
+11.3 Bibliographic Citation
+
+It is convenient to be able to keep
+databases of literature references and have
+bibliographies generated automatically from
+citations inserted into the source texts.
+
+
+11.3.1 troff
+The troff preprocessor for fleshing out
+citations from a set of keywords embedded in
+the source text is called refer. lookbib and
+addbib allow examination and extension of refer
+bibliographic databases.
+
+
+11.3.2 TeX
+
+BibTeX is the LaTeX equivalent of refer.
+It requires precise citations which makes
+it slightly less convenient for normal use
+than refer. However, BibTeX is programmable
+and can be used to format the references
+into any conceivable style. A number of
+different bibliographic styles are available,
+particularly for the more prestigious computing
+journals.
+
+
+ 12
+
+
+
+
+
+
+ A facility called Tib to use refer-formatted
+bibliographic databases with TeX also exists.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 13
+
+-------
diff --git a/info/digests/texhax/txh/pavel2.txh b/info/digests/texhax/txh/pavel2.txh
new file mode 100644
index 0000000000..271f832d51
--- /dev/null
+++ b/info/digests/texhax/txh/pavel2.txh
@@ -0,0 +1,2541 @@
+ 8-Apr-87 09:53:58-PDT,44327;000000000000
+Return-Path: <mcvax!nplpsg!jrp@seismo.CSS.GOV>
+To: texhax@score.stanford.edu
+Subject: LaTeX for the -ms macros user
+Date: Wed, 08 Apr 87 16:13:53 GMT
+From: John Pavel <mcvax!nplpsg!jrp@seismo.CSS.GOV>
+
+
+Sorry. These got bounced by seismo the first time.
+
+Let's hope that you get the two messages included below.
+
+John Pavel
+
+------- Forwarded Messages
+
+Date: Wed, 08 Apr 87 06:47:13 -0400
+Subject: Returned mail: Host unknown
+From: Mail Delivery Subsystem <Postmaster@seismo.uucp>
+To: jrp@psg.npl.co.uk
+
+ ----- Transcript of session follows -----
+550 su-score.arpa!texhax... Host unknown
+
+ ----- Unsent message follows -----
+Received: from mcvax.UUCP by seismo.CSS.GOV (5.54/1.14) with UUCP
+ id AA02322; Wed, 8 Apr 87 06:47:13 EDT
+Received: by mcvax.cwi.nl; Wed, 8 Apr 87 03:56:01 +0200 (MET)
+Received: from nplpsg.uucp by kestrel.Ukc.AC.UK with UUCP id aa05417;
+ 8 Apr 87 0:10 BST
+Received: from snow by snow.psg.npl.co.uk; Tue, 7 Apr 87 23:53:07 BST
+To: texhax@su-score.arpa
+Subject: LaTeX for the troff -ma macros user
+Return-Receipt-To: mcvax!psg.npl.co.uk!jrp
+Date: Tue, 07 Apr 87 22:53:07 GMT
+Message-Id: <6239.544834387@psg.npl.co.uk>
+From: John Pavel <mcvax!nplpsg!jrp>
+
+Here is a LaTeX version of the first cut on a paper that should
+help anyone trying to convert from the -ms macros to LaTeX.
+
+I would welcome any contributions to completing/correcting this paper.
+
+The extra style file is from Marshall Rose, slightly adapted.
+
+Thanks,
+
+John Pavel
+
+: Please feed me to /bin/sh
+: This is a shell archive, meaning:
+: 1. Remove everything above the : Please feed me to /bin/sh line.
+: 2. Save the resulting text in a file.
+: 3. Execute the file with /bin/sh -- not csh -- to create:
+: ms-latex.tex
+: sfwmac.sty
+: This archive created: Tue Apr 7 22:52:24 1987
+export PATH; PATH=/bin:/usr/bin:$PATH
+echo shar: "extracting 'ms-latex.tex'" '(17397 characters)'
+if test -f 'ms-latex.tex'
+then
+ echo shar: "will not over-write existing file 'ms-latex.tex'"
+else
+sed 's/^ X//' << \SHAR_EOF > 'ms-latex.tex'
+ X
+ X\documentstyle[12pt,a4,titlepage,sfwmac]{article}
+ X
+ X% Some local macros, mostly stolen from the scheme distribution
+ X
+ X% Same as \obeycr, but doesn't do a \@gobblecr.
+ X{\catcode`\^^M=13 \gdef\myobeycr{\catcode`\^^M=13 \def^^M{\\}}%
+ X\gdef\restorecr{\catcode`\^^M=5 }}
+ X
+ X{\catcode`\^^I=13 \gdef\obeytabs{\catcode`\^^I=13 \def^^I{\hbox{\hskip
+ 4em}}}}
+ X
+ X{\makeatletter \gdef\gobblecr{\@gobblecr}}
+ X
+ X\newenvironment{mstext}%
+ X {\obeyspaces \myobeycr \em
+ X \begin{tabbing}%
+ X \qquad\=\hspace*{5em}\=\hspace*{9em}\=\+\kill% was 16em
+ X \gobblecr}%
+ X {\unskip\end{tabbing}}
+ X
+ X\newenvironment{latextext}{
+ X\obeyspaces \myobeycr \em
+ X\begin{tabbing}%
+ X\qquad\=\hspace*{5em}\=\hspace*{9em}\=\+\kill% was 16em
+ X\gobblecr}{\unskip\end{tabbing}}
+ X
+ X\catcode`\"=\active
+ X{\makeatletter {\gdef"{\begingroup \catcode``=13
+ X \@noligs \tt \let\do\@makeother \dospecials \let"=\endg
+roup}}}
+ X
+ X\newcommand{\latex}[1]{\LaTeX}
+ X\newcommand{\ms}[1]{\mbox{\tt -ms}}
+ X\let\endverbatim=\endtrivlist
+ X
+ X\title{\latex/ for the \troff/ \ms/ Macros User}
+ X\author{John Pavel \\
+ XNational Physical Laboratory \\
+ XTeddington, UK\\[\bigskipamount]
+ X"jrp@nplpsg.UUCP"}
+ X
+ X\date{87/04/07 at 23:37:25%
+ X}
+ X
+ X\begin{document}
+ X
+ X \maketitle
+ X
+ X \begin{abstract}
+ X
+ X This document is intended to serve as a brief reference to \lat
+ex/ for
+ X those who are familiar with \troff/ and \ms/ macros. This vers
+ion
+ X is a draft for comment.
+ X
+ X \end{abstract}
+ X
+ X \tableofcontents
+ X
+ X\cleardoublepage
+ X
+ X\section{Introduction}
+ X
+ XThis document is intended to serve as a quick reference to those
+ Xconverting from \troff/ with the \ms/ macros~\cite{ms} to
+ X\latex/~\cite{LaTeX}. The reader is assumed to have a working knowled
+ge
+ Xof the \ms/ macros. Furthermore, the reader {\em must\/} have read at
+least
+ XChapter~2 of the \latex/ manual\cite{LaTeX}. That chapter covers the b
+asics of
+ X\latex/.
+ X
+ XThe default behaviour of \latex/ is described. With a certain amount
+of
+ Xconfiguring, \latex/ can be induced to produce almost any style of
+ Xoutput. Such configuring is, however, beyond the scope of this
+ Xdocument. Similarly, \latex/ has many features which are not describe
+d.
+ XThese include
+ X
+ X\begin{itemize}
+ X\item diagram production;
+ X\item mathematical typesetting;
+ X\item the typesetting of program sources;
+ X\item automatic cross-referencing and index production;
+ X\item the layout of tables;
+ X\end{itemize}
+ X
+ XThe \latex/\cite{LaTeX} and \TeX\cite{TeX} manuals
+ Xshould be consulted for the full story.
+ X
+ X\section{Getting Started with \latex/}
+ X
+ XTo run \latex/ on a file called either "file" or, more conventionally,
+ X"file.tex", type
+ X\begin{verbatim}
+ X % latex file
+ X\end{verbatim}
+ X
+ XBy default, the file will be taken from either your current
+ Xdirectory, or, if no such file appears there, the directory
+ X"/usr/lib/tex/macros" will be searched.
+ X
+ XRunning \latex/ produces a DVI file ("file.dvi" for the above example)
+.
+ XYou can send this to the {\sf Imagen} by using \pgm{iptex}(l):
+ X\begin{verbatim}
+ X % iptex file
+ X\end{verbatim}
+ X
+ XAlternatively, you may like to preview it on the {\sf Sun} screen by u
+sing
+ X\pgm{texview}(l):
+ X\begin{verbatim}
+ X % texview file
+ X\end{verbatim}
+ X
+ XThe \latex/ Manual\cite{LaTeX} will refer you to a {\sl Local Guide}.
+ XThis guide can be found in the file "/usr/lib/tex/macros/local.tex", a
+nd
+ Xso can be printed out by
+ X\begin{verbatim}
+ X % latex local
+ X % latex local
+ X % iptex local
+ X\end{verbatim}
+ X
+ XNo, that is not a mis-print. You will need to run \latex/ twice. It
+ Xneeds to make two passes to establish all the cross-references.
+ XNormally, you will do this only for a final copy.
+ XYou may now get rid of all the temporary files that \latex/ creates
+ Xwith
+ X\begin{verbatim}
+ X % texclean
+ X\end{verbatim}
+ X
+ XTwo other files that you might like to look at in the
+ X"/usr/lib/tex/macros" directory are "small.tex" and "sample.tex".
+ X
+ X\section{Document Structure}
+ X
+ XThe \ms/ macros assume a document structure of the following form:
+ X
+ X\begin{mstext}
+ X {[optional date specification: ".ND" a date]}
+ X {[optional overall format: ".RP"---see below]}
+ X ".TL"
+ X Title of document (one or more lines)
+ X ".AU"
+ X Author(s) (may also be several lines)
+ X ".AI"
+ X Author's institution(s)
+ X ".AB"
+ X Abstract; to be placed on the cover sheet of a paper.
+ X ".AE" (abstract end)
+ X text \ldots
+ X\end{mstext}
+ X
+ XA \latex/ document has an analogous structure:
+ X
+ X\begin{latextext}
+ X "\documentstyle[a4]{article}" \>\> \` Specifies the document
+style.
+ X \>\> \` {\tt a4} is for
+ A4 paper
+ X
+ X "\title{"Title of document %
+ X(each line of title separated by "\\")\/"}"
+ X "\author{"Author(s) (each author separated by "\and")\/"}"
+ X "\date{"a date"}"
+ X
+ X "\begin{document}" \>\> \` End of preamble
+ and beginning of text.
+ X
+ X \> "\maketitle" \> \` Produces the title.
+ X \> "\tableofcontents" \> \` Produces the table of con
+tents.
+ X
+ X \> "\begin{abstract}"
+ X \> Abstract; to be placed under the title
+ X \> "\end{abstract}"
+ X
+ X \> body of text \ldots
+ X
+ X "\end{document}"
+ X\end{latextext}
+ X
+ XIf a separate title page and abstract page are preferred,
+ Xthe "titlepage" style option should be used:
+ X
+ X\begin{latextext}
+ X "\documentstyle[titlepage,a4]{article}"
+ X \> \ldots
+ X\end{latextext}
+ X
+ X\section{Page Headings}
+ X
+ XThe \ms/ macros allow headings and footings to be set by means of stri
+ng
+ Xdefinitions:
+ X\begin{mstext}
+ X".ds LH" left header
+ X".ds CH" center header
+ X".ds RH" right header
+ X".ds LF" left footer
+ X".ds CF" center footer
+ X".ds RF" right footer
+ X\end{mstext}
+ X
+ XThe scheme in \latex/ is slightly different;
+ Xthere are four page styles: "plain" (the default), "empty", "headings"
+ and
+ X"myheadings". These are activated by a
+ X
+ X\begin{latextext}
+ X"\pagestyle{"style\/"}"
+ X\end{latextext}
+ X
+ Xcommand. To set your own headings, the commands "\markboth" (for two-s
+ided documents)
+ Xand "\markright" (for one-sided documents) are required in addition:
+ X
+ X\begin{latextext}
+ X"\markright{"heading\/"}" or "\markboth{"left head\/"}{"right head\/"}
+"
+ X"\pagestyle{myheadings}"
+ X\end{latextext}
+ X
+ X\section{Multi-column Formats}
+ X
+ X\begin{sloppypar}
+ XThe ".2C" and ".1C" \ms/ macros permit changing to
+ Xtwo-column and single-column format. The analagous \latex/ commands
+ Xare "\twocolumn" and "\onecolumn". Like their \ms/
+ Xcounterparts, they also skip to a new page. If a complete document is
+ Xto be produced in two-column format, the "twocolumn" style option
+ Xshould be used, since that alters various style parameters, such as
+ Xthe amount of paragraph indentation, while the
+ X"\twocolumn" command does not.
+ X\end{sloppypar}
+ X
+ X\section{Section Headings}
+ X
+ XThe \ms/ macros
+ X
+ X\begin{mstext}
+ X ".NH"
+ X numbered section heading
+ X may be several lines
+ X\end{mstext}
+ X
+ Xand
+ X
+ X\begin{mstext}
+ X ".SH"
+ X unnumbered section heading
+ X\end{mstext}
+ X
+ Xcorrespond to the \latex/ commands
+ X
+ X\begin{latextext}
+ X "\section{"numbered section heading
+ X \> may be several lines"}"
+ X\end{latextext}
+ X
+ X and
+ X
+ X\begin{latextext}
+ X "\section*{"section heading"}"
+ X\end{latextext}
+ X
+ XInstead of specifying depth of level number for sub-sections, as is do
+ne
+ Xwith the \ms/ macros, \latex/ provides specific "\subsection",
+ X"\subsubsection", "\paragraph" and "\subsubparagraph"
+ Xcommands.\footnote{Documents written in the "report" document style ma
+y also
+ Xbe divided into "chapter"s and "part"s.}
+ X
+ X\section{Paragraphs}
+ X
+ X\subsection{Standard and Left-Block Paragraphs}
+ X
+ XThe \ms/ macros provide two paragraphing macros. The ".PP" macro
+ Xintroduces indented paragraphs. The ".LP" introduces unindented
+ Xones. They both leave space between paragraphs. One, or more blank
+ Xlines, or the beginning of a section normally introduce a new paragrap
+h
+ Xwith \latex/. The default behaviour is to have the first paragraph of
+ Xeach section unindented, to indent all other paragraphs and to leave n
+o
+ Xgap between paragraphs.
+ X
+ X\subsection{Indented Paragraphs}
+ X
+ XThe \ms/ macros provide a fairly crude basis for producing indented or
+ Xhanging paragraphs in the form of the ".IP" macro. \latex/
+ Xprovides a number of different environments which accomplish the same
+ Xtask.
+ X
+ X\subsubsection{Numbered Paragraphs}
+ X
+ XThese are produced by giving a number argument to the ".IP" macro, as
+in the
+ Xfollowing example:
+ X
+ X\begin{mstext}
+ X ".IP 1."
+ X Text for first paragraph, typed
+ X normally for as long as you would
+ X like on as many lines as needed.
+ X ".IP 2."
+ X Text for second paragraph, \ldots
+ X\end{mstext}
+ X
+ XA similar result can be achieved using the enumerate environment of \l
+atex/:
+ X
+ X\begin{latextext}
+ X "\begin{enumerate}"
+ X \> "\item" \> Text for first paragraph, typed
+ X \> \> normally for as long as you would
+ X \> \> like on as many lines as needed.
+ X
+ X \> "\item" \> Text for second paragraph, \ldots
+ X "\end{enumerate}"
+ X\end{latextext}
+ X
+ X\subsubsection{Bulleted Paragraphs}
+ X
+ XBulleted paragraphs, produced using the \ms/ macro call
+ X
+ X\begin{mstext}
+ X ".IP \(bu"
+ X Text \ldots
+ X\end{mstext}
+ X
+ Xcan be produced in \latex/ by the sequence
+ X
+ X\begin{latextext}
+ X "\begin{itemize}"
+ X \> "\item" Text \ldots
+ X "\end{itemize}"
+ X\end{latextext}
+ X
+ X\subsubsection{Labelled Paragraphs}
+ X
+ XLabelled paragraphs are produced by the \ms/ macro call ".IP".
+ XFor example,
+ X
+ X\begin{mstext}
+ X ".IP first: 9"
+ X Notice the longer label, requiring larger
+ X indenting for these paragraphs.
+ X ".IP second:"
+ X And so forth.
+ X\end{mstext}
+ X
+ Xwill produce something like
+ X
+ X\begin{quote}
+ X\begin{description}
+ X \item[\rm first: 9] \mbox{}
+ X
+ X Notice the longer label, requiring larger
+ X indenting for these paragraphs.
+ X
+ X \item[\rm second:] \mbox{}
+ X
+ X And so forth.
+ X
+ X\end{description}
+ X\end{quote}
+ X
+ XThese are produced in \latex/ use of the "description" environment, wi
+th a
+ Xslightly different appearance:
+ X
+ X\begin{latextext}
+ X "\begin{description}"
+ X \> "\item[first: 9]" \> Notice the longer label, requir
+ing
+ X \> \> larger indenting for these paragraphs.
+ X \> \> Note the different paragraph shape
+ X \> \> and the embolding of the labels with
+ X \> \> \latex/.
+ X \> "\item[second:]" \> And so forth.
+ X "\end{description}"
+ X\end{latextext}
+ X
+ Xproduces
+ X\begin{quote}
+ X\begin{description}
+ X \item[first: 9]
+ X Notice the longer label, requiring larger
+ X indenting for these paragraphs. Note the
+ X different paragraph shape and the embolding
+ X of the labels with \latex/.
+ X \item[second:]
+ X And so forth.
+ X\end{description}
+ X\end{quote}
+ X
+ X\subsubsection{Nested Indented Paragraphs}
+ X
+ XNested indentation is provided by the ".RS" and ".RE" pair of \ms/
+ Xmacros. List environments may be nested freely with \latex/, resulting
+ in correct
+ Xindentation. Also, paragraphs without a leading "\item" will be indent
+ed
+ Xunderneath the most recent paragraph to have a leading "\item".
+ X
+ X
+ X\subsection{Quoted Paragraphs}
+ X
+ XThe direct counterpart of the ".QP" \ms/ macro is the "quote" environm
+ent.
+ XThe direct counterpart of the ".QS" and ".QE" pair of
+ X\ms/ macros is the "quotation" environment.
+ X
+ X\section{Footnotes}
+ X
+ XThe \ms/ macros provide the ".FS" and ".FE" macros pair for collecting
+ Xfootnotes. \latex/ provides the "\footnote" command,\footnote{Like thi
+s}.
+ XThat footnote was produced by writing
+ X
+ X\begin{latextext}
+ X\ldots command."\footnote{"Like this"}" That footnote \ldots
+ X\end{latextext}
+ X
+ X\section{Fonts}
+ X
+ X\subsection{Style}
+ X
+ XThe \ms/ macros allow font styles to be changed by use of one of the f
+ollowing
+ Xcommands:
+ X
+ X\begin{mstext}
+ X".R" {\rm Roman}
+ X".I" {\it Italic}
+ X".B" {\bf Bold}
+ X\end{mstext}
+ X
+ XFor example,
+ X
+ X\begin{mstext}
+ XThis text becomes
+ X".B" {\bf bolder}
+ Xand back again.
+ X\end{mstext}
+ X
+ Xor
+ X
+ X\begin{mstext}
+ XThis text becomes
+ X".B"
+ X{\bf bolder}
+ X".R"
+ Xand back again.
+ X\end{mstext}
+ X
+ Xproduces the word ``bolder'' in the bold font.
+ X
+ X\latex/ has a similar set of commands whose extent is limited by braci
+ng:
+ X
+ X\begin{quote}
+ X\begin{tabular}{ll}
+ X"\rm" & {\rm Roman} \\
+ X"\it" & {\it Italic} \\
+ X"\bf" & {\bf Bold} \\
+ X"\sl" & {\sl Slanted} \\
+ X"\sc" & {\sc Small Capitals} \\
+ X"\sf" & {\sf Sans Serif} \\
+ X"\tt" & {\tt Typewriter}
+ X\end{tabular}
+ X\end{quote}
+ X
+ XThe above example would be written
+ X
+ X\begin{latextext}
+ XThis text becomes "{\bf "{\bf bolder}"}" and back again.
+ X\end{latextext}
+ X
+ X\subsection{Size}
+ X
+ XThe \ms/ macros allow font sizes to be changed by use of one of the fo
+llowing
+ Xcommands:
+ X
+ X\begin{mstext}
+ X".SM" {\small smaller}
+ X".NL" {\normalsize normal size}
+ X".LG" {\large larger}
+ X\end{mstext}
+ X
+ XFor example,
+ X
+ X\begin{mstext}
+ XThis text becomes
+ X".LG"
+ X{\large larger}
+ X".SM"
+ Xand back again.
+ X\end{mstext}
+ X
+ XThe ".SM" an ".LG" macros may be repeated for greater effect.
+ X
+ X\latex/ has a similar set of commands whose extent is limited by braci
+ng.
+ X
+ X\begin{quote}
+ X\begin{tabular}{ll}
+ X"\tiny" & {\tiny tiny} \\
+ X"\scriptsize" & {\scriptsize scriptsize} \\
+ X"\footnotesize" & {\footnotesize footnotesize} \\
+ X"\small" & {\small small} \\
+ X"\normalsize" & {\normalsize normal size} \\
+ X"\large" & {\large large} \\
+ X"\Large" & {\Large Large} \\[\smallskipamount]
+ X"\LARGE" & {\LARGE LARGE} \\[\smallskipamount]
+ X"\huge" & {\huge huge} \\[\smallskipamount]
+ X"\Huge" & {\Huge Huge}
+ X\end{tabular}
+ X\end{quote}
+ X
+ XThe above example would be written
+ X
+ X\begin{latextext}
+ XThis text becomes "{\large "{\large larger}"}" and back again.
+ X\end{latextext}
+ X
+ XNotice that with \latex/ the sizes are absolutely specified and not
+ Xrelatively specified, as with \troff/.
+ X
+ X\cleardoublepage
+ X
+ X\appendix
+ X
+ X\section{Summary}
+ X
+ XThis Appendix provides a quick guide to the correspondences between th
+e \ms/
+ Xmacros (and some raw \troff/ commands) and \latex/ macros. Note that t
+he output
+ Xmay not have an identical appearance in all cases.
+ X
+ X\newenvironment{stack}{\begin{tabular}{l}}{\end{tabular}}
+ X\newcommand{\eoe}{\\[\bigskipamount]}
+ X
+ X\begin{em}
+ X\begin{tabular}{|p{0.2\textwidth}|l|l|}
+ X\hline
+ X\bf Purpose & \bf \ms/ macro call & \bf \latex/ equivalent
+\eoe
+ X\hline \hline
+ X\rm Date & ".ND" date & "\date{"date\/"}" \eoe
+ X\hline
+ X\rm Cover Page & ".RP" & "\titlepage" \eoe
+ X\hline
+ X\rm Author & \begin{stack}
+ X ".AU" \\
+ X author
+ X \end{stack} & "\author{"author\/"}" \
+eoe
+ X\hline
+ X\rm Affiliation & \begin{stack}
+ X ".AI" \\
+ X Institution
+ X \end{stack} & "\thanks{"Institution\/
+"}" \eoe
+ X\hline
+ X\rm Abstract & \begin{stack}
+ X ".AB" \\
+ X \ldots{} abstract \ldots \\
+ X ".AE"
+ X \end{stack} & \begin{stack}
+ X "\begin{abstract}" \\
+ X \ldots{} abstract \ldot
+s \\
+ X "\end{abstract}"
+ X \end{stack} \eoe
+ X\hline
+ X\rm Multi-column formats
+ X & ".2C" & "\twocolumn" \eoe
+ X & ".1C" & "\onecolumn" \eoe
+ X\hline
+ X\rm Section Headings & \begin{stack}
+ X ".SH" \\
+ X heading
+ X \end{stack} & "\section*{"heading\/"}
+" \eoe
+ X & \begin{stack}
+ X ".NH" \\
+ X heading
+ X \end{stack} & "\section{"heading\/"}"
+ \eoe
+ X & \begin{stack}
+ X ".NH 2" \\
+ X heading
+ X \end{stack} & "\subsection{"heading\/
+"}" \eoe
+ X & \begin{stack}
+ X ".NH 3" \\
+ X heading
+ X \end{stack} & "\subsubsection{"headin
+g\/"}" \eoe
+ X & \begin{stack}
+ X ".NH 4" \\
+ X heading
+ X \end{stack} & "\paragraph{"heading\/"
+}" \eoe
+ X & \begin{stack}
+ X ".NH 5" \\
+ X heading
+ X \end{stack} & "\subparagraph{"heading
+\/"}" \eoe
+ X\hline
+ X\end{tabular}
+ X
+ X\begin{tabular}{|p{0.2\textwidth}|l|l|}
+ X\hline
+ X\bf Purpose & \bf \ms/ macro call & \bf \latex/ equivalent
+ \eoe
+ X\hline \hline
+ X\rm Standard and Left-Block paragraphs
+ X & ".LP", ".PP" & one, or more blank line
+s \eoe
+ X\hline
+ X\rm Numbered paragraphs
+ X & \begin{stack}
+ X ".IP" n. \\
+ X Text \ldots \\
+ X \vdots
+ X \end{stack} & \begin{stack}
+ X "\begin{enumerate}" \\
+ X "\item" Text \ldots \\
+ X \vdots \\
+ X "\end{enumerate}"
+ X \end{stack} \eoe
+ X\hline
+ X\rm Bulleted paragraphs
+ X & \begin{stack}
+ X ".IP \(bu" \\
+ X Text \ldots \\
+ X \vdots
+ X \end{stack} & \begin{stack}
+ X "\begin{itemize}" \\
+ X "\item" Text \ldots \\
+ X \vdots \\
+ X "\end{itemize}"
+ X \end{stack} \eoe
+ X\hline
+ X\rm Labelled paragraphs
+ X & \begin{stack}
+ X ".IP" label \\
+ X Text \ldots \\
+ X \vdots
+ X \end{stack} & \begin{stack}
+ X "\begin{description}" \
+\
+ X "\item["label\/"]" Text
+ \ldots \\
+ X \vdots \\
+ X "\end{description}"
+ X \end{stack} \eoe
+ X\hline
+ X\rm Quoted paragraphs
+ X & \begin{stack}
+ X ".QP" \\
+ X Text \ldots \\
+ X \end{stack} & \begin{stack}
+ X "\begin{quote}" \\
+ X Text \ldots \\
+ X "\end{quote}"
+ X \end{stack} \eoe
+ X & \begin{stack}
+ X ".QS" \\
+ X Text \ldots \\
+ X ".QE"
+ X \end{stack} & \begin{stack}
+ X "\begin{quotation}" \\
+ X Text \ldots \\
+ X \vdots \\
+ X "\end{quotation}"
+ X \end{stack} \eoe
+ X\hline
+ X\rm Footnotes & \begin{stack}
+ X ".FS" \\
+ X Text \ldots \\
+ X ".FE"
+ X \end{stack} & "\footnote{"Text \ldots
+ "}" \eoe
+ X\hline
+ X\end{tabular}
+ X
+ X\begin{tabular}{|p{0.2\textwidth}|l|l|}
+ X\hline
+ X\bf Purpose & \bf \ms/ macro call & \bf \latex/ equivalent
+\eoe
+ X\hline \hline
+ X\rm Font Styles & \begin{stack}
+ X ".R" {\rm Roman} \\
+ X ".I" {\it Italic} \\
+ X ".B" {\bf Bold}
+ X \end{stack} &
+ X \begin{stack}
+ X "{\rm" {\rm Roman}"}" \
+\
+ X "{\it" {\it Italic\/}"}
+" \\
+ X "{\bf" {\bf Bold}"}" \\
+ X "{\sl" {\sl Slanted\/}"
+}" \\
+ X "{\sc" {\sc Small Capit
+als}"}" \\
+ X "{\sf" {\sf Sans Serif}
+"}" \\
+ X "{\tt" {\tt Typewriter}
+"}"
+ X \end{stack} \eoe
+ X\hline
+ X\rm Font Sizes &
+ X \begin{stack}
+ X ".SM" {\small smaller} \\
+ X ".NL" {\normalsize normal size} \\
+ X ".LG" {\large larger}
+ X \end{stack} &
+ X \begin{stack}
+ X "{\tiny" {\tiny tiny}"}" \\
+ X "{\scriptsize" {\scriptsize scriptsize}
+"}" \\
+ X "{\footnotesize" {\footnotesize footnot
+esize}"}" \\
+ X "{\small" {\small small}"}" \\
+ X "{\normalsize" {\normalsize normal size
+}"}" \\
+ X "{\large" {\large large}"}" \\
+ X "{\Large" {\Large Large}"}" \\[\smallsk
+ipamount]
+ X "{\LARGE" {\LARGE LARGE}"}" \\[\smallsk
+ipamount]
+ X "{\huge" {\huge huge}"}" \\[\smallskipa
+mount]
+ X "{\Huge" {\Huge Huge}"}"
+ X \end{stack} \eoe
+ X\hline
+ X\end{tabular}
+ X\end{em}
+ X
+ X\bibliographystyle{alpha}
+ X\bibliography{refs}
+ X
+ X\end{document}
+SHAR_EOF
+if test 17397 -ne "`wc -c < 'ms-latex.tex'`"
+then
+ echo shar: "error transmitting 'ms-latex.tex'" '(should have been 17397
+ characters)'
+fi
+fi
+echo shar: "extracting 'sfwmac.sty'" '(1626 characters)'
+if test -f 'sfwmac.sty'
+then
+ echo shar: "will not over-write existing file 'sfwmac.sty'"
+else
+sed 's/^ X//' << \SHAR_EOF > 'sfwmac.sty'
+ X% LaTeX support for writing UNIX-style documentation
+ X
+ X
+ X% UNIX-style references
+ X
+ X\def\sfwFILfont{\sl}
+ X
+ X\def\@egaux#1#2#3{%
+ X \def#1##1{%
+ X #2\begingroup \tt \let\do=\@makeother \dospecials
+ X \def\@tempa####1##1{####1\endgroup#3}\@tempa
+ X }%
+ X}
+ X
+ X\def\pgm#1{\mbox{\it#1}\index{#1}} % programs
+ X\def\xpgm#1#2{\mbox{\it#1}\index{\noexpand\noexpand\noexpand#2{}}}
+ X\def\man#1(#2){\xpgm{#1\/}{#1}(#2)} % manual entries
+ X\@egaux\arg{`{}}{'{}} % arguments to programs
+ X\@egaux\switch{`{}-}{'{}} % switches to programs
+ X\def\file#1{\mbox{\sfwFILfont#1}} % filename
+ X
+ X
+ X% Commonly used software systems
+ X
+ X\def\sfwPGMfont{\tt}
+ X
+ X\def\@sfwdef#1#2{\@sfwaux{#1/}{#2}}
+ X\def\@sfwaux#1#2{\def#1{\mbox{#2}\index{\noexpand\noexpand\noexpand#1{
+}}}}
+ X
+ X\@sfwdef\EMACS{\sfwPGMfont EMACS}
+ X\@sfwdef\INFO{\sfwPGMfont INFO}
+ X\@sfwdef\MLisp{\sfwPGMfont MLisp}
+ X
+ X\@sfwdef\SendMail{\sfwPGMfont SendMail}
+ X\@sfwdef\UUCP{\sfwPGMfont UUCP}
+ X
+ X\def\AmS{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\c
+al S$}
+ X\@sfwaux\AmSTeX{\rm \AmS-\TeX}
+ X
+ X\@sfwaux\PhDTeX{\rm P\kern-.05em{\sc h\kern-.025em D}\kern-0.08em\TeX}
+ X
+ X\@sfwaux\LaTeX{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}
+ X\@sfwaux\BibTeX{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em\TeX}
+ X\@sfwaux\SLiTeX{\rm S\kern-.06em{\sc l\kern-.035emi}\kern-.06em\TeX}
+ X
+ X
+ X\@sfwdef\WEB{\sfwPGMfont WEB}
+ X
+ X\@sfwdef\Prolog{\sfwPGMfont Prolog}
+ X\@sfwdef\Lisp{\sfwPGMfont Lisp}
+ X
+ X\@sfwdef\DBUG{\sfwPGMfont DBUG}
+ X
+ X\@sfwdef\troff{\sfwPGMfont troff}
+ X\@sfwdef\nroff{\sfwPGMfont nroff}
+ X\@sfwdef\Miranda{\sfwPGMfont Miranda}
+ X\@sfwdef\AiM{\sfwPGMfont AiM}
+ X\@sfwdef\ASN{\sfwPGMfont ASN.1}
+ X\@sfwdef\ISODE{\sfwPGMfont ISODE}
+ X
+SHAR_EOF
+if test 1626 -ne "`wc -c < 'sfwmac.sty'`"
+then
+ echo shar: "error transmitting 'sfwmac.sty'" '(should have been 1626 ch
+aracters)'
+fi
+fi
+exit 0
+: End of shell archive
+
+------- Message 2
+
+Date: Wed, 08 Apr 87 06:46:43 -0400
+Subject: Returned mail: Host unknown
+From: Mail Delivery Subsystem <Postmaster@seismo.uucp>
+To: jrp@psg.npl.co.uk
+
+ ----- Transcript of session follows -----
+550 su-score.arpa!texhax... Host unknown
+
+ ----- Unsent message follows -----
+Received: from mcvax.UUCP by seismo.CSS.GOV (5.54/1.14) with UUCP
+ id AA02312; Wed, 8 Apr 87 06:46:43 EDT
+Received: by mcvax.cwi.nl; Wed, 8 Apr 87 03:53:02 +0200 (MET)
+Received: from nplpsg.uucp by kestrel.Ukc.AC.UK with UUCP id aa05412;
+ 8 Apr 87 0:10 BST
+Received: from snow by snow.psg.npl.co.uk; Tue, 7 Apr 87 23:48:58 BST
+To: texhax@su-score.arpa
+Subject: LaTeX for the troff -ms Macros User
+Return-Receipt-To: mcvax!psg.npl.co.uk!jrp
+Date: Tue, 07 Apr 87 22:48:57 GMT
+Message-Id: <6189.544834137@psg.npl.co.uk>
+From: John Pavel <mcvax!nplpsg!jrp>
+
+
+Here is a textual version of the first cut on a paper that should
+help anyone trying to convert from the -ms macros to LaTeX.
+
+I would welcome any contributions to completing/correcting this paper.
+
+Thanks,
+
+John Pavel
+
+- --snip----snip----snip----snip----snip----snip----snip----snip--
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTEX for the troff -ms Macros User
+
+
+ John Pavel
+ National Physical Laboratory
+ Teddington, UK
+
+
+ jrp@nplpsg.UUCP
+
+ 87/04/07 at 23:37:25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Abstract
+
+ This document is intended to serve as a brief
+ reference to aTEX for those who are familiar
+ with troff and -ms macros. This version is a
+ draft for comment.
+
+
+
+
+
+
+ Contents
+
+ 1Introduction 2
+
+ 2Getting Started with LaTX 2
+ 3Document Structure 3
+
+ 4Page Headings 4
+
+ 5Multi-column Formats 5
+ 6Section Headings 5
+
+ 7Paragraphs 6
+ 7.1Standard and Left-Block Paragraphs :::::: 6
+ 7.2Indented Paragraphs :::::::::: :::::::::: 7
+ 7.2Numbered Paragraphs ::::::: :::::::::: 7
+ 7.2Bulleted Paragraphs ::::::: :::::::::: 7
+ 7.2Labelled Paragraphs ::::::: :::::::::: 8
+ 7.2Nested Indented Paragraphs: :::::::::: 9
+ 7.3Quoted Paragraphs :::::::::::: :::::::::: 9
+ 8Footnotes 9
+
+ 9Fonts 9
+ 9.1Style :::::::::: ::::::::::::: :::::::::: 9
+ 9.2Size ::::::::::: ::::::::::::: :::::::::: 10
+
+ ASummary 12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 1 Introduction
+
+ This document is intended to serve as a quick
+ reference to those converting from troff with
+ the -ms macros [Les76] to aTEX [Lam86]. The
+ reader is assumed to have a working knowledge
+ of the -ms macros. Furthermore, the reader
+ must have read at least Chapter 2 of the LaTX
+
+ manual[Lam86]. That chapter covers the basics
+ of aTEX.
+ The default behaviour of LaTEX is described.
+ With a certain amount of configuring, LaTX
+ output.indSuch configuring ais,showever,tbeyond
+ the scope of this document. Similarly, LaTX
+ has many features which are not described.
+ These include
+
+ ?diagram production;
+
+ ?mathematical typesetting;
+
+ ?the typesetting of program sources;
+ ?automatic cross-referencing and index pro-
+ duction;
+
+ ?the layout of tables;
+
+ The LTEX[Lam86] and TEX[Knu86] manuals should
+ be consulted for the full story.
+
+
+ 2 Getting Started with aTEX
+
+ To run aTEX on a file called either file or,
+ more conventionally, file.tex, type
+
+ % latex file
+
+ By default, the file will be taken from
+ either your current directory, or, if no
+ such file appears there, the directory
+ /usr/lib/tex/macros will be searched.
+
+
+ 2
+
+
+
+
+
+
+ Running LaTEX produces a DVI file (file.dvi
+ for the above example). You can send this to
+ the Imagen by using iptex(l):
+
+ % iptex file
+
+ Alternatively, you may like to preview it on
+ the Sun screen by using texview(l):
+
+ % texview file
+ The LaTX Manual[Lam86] will refer you to a
+ Local Guide. This guide can be found in the
+
+ file /usr/lib/tex/macros/local.tex, and so can
+ be printed out by
+ % latex local
+ % latex local
+ % iptex local
+
+ No, that is not a mis-print. You will need
+ to run LaTX twice. It needs to make two
+ passes to establish all the cross-references.
+ Normally, you will do this only for a final
+ copy. You may now get rid of all the temporary
+ files that aTEX creates with
+
+ % texclean
+ Two other files that you might like to look
+
+ at in the /usr/lib/tex/macros directory are
+ small.tex and sample.tex.
+
+
+ 3 Document Structure
+
+ The -ms macros assume a document structure of
+ the following form:
+
+ [optional date specification: .ND a date]
+ [optional overall format: .RP---see below]
+ .TL
+ Title of document (one or more lines)
+ .AU
+ Author(s) (may also be several lines)
+
+ 3
+
+
+
+
+
+
+ .AI
+ Author's institution(s)
+ .AB
+ Abstract; to be placed on the cover sheet of a paper.
+ .AE (abstract end)
+ text .
+
+
+ A aTEX document has an analogous structure:
+
+ \documentstyle[aSpecifiesethe document style.
+ a4 is for A4 paper
+
+ \title{Title of document (each line of title separated by \\)}
+ \author{Author(s) (each author separated by \and)}
+ \date{a date}
+
+ \begin{documenEnd of preamble and beginning of text.
+
+ \maketitle Produces the title.
+ \tableofcProduces the table of contents.
+
+ \begin{abstract}
+ Abstract; to be placed under the title
+ \end{abstract}
+
+ body of text .
+
+ \end{document}
+
+
+ If a separate title page and abstract page
+ are preferred, the titlepage style option
+ should be used:
+
+ \documentstyle[titlepage,a4]{article}
+ .
+
+
+
+ 4 Page Headings
+
+ The -ms macros allow headings and footings to
+ be set by means of string definitions:
+
+ 4
+
+
+
+
+
+
+ .dsLH left header
+ .dsCH center header
+ .dsRH right header
+ .dsLF left footer
+ .dsCF center footer
+ .dsRF right footer
+
+
+ The scheme in LaTX is slightly different;
+ there are four page styles: plain (the
+ default), empty, headings and myheadings.
+ These are activated by a
+
+ \pagestyle{style}
+
+ command. To set your own headings, the
+ commands \markboth (for two-sided documents)
+ and \markright (for one-sided documents) are
+ required in addition:
+
+ \markright{heading} or \markboth{left head}{right head}
+ \pagestyle{myheadings}
+
+
+
+ 5 Multi-column Formats
+
+ The .2C and .1C -ms macros permit changing
+ to two-column and single-column format. The
+ analagous aTEX commands are \twocolumn and
+
+ \onecolumn. Like their -ms counterparts, they
+ also skip to a new page. If a complete
+ document is to be produced in two-column
+ format, the twocolumn style option should
+ be used, since that alters various style
+ parameters, such as the amount of paragraph
+ indentation, while the \twocolumn command does
+ not.
+
+
+ 6 Section Headings
+
+ The -ms macros
+
+ 5
+
+
+
+
+
+
+ .NH
+ numbered section heading
+ may be several lines
+
+
+ and
+ .SH
+ unnumbered section heading
+
+
+ correspond to the aTEX commands
+ \section{numbered section heading
+ may be several lines}
+
+
+ and
+
+ \section*{section heading}
+
+ Instead of specifying depth of level number
+ for sub-sections, as is done with the -ms
+ macros, LaTX provides specific \subsection,
+ \subsubsection, \paragraph and \subsubparagraph
+ commands.1
+
+
+ 7 Paragraphs
+
+
+ 7.1 Standard and Left-Block Paragraphs
+ The -ms macros provide two paragraphing macros.
+ The .PP macro introduces indented paragraphs.
+ The .LP introduces unindented ones. They
+ both leave space between paragraphs. One,
+ or more blank lines, or the beginning of a
+ section normally introduce a new paragraph with
+ aTEX. The default behaviour is to have the
+ first paragraph of each section unindented, to
+ indent all other paragraphs and to leave no gap
+ between paragraphs.
+ --------------------
+ 1Documents written in the report document
+ style may also be divided into chapters and
+ parts.
+
+ 6
+
+
+
+
+
+
+ 7.2 Indented Paragraphs
+
+ The -ms macros provide a fairly crude basis for
+ producing indented or hanging paragraphs in the
+ form of the .IP macro. aTEX provides a number
+ of different environments which accomplish the
+ same task.
+
+ 7.2.1 Numbered Paragraphs
+
+ These are produced by giving a number argument
+ to the .IP macro, as in the following example:
+
+ .IP1.
+ Text for first paragraph, typed
+ normally for as long as you would
+ like on as many lines as needed.
+ .IP2.
+ Text for second paragraph, .
+
+
+ A similar result can be achieved using the
+ enumerate environment of aTEX:
+
+ \begin{enumerate}
+ \item Text for first paragraph, typed
+ normally for as long as you would
+ like on as many lines as needed.
+
+ \item Text for second paragraph, .
+ \end{enumerate}
+
+
+
+ 7.2.2 Bulleted Paragraphs
+ Bulleted paragraphs, produced using the -ms
+ macro call
+
+ .IP\(bu
+ Text .
+
+
+ can be produced in aTEX by the sequence
+
+
+ 7
+
+
+
+
+
+
+ \begin{itemize}
+ \item Text .
+ \end{itemize}
+
+
+
+ 7.2.3 Labelled Paragraphs
+
+ Labelled paragraphs are produced by the -ms
+ macro call .IP. For example,
+
+ .IPfirst:9
+ Notice the longer label, requiring larger
+ indenting for these paragraphs.
+ .IPsecond:
+ And so forth.
+
+ will produce something like
+
+ first: 9
+ Notice the longer label, requiring
+ larger indenting for these para-
+ graphs.
+
+ second:
+ And so forth.
+
+ These are produced in aTEX use of the
+ description environment, with a slightly
+ different appearance:
+
+ \begin{description}
+ \item[firNotice the longer label, requiring
+ larger indenting for these paragraphs.
+ Note the different paragraph shape
+ and the embolding of the labels with
+ aTEX.
+ \item[secAnd:so forth.
+ \end{description}
+
+
+ produces
+
+
+
+ 8
+
+
+
+
+
+
+ first: 9 Notice the longer label, re-
+ quiring larger indenting for these
+ paragraphs. Note the different
+ paragraph shape and the embolding of
+ the labels with LaTX.
+ second: And so forth.
+
+
+ 7.2.4 Nested Indented Paragraphs
+
+ Nested indentation is provided by the .RS and
+ .RE pair of -ms macros. List environments
+ may be nested freely with LaTX, resulting in
+ correct indentation. Also, paragraphs without
+ a leading \item will be indented underneath the
+ most recent paragraph to have a leading \item.
+
+
+ 7.3 Quoted Paragraphs
+ The direct counterpart of the .QP -ms macro is
+ the quote environment. The direct counterpart
+ of the .QS and .QE pair of -ms macros is the
+ quotation environment.
+
+
+ 8 Footnotes
+
+
+ The -ms macros provide the .FS and .FE macros
+ pair for collecting footnotes. LTEX provides
+ the \footnote command,2. That footnote was
+ produced by writing
+ . command.\footnote{Like this} That footnote .
+
+
+
+ 9 Fonts
+
+
+ 9.1 Style
+ The -ms macros allow font styles to be changed
+ by use of one of the following commands:
+ --------------------
+ 2Like this
+
+ 9
+
+
+
+
+
+
+ .R Roman
+ .I Italic
+ .B Bold
+
+
+ For example,
+
+ This text becomes
+ .B bolder
+ and back again.
+
+
+ or
+
+ This text becomes
+ .B
+ bolder
+ .R
+ and back again.
+
+ produces the word "bolder" in the bold font.
+ aTEX has a similar set of commands whose
+ extent is limited by bracing:
+
+ \rm Roman
+ \it Italic
+
+ \bf Bold
+ \sl Slanted
+ \sc Small Capitals
+ \sf Sans Serif
+ \tt Typewriter
+
+ The above example would be written
+
+ This text becomes {\bf bolder} and back again.
+
+
+ 9.2 Size
+
+ The -ms macros allow font sizes to be changed
+ by use of one of the following commands:
+
+
+
+ 10
+
+
+
+
+
+
+ .SM smaller
+ .NL normal size
+ .LG larger
+
+
+ For example,
+
+ This text becomes
+ .LG
+ larger
+ .SM
+ and back again.
+
+
+ The .SM an .LG macros may be repeated for
+ greater effect.
+ aTEX has a similar set of commands whose
+ extent is limited by bracing.
+
+ \tiny tiny
+ \scriptsize scriptsize
+ \footnotesize footnotesize
+ \small small
+ \normalsize normal size
+ \large large
+ \Large Large
+
+ \LARGE LARGE
+ \huge huge
+ \Huge Huge
+
+ The above example would be written
+
+ This text becomes {\large larger} and back again.
+
+
+ Notice that with aTEX the sizes are abso-
+ lutely specified and not relatively specified,
+ as with troff.
+
+
+
+
+
+
+ 11
+
+
+
+
+
+
+ A Summary
+
+ This Appendix provides a quick guide to the
+ correspondences between the -ms macros (and
+
+ some raw troff commands) and LaTX macros. Note
+ that the output may not have an identical
+ ap-----------------------------------------------------
+ -Purpose --ms macro call -aTEX equivalent -
+ ------------------------------------------------------
+ -Date -.ND date -\date{date} -
+ ------------------------------------------------------
+ -Cover -.RP -\titlepage -
+ -Page - - -
+ -------------.AU--------------------------------------
+ -Author - author -\author{author} -
+ -------------.AI--------------------------------------
+ -Affiliatio- -\thanks{Institution} -
+ - - Institution - -
+ -------------.AB--------------\begin{abstract}--------
+ -Abstract - . abstract . - . abstract . -
+ - - .AE - -
+ ------------------------------------------------------
+ -Multi- -.2C -\twocolumn -
+ -column - - -
+ -formats - - -
+ - -.1C -\onecolumn -
+ -------------.SH--------------------------------------
+ -Section - -\section*{heading} -
+ -Headings - heading - -
+ - - .NH - -
+ - - -\section{heading} -
+ - - heading - -
+ - - .NH2 - -
+ - - heading -\subsection{heading} -
+ - - .NH3 - -
+ - - -\subsubsection{heading} -
+ - - heading - -
+ - - .NH4 - -
+ - - heading -\paragraph{heading} -
+ - - .NH5 - -
+ - - -\subparagraph{heading} -
+ ------------------------------------------------------
+
+
+ 12
+
+
+
+
+
+ -----------------------------------------------------
+ -Purpose --ms macro call LaTEX equivalent -
+ -----------------------------------------------------
+ -Standard -.LP, .PP one, or more blank lines -
+ -and Left- - - -
+ -Block - - -
+ -para- - - -
+ -graphs - - -
+ -----------------------------------------------------
+ - - .IP n. -\begin{enumerate} -
+ -Numbered - Text . -.item Text . -
+ -para- - . - -
+ -graphs - -\end{enumerate} -
+ -----------------------------------------------------
+ - - .IP\(bu -\begin{itemize} -
+ - - Text . -\item Text . -
+ -Bulleted - . -. -
+ -para- - - -
+ -----------------------------------------------------
+ - - -\begin{description} -
+ - - .IP label -\item[label] Text . -
+ -Labelled - .ext . -. -
+ -para- - - -
+ -----------------------------------------------------
+ - - .QP -\begin{quote} -
+ -Quoted - -Text . -
+ -para- - Text . -\end{quote} -
+ -graphs - - -
+ - - - -
+ - - .QS -\begin{quotation} -
+ - - Text . -.ext . -
+ - - .QE - -
+ - - -\end{quotation} -
+ -------------.FS-------------------------------------
+ -Footnotes - Text . \footnote{Text . } -
+ - - .FE - -
+ -----------------------------------------------------
+
+
+
+
+
+
+
+
+
+ 13
+
+
+
+
+
+ -------------------------------------------------------------
+ -Purpose --ms macro call -LaTX equivalent -
+ --------------------------------------------------------------
+ - - - {\rm Roman} -
+ - - - {\it Italic} -
+ - - - -
+ - - .R Roman - {\bf Bold} -
+ -Font - .I Italic - {\sl Slanted} -
+ -Styles - .B Bold - {\sc Small Capitals} -
+ - - - {\sf Sans Serif} -
+ --------------------------------------------------------------
+ - - - {\tiny tiny} -
+ - - - {\scriptsize scriptsize} -
+ - - - {\footnotesize footnotesize} -
+ - - - {\small small} -
+ - - .SM smaller - {\normalsize normal size} -
+ -Font - .NL normal size - -
+ -Sizes - .LG larger - {\large large} -
+ - - - {\Large Large} -
+ - - - {\LARGE LARGE} -
+ - - - {\huge huge} -
+ - - - -
+ --------------------------------------------------------------
+
+
+ References
+
+ [Knu86]Donald E. Knuth. The TEXbook. Volume A
+ of Computers and Typesetting Series,
+ Addison-Wesley, 1986.
+
+ [Lam86]Leslie Lamport. LaTEX: A Document
+ Preparation System. Addison-Wesley,
+ 1986.
+
+ [Les76]Mike E. Lesk. Using the -ms Macros with
+ troff and nroff. October 8 1976.
+
+
+
+
+
+
+
+
+
+ 14
+
+
+------- End of Forwarded Messages
+
+20-Apr-87 02:52:07-PDT,21714;000000000000
+Return-Path: <ken@rochester.arpa>
+To: texhax@score.stanford.edu
+Subject: John Pavel's message
+X-Uucp: ..!{allegra,decvax,seismo}!rochester!ken ARPA: ken@rochester.arpa
+X-Snail: CS Dept., U of Roch., NY 14627. Voice: Ken!
+X-Phone: (716) 275-2569 (office), (716) 244-3806 (home)
+Date: Mon, 20 Apr 87 04:54:38 -0500
+From: Ken Yap <ken@rochester.arpa>
+
+John Pavel's message seems to have been the victim of a nasty gateway
+that snips lines at column 72. I think I have put it back together OK.
+Here is a replacement shar file.
+
+ Ken
+
+#! /bin/sh
+# This is a shell archive, meaning:
+# 1. Remove everything above the #! /bin/sh line.
+# 2. Save the resulting text in a file.
+# 3. Execute the file with /bin/sh (not csh) to create:
+# ms-latex.tex
+# sfwmac.sty
+# This archive created: Mon Apr 20 04:53:57 1987
+# By: Ken Yap ()
+export PATH; PATH=/bin:/usr/bin:$PATH
+echo shar: "extracting 'ms-latex.tex'" '(17400 characters)'
+if test -f 'ms-latex.tex'
+then
+ echo shar: "will not over-write existing file 'ms-latex.tex'"
+else
+cat << \SHAR_EOF > 'ms-latex.tex'
+\documentstyle[12pt,a4,titlepage,sfwmac]{article}
+
+% Some local macros, mostly stolen from the scheme distribution
+
+% Same as \obeycr, but doesn't do a \@gobblecr.
+{\catcode`\^^M=13 \gdef\myobeycr{\catcode`\^^M=13 \def^^M{\\}}%
+\gdef\restorecr{\catcode`\^^M=5 }}
+
+{\catcode`\^^I=13 \gdef\obeytabs{\catcode`\^^I=13 \def^^I{\hbox{\hskip 4em}}}}
+
+{\makeatletter \gdef\gobblecr{\@gobblecr}}
+
+\newenvironment{mstext}%
+ {\obeyspaces \myobeycr \em
+ \begin{tabbing}%
+ \qquad\=\hspace*{5em}\=\hspace*{9em}\=\+\kill% was 16em
+ \gobblecr}%
+ {\unskip\end{tabbing}}
+
+\newenvironment{latextext}{
+\obeyspaces \myobeycr \em
+\begin{tabbing}%
+\qquad\=\hspace*{5em}\=\hspace*{9em}\=\+\kill% was 16em
+\gobblecr}{\unskip\end{tabbing}}
+
+\catcode`\"=\active
+{\makeatletter {\gdef"{\begingroup \catcode``=13
+ \@noligs \tt \let\do\@makeother \dospecials \let"=\endgroup}}}
+
+\newcommand{\latex}[1]{\LaTeX}
+\newcommand{\ms}[1]{\mbox{\tt -ms}}
+\let\endverbatim=\endtrivlist
+
+\title{\latex/ for the \troff/ \ms/ Macros User}
+\author{John Pavel \\
+National Physical Laboratory \\
+Teddington, UK\\[\bigskipamount]
+"jrp@nplpsg.UUCP"}
+
+\date{87/04/07 at 23:37:25%
+}
+
+\begin{document}
+
+ \maketitle
+
+ \begin{abstract}
+
+ This document is intended to serve as a brief reference to \latex/ for
+ those who are familiar with \troff/ and \ms/ macros. This version
+ is a draft for comment.
+
+ \end{abstract}
+
+ \tableofcontents
+
+\cleardoublepage
+
+\section{Introduction}
+
+This document is intended to serve as a quick reference to those
+converting from \troff/ with the \ms/ macros~\cite{ms} to
+\latex/~\cite{LaTeX}. The reader is assumed to have a working knowledge
+of the \ms/ macros. Furthermore, the reader {\em must\/} have read at least
+Chapter~2 of the \latex/ manual\cite{LaTeX}. That chapter covers the basics of
+\latex/.
+
+The default behaviour of \latex/ is described. With a certain amount of
+configuring, \latex/ can be induced to produce almost any style of
+output. Such configuring is, however, beyond the scope of this
+document. Similarly, \latex/ has many features which are not described.
+These include
+
+\begin{itemize}
+\item diagram production;
+\item mathematical typesetting;
+\item the typesetting of program sources;
+\item automatic cross-referencing and index production;
+\item the layout of tables;
+\end{itemize}
+
+The \latex/\cite{LaTeX} and \TeX\cite{TeX} manuals
+should be consulted for the full story.
+
+\section{Getting Started with \latex/}
+
+To run \latex/ on a file called either "file" or, more conventionally,
+"file.tex", type
+\begin{verbatim}
+ % latex file
+\end{verbatim}
+
+By default, the file will be taken from either your current
+directory, or, if no such file appears there, the directory
+"/usr/lib/tex/macros" will be searched.
+
+Running \latex/ produces a DVI file ("file.dvi" for the above example)
+.
+You can send this to the {\sf Imagen} by using \pgm{iptex}(l):
+\begin{verbatim}
+ % iptex file
+\end{verbatim}
+
+Alternatively, you may like to preview it on the {\sf Sun} screen by using
+\pgm{texview}(l):
+\begin{verbatim}
+ % texview file
+\end{verbatim}
+
+The \latex/ Manual\cite{LaTeX} will refer you to a {\sl Local Guide}.
+This guide can be found in the file "/usr/lib/tex/macros/local.tex", and
+so can be printed out by
+\begin{verbatim}
+ % latex local
+ % latex local
+ % iptex local
+\end{verbatim}
+
+No, that is not a mis-print. You will need to run \latex/ twice. It
+needs to make two passes to establish all the cross-references.
+Normally, you will do this only for a final copy.
+You may now get rid of all the temporary files that \latex/ creates with
+\begin{verbatim}
+ % texclean
+\end{verbatim}
+
+Two other files that you might like to look at in the
+"/usr/lib/tex/macros" directory are "small.tex" and "sample.tex".
+
+\section{Document Structure}
+
+The \ms/ macros assume a document structure of the following form:
+
+\begin{mstext}
+ {[optional date specification: ".ND" a date]}
+ {[optional overall format: ".RP"---see below]}
+ ".TL"
+ Title of document (one or more lines)
+ ".AU"
+ Author(s) (may also be several lines)
+ ".AI"
+ Author's institution(s)
+ ".AB"
+ Abstract; to be placed on the cover sheet of a paper.
+ ".AE" (abstract end)
+ text \ldots
+\end{mstext}
+
+A \latex/ document has an analogous structure:
+
+\begin{latextext}
+ "\documentstyle[a4]{article}" \>\> \` Specifies the document style.
+ \>\> \` {\tt a4} is for A4 paper
+
+ "\title{"Title of document %
+(each line of title separated by "\\")\/"}"
+ "\author{"Author(s) (each author separated by "\and")\/"}"
+ "\date{"a date"}"
+
+ "\begin{document}" \>\> \` End of preamble and beginning of text.
+
+ \> "\maketitle" \> \` Produces the title.
+ \> "\tableofcontents" \> \` Produces the table of contents.
+
+ \> "\begin{abstract}"
+ \> Abstract; to be placed under the title
+ \> "\end{abstract}"
+
+ \> body of text \ldots
+
+ "\end{document}"
+\end{latextext}
+
+If a separate title page and abstract page are preferred,
+the "titlepage" style option should be used:
+
+\begin{latextext}
+ "\documentstyle[titlepage,a4]{article}"
+ \> \ldots
+\end{latextext}
+
+\section{Page Headings}
+
+The \ms/ macros allow headings and footings to be set by means of string
+definitions:
+\begin{mstext}
+".ds LH" left header
+".ds CH" center header
+".ds RH" right header
+".ds LF" left footer
+".ds CF" center footer
+".ds RF" right footer
+\end{mstext}
+
+The scheme in \latex/ is slightly different;
+there are four page styles: "plain" (the default), "empty", "headings" and
+"myheadings". These are activated by a
+
+\begin{latextext}
+"\pagestyle{"style\/"}"
+\end{latextext}
+
+command. To set your own headings, the commands "\markboth" (for two-sided documents)
+and "\markright" (for one-sided documents) are required in addition:
+
+\begin{latextext}
+"\markright{"heading\/"}" or "\markboth{"left head\/"}{"right head\/"}"
+"\pagestyle{myheadings}"
+\end{latextext}
+
+\section{Multi-column Formats}
+
+\begin{sloppypar}
+The ".2C" and ".1C" \ms/ macros permit changing to
+two-column and single-column format. The analagous \latex/ commands
+are "\twocolumn" and "\onecolumn". Like their \ms/
+counterparts, they also skip to a new page. If a complete document is
+to be produced in two-column format, the "twocolumn" style option
+should be used, since that alters various style parameters, such as
+the amount of paragraph indentation, while the
+"\twocolumn" command does not.
+\end{sloppypar}
+
+\section{Section Headings}
+
+The \ms/ macros
+
+\begin{mstext}
+ ".NH"
+ numbered section heading
+ may be several lines
+\end{mstext}
+
+and
+
+\begin{mstext}
+ ".SH"
+ unnumbered section heading
+\end{mstext}
+
+correspond to the \latex/ commands
+
+\begin{latextext}
+ "\section{"numbered section heading
+ \> may be several lines"}"
+\end{latextext}
+
+ and
+
+\begin{latextext}
+ "\section*{"section heading"}"
+\end{latextext}
+
+Instead of specifying depth of level number for sub-sections, as is done
+with the \ms/ macros, \latex/ provides specific "\subsection",
+"\subsubsection", "\paragraph" and "\subsubparagraph"
+commands.\footnote{Documents written in the "report" document style may also
+be divided into "chapter"s and "part"s.}
+
+\section{Paragraphs}
+
+\subsection{Standard and Left-Block Paragraphs}
+
+The \ms/ macros provide two paragraphing macros. The ".PP" macro
+introduces indented paragraphs. The ".LP" introduces unindented
+ones. They both leave space between paragraphs. One, or more blank
+lines, or the beginning of a section normally introduce a new paragraph
+with \latex/. The default behaviour is to have the first paragraph of
+each section unindented, to indent all other paragraphs and to leave no
+gap between paragraphs.
+
+\subsection{Indented Paragraphs}
+
+The \ms/ macros provide a fairly crude basis for producing indented or
+hanging paragraphs in the form of the ".IP" macro. \latex/
+provides a number of different environments which accomplish the same
+task.
+
+\subsubsection{Numbered Paragraphs}
+
+These are produced by giving a number argument to the ".IP" macro, as in the
+following example:
+
+\begin{mstext}
+ ".IP 1."
+ Text for first paragraph, typed
+ normally for as long as you would
+ like on as many lines as needed.
+ ".IP 2."
+ Text for second paragraph, \ldots
+\end{mstext}
+
+A similar result can be achieved using the enumerate environment of \latex/:
+
+\begin{latextext}
+ "\begin{enumerate}"
+ \> "\item" \> Text for first paragraph, typed
+ \> \> normally for as long as you would
+ \> \> like on as many lines as needed.
+
+ \> "\item" \> Text for second paragraph, \ldots
+ "\end{enumerate}"
+\end{latextext}
+
+\subsubsection{Bulleted Paragraphs}
+
+Bulleted paragraphs, produced using the \ms/ macro call
+
+\begin{mstext}
+ ".IP \(bu"
+ Text \ldots
+\end{mstext}
+
+can be produced in \latex/ by the sequence
+
+\begin{latextext}
+ "\begin{itemize}"
+ \> "\item" Text \ldots
+ "\end{itemize}"
+\end{latextext}
+
+\subsubsection{Labelled Paragraphs}
+
+Labelled paragraphs are produced by the \ms/ macro call ".IP".
+For example,
+
+\begin{mstext}
+ ".IP first: 9"
+ Notice the longer label, requiring larger
+ indenting for these paragraphs.
+ ".IP second:"
+ And so forth.
+\end{mstext}
+
+will produce something like
+
+\begin{quote}
+\begin{description}
+ \item[\rm first: 9] \mbox{}
+
+ Notice the longer label, requiring larger
+ indenting for these paragraphs.
+
+ \item[\rm second:] \mbox{}
+
+ And so forth.
+
+\end{description}
+\end{quote}
+
+These are produced in \latex/ use of the "description" environment, with a
+slightly different appearance:
+
+\begin{latextext}
+ "\begin{description}"
+ \> "\item[first: 9]" \> Notice the longer label, requiring
+ \> \> larger indenting for these paragraphs.
+ \> \> Note the different paragraph shape
+ \> \> and the embolding of the labels with
+ \> \> \latex/.
+ \> "\item[second:]" \> And so forth.
+ "\end{description}"
+\end{latextext}
+
+produces
+\begin{quote}
+\begin{description}
+ \item[first: 9]
+ Notice the longer label, requiring larger
+ indenting for these paragraphs. Note the
+ different paragraph shape and the embolding
+ of the labels with \latex/.
+ \item[second:]
+ And so forth.
+\end{description}
+\end{quote}
+
+\subsubsection{Nested Indented Paragraphs}
+
+Nested indentation is provided by the ".RS" and ".RE" pair of \ms/
+macros. List environments may be nested freely with \latex/, resulting in correct
+indentation. Also, paragraphs without a leading "\item" will be indented
+underneath the most recent paragraph to have a leading "\item".
+
+
+\subsection{Quoted Paragraphs}
+
+The direct counterpart of the ".QP" \ms/ macro is the "quote" environment.
+The direct counterpart of the ".QS" and ".QE" pair of
+\ms/ macros is the "quotation" environment.
+
+\section{Footnotes}
+
+The \ms/ macros provide the ".FS" and ".FE" macros pair for collecting
+footnotes. \latex/ provides the "\footnote" command,\footnote{Like this}.
+That footnote was produced by writing
+
+\begin{latextext}
+\ldots command."\footnote{"Like this"}" That footnote \ldots
+\end{latextext}
+
+\section{Fonts}
+
+\subsection{Style}
+
+The \ms/ macros allow font styles to be changed by use of one of the following
+commands:
+
+\begin{mstext}
+".R" {\rm Roman}
+".I" {\it Italic}
+".B" {\bf Bold}
+\end{mstext}
+
+For example,
+
+\begin{mstext}
+This text becomes
+".B" {\bf bolder}
+and back again.
+\end{mstext}
+
+or
+
+\begin{mstext}
+This text becomes
+".B"
+{\bf bolder}
+".R"
+and back again.
+\end{mstext}
+
+produces the word ``bolder'' in the bold font.
+
+\latex/ has a similar set of commands whose extent is limited by bracing:
+
+\begin{quote}
+\begin{tabular}{ll}
+"\rm" & {\rm Roman} \\
+"\it" & {\it Italic} \\
+"\bf" & {\bf Bold} \\
+"\sl" & {\sl Slanted} \\
+"\sc" & {\sc Small Capitals} \\
+"\sf" & {\sf Sans Serif} \\
+"\tt" & {\tt Typewriter}
+\end{tabular}
+\end{quote}
+
+The above example would be written
+
+\begin{latextext}
+This text becomes "{\bf "{\bf bolder}"}" and back again.
+\end{latextext}
+
+\subsection{Size}
+
+The \ms/ macros allow font sizes to be changed by use of one of the fo
+llowing
+commands:
+
+\begin{mstext}
+".SM" {\small smaller}
+".NL" {\normalsize normal size}
+".LG" {\large larger}
+\end{mstext}
+
+For example,
+
+\begin{mstext}
+This text becomes
+".LG"
+{\large larger}
+".SM"
+and back again.
+\end{mstext}
+
+The ".SM" an ".LG" macros may be repeated for greater effect.
+
+\latex/ has a similar set of commands whose extent is limited by bracing.
+
+\begin{quote}
+\begin{tabular}{ll}
+"\tiny" & {\tiny tiny} \\
+"\scriptsize" & {\scriptsize scriptsize} \\
+"\footnotesize" & {\footnotesize footnotesize} \\
+"\small" & {\small small} \\
+"\normalsize" & {\normalsize normal size} \\
+"\large" & {\large large} \\
+"\Large" & {\Large Large} \\[\smallskipamount]
+"\LARGE" & {\LARGE LARGE} \\[\smallskipamount]
+"\huge" & {\huge huge} \\[\smallskipamount]
+"\Huge" & {\Huge Huge}
+\end{tabular}
+\end{quote}
+
+The above example would be written
+
+\begin{latextext}
+This text becomes "{\large "{\large larger}"}" and back again.
+\end{latextext}
+
+Notice that with \latex/ the sizes are absolutely specified and not
+relatively specified, as with \troff/.
+
+\cleardoublepage
+
+\appendix
+
+\section{Summary}
+
+This Appendix provides a quick guide to the correspondences between the \ms/
+macros (and some raw \troff/ commands) and \latex/ macros. Note that the output
+may not have an identical appearance in all cases.
+
+\newenvironment{stack}{\begin{tabular}{l}}{\end{tabular}}
+\newcommand{\eoe}{\\[\bigskipamount]}
+
+\begin{em}
+\begin{tabular}{|p{0.2\textwidth}|l|l|}
+\hline
+\bf Purpose & \bf \ms/ macro call & \bf \latex/ equivalent
+\eoe
+\hline \hline
+\rm Date & ".ND" date & "\date{"date\/"}" \eoe
+\hline
+\rm Cover Page & ".RP" & "\titlepage" \eoe
+\hline
+\rm Author & \begin{stack}
+ ".AU" \\
+ author
+ \end{stack} & "\author{"author\/"}" \eoe
+\hline
+\rm Affiliation & \begin{stack}
+ ".AI" \\
+ Institution
+ \end{stack} & "\thanks{"Institution\/"}" \eoe
+\hline
+\rm Abstract & \begin{stack}
+ ".AB" \\
+ \ldots{} abstract \ldots \\
+ ".AE"
+ \end{stack} & \begin{stack}
+ "\begin{abstract}" \\
+ \ldots{} abstract \ldots \\
+ "\end{abstract}"
+ \end{stack} \eoe
+\hline
+\rm Multi-column formats
+ & ".2C" & "\twocolumn" \eoe
+ & ".1C" & "\onecolumn" \eoe
+\hline
+\rm Section Headings & \begin{stack}
+ ".SH" \\
+ heading
+ \end{stack} & "\section*{"heading\/"} " \eoe
+ & \begin{stack}
+ ".NH" \\
+ heading
+ \end{stack} & "\section{"heading\/"}" \eoe
+ & \begin{stack}
+ ".NH 2" \\
+ heading
+ \end{stack} & "\subsection{"heading\/"}" \eoe
+ & \begin{stack}
+ ".NH 3" \\
+ heading
+ \end{stack} & "\subsubsection{"heading\/"}" \eoe
+ & \begin{stack}
+ ".NH 4" \\
+ heading
+ \end{stack} & "\paragraph{"heading\/"}" \eoe
+ & \begin{stack}
+ ".NH 5" \\
+ heading
+ \end{stack} & "\subparagraph{"heading\/"}" \eoe
+\hline
+\end{tabular}
+
+\begin{tabular}{|p{0.2\textwidth}|l|l|}
+\hline
+\bf Purpose & \bf \ms/ macro call & \bf \latex/ equivalent \eoe
+\hline \hline
+\rm Standard and Left-Block paragraphs
+ & ".LP", ".PP" & one, or more blank lines \eoe
+\hline
+\rm Numbered paragraphs
+ & \begin{stack}
+ ".IP" n. \\
+ Text \ldots \\
+ \vdots
+ \end{stack} & \begin{stack}
+ "\begin{enumerate}" \\
+ "\item" Text \ldots \\
+ \vdots \\
+ "\end{enumerate}"
+ \end{stack} \eoe
+\hline
+\rm Bulleted paragraphs
+ & \begin{stack}
+ ".IP \(bu" \\
+ Text \ldots \\
+ \vdots
+ \end{stack} & \begin{stack}
+ "\begin{itemize}" \\
+ "\item" Text \ldots \\
+ \vdots \\
+ "\end{itemize}"
+ \end{stack} \eoe
+\hline
+\rm Labelled paragraphs
+ & \begin{stack}
+ ".IP" label \\
+ Text \ldots \\
+ \vdots
+ \end{stack} & \begin{stack}
+ "\begin{description}" \
+\
+ "\item["label\/"]" Text\ldots \\
+ \vdots \\
+ "\end{description}"
+ \end{stack} \eoe
+\hline
+\rm Quoted paragraphs
+ & \begin{stack}
+ ".QP" \\
+ Text \ldots \\
+ \end{stack} & \begin{stack}
+ "\begin{quote}" \\
+ Text \ldots \\
+ "\end{quote}"
+ \end{stack} \eoe
+ & \begin{stack}
+ ".QS" \\
+ Text \ldots \\
+ ".QE"
+ \end{stack} & \begin{stack}
+ "\begin{quotation}" \\
+ Text \ldots \\
+ \vdots \\
+ "\end{quotation}"
+ \end{stack} \eoe
+\hline
+\rm Footnotes & \begin{stack}
+ ".FS" \\
+ Text \ldots \\
+ ".FE"
+ \end{stack} & "\footnote{"Text \ldots"}" \eoe
+\hline
+\end{tabular}
+
+\begin{tabular}{|p{0.2\textwidth}|l|l|}
+\hline
+\bf Purpose & \bf \ms/ macro call & \bf \latex/ equivalent
+\eoe
+\hline \hline
+\rm Font Styles & \begin{stack}
+ ".R" {\rm Roman} \\
+ ".I" {\it Italic} \\
+ ".B" {\bf Bold}
+ \end{stack} &
+ \begin{stack}
+ "{\rm" {\rm Roman}"}" \\
+ "{\it" {\it Italic\/}"}" \\
+ "{\bf" {\bf Bold}"}" \\
+ "{\sl" {\sl Slanted\/}"}" \\
+ "{\sc" {\sc Small Capitals}"}" \\
+ "{\sf" {\sf Sans Serif}"}" \\
+ "{\tt" {\tt Typewriter}"}"
+ \end{stack} \eoe
+\hline
+\rm Font Sizes &
+ \begin{stack}
+ ".SM" {\small smaller} \\
+ ".NL" {\normalsize normal size} \\
+ ".LG" {\large larger}
+ \end{stack} &
+ \begin{stack}
+ "{\tiny" {\tiny tiny}"}" \\
+ "{\scriptsize" {\scriptsize scriptsize}"}" \\
+ "{\footnotesize" {\footnotesize footnotesize}"}" \\
+ "{\small" {\small small}"}" \\
+ "{\normalsize" {\normalsize normal size}"}" \\
+ "{\large" {\large large}"}" \\
+ "{\Large" {\Large Large}"}" \\[\smallskipamount]
+ "{\LARGE" {\LARGE LARGE}"}" \\[\smallskipamount]
+ "{\huge" {\huge huge}"}" \\[\smallskipamount]
+ "{\Huge" {\Huge Huge}"}"
+ \end{stack} \eoe
+\hline
+\end{tabular}
+\end{em}
+
+\bibliographystyle{alpha}
+\bibliography{refs}
+
+\end{document}
+SHAR_EOF
+if test 17400 -ne "`wc -c < 'ms-latex.tex'`"
+then
+ echo shar: "error transmitting 'ms-latex.tex'" '(should have been 17400 characters)'
+fi
+fi
+echo shar: "extracting 'sfwmac.sty'" '(1626 characters)'
+if test -f 'sfwmac.sty'
+then
+ echo shar: "will not over-write existing file 'sfwmac.sty'"
+else
+cat << \SHAR_EOF > 'sfwmac.sty'
+% LaTeX support for writing UNIX-style documentation
+
+
+% UNIX-style references
+
+\def\sfwFILfont{\sl}
+
+\def\@egaux#1#2#3{%
+ \def#1##1{%
+ #2\begingroup \tt \let\do=\@makeother \dospecials
+ \def\@tempa####1##1{####1\endgroup#3}\@tempa
+ }%
+}
+
+\def\pgm#1{\mbox{\it#1}\index{#1}} % programs
+\def\xpgm#1#2{\mbox{\it#1}\index{\noexpand\noexpand\noexpand#2{}}}
+\def\man#1(#2){\xpgm{#1\/}{#1}(#2)} % manual entries
+\@egaux\arg{`{}}{'{}} % arguments to programs
+\@egaux\switch{`{}-}{'{}} % switches to programs
+\def\file#1{\mbox{\sfwFILfont#1}} % filename
+
+
+% Commonly used software systems
+
+\def\sfwPGMfont{\tt}
+
+\def\@sfwdef#1#2{\@sfwaux{#1/}{#2}}
+\def\@sfwaux#1#2{\def#1{\mbox{#2}\index{\noexpand\noexpand\noexpand#1{}}}}
+
+\@sfwdef\EMACS{\sfwPGMfont EMACS}
+\@sfwdef\INFO{\sfwPGMfont INFO}
+\@sfwdef\MLisp{\sfwPGMfont MLisp}
+
+\@sfwdef\SendMail{\sfwPGMfont SendMail}
+\@sfwdef\UUCP{\sfwPGMfont UUCP}
+
+\def\AmS{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$}
+\@sfwaux\AmSTeX{\rm \AmS-\TeX}
+
+\@sfwaux\PhDTeX{\rm P\kern-.05em{\sc h\kern-.025em D}\kern-0.08em\TeX}
+
+\@sfwaux\LaTeX{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}
+\@sfwaux\BibTeX{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em\TeX}
+\@sfwaux\SLiTeX{\rm S\kern-.06em{\sc l\kern-.035emi}\kern-.06em\TeX}
+
+
+\@sfwdef\WEB{\sfwPGMfont WEB}
+
+\@sfwdef\Prolog{\sfwPGMfont Prolog}
+\@sfwdef\Lisp{\sfwPGMfont Lisp}
+
+\@sfwdef\DBUG{\sfwPGMfont DBUG}
+
+\@sfwdef\troff{\sfwPGMfont troff}
+\@sfwdef\nroff{\sfwPGMfont nroff}
+\@sfwdef\Miranda{\sfwPGMfont Miranda}
+\@sfwdef\AiM{\sfwPGMfont AiM}
+\@sfwdef\ASN{\sfwPGMfont ASN.1}
+\@sfwdef\ISODE{\sfwPGMfont ISODE}
+
+SHAR_EOF
+if test 1626 -ne "`wc -c < 'sfwmac.sty'`"
+then
+ echo shar: "error transmitting 'sfwmac.sty'" '(should have been 1626 characters)'
+fi
+fi
+exit 0
+# End of shell archive
+-------
diff --git a/info/digests/texhax/txh/pretex.txh b/info/digests/texhax/txh/pretex.txh
new file mode 100644
index 0000000000..a88f07ab0a
--- /dev/null
+++ b/info/digests/texhax/txh/pretex.txh
@@ -0,0 +1,390 @@
+28-Jan-87 05:11:16-PST,16195;000000000000
+Return-Path: <CHAA006%vaxb.rhbnc.ac.uk@Cs.Ucl.AC.UK>
+Received: from Cs.Ucl.AC.UK by SU-SCORE.ARPA with TCP; Wed 28 Jan 87 05:06:51-PST
+Received: from vaxb.rhbnc.ac.uk by mv1.Cs.Ucl.AC.UK via Janet with NIFTP
+ id aa03008; 28 Jan 87 12:48 WET
+Date: 28-JAN-1987 12:48:16
+From: CHAA006%vaxb.rhbnc.ac.uk@Cs.Ucl.AC.UK
+To: TEXHAX <@Cs.Ucl.AC.UK:TEXHAX@score.stanford.edu>
+Subject: Pretex
+
+In the light of experience, I have modified the source of Pretex (the
+DEC-169 to TeX conversion utility). The original version produced
+TeX composite sequences for all TeX active characters (e.g. {, }. \);
+the new version passes through unchanged all characters in the range
+ASCII 0..126 with the exception of double-quote, less- and greater-than,
+and solidus, for which four characters composite sequences are still
+produced. ** Phil
+
+Philip Taylor (Royal Holloway & Bedford New College; University of London; U.K)
+
+Bitnet/NetNorth/Earn: chaa006@vaxa.rhbnc.ac.uk (or) chaa006%rhbnc.vaxa@ac.uk
+ (or) : chaa006@vaxb.rhbnc.ac.uk (or) chaa006%rhbnc.vaxb@ac.uk
+
+ Arpa : chaa006%vaxa.rhbnc.ac.uk@ucl-cs.arpa
+ (or) : chaa006%vaxb.rhbnc.ac.uk@ucl-cs.arpa
+
+================================== PRETEX.PAS ==================================
+
+program pretex (input, output, dec169in, texout);
+
+{ This program will read DEC-169 files, and produce TeX files as output }
+
+const max = 80; debug = true;
+
+type string = varying [max] of char; word = 0 .. 65535;
+
+type dec169 = (nul, soh, stx, etx, eot, enq, ack, bel, bs, ht, lf, vt, ff, cr,
+ so, si, dle, dc1, dc2, dc3, dc4, nak, syn, etb, can, em, sub,
+ esc, fs, gs, rs, us, space, exclamation, double_quote, hash,
+ dollar, per_cent, ampersand, acute, open_round, close_round, asterisk,
+ plus, comma, minus, period, slash, digit_0, digit_1, digit_2,
+ digit_3, digit_4, digit_5, digit_6, digit_7, digit_8, digit_9,
+ colon, semi_colon, less_than, equals, greater_than,
+ interrogative, commercial_at, upper_case_A, upper_case_B,
+ upper_case_C, upper_case_D, upper_case_E, upper_case_F,
+ upper_case_G, upper_case_H, upper_case_I, upper_case_J,
+ upper_case_K, upper_case_L, upper_case_M, upper_case_N,
+ upper_case_O, upper_case_P, upper_case_Q, upper_case_R,
+ upper_case_S, upper_case_T, upper_case_U, upper_case_V,
+ upper_case_W, upper_case_X, upper_case_Y, upper_case_Z,
+ open_square, back_slash, close_square, caret, underscore,
+ grave, lower_case_a, lower_case_b, lower_case_c, lower_case_d,
+ lower_case_e, lower_case_f, lower_case_g, lower_case_h,
+ lower_case_i, lower_case_j, lower_case_k, lower_case_l,
+ lower_case_m, lower_case_n, lower_case_o, lower_case_p,
+ lower_case_q, lower_case_r, lower_case_s, lower_case_t,
+ lower_case_u, lower_case_v, lower_case_w, lower_case_x,
+ lower_case_y, lower_case_z, open_brace, solidus, close_brace,
+ tilde, del, k128, k129, k130, k131, ind, nel, ssa, esa, hts,
+ htu, vts, pld, plu, ri, ss2, ss3, dcs, pu1, pu2, sts, cch, mw,
+ spa, epa, k152, k153, k154, csi, st, osc, pm, apc, k160,
+ inverted_exclamation, cent, pound, k164, yen, k166, section,
+ currency, copyright, lower_case_a_underscored, open_guillemets,
+ k172, k173, k174, k175, degree, plus_minus, super_2, super_3,
+ k180, mu, paragraph, centred_period, k184, super_1,
+ lower_case_o_underscored, close_guillemets, quarter,
+ half, k190, inverted_interrogative, upper_case_A_grave,
+ upper_case_A_acute, upper_case_A_caret, upper_case_A_tilde,
+ upper_case_A_trema, upper_case_A_ring, upper_case_AE_digraph,
+ upper_case_C_cedilla, upper_case_E_grave, upper_case_E_acute,
+ upper_case_E_caret, upper_case_E_trema, upper_case_I_grave,
+ upper_case_I_acute, upper_case_I_caret, upper_case_I_trema,
+ k208, upper_case_N_tilde, upper_case_O_grave,
+ upper_case_O_acute, upper_case_O_caret, upper_case_O_tilde,
+ upper_case_O_trema, upper_case_OE_digraph,
+ upper_case_O_slashed, upper_case_U_grave, upper_case_U_acute,
+ upper_case_U_caret, upper_case_U_trema, upper_case_Y_trema,
+ k222, beta, lower_case_a_grave, lower_case_a_acute,
+ lower_case_a_caret, lower_case_a_tilde, lower_case_a_trema,
+ lower_case_a_ring, lower_case_ae_digraph, lower_case_c_cedilla,
+ lower_case_e_grave, lower_case_e_acute, lower_case_e_caret,
+ lower_case_e_trema, lower_case_i_grave, lower_case_i_acute,
+ lower_case_i_caret, lower_case_i_trema, k240,
+ lower_case_n_tilde, lower_case_o_grave, lower_case_o_acute,
+ lower_case_o_caret, lower_case_o_tilde, lower_case_o_trema,
+ lower_case_oe_digraph, lower_case_o_slashed, lower_case_u_grave,
+ lower_case_u_acute, lower_case_u_caret, lower_case_u_trema,
+ lower_case_y_trema, k254, k255);
+
+var dec169in, texout: text; ch: char; i: dec169; chr169: array [char] of dec169;
+
+[external (lib$signal)] procedure report (%immed status: integer); external;
+
+[external (cli$get_value)] function get_value
+ (p_name: [class_s] packed array [$l1 .. $u1: integer] of char;
+ var p_value: [class_s] packed array [$l2 .. $u2: integer] of char;
+ var p_length: [word] word): integer; external;
+
+procedure call (status: integer);
+ begin
+ if not odd(status) then report (status)
+ end;
+
+procedure open_files (var source, sink: text);
+ var source_file_name: string; sf_length: integer;
+ begin
+ call (get_value ('SOURCE', source_file_name.body,
+ source_file_name.length));
+ open (source, source_file_name, history := readonly,
+ default := 'PRETEX.TXT');
+ reset (source);
+ open (sink, '.TEX', history := new,
+ default := source_file_name, record_length := 511);
+ rewrite (sink)
+ end;
+
+begin
+for i := nul to k255 do chr169 [chr (ord (i))] := i;
+open_files (dec169in, texout);
+while not eof (dec169in)
+do begin
+ while not eoln (dec169in)
+ do begin
+ read (dec169in, ch); i := chr169 [ch];
+ ch := chr (ord (ch) mod ord (k128));
+ case i of
+ nul: write(texout,ch);
+ soh: write(texout,ch);
+ stx: write(texout,ch);
+ etx: write(texout,ch);
+ eot: write(texout,ch);
+ enq: write(texout,ch);
+ ack: write(texout,ch);
+ bel: write(texout,ch);
+ bs: write(texout,ch);
+ ht: write(texout,ch);
+ lf: write(texout,ch);
+ vt: write(texout,ch);
+ ff: write(texout,ch);
+ cr: write(texout,ch);
+ so: write(texout,ch);
+ si: write(texout,ch);
+ dle: write(texout,ch);
+ dc1: write(texout,ch);
+ dc2: write(texout,ch);
+ dc3: write(texout,ch);
+ dc4: write(texout,ch);
+ nak: write(texout,ch);
+ syn: write(texout,ch);
+ etb: write(texout,ch);
+ can: write(texout,ch);
+ em: write(texout,ch);
+ sub: write(texout,ch);
+ esc: write(texout,ch);
+ fs: write(texout,ch);
+ gs: write(texout,ch);
+ rs: write(texout,ch);
+ us: write(texout,ch);
+ space: write(texout,ch);
+ exclamation: write(texout,ch);
+ double_quote: write(texout,'{$\prime\prime$}');
+ hash: write(texout,ch);
+ dollar: write(texout,ch);
+ per_cent: write(texout,ch);
+ ampersand: write(texout,ch);
+ acute: write(texout,ch);
+ open_round: write(texout,ch);
+ close_round: write(texout,ch);
+ asterisk: write(texout,ch);
+ plus: write(texout,ch);
+ comma: write(texout,ch);
+ minus: write(texout,ch);
+ period: write(texout,ch);
+ slash: write(texout,ch);
+ digit_0: write(texout,ch);
+ digit_1: write(texout,ch);
+ digit_2: write(texout,ch);
+ digit_3: write(texout,ch);
+ digit_4: write(texout,ch);
+ digit_5: write(texout,ch);
+ digit_6: write(texout,ch);
+ digit_7: write(texout,ch);
+ digit_8: write(texout,ch);
+ digit_9: write(texout,ch);
+ colon: write(texout,ch);
+ semi_colon: write(texout,ch);
+ less_than: write(texout,'{$<$}');
+ equals: write(texout,ch);
+ greater_than: write(texout,'{$>$}');
+ interrogative: write(texout,ch);
+ commercial_at: write(texout,ch);
+ upper_case_A: write(texout,ch);
+ upper_case_B: write(texout,ch);
+ upper_case_C: write(texout,ch);
+ upper_case_D: write(texout,ch);
+ upper_case_E: write(texout,ch);
+ upper_case_F: write(texout,ch);
+ upper_case_G: write(texout,ch);
+ upper_case_H: write(texout,ch);
+ upper_case_I: write(texout,ch);
+ upper_case_J: write(texout,ch);
+ upper_case_K: write(texout,ch);
+ upper_case_L: write(texout,ch);
+ upper_case_M: write(texout,ch);
+ upper_case_N: write(texout,ch);
+ upper_case_O: write(texout,ch);
+ upper_case_P: write(texout,ch);
+ upper_case_Q: write(texout,ch);
+ upper_case_R: write(texout,ch);
+ upper_case_S: write(texout,ch);
+ upper_case_T: write(texout,ch);
+ upper_case_U: write(texout,ch);
+ upper_case_V: write(texout,ch);
+ upper_case_W: write(texout,ch);
+ upper_case_X: write(texout,ch);
+ upper_case_Y: write(texout,ch);
+ upper_case_Z: write(texout,ch);
+ open_square: write(texout,ch);
+ back_slash: write(texout,ch);
+ close_square: write(texout,ch);
+ caret: write(texout,ch);
+ underscore: write(texout,ch);
+ grave: write(texout,ch);
+ lower_case_a: write(texout,ch);
+ lower_case_b: write(texout,ch);
+ lower_case_c: write(texout,ch);
+ lower_case_d: write(texout,ch);
+ lower_case_e: write(texout,ch);
+ lower_case_f: write(texout,ch);
+ lower_case_g: write(texout,ch);
+ lower_case_h: write(texout,ch);
+ lower_case_i: write(texout,ch);
+ lower_case_j: write(texout,ch);
+ lower_case_k: write(texout,ch);
+ lower_case_l: write(texout,ch);
+ lower_case_m: write(texout,ch);
+ lower_case_n: write(texout,ch);
+ lower_case_o: write(texout,ch);
+ lower_case_p: write(texout,ch);
+ lower_case_q: write(texout,ch);
+ lower_case_r: write(texout,ch);
+ lower_case_s: write(texout,ch);
+ lower_case_t: write(texout,ch);
+ lower_case_u: write(texout,ch);
+ lower_case_v: write(texout,ch);
+ lower_case_w: write(texout,ch);
+ lower_case_x: write(texout,ch);
+ lower_case_y: write(texout,ch);
+ lower_case_z: write(texout,ch);
+ open_brace: write(texout,ch);
+ solidus: write(texout,'{$|$}');
+ close_brace: write(texout,ch);
+ tilde: write(texout,ch);
+ del: write(texout,' ');
+ k128: write(texout,' ');
+ k129: write(texout,' ');
+ k130: write(texout,' ');
+ k131: write(texout,' ');
+ ind: write(texout,' ');
+ nel: write(texout,' ');
+ ssa: write(texout,' ');
+ esa: write(texout,' ');
+ hts: write(texout,' ');
+ htu: write(texout,' ');
+ vts: write(texout,' ');
+ pld: write(texout,' ');
+ plu: write(texout,' ');
+ ri: write(texout,' ');
+ ss2: write(texout,' ');
+ ss3: write(texout,' ');
+ dcs: write(texout,' ');
+ pu1: write(texout,' ');
+ pu2: write(texout,' ');
+ sts: write(texout,' ');
+ cch: write(texout,' ');
+ mw: write(texout,' ');
+ spa: write(texout,' ');
+ epa: write(texout,' ');
+ k152: write(texout,' ');
+ k153: write(texout,' ');
+ k154: write(texout,' ');
+ csi: write(texout,' ');
+ st: write(texout,' ');
+ osc: write(texout,' ');
+ pm: write(texout,' ');
+ apc: write(texout,' ');
+ k160: write(texout,' ');
+ inverted_exclamation: write(texout,'{<}');
+ cent: write(texout,'{\rlap/c}');
+ pound: write(texout,'{\it\$}');
+ k164: write(texout,' ');
+ yen: write(texout,'{\rlap=Y}');
+ k166: write(texout,' ');
+ section: write(texout,'{\S}');
+ currency: write(texout,'{\rlap{\mathhexbox202}\kern0.15em\mathhexbox20E}');
+ copyright: write(texout,'{\copyright}');
+ lower_case_a_underscored: write(texout,'{\b a}');
+ open_guillemets: write(texout,'{\mathhexbox21C}');
+ k172: write(texout,' ');
+ k173: write(texout,' ');
+ k174: write(texout,' ');
+ k175: write(texout,' ');
+ degree: write(texout,'{${}^\circ$}');
+ plus_minus: write(texout,'{\mathhexbox206}');
+ super_2: write(texout,'{$ ^2$}');
+ super_3: write(texout,'{$ ^3$}');
+ k180: write(texout,' ');
+ mu: write(texout,'{$\mu$}');
+ paragraph: write(texout,'{\P}');
+ centred_period: write(texout,'{\mathhexbox20F}');
+ k184: write(texout,' ');
+ super_1: write(texout,'{$ ^1$}');
+ lower_case_o_underscored: write(texout,'{\b o}');
+ close_guillemets: write(texout,'{\mathhexbox21D}');
+ quarter: write(texout,'{$1\over4$}');
+ half: write(texout,'{$1\over2$}');
+ k190: write(texout,' ');
+ inverted_interrogative: write(texout,'{>}');
+ upper_case_A_grave: write(texout,'{\`A}');
+ upper_case_A_acute: write(texout,'{\''A}');
+ upper_case_A_caret: write(texout,'{\^A}');
+ upper_case_A_tilde: write(texout,'{\~A}');
+ upper_case_A_trema: write(texout,'{\"A}');
+ upper_case_A_ring: write(texout,'{\AA}');
+ upper_case_AE_digraph: write(texout,'{\AE}');
+ upper_case_C_cedilla: write(texout,'{\c C}');
+ upper_case_E_grave: write(texout,'{\`E}');
+ upper_case_E_acute: write(texout,'{\''E}');
+ upper_case_E_caret: write(texout,'{\^E}');
+ upper_case_E_trema: write(texout,'{\"E}');
+ upper_case_I_grave: write(texout,'{\`I}');
+ upper_case_I_acute: write(texout,'{\''I}');
+ upper_case_I_caret: write(texout,'{\^I}');
+ upper_case_I_trema: write(texout,'{\"I}');
+ k208: write(texout,' ');
+ upper_case_N_tilde: write(texout,'{\~N}');
+ upper_case_O_grave: write(texout,'{\`O}');
+ upper_case_O_acute: write(texout,'{\''O}');
+ upper_case_O_caret: write(texout,'{\^O}');
+ upper_case_O_tilde: write(texout,'{\~O}');
+ upper_case_O_trema: write(texout,'{\"O}');
+ upper_case_OE_digraph: write(texout,'{\OE}');
+ upper_case_O_slashed: write(texout,'{\O}');
+ upper_case_U_grave: write(texout,'{\`U}');
+ upper_case_U_acute: write(texout,'{\''U}');
+ upper_case_U_caret: write(texout,'{\^U}');
+ upper_case_U_trema: write(texout,'{\"U}');
+ upper_case_Y_trema: write(texout,'{\"Y}');
+ k222: write(texout,' ');
+ beta: write(texout,'{\ss}');
+ lower_case_a_grave: write(texout,'{\`a}');
+ lower_case_a_acute: write(texout,'{\''a}');
+ lower_case_a_caret: write(texout,'{\^a}');
+ lower_case_a_tilde: write(texout,'{\~a}');
+ lower_case_a_trema: write(texout,'{\"a}');
+ lower_case_a_ring: write(texout,'{\aa}');
+ lower_case_ae_digraph: write(texout,'{\ae}');
+ lower_case_c_cedilla: write(texout,'{\c c}');
+ lower_case_e_grave: write(texout,'{\`e}');
+ lower_case_e_acute: write(texout,'{\''e}');
+ lower_case_e_caret: write(texout,'{\^e}');
+ lower_case_e_trema: write(texout,'{\"e}');
+ lower_case_i_grave: write(texout,'{\`\i}');
+ lower_case_i_acute: write(texout,'{\''\i}');
+ lower_case_i_caret: write(texout,'{\^\i}');
+ lower_case_i_trema: write(texout,'{\"\i}');
+ k240: write(texout,' ');
+ lower_case_n_tilde: write(texout,'{\~n}');
+ lower_case_o_grave: write(texout,'{\`o}');
+ lower_case_o_acute: write(texout,'{\''o}');
+ lower_case_o_caret: write(texout,'{\^o}');
+ lower_case_o_tilde: write(texout,'{\~o}');
+ lower_case_o_trema: write(texout,'{\"o}');
+ lower_case_oe_digraph: write(texout,'{\oe}');
+ lower_case_o_slashed: write(texout,'{\o}');
+ lower_case_u_grave: write(texout,'{\`u}');
+ lower_case_u_acute: write(texout,'{\''u}');
+ lower_case_u_caret: write(texout,'{\^u}');
+ lower_case_u_trema: write(texout,'{\"u}');
+ lower_case_y_trema: write(texout,'{\"y}');
+ k254: write(texout,' ');
+ k255: write(texout,' ')
+ end {case}
+ end;
+ readln (dec169in);
+ writeln (texout)
+ end
+end.
+
+-------
diff --git a/info/digests/texhax/txh/ramsdell.txh b/info/digests/texhax/txh/ramsdell.txh
new file mode 100644
index 0000000000..2bad22f1ad
--- /dev/null
+++ b/info/digests/texhax/txh/ramsdell.txh
@@ -0,0 +1,477 @@
+Date: Thu, 5 Nov 87 09:45:56 EST
+From: ramsdell%linus@mitre-bedford.ARPA
+To: texhax@score.stanford.edu, rs@uunet.UU.NET
+Subject: Lunisolar calendar generator for LaTeX
+
+Here is a program that prints the current phase of the moon. It also
+generates the LaTeX commands that produce lunisolar calendars. It is
+a handy program for astronomers and sailors, as a lunisolar calendar
+tells when the moon will be bright.
+John
+
+
+#! /bin/sh
+# This is a shell archive, meaning:
+# 1. Remove everything above the #! /bin/sh line.
+# 2. Save the resulting text in a file.
+# 3. Execute the file with /bin/sh (not csh) to create the files:
+# lunisolar.c
+# This archive created: Thu Nov 5 08:53:57 1987
+export PATH; PATH=/bin:$PATH
+if test -f 'lunisolar.c'
+then
+ echo shar: will not over-write existing file "'lunisolar.c'"
+else
+cat << \SHAR_EOF > 'lunisolar.c'
+/* Prints the phase of the moon and generates LaTeX commands */
+/* that produce lunisolar calendars. */
+/* Usage: lunisolar
+ gives the phase of the moon,
+ and: lunisolar <year> <time_zone>
+ generates a lunisolar calendar for LaTeX.
+ Time zone may be one of:
+ GMT NST AST EST CST
+ MST PST YST HST BST
+ JST
+*/
+/* Construct with the command "cc -O -o lunisolar lunisolar.c -lm". */
+/* John D. Ramsdell - November 1987 */
+static char copyright[] =
+ "Copyright 1987 by The MITRE Corporation. All rights reserved.";
+/*
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, provided that the above copyright
+ * notice appear in all copies. The MITRE Corporation
+ * makes no representations about the suitability of this
+ * software for any purpose. It is provided "as is" without
+ * express or implied warranty.
+ */
+
+#include <stdio.h>
+#include <math.h>
+
+#define PI 3.141592653589793
+#define NEGATIVE_PI (-1.0 * PI)
+#define TWO_PI (2.0 * PI)
+#define RADIANS_PER_DEGREE (PI / 180.0)
+
+struct {
+ char *name; /* Name of time zone. */
+ int offset; /* Offset in minutes. */
+} tz_map[] =
+{
+ { "GMT", 0*60 }, /* Greenwich Mean Time */
+ { "NST", 7*30 }, /* Newfoundland is 3.5 hours */
+ /* different from GMT. */
+ { "AST", 4*60 }, /* Alantic Standard Time. */
+ { "EST", 5*60 }, /* Eastern Standard Time. */
+ { "CST", 6*60 }, /* Central Standard Time. */
+ { "MST", 7*60 }, /* Mountain Standard Time. */
+ { "PST", 8*60 }, /* Pacific Standard Time. */
+ { "YST", 9*60 }, /* Yukon Standard Time. */
+ { "HST", 10*60 }, /* Hawaiian Standard Time. */
+ { "BST", 11*60 }, /* Bering Standard Time. */
+ { "JST", -9*60 }, /* Japan Standard Time. */
+ { "" , 0 } /* Mark end of list with "". */
+};
+
+char *time_zone_name; /* Selected time zone name. */
+double time_zone_offset; /* Selected offset in minutes. */
+
+int select_time_zone (name)
+ char *name;
+{
+ int i;
+ if (strcmp (name, "") == 0) return 1; /* Return error. */
+ for (i = 0; strcmp (tz_map[i].name, "") != 0; i++)
+ if (strcmp (name, tz_map[i].name) == 0) {
+ time_zone_name = name;
+ time_zone_offset = (double) tz_map[i].offset;
+ return 0; /* Found match. */
+ }
+ return 1; /* No match found. */
+}
+
+int leap_year (year) /* True if year is a leap_year. */
+ int year;
+{
+ return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
+}
+
+/* Time is most often represented as a double precision number */
+/* in units of days. Angles are in radians. */
+
+/* J2000 is the number of days between January 1, 2000; 12:00:00 GMT */
+/* and the local origin of time. */
+double J2000; /* This date is really called J2000.0. */
+
+void make_J2000 () /* Assumes time origin of */
+{ /* January 1, 1970; 00:00:00 GMT. */
+ int year;
+ J2000 = (2000 - 1970) * 365 + 0.5;
+ for (year = 1970; year < 2000; year++) /* Account for leap years. */
+ if (leap_year (year)) J2000 += 1.0;
+}
+
+double days_after_J2000 () /* Returns the current time, */
+{ /* in units of days, after J2000.0. */
+ long seconds = time((long *) 0);
+ double seconds_per_day = 24 * 60 * 60;
+ return seconds / seconds_per_day - J2000;
+}
+
+double normalize_angle (angle) /* Returns the angle between */
+ double angle; /* -PI < angle <= PI. */
+{
+ if (angle > PI)
+ do angle -= TWO_PI; while (angle > PI);
+ else
+ while (angle <= NEGATIVE_PI) angle += TWO_PI;
+ return angle;
+}
+
+/*******************************************************************/
+
+/* Astronomical almanac */
+
+/*
+ * All formulas are from:
+ * The Astronomical Almanac for the Year 1984,
+ * US Naval Observatory and Royal Greenwich Observatory,
+ * US Government Printing Office, Washington DC, 1984.
+ */
+
+/* Angular position of the sun to a */
+/* precision of 0.01 degrees. (Page C24). */
+
+#define SUN0 (RADIANS_PER_DEGREE * 280.460)
+#define SUN1 (RADIANS_PER_DEGREE * 0.9856474)
+#define SUN2 (RADIANS_PER_DEGREE * 357.528)
+#define SUN3 (RADIANS_PER_DEGREE * 0.9856003)
+#define SUN4 (RADIANS_PER_DEGREE * 1.915)
+#define SUN5 (RADIANS_PER_DEGREE * 0.020)
+
+double sun_position (days)
+ double days;
+{
+ double mean_longitude_of_sun, mean_anomaly, ecliptic_longitude;
+ mean_longitude_of_sun =
+ normalize_angle (SUN0 + SUN1 * days);
+ mean_anomaly =
+ normalize_angle (SUN2 + SUN3 * days);
+ ecliptic_longitude =
+ normalize_angle (mean_longitude_of_sun
+ + SUN4 * sin (mean_anomaly)
+ + SUN5 * sin (2.0 * mean_anomaly));
+ return ecliptic_longitude;
+}
+
+/* Angular velocity of the sun. Derivative of sun_position. */
+
+double sun_velocity (days)
+ double days;
+{
+ double mean_anomaly =
+ normalize_angle (SUN2 + SUN3 * days);
+ return SUN1 + SUN4 * SUN3 * cos (mean_anomaly)
+ + SUN5 * 2.0 * SUN3 * cos (2.0 * mean_anomaly);
+}
+
+/* Angular position of the moon to a */
+/* precision of 0.3 degrees. (Page D46). */
+
+#define DAYS_PER_JULEAN_CENTURY 36525.0
+#define RADIAN_CENTURY (RADIANS_PER_DEGREE / DAYS_PER_JULEAN_CENTURY)
+
+#define MOON0 (RADIANS_PER_DEGREE * 218.32)
+#define MOON1 (RADIAN_CENTURY * 481267.883)
+#define MOON2A (RADIANS_PER_DEGREE * 6.29)
+#define MOON2B (RADIANS_PER_DEGREE * 134.9)
+#define MOON2C (RADIAN_CENTURY * 477198.85)
+#define MOON3A (RADIANS_PER_DEGREE * -1.27)
+#define MOON3B (RADIANS_PER_DEGREE * 259.2)
+#define MOON3C (RADIAN_CENTURY * -413335.38)
+#define MOON4A (RADIANS_PER_DEGREE * 0.66)
+#define MOON4B (RADIANS_PER_DEGREE * 235.7)
+#define MOON4C (RADIAN_CENTURY * 890534.23)
+#define MOON5A (RADIANS_PER_DEGREE * 0.21)
+#define MOON5B (RADIANS_PER_DEGREE * 269.9)
+#define MOON5C (RADIAN_CENTURY * 954397.70)
+#define MOON6A (RADIANS_PER_DEGREE * -0.19)
+#define MOON6B (RADIANS_PER_DEGREE * 357.5)
+#define MOON6C (RADIAN_CENTURY * 035999.05)
+#define MOON7A (RADIANS_PER_DEGREE * -0.11)
+#define MOON7B (RADIANS_PER_DEGREE * 186.6)
+#define MOON7C (RADIAN_CENTURY * 966404.05)
+
+double moon_position (days)
+ double days;
+{
+ return normalize_angle (MOON0
+ + MOON1 * days
+ + MOON2A * sin (MOON2B + MOON2C * days)
+ + MOON3A * sin (MOON3B + MOON3C * days)
+ + MOON4A * sin (MOON4B + MOON4C * days)
+ + MOON5A * sin (MOON5B + MOON5C * days)
+ + MOON6A * sin (MOON6B + MOON6C * days)
+ + MOON7A * sin (MOON7B + MOON7C * days));
+}
+
+/****************************************************************/
+
+/* Prints an English sentence giving the current phase of the moon. */
+#define PHASE_LIMIT MOON1
+void print_moon ()
+{
+ double days, phase; /* Computes the moon's phase by */
+ int percent; /* computing the difference between */
+ make_J2000 (); /* the sun and moon's */
+ days = days_after_J2000 (); /* ecliptic longitude. */
+ phase = sun_position (days);
+ phase = normalize_angle (moon_position (days) - phase);
+ percent = 50.0 * (1.0 - cos (phase)) + 0.5; /* Visable fraction. */
+ printf("The moon is ");
+ if (fabs (phase) < PHASE_LIMIT)
+ printf ("new");
+ else if (fabs (normalize_angle (phase + PI)) < PHASE_LIMIT)
+ printf ("full");
+ else if (fabs (phase - PI/2.0) < PHASE_LIMIT)
+ printf ("first quarter (%d%% of full)", percent);
+ else if (fabs (phase + PI/2.0) < PHASE_LIMIT)
+ printf ("last quarter (%d%% of full)", percent);
+ else if (phase > PI/2.0)
+ printf ("waxing and gibbous (%d%% of full)", percent);
+ else if (phase > 0.0)
+ printf ("a waxing crescent (%d%% of full)", percent);
+ else if (phase > PI/-2.0)
+ printf ("a waning crescent (%d%% of full)", percent);
+ else
+ printf ("waning and gibbous (%d%% of full)", percent);
+ printf (".\n");
+}
+
+/**********************************************************/
+
+/* lunisolar calendar routines. */
+
+int first_day_of_year (year) /* Returns the integer number of days */
+ int year; /* between the start of year and */
+{ /* J2000.0. */
+ int days;
+ days = 365 * (year - 2000);
+ if (year > 2000)
+ for (; year > 2000; year--)
+ if (leap_year (year)) days += 1;
+ else; /* Needed else! */
+ else
+ for (; year < 2000; year++)
+ if (leap_year (year)) days -= 1;
+ return days;
+}
+
+/* Routines that find the seasons. */
+
+#define DIGITS 15
+int zero (x, f, fp) /* Root finder using */
+ int x; /* Newton's method. */
+ double (*f) ();
+ double (*fp) ();
+{
+ int i;
+ double y, midnite, noon;
+ y = x;
+ for (i = 0; i < DIGITS; i++)
+ y = y - f(y)/fp(y);
+ noon = 0.5 + (time_zone_offset / 24.0 / 60.0);
+ midnite = floor (y - noon) + noon;
+ if (f (midnite) * f (midnite + 1.0) <= 0.0)
+ return midnite;
+ x = midnite;
+ printf ("%%Not sure about the season change for day %d.\n", x);
+ return x;
+}
+
+double phase; /* sun_zero has a root at the */
+double sun_zero (days) /* desired day. Used with zero */
+ double days; /* to find the seasons. */
+{
+ return normalize_angle (sun_position (days) - phase);
+}
+
+void find_seasons (first_day, seasons)
+ int first_day, *seasons;
+{ /* Remember Spring is the */
+ int i; /* first season of a year. */
+ phase = PI/-2.0; /* Find start of winters. */
+ seasons[0] = zero (first_day - 11, sun_zero, sun_velocity);
+ seasons[4] = zero (seasons[0] + 365, sun_zero, sun_velocity);
+ phase = 0.0; /* Find start of other seasons. */
+ for (i = 1; i < 4; i++, phase += PI/2.0)
+ seasons[i] = zero (seasons[i-1] + 91, sun_zero, sun_velocity);
+ printf ("%% Seasons relative to January 1:");
+ for (i = 0; i < 5; i++)
+ printf (" %d", seasons[i] - first_day);
+ printf (".\n");
+}
+
+void make_moon_table (seasons, moon) /* Computes the position of */
+ int *seasons; /* the moon for each day at */
+ float *moon; /* noon local time. */
+{
+ int i, day;
+ for (i = 0, day = seasons[0]; day < seasons[4]; i++, day++) {
+ double dday = day + time_zone_offset / (24.0 * 60.0);
+ moon[i] = normalize_angle (moon_position (dday) - sun_position (dday));
+ }
+}
+
+/* Routines that output LaTeX commands. */
+
+/* Dates spiral inward by an amount DELTA_RADIUS. */
+#define START_RADIUS 1.0
+#define DELTA_RADIUS 0.005
+float radius;
+
+int month, day, moon_index;
+int days_per_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+
+void mark_dates (year, from, to, moon) /* Makes LaTeX statements */
+ int year, from, to; /* that place the dates. */
+ float *moon;
+{
+ radius = START_RADIUS;
+ for (; from < to; moon_index++, from++) {
+ printf ("\\put(%1.6f,%1.6f){\\makebox(0,0){%d/%d}}\n",
+ radius * sin (moon[moon_index]),
+ radius * cos (moon[moon_index]),
+ month, day);
+ radius -= DELTA_RADIUS;
+ day++;
+ if (day > days_per_month[month-1])
+ if (month == 2 && leap_year (year) && day == 29);
+ else {
+ day = 1;
+ month++;
+ if (month > 12) month = 1;
+ }
+ }
+}
+
+void header (season, year) /* Start of each season. */
+ char *season;
+ int year;
+{
+ printf ("\\begin{figure}\n");
+ printf ("\\begin{center}\n");
+ printf ("\\begin{picture}(2.0,2.0)(-1.0,-1.0)\n");
+ printf ("\\tiny\n");
+ printf ("\\put(0,0){\\makebox(0,0){\\Huge %s %d}}\n",
+ season, year);
+}
+
+void trailer () /* End of each season. */
+{
+ printf ("\\put(-1.0,0.0){\\line(1,0){0.5}}\n");
+ printf ("\\put(0.5,0.0){\\line(1,0){0.5}}\n");
+ printf ("\\put(0.0,-1.0){\\line(0,1){0.5}}\n");
+ printf ("\\put(0.0,-0.4){\\circle{0.1}}\n");
+ printf ("\\put(0.0,-0.3){\\makebox(0,0)[b]{\\large Full Moon}}\n");
+ printf ("\\put(0.0,0.5){\\line(0,1){0.5}}\n");
+ printf ("\\put(0.0,0.4){\\circle*{0.1}}\n");
+ printf ("\\put(0.0,0.3){\\makebox(0,0)[t]{\\large New Moon}}\n");
+ printf ("\\end{picture}\n");
+ printf ("\\\\ {\\Large Lunisolar Calendar}\n");
+ printf ("\\\\ {\\large Dates mark the lunar phase at noon %s.}\n",
+ time_zone_name);
+ printf ("\\end{center}\n");
+ printf ("\\end{figure}\n");
+}
+
+char *season_titles[4] =
+{ "Winter", "Spring", "Summer", "Fall"};
+
+void LaTeXize_tables (year, first_day, seasons, moon)
+ int year, first_day, *seasons;
+ float *moon;
+{
+ int a_season;
+ printf ("\\documentstyle{article}\n");
+ printf ("\\pagestyle{empty}\n");
+ printf ("\\begin{document}\n");
+ printf ("\\Large\n");
+ printf ("\\setlength{\\unitlength}{60mm}\n");
+ month = 12; /* December */
+ day = 32 - first_day + seasons[0];
+ moon_index = 0;
+ for (a_season = 0; a_season < 4; a_season++) {
+ header (season_titles[a_season], a_season == 0 ? year - 1 : year);
+ mark_dates (year, seasons[a_season], seasons[a_season+1], moon);
+ trailer ();
+ }
+ printf ("\\end{document}\n");
+}
+
+/* Lunisolar master routine. */
+
+int seasons[5]; /* Stores days that mark season changes. */
+float moon[370]; /* Stores moon phases for each day. */
+
+int lunisolar (year, tz) /* Constructs a LaTeX file that */
+ int year; char *tz; /* generates a lunisolar calendar */
+{ /* for the year year and time zone tz. */
+ if (year < 1950 || year > 2050) {
+ printf ("Program useful between the years 1950 and 2050.\n");
+ return 1; /* error return. */
+ }
+ else if (select_time_zone (tz) != 0)
+ return 1;
+ else {
+ int day_of_Jan1 = first_day_of_year (year);
+ printf ("%% Lunisolar calendar for %d.\n", year);
+ printf ("%% Constructed for %s, %1.2f hours %s of Greenwich.\n",
+ time_zone_name, fabs (time_zone_offset) / 60.0,
+ (time_zone_offset >= 0.0 ? "west" : "east"));
+ find_seasons (day_of_Jan1, seasons);
+ make_moon_table (seasons, moon);
+ LaTeXize_tables (year, day_of_Jan1, seasons, moon);
+ return 0;
+ }
+}
+
+main (argc, argv) /* Invokes print_moon with */
+ int argc; /* no arguments, and */
+ char **argv; /* lunisolar with one. */
+{
+ int i;
+ if (argc == 1) print_moon ();
+ else {
+ if (argc == 3) {
+ int year;
+ if (sscanf (argv[1], "%d", &year) == 1 &&
+ lunisolar (year, argv[2]) == 0)
+ exit (0);
+ }
+ fprintf (stderr, "Bad args:");
+ for (i = 0; i < argc; i++)
+ fprintf (stderr, " %s", argv[i]);
+ fprintf (stderr,
+ "\nUsage: %s\ngives the phase of the moon,\n",
+ argv[0]);
+ fprintf (stderr, "and: %s <year> <time_zone>\n", argv[0]);
+ fprintf (stderr, "generates a lunisolar calendar for LaTeX.\n");
+ fprintf (stderr, "Time zone may be one of:");
+ for (i = 0; strcmp(tz_map[i].name, "") != 0; i++) {
+ if (i % 5 == 0) fprintf (stderr, "\n");
+ fprintf (stderr, "%s\t", tz_map[i].name);
+ }
+ fprintf (stderr, "\n");
+ exit (1);
+ }
+}
+SHAR_EOF
+fi # end of overwriting check
+# End of shell archive
+exit 0
+-------
+-------
diff --git a/info/digests/texhax/txh/relate.txh b/info/digests/texhax/txh/relate.txh
new file mode 100644
index 0000000000..52fdc9bb84
--- /dev/null
+++ b/info/digests/texhax/txh/relate.txh
@@ -0,0 +1,288 @@
+21-Dec-87 09:30:52-PST,12519;000000000000
+Return-Path: <@RELAY.CS.NET:phcalamai@water.waterloo.edu>
+From: "Paul H. Calamai" <phcalamai%water.waterloo.edu@RELAY.CS.NET>
+Subject: Re: LaTeX list environment question
+
+Steve Buyske <ST401266%BROWNVM.BITNET@forsythe.stanford.edu>:
+>
+>
+> I would like to make a construct a list environment so that I can
+> have labels that might require two line. Something like
+>
+> Professional Something silly, something else silly, some more
+> Associations: silly things, and so on.
+>
+> If I put the label in a \parbox, no matter how I fiddle around, I get
+> something like:
+>
+> Professional Something silly, something else silly, some more
+> Associations:
+> silly things, and so on.
+>
+> with an ugly extra line. Can anyone give me some advice?
+>
+> My apologies if this is an easy question, but I'm new to LaTeX and
+> desperate to get my C.V. done.
+>
+Here is a tex file that will do what you want:
+
+
+% relate_macros.tex 1987 Jun 10 E. Ledoux
+% Instructions for use are located at the end of this file.
+%
+\makeatletter
+%
+\newdimen\relateleft \relateleft=\leftmargin % space before label
+\newdimen\relateright \relateright=\leftmargin % min. space after label
+\newbox\RELbox \newcount\RELcount \RELcount\z@
+\newdimen\RELoldmax \newdimen\RELnewmax
+%
+\def\relate{\@ifnextchar [{\RELcontd}{\global\advance\RELcount\@ne
+\expandafter\RELcontd\expandafter [\romannumeral \the\RELcount]}}%
+%
+\def\RELcontd[#1]{\def\RELlabel{#1}%
+\expandafter\let\expandafter\RELmax\csname RELold@#1\endcsname
+\ifx\RELmax\relax \RELoldmax0.20\hsize \else \RELoldmax\RELmax \fi
+\list{}{\labelwidth\RELoldmax \itemindent\z@ \leftmargin\RELoldmax
+\advance\leftmargin\relateleft \advance\leftmargin\relateright
+\let\makelabel\RELmakelabel}}%
+%
+\def\RELmakelabel#1{\@ifundefined{RELnew@\RELlabel}{\RELnewmax\z@}%
+{\expandafter\RELnewmax\csname RELnew@\RELlabel\endcsname}%
+\setbox\RELbox\hbox{\vtop to0pt{\let\\\cr \halign{##\hfil\cr#1\cr} \vss}}%
+\ifdim\wd\RELbox>\RELnewmax \RELnewmax\wd\RELbox\fi
+\expandafter\xdef\csname RELnew@\RELlabel\endcsname{\the\RELnewmax}%
+\hskip\labelsep \hskip-\relateright \hbox to\z@{\box\RELbox\hss}\hfill}%
+%
+\def\endrelate{\toks\z@\expandafter{\csname RELold@\RELlabel\endcsname}%
+\immediate\write\@auxout{\gdef\the\toks0{\csname RELnew@\RELlabel\endcsname}}%
+\endlist}%
+%
+\makeatother
+\endinput
+
+
+ HOW TO USE IT
+
+This LaTeX macro file defines a "relate" environment, which is basically
+a more intelligent "description" environment. To use it, place
+ \input {path}relate
+somewhere before \begin{document}.
+
+Here's an example of relate environment usage:
+
+ \begin{relate}
+ \item[Spot] Spot is a dog. See Spot run.
+ \item[Spock] Spock is a Vulcan. See Spock think.
+ \item[Cigarette\\Smoke]
+ Smoke is a health hazard.
+ The Surgeon General recommends ... smoked.
+ \end{relate}
+
+This produces output that looks like this:
+
+ | preceding text |
+ +-----------------------------------------------------------+
+
+ Spot Spot is a dog. See Spot run.
+
+ Spock Spock is a Vulcan. See Spock think.
+
+ Cigarette Smoke is a health hazard. The
+ Smoke Surgeon General ....................
+ ........ smoked.
+ |<---->| |<---->|
+ \relateleft \relateright
+
+ |<---- left margin ---->|
+
+The relate environment behaves very much like the description environment
+except:
+
+ 1. \item labels may be multi-line. For example, \item[Cigarette\\Smoke]
+ produces a two-line label, with "Cigarette" on one line and "Smoke"
+ on the following line. [BUG: You get strange output if your label
+ has more lines than the associated text.]
+
+ 2. Labels don't intrude into the text, like long labels do in the
+ description environment. Relate automatically calculates the width of
+ the widest label in a relate environment and adjusts the "left margin"
+ of the text appropriately. This is done using the .aux file, similar
+ to LaTeX section, page number etc. references, so margins will not
+ be correct until the second LaTeX run after a change to a label is made.
+
+ \relateleft and \relateright are horizontal space parameters;
+ the left margin for a relate environment will be equal to
+ \relateleft + maximum-width + \relateright
+ where maximum-width is the width of the widest label.
+ The default value of both \relateleft and \relateright is \leftmargin
+ (about 25 points when using 10-point fonts).
+ \relateleft and \relateright can be changed using \setlength, eg.
+ \setlength{\relateleft}{0.5in}
+ \setlength{\relateright}{0.3in}
+ This can be done immediately after \input-ing relate_macros.
+
+Normally, each relate environment is autonomous in the sense that only
+labels in that environment determine the left margin for that environment.
+However, different relate environments within the same document can be "linked"
+so that they have the same left margin. For example,
+
+ ...
+ \begin{relate}[apple]
+ \item[anything] ...
+ ...
+ \end{relate}
+ ...
+ \begin{relate}[apple]
+ \item[whatever] ...
+ ...
+ \end{relate}
+ ...
+
+The left margins in these two relate environments will be the same because
+they were "linked" by placing the same "label" ("apple" in this example)
+in square brackets after \begin{relate}. You can link any number of
+relate environments in the same document; they need not be adjacent.
+Labels should consist entirely of lower and uppercase letters.
+
+If you get strange margins when using relate, just re-latex your document.
+The left margins will be recalculated and should be correct on the second run.
+
+By the way, you can nest relates within one another and within other
+list environments as well.
+
+
+ HOW IT WORKS
+
+relate_macros.tex is described below:
+
+ \makeatletter
+
+This allows '@' to be used in control sequences, plus allows access to
+the efficient \z@ (zero), \@ne (one), and other TeX and LaTeX hacks.
+
+ \newdimen\relateleft \relateleft=\leftmargin % space before label
+ \newdimen\relateright \relateright=\labelsep % min. space after label
+
+Defines and sets the default values of \relateleft and \relateright.
+
+ \newbox\RELbox \newcount\RELcount \RELcount\z@
+ \newdimen\RELoldmax \newdimen\RELnewmax
+
+\RELbox temporarily holds a label so that it can be measured.
+
+\RELoldmax will hold the width of the widest label for this (and similarly
+labelled) enviroments as calculated in the last run, for the duration of
+each relate environment. Similarly, \RELnewmax holds the width of the
+widest label for this (and similarly labelled) relate environments as
+calculated in this run, but \RELnewmax is updated from \RELnew@xxx
+and stored to \RELnew@xxx at every \item in the environment (see below).
+
+For a relate environment labelled, say, "apple", a global control sequence
+named \RELnew@apple will be used to keep track of the width of the widest
+label of all "apple" relate environments. Inside each "apple" env. \item,
+\RELnew@apple is copied to \RELnewmax. \RELnewmax is updated if necessary
+as the width of each label is computed. When the \item ends, \RELnewmax
+is copied back to \RELnew@apple, in case there are more "apple" environments.
+When the entire environment ends, a line like:
+ \gdef \RELold@apple {28.74pt}
+is written to the .aux file, where 28.74pt would be the value of \RELnewmax,
+the width of the widest label so far encountered in this and previous
+relate environments.
+
+At the beginning of every run (at \begin{document}, in fact), the .aux
+file is \input automatically by LaTeX. Assuming the previous run contained
+several relate environments labelled "apple", \RELold@apple will be defined
+(and redefined by each "apple" environment in the previous run) to be
+the width of the widest label in all "apple" environments in the previous
+run. Assuming no labels changed since then, this value will be the correct
+maximum label width. (If this is the first run, \RELold@apple is not defined
+and the arbitrary value of 0.20\hsize, one third the width of the page,
+is used instead.) In each "apple" relate environment, \RELold@apple is
+copied to \RELoldmax, which is used to position labels within a left margin
+of width \relateleft + \RELoldmax + \relateright.
+
+ \def\relate{\@ifnextchar [{\RELcontd}{\global\advance\RELcount\@ne
+ \expandafter\RELcontd\expandafter [\romannumeral \the\RELcount]}}%
+
+\RELcount is a counter used to create unique relate environment labels
+for when the user doesn't supply one (like "apple" in the above example).
+\begin{relate} simply invokes \relate; if an argument in square brackets
+is present (eg. [apple]), then \RELcontd ("relate continued") is called
+with that argument. Otherwise, \RELcount is incremented and a unique
+label is formed by converting the value of \RELcount to lowercase roman
+numerals (ie. "i", "ii", "iii", "iv", ...).
+
+ \def\RELcontd[#1]{\gdef\RELlabel{#1}%
+
+\RELlabel holds the environment label for use by \endrelate.
+
+ \expandafter\let\expandafter\RELmax\csname RELold@#1\endcsname
+ \ifx\RELmax\relax \RELoldmax0.20\hsize \else \RELoldmax\RELmax \fi
+
+If \RELold@apple (assuming "apple" relate environment label) has been
+defined (presumably in the .aux file), set \RELoldmax to that value,
+otherwise set \RELoldmax to the arbitrary value of 0.20\hsize.
+
+ \@ifundefined{RELnew@#1}{\global\RELnewmax\z@}%
+ {\expandafter\global\expandafter\RELnewmax\csname RELnew@#1\endcsname}%
+
+If \RELnew@apple has been defined, then set \RELnewmax to that value,
+otherwise set \RELnewmax to zero.
+
+ \list{}{\labelwidth\RELoldmax \itemindent\z@ \leftmargin\RELoldmax
+ \advance\leftmargin\relateleft \advance\leftmargin\relateright
+ \let\makelabel\RELmakelabel}}%
+
+Start a \list. Set \labelwidth to zero; labels will really have zero width
+anyway. Set the \leftmargin to \RELoldmax + \relateleft + \relateright.
+(This is LaTeX's idea of left margin; see p. 113 in the LaTeX manual.)
+Set \labelwidth to the maximum label width -- the label will be right-
+justified within a box of this width by \RELmakelabel.
+\RELmakelabel will be used to make labels.
+
+ \def\RELmakelabel#1{\@ifundefined{RELnew@\RELlabel}{\RELnewmax\z@}%
+ {\expandafter\RELnewmax\csname RELnew@\RELlabel\endcsname}%
+
+If \RELnew@apple is undefined, define \RELnewmax as zero, otherwise
+define it as the value of \RELnew@apple. \RELnewmax is a \dimen variable
+which is only (effectively) active for the duration of an \item.
+
+ \setbox\RELbox\hbox{\vtop to0pt{\let\\\cr \halign{##\hfil\cr#1\cr} \vss}}%
+
+Typeset the label in the horizonal box register \RELbox. The \halign
+(with \\ defined as \cr) allows multiple \\-separated lines in the label.
+\vtop to0pt and \vss make LaTeX think that this is a one-line box,
+regardless of the actual number of lines.
+
+ \ifdim\wd\RELbox>\RELnewmax \RELnewmax\wd\RELbox\fi
+ \expandafter\xdef\csname RELnew@\RELlabel\endcsname{\the\RELnewmax}%
+
+If the width of \RELbox is greater than the current maximum label width,
+increase \RELnewmax appropriately. Then, store the new maximum label
+width back into \RELnew@apple for use by the next \RELmakelabel.
+
+ \hskip\labelsep \hskip-\relateright \hbox to\z@{\box\RELbox\hss}\hfill}%
+
+Print the left edge of the label at distance \relateright - \labelsep from
+the left edge of the text.
+
+ \def\endrelate{\toks\z@\expandafter{\csname RELold@\RELlabel\endcsname}%
+ \immediate\write\@auxout{\gdef\the\toks0{\csname RELnew@\RELlabel\endcsname}}%
+ \endlist}%
+
+Finish the relate environment. \endrelate is called by \end{relate}.
+Write a line to the .aux file of the form
+ \gdef \RELold@apple {28.74pt}
+as explained above.
+
+ \makeatother
+ \endinput
+
+That's all, folks!
+
+
+% 1987 Jun 10 E. Ledoux Creation
+% 1987 Jun 12 E. Ledoux Fixed problem with nested relate env's
+
+-------
diff --git a/info/digests/texhax/txh/rogers.txh b/info/digests/texhax/txh/rogers.txh
new file mode 100644
index 0000000000..5ebeae29a9
--- /dev/null
+++ b/info/digests/texhax/txh/rogers.txh
@@ -0,0 +1,336 @@
+ 5-Jan-88 13:28:22-PST,14331;000000000000
+Return-Path: <dfr@USNA.MIL>
+Date: Tue, 5 Jan 88 16:14:58 EST
+From: "David F. Rogers" <dfr@USNA.MIL>
+Subject: Font substitution tables
+
+G'day,
+
+Two font substitution tables are given below. The first is from
+cm to am fonts and the second from am to cm fonts.
+
+These tables are set up for use with Arbortext's series of
+dvi to laser printer programs. They have been tested (but not
+exhaustively) using MicroTeX and an HP Laserjet+, i.e. with
+Arbortext's dvihp program. They should also work with the
+dvips program. The format may need editing for other dvi to
+laser printers. However, that should be easy enough with a
+good text editor.
+
+I find these substitution tables particularly convenient because I work
+in a mixed environment where some implimentations of TeX have only am
+fonts and others only cm fonts. They are also convenient when printing
+dvi files transmitted amongst machines on a network.
+
+I have called the tables/files -- amcmfont.sub & cmamfont.sub with
+obvious meaning. I keep them in \tex\fonts for the MicroTeX
+implimentation.
+
+Please let me know of any typos/bugs.
+
+Professor David F. Rogers
+Aerospace Engineering Department
+U. S. Naval Academy
+Annapolis, MD 21402
+USA
+
+dfr@usna.mil
+
+cmamfont.sub _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+cmr10 at 10pt -> amr10 at 10pt
+cmr10 at 10.95pt -> amr10 at 10.95pt
+cmr10 at 12pt -> amr10 at 12pt
+cmr10 at 14.4pt -> amr10 at 14.4pt
+cmr10 at 17.28pt -> amr10 at 17.28pt
+cmr10 at 20.73pt -> amr10 at 20.73pt
+cmr10 at 20.74pt -> amr10 at 20.73pt
+cmr5 at 5pt -> amr5 at 5pt
+cmbx10 at 10pt -> ambx10 at 10pt
+cmbx10 at 10.95pt -> ambx10 at 10.95pt
+cmbx10 at 12pt -> ambx10 at 12pt
+cmbx10 at 14.4pt -> ambx10 at 14.4pt
+cmbx10 at 17.28pt -> ambx10 at 17.28pt
+cmbx10 at 20.73pt -> ambx10 at 20.73pt
+cmr7 at 7pt -> amr7 at 7pt
+cmbx5 at 5pt -> ambx5 at 5pt
+cmbx7 at 7pt -> ambx7 at 7pt
+cmsl10 at 10pt -> amsl10 at 10pt
+cmsl10 at 10.95pt -> amsl10 at 10.95pt
+cmsl10 at 12pt -> amsl10 at 12pt
+cmsl10 at 14.4pt -> amsl10 at 14.4pt
+cmsl10 at 17.28pt -> amsl10 at 17.28pt
+cmsl10 at 20.73pt -> amsl10 at 20.73pt
+cmti10 at 10pt -> amti10 at 10pt
+cmti10 at 10.95pt -> amti10 at 10.95pt
+cmti10 at 12pt -> amti10 at 12pt
+cmti10 at 14.4pt -> amti10 at 14.4pt
+cmti10 at 17.28pt -> amti10 at 17.28pt
+cmti10 at 20.73pt -> amti10 at 20.73pt
+cmtt10 at 10pt -> amtt10 at 10pt
+cmmi10 at 10pt -> ammi10 at 10pt
+cmmi10 at 10.95pt -> ammi10 at 10.95pt
+cmmi10 at 12pt -> ammi10 at 12pt
+cmmi10 at 14.4pt -> ammi10 at 14.4pt
+cmmi10 at 17.28pt -> ammi10 at 17.28pt
+cmmi10 at 20.73pt -> ammi10 at 20.73pt
+cmmi7 at 7pt -> ammi7 at 7pt
+cmmi5 at 5pt -> ammi5 at 5pt
+cmsy10 at 10pt -> amsy10 at 10pt
+cmsy10 at 10.95pt -> amsy10 at 10.95pt
+cmsy10 at 12pt -> amsy10 at 12pt
+cmsy10 at 14.4pt -> amsy10 at 14.4pt
+cmsy10 at 17.28pt -> amsy10 at 17.28pt
+cmsy10 at 20.73pt -> amsy10 at 20.73pt
+cmsy7 at 7pt -> amsy7 at 7pt
+cmsy5 at 5pt -> amsy5 at 5pt
+cmex10 at 10pt -> amex10 at 10pt
+cmbi10 at 10pt -> ambi10 at 10pt
+cmbi10 at 10.95pt -> ambi10 at 10.95pt
+cmbi10 at 12pt -> ambi10 at 12pt
+cmbsy10 at 10pt -> ambsy10 at 10pt
+cmbsy10 at 10.95pt -> ambsy10 at 10.95pt
+cmbsy10 at 12pt -> ambsy10 at 12pt
+cmbxsl10 at 10pt -> ambxsl10 at 10pt
+cmbx6 at 6pt -> ambx6 at 6pt
+cmbx8 at 8pt -> ambx8 at 8pt
+cmbx9 at 9pt -> ambx9 at 9pt
+cmbx10 at 10pt -> ambx10 at 10pt
+cmbx10 at 10.95pt -> ambx10 at 10.95pt
+cmbx10 at 12pt -> ambx10 at 12pt
+cmbx10 at 14.4pt -> ambx10 at 14.4pt
+cmbx10 at 17.28pt -> ambx10 at 17.28pt
+cmbx10 at 20.73pt -> ambx10 at 20.73pt
+cmcsc10 at 10pt -> amcsc10 at 10pt
+cmdunh10 at 10pt -> amdunh10 at 10pt
+cmitt10 at 10pt -> amitt10 at 10pt
+cmmi6 at 6pt -> ammi6 at 6pt
+cmmi8 at 8pt -> ammi8 at 8pt
+cmmi9 at 9pt -> ammi9 at 9pt
+cmr6 at 6pt -> amr6 at 6pt
+cmr8 at 8pt -> amr8 at 8pt
+cmr9 at 9pt -> amr9
+cmsltt10 at 10pt -> amsltt10 at 10pt
+cmsl8 at 8pt -> amsl8 at 8pt
+cmsl9 at 9pt -> amsl9 at 9pt
+cmssbx10 at 10pt -> amssbx10 at 10pt
+cmssi10 at 10pt -> amssi10 at 10pt
+cmssmc10 at 10pt -> amssmc10 at 10pt
+cmssmc40 at 40pt -> amssmc40 at 40pt
+cmssqi8 at 8pt -> amssqi8 at 8pt
+cmssq8 at 8pt -> amssq8 at 8pt
+cmss10 at 10pt -> amss10 at 10pt
+cmsy6 at 6pt -> amsy6 at 6pt
+cmsy8 at 8pt -> amsy8 at 8pt
+cmsy9 at 9pt -> amsy9 at 9pt
+cmtex10 at 10pt -> amtex10 at 10pt
+cmti7 at 7pt -> amti7 at 7pt
+cmti8 at 8pt -> amti8 at 8pt
+cmti9 at 9pt -> amti9 at 9pt
+cmtt8 at 8pt -> amtt8 at 8pt
+cmtt9 at 9pt -> amtt9 at 9pt
+cmu10 at 10pt -> amu10 at 10pt
+cmbc12 at 12pt -> ambc12 at 12pt
+cmrc10 at 10pt -> amrc10 at 10pt
+cmrtex10 at 10pt -> amrtex10 at 10pt
+
+cmb10 at 10pt -> amb10 at 10pt
+cmb10 at 10.95pt -> amb10 at 10.95pt
+cmb10 at 12pt -> amb10 at 12pt
+cmcsc10 at 10.95pt -> amcsc10 at 10.95pt
+cmcsc10 at 12pt -> amcsc10 at 12pt
+cmdunh10 at 10.95pt -> amdunh10 at 10.95pt
+cmdunh10 at 12pt -> amdunh10 at 12pt
+cmex10 at 10.95pt -> amex10 at 10.95pt
+cmex10 at 12pt -> amex10 at 12pt
+cmitt10 at 10.95pt -> amitt10 at 10.95pt
+cmitt10 at 12pt -> amitt10 at 12pt
+cmmi6 at 6pt -> ammi6 at 6pt
+cmmi8 at 8pt -> ammi8 at 8pt
+cmmi9 at 9pt -> ammi9 at 9pt
+cmr6 at 6pt -> amr6 at 6pt
+cmr7 at 7pt -> amr7 at 7pt
+cmr8 at 8pt -> amr8 at 8pt
+cmr9 at 9pt -> amr9 at 9pt
+cmsl8 at 8pt -> amsl8 at 8pt
+cmsl9 at 9pt -> amsl9 at 9pt
+cmsltt10 at 10.95pt -> amsltt10 at 10.95pt
+cmsltt10 at 12pt -> amsltt10 at 12pt
+cmsltt10 at 14.4pt -> amsltt10 at 14.4pt
+cmss10 at 10.95pt -> amss10 at 10.95pt
+cmss10 at 12pt -> amss10 at 12pt
+cmss10 at 14.4pt -> amss10 at 14.4pt
+cmssbx10 at 10.95pt -> amssbx10 at 10.95pt
+cmssbx10 at 12pt -> amssbx10 at 12pt
+cmssbx10 at 14.4pt -> amssbx10 at 14.4pt
+cmssi10 at 10.95pt -> amssi10 at 10.95pt
+cmssi10 at 12pt -> amssi10 at 12pt
+cmssi10 at 14.4pt -> amssi10 at 14.4pt
+cmssmc10 at 10.95pt -> amssmc10 at 10.95pt
+cmssmc10 at 14.4pt -> amssmc10 at 14.4pt
+cmssq8 at 8.76pt -> amssq8 at 8.76pt
+cmssq8 at 9.6pt -> amssq8 at 9.6pt
+cmssqi8 at 8.76pt -> amssqi8 at 8.76pt
+cmssqi8 at 9.6pt -> amssqi8 at 9.6pt
+cmsy6 at 6pt -> amsy6 at 6pt
+cmsy8 at 8pt -> amsy8 at 8pt
+cmsy9 at 9pt -> amsy9 at 9pt
+cmtex10 at 10.95pt -> amtex10 at 10.95pt
+cmtex10 at 12pt -> amtex10 at 12pt
+cmti7 at 7pt -> amti7 at 7pt
+cmti8 at 8pt -> amti8 at 8pt
+cmti9 at 9pt -> amti9 at 9pt
+cmtt8 at 8pt -> amtt8 at 8pt
+cmtt9 at 9pt -> amtt9 at 9pt
+
+amcmfont.sub _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+amr10 at 10pt -> cmr10 at 10pt
+amr10 at 10.95pt -> cmr10 at 10.95pt
+amr10 at 12pt -> cmr10 at 12pt
+amr10 at 14.4pt -> cmr10 at 14.4pt
+amr10 at 17.28pt -> cmr10 at 17.28pt
+amr10 at 20.73pt -> cmr10 at 20.73pt
+amr10 at 20.74pt -> cmr10 at 20.73pt
+amr5 at 5pt -> cmr5 at 5pt
+ambx10 at 10pt -> cmbx10 at 10pt
+ambx10 at 10.95pt -> cmbx10 at 10.95pt
+ambx10 at 12pt -> cmbx10 at 12pt
+ambx10 at 14.4pt -> cmbx10 at 14.4pt
+ambx10 at 17.28pt -> cmbx10 at 17.28pt
+ambx10 at 20.73pt -> cmbx10 at 20.73pt
+amr7 at 7pt -> cmr7 at 7pt
+ambx5 at 5pt -> cmbx5 at 5pt
+ambx7 at 7pt -> cmbx7 at 7pt
+amsl10 at 10pt -> cmsl10 at 10pt
+amsl10 at 10.95pt -> cmsl10 at 10.95pt
+amsl10 at 12pt -> cmsl10 at 12pt
+amsl10 at 14.4pt -> cmsl10 at 14.4pt
+amsl10 at 17.28pt -> cmsl10 at 17.28pt
+amsl10 at 20.73pt -> cmsl10 at 20.73pt
+amti10 at 10pt -> cmti10 at 10pt
+amti10 at 10.95pt -> cmti10 at 10.95pt
+amti10 at 12pt -> cmti10 at 12pt
+amti10 at 14.4pt -> cmti10 at 14.4pt
+amti10 at 17.28pt -> cmti10 at 17.28pt
+amti10 at 20.73pt -> cmti10 at 20.73pt
+amtt10 at 10pt -> cmtt10 at 10pt
+ammi10 at 10pt -> cmmi10 at 10pt
+ammi10 at 10.95pt -> cmmi10 at 10.95pt
+ammi10 at 12pt -> cmmi10 at 12pt
+ammi10 at 14.4pt -> cmmi10 at 14.4pt
+ammi10 at 17.28pt -> cmmi10 at 17.28pt
+ammi10 at 20.73pt -> cmmi10 at 20.73pt
+ammi7 at 7pt -> cmmi7 at 7pt
+ammi5 at 5pt -> cmmi5 at 5pt
+amsy10 at 10pt -> cmsy10 at 10pt
+amsy10 at 10.95pt -> cmsy10 at 10.95pt
+amsy10 at 12pt -> cmsy10 at 12pt
+amsy10 at 14.4pt -> cmsy10 at 14.4pt
+amsy10 at 17.28pt -> cmsy10 at 17.28pt
+amsy10 at 20.73pt -> cmsy10 at 20.73pt
+amsy7 at 7pt -> cmsy7 at 7pt
+amsy5 at 5pt -> cmsy5 at 5pt
+amex10 at 10pt -> cmex10 at 10pt
+ambi10 at 10pt -> cmbi10 at 10pt
+ambi10 at 10.95pt -> cmbi10 at 10.95pt
+ambi10 at 12pt -> cmbi10 at 12pt
+ambsy10 at 10pt -> cmbsy10 at 10pt
+ambsy10 at 10.95pt -> cmbsy10 at 10.95pt
+ambsy10 at 12pt -> cmbsy10 at 12pt
+ambxsl10 at 10pt -> cmbxsl10 at 10pt
+ambx6 at 6pt -> cmbx6 at 6pt
+ambx8 at 8pt -> cmbx8 at 8pt
+ambx9 at 9pt -> cmbx9 at 9pt
+ambx10 at 10pt -> cmbx10 at 10pt
+ambx10 at 10.95pt -> cmbx10 at 10.95pt
+ambx10 at 12pt -> cmbx10 at 12pt
+ambx10 at 14.4pt -> cmbx10 at 14.4pt
+ambx10 at 17.28pt -> cmbx10 at 17.28pt
+ambx10 at 20.73pt -> cmbx10 at 20.73pt
+amcsc10 at 10pt -> cmcsc10 at 10pt
+amdunh10 at 10pt -> cmdunh10 at 10pt
+amitt10 at 10pt -> cmitt10 at 10pt
+ammi6 at 6pt -> cmmi6 at 6pt
+ammi8 at 8pt -> cmmi8 at 8pt
+ammi9 at 9pt -> cmmi9 at 9pt
+amr6 at 6pt -> cmr6 at 6pt
+amr8 at 8pt -> cmr8 at 8pt
+amr9 at 9pt -> cmr9
+amsltt10 at 10pt -> cmsltt10 at 10pt
+amsl8 at 8pt -> cmsl8 at 8pt
+amsl9 at 9pt -> cmsl9 at 9pt
+amssbx10 at 10pt -> cmssbx10 at 10pt
+amssi10 at 10pt -> cmssi10 at 10pt
+amssmc10 at 10pt -> cmssmc10 at 10pt
+amssmc40 at 40pt -> cmssmc40 at 40pt
+amssqi8 at 8pt -> cmssqi8 at 8pt
+amssq8 at 8pt -> cmssq8 at 8pt
+amss10 at 10pt -> cmss10 at 10pt
+amsy6 at 6pt -> cmsy6 at 6pt
+amsy8 at 8pt -> cmsy8 at 8pt
+amsy9 at 9pt -> cmsy9 at 9pt
+amtex10 at 10pt -> cmtex10 at 10pt
+amti7 at 7pt -> cmti7 at 7pt
+amti8 at 8pt -> cmti8 at 8pt
+amti9 at 9pt -> cmti9 at 9pt
+amtt8 at 8pt -> cmtt8 at 8pt
+amtt9 at 9pt -> cmtt9 at 9pt
+amu10 at 10pt -> cmu10 at 10pt
+ambc12 at 12pt -> cmbc12 at 12pt
+amrc10 at 10pt -> cmrc10 at 10pt
+amrtex10 at 10pt -> cmrtex10 at 10pt
+
+amb10 at 10pt -> cmb10 at 10pt
+amb10 at 10.95pt -> cmb10 at 10.95pt
+amb10 at 12pt -> cmb10 at 12pt
+amcsc10 at 10.95pt -> cmcsc10 at 10.95pt
+amcsc10 at 12pt -> cmcsc10 at 12pt
+amdunh10 at 10.95pt -> cmdunh10 at 10.95pt
+amdunh10 at 12pt -> cmdunh10 at 12pt
+amex10 at 10.95pt -> cmex10 at 10.95pt
+amex10 at 12pt -> cmex10 at 12pt
+amitt10 at 10.95pt -> cmitt10 at 10.95pt
+amitt10 at 12pt -> cmitt10 at 12pt
+ammi6 at 6pt -> cmmi6 at 6pt
+ammi8 at 8pt -> cmmi8 at 8pt
+ammi9 at 9pt -> cmmi9 at 9pt
+amr6 at 6pt -> cmr6 at 6pt
+amr7 at 7pt -> cmr7 at 7pt
+amr8 at 8pt -> cmr8 at 8pt
+amr9 at 9pt -> cmr9 at 9pt
+amsl8 at 8pt -> cmsl8 at 8pt
+amsl9 at 9pt -> cmsl9 at 9pt
+amsltt10 at 10.95pt -> cmsltt10 at 10.95pt
+amsltt10 at 12pt -> cmsltt10 at 12pt
+amsltt10 at 14.4pt -> cmsltt10 at 14.4pt
+amss10 at 10.95pt -> cmss10 at 10.95pt
+amss10 at 12pt -> cmss10 at 12pt
+amss10 at 14.4pt -> cmss10 at 14.4pt
+amssbx10 at 10.95pt -> cmssbx10 at 10.95pt
+amssbx10 at 12pt -> cmssbx10 at 12pt
+amssbx10 at 14.4pt -> cmssbx10 at 14.4pt
+amssi10 at 10.95pt -> cmssi10 at 10.95pt
+amssi10 at 12pt -> cmssi10 at 12pt
+amssi10 at 14.4pt -> cmssi10 at 14.4pt
+amssmc10 at 10.95pt -> cmssmc10 at 10.95pt
+amssmc10 at 14.4pt -> cmssmc10 at 14.4pt
+amssq8 at 8.76pt -> cmssq8 at 8.76pt
+amssq8 at 9.6pt -> cmssq8 at 9.6pt
+amssqi8 at 8.76pt -> cmssqi8 at 8.76pt
+amssqi8 at 9.6pt -> cmssqi8 at 9.6pt
+amsy6 at 6pt -> cmsy6 at 6pt
+amsy8 at 8pt -> cmsy8 at 8pt
+amsy9 at 9pt -> cmsy9 at 9pt
+amtex10 at 10.95pt -> cmtex10 at 10.95pt
+amtex10 at 12pt -> cmtex10 at 12pt
+amti7 at 7pt -> cmti7 at 7pt
+amti8 at 8pt -> cmti8 at 8pt
+amti9 at 9pt -> cmti9 at 9pt
+amtt8 at 8pt -> cmtt8 at 8pt
+amtt9 at 9pt -> cmtt9 at 9pt
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+Good luck
+
+-------
diff --git a/info/digests/texhax/txh/rokicki.txh b/info/digests/texhax/txh/rokicki.txh
new file mode 100644
index 0000000000..123a1d1190
--- /dev/null
+++ b/info/digests/texhax/txh/rokicki.txh
@@ -0,0 +1,836 @@
+
+ 6-Jun-88 01:05:54-PDT,24377;000000000000
+Return-Path: <rokicki@polya.Stanford.EDU>
+Date: Mon, 6 Jun 88 01:06:18 PDT
+From: Tomas G. Rokicki <rokicki@polya.Stanford.EDU>
+Subject: dvidvi
+
+There have been a few postings about programs which do fancy
+pagination, like selecting odd pages and reversing them, and
+then selecting even pages, or printing multiple pages on one
+sheet. Here's one I did over the weekend in C; enjoy!
+
+# This is a shell archive.
+# Remove everything above and including the cut line.
+# Then run the rest of the file through sh.
+#----cut here-----cut here-----cut here-----cut here----#
+#!/bin/sh
+# shar: Shell Archiver
+# Run the following text with /bin/sh to create:
+# README
+# dvidvi.c
+# dvisamp.tex
+# makefile
+# This archive created: Mon Jun 6 01:04:31 1988
+cat << \SHAR_EOF > README
+ dvidvi 0.5, Copyright (C) 1988, Radical Eye Software
+
+ Here's a little hack I threw together for those doing pagination
+tricks. Any improvements are appreciated. Enjoy!
+
+ The dvidvi program converts a dvi file into another dvi file,
+with perhaps certain changes. Invocation is
+
+ dvidvi param infile outfile
+
+What's that funny first parameter? That's the parameter that tells
+dvidvi how you want to change things.
+
+ The number preceding the colon is the modulo value. Everything
+will be done in chunks of pages this big. If there is no colon, than the
+default value is assumed to be one. The last chunk of pages is padded
+with as many blank pages as necessary.
+
+ Following the colon is a comma-separated list of page numbers.
+These page numbers are with respect to the current chunk of pages, and
+must lie in the range zero to the modulo value less one. If a negative
+sign precedes the number, then the page is taken from the mirror chunk;
+if there are m chunks, then the mirror chunk of chunk n is the chunk
+numbered m-n-1. Put simply, it is the chunk numbered the same, only
+from the end. This can be used to reverse pages. If no number is
+given, the page number defaults to 0.
+
+ Following each page number is an optional offset value in
+parenthesis, which consists of a pair of comma-separated dimensions.
+Each dimension is a decimal number with an optional unit of measure.
+The default unit of measure is inches, or the last unit of measure
+used. All units are in true dimensions. Allowable units of measure
+are the same that TeX allows: in, mm, cm, pt, pc, dd, and cc.
+
+ Simple enough, eh? Okay, let's do some simple things.
+
+0
+ The identity transformation. A modulo of one is assumed; the only
+ reason we need to specify the zero is because a null parameter is
+ harder to type.
+-
+ Reverses the order of the pages. This time, both the modulo and
+ the page number are defaulted.
+2:0
+ Selects the first, third, fifth, etc. pages from the file. Print
+ this one after printing the next, taking the paper out of the
+ feed tray and reinserting it into the paper feed.
+2:-1
+ Selects the second, fourth, etc. pages, and writes them in reverse
+ order.
+4:-1,2(4.25in,0in)
+4:-3,0(4.25in,0in)
+ Useful for printing a little booklet, four pages to a sheet,
+ double-sided, for stapling in the middle. Print the first one,
+ put the stack back into the printer upside down, and print the
+ second. The `in' specifications are superfluous.
+,(1pt,1)
+ Scare your system administrator! Actually, things are so
+ blurry with this option, you may want to send enemies letters
+ printed like this. *Long* letters.
+4:0(5.5in,4.25),3(0,4.25)
+4:1(0in,4.25),2(5.5,4.25)
+ Print a four-page card on one sheet. Print the first, rotate
+ the paper 180 degrees and feed it again. (PostScript people
+ can do funny tricks with PostScript so this isn't necessary.)
+
+ Enjoy; this is an early release, so make suggestions, improvements,
+and I'll get back to you with a better version later.
+SHAR_EOF
+cat << \SHAR_EOF > dvidvi.c
+/*
+ * This program converts dvi files to dvi files; it can be used
+ * reverse the pages -
+ * select even 2:1
+ * or odd 2:0
+ * print both on same page 2:0,1(5.5in,0in)
+ * do folded brochures 4:-3,0(5.5in,0in)
+ * 4:1,-2(5.5in,0in)
+ * etc.
+ */
+#include "stdio.h"
+#define MAXPPERP (32)
+/*
+ * Some globals to keep everyone happy.
+ */
+long **pagepos ; /* an array holding the positions of each page. */
+long numpages ; /* the total number of pages in the dvi file. */
+long TeXfonts[256] ; /* information about each font */
+char fontseen[256] ; /* have we defined this font yet? */
+int modulo ; /* our mod value */
+struct pagespec {
+ int pageno, reversed ;
+ long hoffset, voffset ; /* in scaled points */
+} pages[MAXPPERP] ; /* the organization of the pages on output */
+int pagesperpage ; /* how many pages crammed onto each page? */
+FILE *infile ; /* input dvi file (cannot be a stream) */
+char *temp[255] ; /* a temporary place to put things */
+unsigned char *dvibuf ; /* our entire dvi file */
+long inlength ; /* the length of the input dvi file */
+long postloc ; /* location of the postamble */
+long mag ; /* magnification factor */
+long pagecount ; /* number of actual pages */
+long landscape ; /* if landscape special, here it is! */
+int rem0special ; /* should we remove the first first-page special? */
+long prevpp = -1 ; /* previous page pointer on output */
+long outputpages ; /* number of pages output */
+long dviloc ; /* our position in the output file */
+long pagefake ; /* number of pages, rounded up to multiple of modulo */
+/*
+ * Some def's to make things friendlier.
+ */
+#define fontdeflen(p) (16L+dvibuf[(p)+14]+dvibuf[(p)+15])
+/*
+ * Forward declarations.
+ */
+char *malloc() ;
+/*
+ * This array holds values that indicate the length of a command, if
+ * we aren't concerned with that command (which is most of them) or
+ * zero, if it is a special case. This makes running through the
+ * dvi file a lot easier (and probably faster) than any form of
+ * dispatch table, especially since we really don't care what the
+ * pages are made of.
+ */
+short comlen[256] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0-15 */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 16-31 */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 32-47 */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 48-63 */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 64-79 */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 80-95 */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 96-111 */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 112-127 */
+ 2, 3, 4, 5, 9, 2, 3, 4, 5, 9, 1, 0, 0, 1, 1, 2, /* 128-143 */
+ 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 2, 3, 4, /* 144-159 */
+ 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, /* 160-175 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 176-191 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 192-207 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 208-223 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, /* 224-239 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};/* 240-255 */
+/*
+ * Print a usage error messsage, and quit.
+ */
+usage() {
+ fprintf(stderr,
+ "This is dvidvi 0.5, Copyright (C) 1988, Radical Eye Software\n") ;
+ fprintf(stderr, "Usage: dvidvi modulo:pagespecs input[.dvi] [output]\n") ;
+ exit(1) ;
+}
+/*
+ * Print an error message, and exit if it is fatal.
+ */
+error(s)
+char *s ;
+{
+ fprintf(stderr, "dvidvi: %s\n", s) ;
+ if (*s == '!')
+ exit(1) ;
+}
+/*
+ * This function calculates approximately (whole + num/den) * sf.
+ * No need for real extreme accuracy; one ten thousandth of an
+ * inch should be sufficient.
+ *
+ * No `sf' parameter means to use an old one; inches are assumed
+ * originally.
+ *
+ * Assumptions:
+ *
+ * 0 <= num < den <= 10000
+ * 0 <= whole
+ */
+long defaultscale = 4736286 ;
+long scale(whole, num, den, sf)
+long whole, num, den, sf ;
+{
+ long v ;
+
+ if (sf)
+ defaultscale = sf ;
+ else
+ sf = defaultscale ;
+ v = whole * sf + num * (sf / den) ;
+ if (v / sf != whole || v < 0 || v > 0x40000000L)
+ error("! arithmetic overflow in parameter") ;
+ sf = sf % den ;
+ v += (sf * num * 2 + den) / (2 * den) ;
+ return(v) ;
+}
+/*
+ * Multiplies *p by 1000 and divides it by mag. Avoiding overflow.
+ *
+ * 1 <= mag <= 1000000 ;
+ * 0 <= *p <= 2^30
+ *
+ * (Could blow up if a parameter * mag / 1000 > 2^30 sp.)
+ */
+scalemag(p)
+long *p ;
+{
+ int negative ;
+
+ negative = 0 ;
+ if (*p < 0) {
+ negative = 1 ;
+ *p = - *p ;
+ }
+ *p = 1000 * (*p / mag) + (2000 * (*p % mag) + mag) / (2 * mag) ;
+ if (negative)
+ *p = - *p ;
+}
+/*
+ * Convert a sequence of digits into a long; return -1 if no digits.
+ * Advance the passed pointer as well.
+ */
+long myatol(s)
+char **s ;
+{
+ register char *p ;
+ register long result ;
+
+ result = 0 ;
+ p = *s ;
+ while ('0' <= *p && *p <= '9') {
+
+
+
+ if (result > 100000000)
+ error("! arithmetic overflow in parameter") ;
+ result = 10 * result + *p++ - '0' ;
+ }
+ if (p == *s)
+ usage() ;
+ else {
+ *s = p ;
+ return(result) ;
+ }
+}
+/*
+ * Get a dimension, allowing all the various extensions, and
+ * defaults.
+ */
+long myatodim(s)
+char **s ;
+{
+ register long w, num, den ;
+ register char *p ;
+ int negative = 0 ;
+
+ p = *s ;
+ if (**s == '-') {
+ (*s)++ ;
+ negative = 1 ;
+ }
+ w = myatol(s) ;
+ if (w < 0)
+ usage() ;
+ p = *s ;
+ num = 0 ;
+ den = 1 ;
+ if (*p == '.') {
+ p++ ;
+ while ('0' <= *p && *p <= '9') {
+ if (den < 1000) {
+ den *= 10 ;
+ num = num * 10 + *p - '0' ;
+ }
+ p++ ;
+ }
+ }
+/*
+ * Allowed units are `in', `cm', `mm', `pt', `sp', `cc', `dd', and `pc';
+ * must be in lower case.
+ */
+ if (*p == 'c' && p[1] == 'm') {
+/* centimeters need to be multiplied by 72.27 * 2^16 / 2.54, or 1 864 680 */
+ w = scale(w, num, den, 1864680L) ;
+ } else if (*p == 'p' && p[1] == 't') {
+/* real points need to be multiplied by 2^16 */
+ w = scale(w, num, den, 65536L) ;
+ } else if (*p == 'p' && p[1] == 'c') {
+/* picas need to be multiplied by 65536 * 12, or 786 432 */
+ w = scale(w, num, den, 786432L) ;
+ } else if (*p == 'm' && p[1] == 'm') {
+/* millimeters need to be multiplied by 72.27 * 2^16 / 25.4, or 186 468 */
+ w = scale(w, num, den, 186468L) ;
+ } else if (*p == 's' && p[1] == 'p') {
+/* scaled points are already taken care of; simply round */
+ w = scale(w, num, den, 1L) ;
+ } else if (*p == 'b' && p[1] == 'p') {
+/* big points need to be multiplied by 72.27 * 65536 / 72, or 65782 */
+ w = scale(w, num, den, 65782L) ;
+ } else if (*p == 'd' && p[1] == 'd') {
+/* didot points need to be multiplied by 65536 * 1238 / 1157, or 70124 */
+ w = scale(w, num, den, 70124L) ;
+ } else if (*p == 'c' && p[1] == 'c') {
+/* cicero need to be multiplied by 65536 * 1238 / 1157 * 12, or 841 489 */
+ w = scale(w, num, den, 841489L) ;
+ } else if (*p == 'i' && p[1] == 'n') {
+/* inches need to be multiplied by 72.27 * 65536, or 4 736 286 */
+ w = scale(w, num, den, 4736286L) ;
+ } else {
+/* use default values */
+ w = scale(w, num, den, 0L) ;
+ p -= 2 ;
+ }
+ p += 2 ;
+ *s = p ;
+ return(negative?-w:w) ;
+}
+/*
+ * Parse the arguments to the routine, and stuff everything away
+ * into those globals above.
+ */
+processargs(argc, argv)
+int argc ;
+char *argv[] ;
+{
+ char *p, *q ;
+ int pageno ;
+ long hoffset, voffset ;
+ int reversed ;
+
+ if (argc < 3 || argc > 4)
+ usage() ;
+ modulo = 1 ;
+ argv++ ;
+ argc-- ;
+ p = argv[0] ;
+/*
+ * Is there a modulo supplied? Grab it if so; otherwise default to 1.
+ */
+ for (q=p; *q != 0; q++)
+ if (*q == ':')
+ break ;
+ if (*q == ':') {
+ modulo = myatol(&p) ;
+ if (*p != ':')
+ usage() ;
+ if (modulo < 1 || modulo > MAXPPERP)
+ error("! modulo must lie between 1 and 32") ;
+ p++ ;
+ }
+/*
+ * This loop grabs all of the page specifications.
+ */
+ pagesperpage = 0 ;
+ while (*p != 0) {
+ if (pagesperpage >= MAXPPERP)
+ error("! too many page specifications") ;
+ if (*p == '-') {
+ reversed = 1 ;
+ p++ ;
+ } else
+ reversed = 0 ;
+ if (*p == 0 || *p == '(' || *p == ',')
+ pageno = 0 ;
+ else
+ pageno = myatol(&p) ;
+ if (*p == '(') {
+ p++ ;
+ hoffset = myatodim(&p) ;
+ if (*p++ != ',')
+ usage() ;
+ voffset = myatodim(&p) ;
+ if (*p++ != ')')
+ usage() ;
+ } else {
+ hoffset = 0 ;
+ voffset = 0 ;
+ }
+ pages[pagesperpage].hoffset = hoffset ;
+ pages[pagesperpage].voffset = voffset ;
+ pages[pagesperpage].pageno = pageno ;
+ pages[pagesperpage].reversed = reversed ;
+ pagesperpage++ ;
+ if (*p == ',')
+ p++ ;
+ }
+/*
+ * Finally we get around to opening our input and output files.
+ */
+ argc-- ;
+ argv++ ;
+ if ((infile=fopen(argv[0],"r"))==NULL) {
+ strcpy(temp, argv[0]) ;
+ strcat(temp, ".dvi") ;
+ if ((infile=fopen(temp,"r"))==NULL)
+ error("! can't open input file") ;
+ }
+ argc-- ;
+ argv++ ;
+ for (q=NULL, p=argv[0]; *p; p++)
+ if (*p == '.')
+ q = p ;
+ else if (*p == '/' || *p == ':')
+ q = NULL ;
+ strcpy(temp, argv[0]) ;
+ if (q==NULL)
+ strcat(temp, ".dvi") ;
+ if (argc > 0) {
+ if (freopen(temp, "w", stdout)==NULL)
+ error("! can't open output file") ;
+ }
+}
+/*
+ * Grabs an unsigned two bytes.
+ */
+long u2(where)
+long where ;
+{
+ return((dvibuf[where] << 8) + dvibuf[where + 1]) ;
+}
+/*
+ * Grabs a longword from the file.
+ */
+long quad(where)
+register long where ;
+{
+ return((u2(where) << 16) + u2(where+2)) ;
+}
+/*
+ * Grabs a pointer, and checks it for validity.
+ */
+long ptr(where)
+register long where ;
+{
+ where = quad(where) ;
+ if (where < -1L || where > inlength)
+ error("! dvi file malformed; impossible pointer") ;
+ return(where) ;
+}
+/*
+ * This routine finds a particular page, numbered sequentially
+ * from the beginning, by tracing the pointers backwards.
+ */
+long pageloc(num)
+long num ;
+{
+ long p ;
+
+ if (num >= pagecount)
+ return(0L) ;
+ num++ ;
+ for (p = ptr(postloc+1); num < pagecount; num++)
+ p = ptr(p+41) ;
+ if (dvibuf[p] != 139)
+ error("! missed a bop somehow") ;
+ return(p) ;
+}
+/*
+ * This routine simply reads the entire dvi file, and then initializes
+ * some values about it.
+ */
+readdvifile() {
+ long p ;
+
+ fseek(infile, 0L, 2) ;
+ inlength = ftell(infile) ;
+ fseek(infile, 0L, 0) ;
+ dvibuf = (unsigned char *)malloc(inlength) ;
+ if (dvibuf == NULL)
+ error("! not enough memory to hold input dvi file") ;
+ if (fread(dvibuf, 1, inlength, infile) != inlength)
+ error("! problem reading entire file into memory") ;
+ fclose(infile) ;
+ infile = NULL ;
+ if (inlength < 10)
+ error("! dvi file too short") ;
+ for (p=inlength - 3; p > 0; p--)
+ if (dvibuf[p] == 2 && dvibuf[p+1] == 0xdf /* dave fuchs */ &&
+ dvibuf[p+2] == 0xdf)
+ break ;
+ if (p < 10)
+ error("! rather short dvi file, ain't it?") ;
+ postloc = ptr(p - 4) ;
+ if (quad(postloc + 5) != 25400000 || quad(postloc + 9) != 473628672)
+ error("! change this program to support non-TeX num/den values") ;
+ mag = quad(postloc + 13) ;
+ if (mag < 1 || mag > 1000000)
+ error("! impossible magnification value") ;
+ pagecount = u2(postloc + 27) ;
+ if (pagecount < 1 || pagecount > 1000000)
+ error("! impossible page count value") ;
+/*
+ * That's enough error checking; we probably have a correct dvi file.
+ * Let's convert all the values we got from the command line into
+ * units that we can actually use in the dvi file.
+ */
+ for (p=0; p<pagesperpage; p++) {
+ scalemag(&(pages[p].hoffset)) ;
+ scalemag(&(pages[p].voffset)) ;
+ }
+/*
+ * Now let's grab us some font pointers.
+ */
+ p = postloc + 29 ;
+ while (1) {
+ if (dvibuf[p] == 249)
+ break ;
+ if (dvibuf[p] == 138)
+ p++ ;
+ else if (dvibuf[p] == 243) {
+ TeXfonts[dvibuf[p+1]] = p ;
+ p += fontdeflen(p) ;
+ } else
+ error("! only nop's and font def's allowed in postamble") ;
+ }
+/*
+ * Now we check for a landscape special. It should be the
+ * *first* thing in the page that is at all complicated.
+ */
+ p = pageloc(0L) + 45 ;
+ while (comlen[dvibuf[p]])
+ p += comlen[dvibuf[p]] ;
+ if (dvibuf[p] == 239 && strncmp(dvibuf + p + 2, "landscape", 9)==0) {
+ landscape = p ;
+ rem0special = 1 ;
+ }
+}
+/*
+ * Output a single byte, keeping track of where we are.
+ */
+dvibyte(c)
+unsigned char c ;
+{
+ putc(c, stdout) ;
+ dviloc++ ;
+}
+/*
+ * Send out two bytes.
+ */
+dvi2(v)
+long v ;
+{
+ dvibyte((unsigned char)(v >> 8)) ;
+ dvibyte((unsigned char)(v & 255)) ;
+}
+/*
+ * Send out a longword.
+ */
+dviquad(v)
+long v ;
+{
+ dvi2(v >> 16) ;
+ dvi2(v & 65535) ;
+}
+/*
+ * This routine just copies some stuff from the buffer on out.
+ */
+putbuf(where, length)
+long where, length ;
+{
+ register unsigned char *p ;
+
+ for (p=dvibuf + where; length > 0; p++, length--)
+ dvibyte(*p) ;
+}
+/*
+ * This routine outputs a string, terminated by null.
+ */
+putstr(s)
+register unsigned char *s ;
+{
+ while (*s)
+ dvibyte(*s++) ;
+}
+/*
+ * Here we write the preamble to the dvi file.
+ */
+writepreamble() {
+/* just copy the first 14 bytes of the file */
+ putbuf(0L, 14L) ;
+/* and put our identifier. */
+ putstr("\015dvidvi output") ;
+}
+/*
+ * This routine writes out a font definition.
+ */
+putfontdef(f)
+int f ;
+{
+ long p ;
+
+ p = TeXfonts[f] ;
+ putbuf(p, fontdeflen(p)) ;
+}
+/*
+ * The postamble is next.
+ */
+writepostamble() {
+ int i ;
+ long p ;
+
+ p = dviloc ;
+ dvibyte(248) ;
+ dviquad(prevpp) ;
+ putbuf(postloc+5, 20) ;
+ dvi2(u2(postloc+25)+1L) ; /* increase stack depth by 1 */
+ dvi2(outputpages) ;
+ for (i=0; i<256; i++)
+ if (fontseen[i])
+ putfontdef(i) ;
+ dvibyte(249) ;
+ dviquad(p) ;
+ dvibyte(2) ;
+ dviquad(0xdfdfdfdfL) ;
+ while (dviloc & 3)
+ dvibyte(0xdf) ;
+ fclose(stdout) ;
+}
+/*
+ * This routine starts a page, by writing out a bop command.
+ */
+beginpage() {
+ int i ;
+ long p ;
+
+ p = dviloc ;
+ dvibyte(139) ;
+ dviquad(outputpages) ;
+ for (i=0; i<9; i++)
+ dviquad(0L) ;
+ dviquad(prevpp) ;
+ prevpp = p ;
+}
+/*
+ * This routine sends out a page. We need to handle the
+ * landscape special, though.
+ */
+dopage(num)
+long num ;
+{
+ register long p ;
+ register int len ;
+ long v, oldp ;
+
+ p = pageloc(num) + 45 ;
+ while (dvibuf[p] != 140) {
+ if (len=comlen[dvibuf[p]]) { /* most commands are simple */
+ putbuf(p, (long)len) ;
+ p += len ;
+ } else { /* but there are a few we need to treat specially */
+ len = dvibuf[p] ;
+ if (171 <= len && len <= 235) {
+ p++ ;
+ if (len == 235)
+ len = dvibuf[p++] ;
+ else
+ len -= 171 ;
+ if (!fontseen[len]) {
+ putfontdef(len) ;
+ fontseen[len] = 1 ;
+ }
+ if (len < 64)
+ dvibyte(171 + len) ;
+ else {
+ dvibyte(235) ;
+ dvibyte(len) ;
+ }
+ } else {
+ v = 0 ;
+ oldp = p++ ;
+ switch(len) {
+case 242: v = dvibuf[p++] ;
+case 241: v = (v << 8) + dvibuf[p++] ;
+case 240: v = (v << 8) + dvibuf[p++] ;
+case 239: v = (v << 8) + dvibuf[p++] ;
+/*
+ * Remove a landscape special on page 0, if one is found.
+ */
+ if (num || ! rem0special ||
+ strncmp(dvibuf + oldp + len - 237, "landscape", 9))
+ putbuf(oldp, v + len - 237) ;
+ p = oldp + v + len - 237 ;
+ break ;
+case 243: case 244: case 245: case 246:
+ p += len - 230 ;
+ p += dvibuf[p] + dvibuf[p+1] + 2 ;
+ break ;
+default: fprintf(stderr, "Bad dvi command was %d at %ld\n", len, p) ;
+ error("! lost sync dvi in file lost dvi sync file in") ;
+ }
+ }
+ }
+ }
+}
+/*
+ * Here we end a page. Simple enough.
+ */
+endpage() {
+ outputpages++ ;
+ dvibyte(140) ;
+}
+/*
+ * This is our main routine for output, which runs through all the
+ * pages we need to output.
+ */
+writedvifile() {
+ long pagenum ;
+ int ppp ;
+ long actualpageno ;
+ struct pagespec *ps ;
+ long p ;
+
+ writepreamble() ;
+ pagefake = (pagecount + modulo - 1) / modulo * modulo ;
+ for (pagenum = 0; pagenum < pagefake; pagenum += modulo) {
+ beginpage() ;
+ for (ppp = 0, ps=pages; ppp < pagesperpage; ppp++, ps++) {
+ if (landscape) {
+ putbuf(landscape, dvibuf[landscape+1]+2L) ;
+ landscape = 0 ;
+ }
+ if (ps->reversed)
+ actualpageno = pagefake - pagenum - modulo + ps->pageno ;
+ else
+ actualpageno = pagenum + ps->pageno ;
+ if (actualpageno < pagecount) {
+ if (pagesperpage)
+ dvibyte(141) ;
+ if (ps->hoffset) {
+ dvibyte(146) ;
+ dviquad(ps->hoffset) ;
+ }
+ if (ps->voffset) {
+ dvibyte(160) ;
+ dviquad(ps->voffset) ;
+ }
+ dopage(actualpageno) ;
+ if (pagesperpage)
+ dvibyte(142) ;
+ }
+ }
+ endpage() ;
+ }
+ writepostamble() ;
+}
+main(argc, argv)
+int argc ;
+char *argv[] ;
+{
+ processargs(argc, argv) ;
+ readdvifile() ;
+ writedvifile() ;
+}
+SHAR_EOF
+cat << \SHAR_EOF > dvisamp.tex
+%
+% We use landscape mode.
+%
+\special{landscape()}
+\magnification=\magstep1
+\immediate\write0{Print this with}
+\immediate\write0{dvidvi 4:0(5.5in,4.25),3(0,4.25) dvisamp firstpage}
+\immediate\write0{dvips firstpage}
+\immediate\write0{(put paper back in, rotated 180 degrees)}
+\immediate\write0{dvidvi 4:1(0in,4.25),2(5.5,4.25) dvisamp secondpage}
+\immediate\write0{dvips secondpage}
+%
+% and fold in quarters, long side first.
+%
+%
+% Set things up for quarter-page landscape.
+%
+\hsize=3.5truein\vsize=2.25truein
+%
+% Now are little document!
+%
+\font\bigtt=cmtt10 scaled \magstep2
+\ \vfill
+\centerline{\bigtt dvidvi}
+\vfill
+\centerline{Translation from}
+\centerline{a {\tt dvi} file}
+\centerline{to a {\tt dvi} file}
+\vfill
+\centerline{by the folks at Radical Eye Software}
+\eject
+\ \vfill
+\centerline{This page left}
+\centerline{intentionally}
+\centerline{blank}
+\vskip\baselineskip
+\centerline{No, forget that}
+\vfill\eject
+\noindent
+This program was written to help you do pagination tricks that are
+difficult to do with \TeX\ under normal circumstances. This program
+can be used for tasks as simple as reversing the order of pages in a
+{\tt dvi} file or selecting the even or odd pages. It can be used
+to print little cards like this, or brochures, by combining multiple
+pages onto one page in some regular way. You can print folded booklets
+and many other things. Enjoy!
+\vfill\eject
+\ \vfill
+\rightline{Bye!}
+\eject\end
+SHAR_EOF
+cat << \SHAR_EOF > makefile
+CFLAGS =
+
+all: dvidvi
+
+dvidvi: dvidvi.c
+ cc $(CFLAGS) -o dvidvi dvidvi.c
+SHAR_EOF
+# End of shell archive
+exit 0
+
diff --git a/info/digests/texhax/txh/scheme.txh b/info/digests/texhax/txh/scheme.txh
new file mode 100644
index 0000000000..2eb841c5df
--- /dev/null
+++ b/info/digests/texhax/txh/scheme.txh
@@ -0,0 +1,751 @@
+18-Apr-88 16:15:34-PDT,23015;000000000000
+Return-Path: <ramsdell%linus@mitre-bedford.ARPA>
+Received: from mitre-bedford.ARPA by SCORE.STANFORD.EDU with TCP; Mon 18 Apr 88 16:15:02-PDT
+Posted-From: The MITRE Corp., Bedford, MA
+Received: by linus.MENET (3.2/4.7)
+ id AA03984; Mon, 18 Apr 88 15:04:06 EDT
+Date: Mon, 18 Apr 88 15:04:06 EDT
+From: John D. Ramsdell <ramsdell%linus@mitre-bedford.ARPA>
+Posted-Date: Mon, 18 Apr 88 15:04:06 EDT
+Message-Id: <8804181904.AA03984@linus.MENET>
+To: texhax@score.stanford.edu
+Subject: SchemeTeX for bitnet folk.
+
+Please replace the version of SchemeTeX I sent earlier today with
+this version.
+John
+#! /bin/sh
+# This is a shell archive, meaning:
+# 1. Remove everything above the #! /bin/sh line.
+# 2. Save the resulting text in a file.
+# 3. Execute the file with /bin/sh (not csh) to create the files:
+# st
+# This archive created: Thu Mar 31 08:17:02 1988
+export PATH; PATH=/bin:$PATH
+if test ! -d 'st'
+then
+ mkdir 'st'
+fi
+cd 'st'
+if test -f 'Makefile'
+then
+ echo shar: will not over-write existing file "'Makefile'"
+else
+cat << \SHAR_EOF > 'Makefile'
+# schemeTeX Makefile @(#)Makefile 1.2 88/03/31.
+CMDS = st schemeTeX
+
+DOCS = st.dvi reader.dvi
+
+TEXSTY = astyped.sty
+
+DEST = $(HOME)/bin
+
+TEXDEST = $(HOME)/sty
+
+# Generic rules
+.SUFFIXES: .dvi .tex .st
+
+.st.dvi:
+ make $*.tex && make $*.dvi
+
+.st.tex:
+ st $*
+
+.tex.dvi:
+ latex $*
+
+# Generic commands.
+
+all: $(CMDS)
+
+doc: $(DOCS) $(CMDS)
+
+install: $(CMDS) $(TEXSTY)
+ mv $(CMDS) $(DEST)
+ cp $(TEXSTY) $(TEXDEST)
+
+clean:
+ -rm $(CMDS)
+
+# Specific commands.
+
+schemeTeX: schemeTeX.l
+ lex -t $? > schemeTeX.c
+ cc -O -o $@ schemeTeX.c -ll
+ rm schemeTeX.c
+
+st: st.sh
+ cp $? $@
+ chmod +x $@
+
+SHAR_EOF
+fi # end of overwriting check
+if test -f 'README'
+then
+ echo shar: will not over-write existing file "'README'"
+else
+cat << \SHAR_EOF > 'README'
+SchemeTeX---Simple support for literate programming in Lisp.
+
+SchemeTeX is a Unix filter that translates schemeTeX source into LaTeX
+source. Originally developed for the Scheme dialect of Lisp, it can
+easily be used with most other dialects.
+
+Installation:
+
+1) Processes the file "st.tex" with LaTeX and read that one page
+document.
+
+2) Decide if you plan to use your Lisp system's standard LOAD
+procedure or a modified one. I recommend you start by using your Lisp
+system's LOAD, which means all text lines must begin with ";".
+
+3) Assuming you do use the standard LOAD, edit "st.sh" so that it
+contains the correct extension, i.e. ".scm", ".lisp", or ".clisp".
+Otherwise do not modify "st.sh".
+
+4) Edit "Makefile" to reflect the correct destination of the
+executables(DEST) and the correct destination of the style
+file(TEXDEST).
+
+5) The command "make install" installs schemeTeX.
+
+6) If you plan to modify your Lisp system's standard LOAD, follow the
+model given in "st.t", a schemeTeX for the T dialect of Scheme.
+SHAR_EOF
+fi # end of overwriting check
+if test -f 'astyped.sty'
+then
+ echo shar: will not over-write existing file "'astyped.sty'"
+else
+cat << \SHAR_EOF > 'astyped.sty'
+%%%%%%%%%%%%%%%%%%%%%% @(#)astyped.sty 1.2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ASTYPED DOCUMENT-STYLE OPTION - released 88/03/29
+% for LaTeX version 2.09
+% Based on Leslie Lamport's verbatim environment in latex.tex.
+
+% Defines the `astyped' environment, which is like the `verbatim'
+% environment except most of the special characters have their usual meanings.
+% Space, ^K, and ^A are the only specials changed.
+
+\def\astyped{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \tt \catcode``=13 \@noligs \let\do\@makeother \do\ \do\^^K\do\^^A
+ \frenchspacing\@vobeyspaces}
+
+\let\endastyped=\endtrivlist
+
+% Used inside astyped environments for normal formatting of a line.
+% I wish I could give space its normal catcode within \notastyped.
+\def\notastyped#1{\mbox{\rm #1}}
+
+SHAR_EOF
+fi # end of overwriting check
+if test -f 'reader.st'
+then
+ echo shar: will not over-write existing file "'reader.st'"
+else
+cat << \SHAR_EOF > 'reader.st'
+\documentstyle[astyped]{article}
+% @(#)reader.st 1.2 88/03/29
+\title{{\tt read-st}}
+\author{John D. Ramsdell}
+\date{
+88/03/29
+}
+
+\begin{document}
+
+\maketitle
+
+\verb;read-st; converts Scheme\TeX{} representations of Scheme objects
+into the objects themselves much as \verb;read; does. It uses the
+non-standard, but generally available routine \verb;peek-char;.
+(define (read-st . rest) ; Returns what \verb;read; returns.
+ (let ((port (if (pair? rest) ; \verb;read-st; arguments are
+ (car rest) ; the same as \verb;read;'s.
+ (current-input-port))))
+ (letrec ; Lines of a Scheme\TeX{} file
+ (((text-mode-and-saw-newline) ; beginning with ``{\tt(}'',
+ (let ((ch (peek-char port))) ; start a code section.
+ (cond ((eof-object? ch) ch)
+ ((char=? ch #\() ; If code section, then use
+ (got-code (read port))) ; \verb;read; to get code,
+ (else ; else skip this line as
+ (text-mode-within-a-line))))) ; it is a comment.
+ ((text-mode-within-a-line)
+ (let ((ch (read-char port)))
+ (cond ((eof-object? ch) ch)
+ ((char=? ch #\newline)
+ (text-mode-and-saw-newline))
+ (else (text-mode-within-a-line)))))
+ ((got-code code) ; Ignore the remainder of the
+ (let ((ch (read-char port))) ; last code line and return
+ (cond ((eof-object? ch) code) ; the results of \verb;read;.
+ ((char=? ch #\newline)
+ code)
+ (else (got-code code))))))
+ (text-mode-and-saw-newline) ; Start by looking
+ ))) ; for a code line.
+\end{document}
+
+SHAR_EOF
+fi # end of overwriting check
+if test -f 'schemeTeX.l'
+then
+ echo shar: will not over-write existing file "'schemeTeX.l'"
+else
+cat << \SHAR_EOF > 'schemeTeX.l'
+%{
+/* schemeTeX -- Scheme to TeX. John D. Ramsdell.
+ * Simple support for literate programming in Scheme.
+ * Usage: schemeTeX < {Scheme TeX file} > {TeX file}
+ */
+
+#if !defined lint
+static char ID[] = "@(#)schemeTeX.l 1.2 88/03/29";
+static char copyright[] =
+ "Copyright 1988 by The MITRE Corporation. All rights reserved.";
+/* Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies. The
+MITRE Corporation makes no representations about the suitability of
+this software for any purpose. It is provided "as is" without express
+or implied warranty. */
+#endif
+
+/* SchemeTeX defines a new source file format in which source lines
+are divided into text and code. Lines of code start with a line
+beginning with '(', and continue until the line that contains the
+matching ')'. The text lines remain, and they are treated as
+comments. If the first character of a text line is ';', it is
+stripped from the output. This is provided for those who want to use
+an unmodified version of their Scheme system's LOAD. When producing a
+document, both the text lines and the code lines are copied into the
+document source file, but the code lines are surrounded by a pair of
+formatting commands, as is comments beginning with ';' within code
+lines. SchemeTeX is currently set up for use with LaTeX. */
+
+/* Define STRIP if you want to remove all comments in a Scheme TeX
+file. */
+
+/* Modify the following for use with something other than LaTeX.
+Also see tex_verbatim_echo. */
+#define BEGIN_COMMENT "\\notastyped{"
+#define BEGIN_CODE "\\begin{astyped}"
+#define END_CODE "\\end{astyped}"
+#define TEX_ECHO tex_verbatim_echo(yytext, stdout)
+/* Lex is used for identifying code in an Scheme TeX file. */
+int parens; /* Used to balance parenthesis. */
+
+/* All input occurs in the following routines so that TAB characters
+can be expanded. TeX treats TAB characters as a space--not what is
+wanted. */
+#undef getc()
+#define getc(STREAM) expanding_getc(STREAM)
+int spaces = 0; /* Spaces left to print a TAB. */
+int column = 0; /* Current input column. */
+int expanding_getc(stream)
+ FILE *stream;
+{
+ int c;
+ if (spaces > 0) {
+ spaces--;
+ return ' ';
+ }
+ switch (c = fgetc(stream)) {
+ case '\t':
+ spaces = 8 - (7&column);
+ column += spaces;
+ return expanding_getc(stream);
+ case '\n':
+ column = 0;
+ return c;
+ default:
+ column++;
+ return c;
+ }
+}
+%}
+%%
+#\\\( {
+#if defined STRIP
+ ECHO;
+#else
+ TEX_ECHO;
+#endif
+ }
+#\\\) {
+#if defined STRIP
+ ECHO;
+#else
+ TEX_ECHO;
+#endif
+ }
+\( { ECHO; parens++; }
+\) { ECHO; parens--;
+ if (parens == 0) { /* End of code. */
+ char c; /* Check that nothing follows. */
+ while ((c = input()) == ' ') output(c);
+ if (c == '\000') return 0; /* EOF */
+ if (c != '\n' && c != ';') return -1;
+ unput(c);
+ }
+ }
+\"[^"]*\" {
+ if ((yyleng > 1) && (yytext[yyleng-2] == '\\'))
+ yymore();
+ else
+#if defined STRIP
+ ECHO;
+#else
+ TEX_ECHO;
+#endif
+ }
+;[^\n]*$ {
+#if defined STRIP
+ ;
+#else
+ fputs(BEGIN_COMMENT, stdout);
+ ECHO;
+ fputs("}", stdout);
+#endif
+ }
+\n { ECHO; if (parens <= 0) return 0; }
+. {
+#if defined STRIP
+ ECHO;
+#else
+ TEX_ECHO;
+#endif
+ }
+%%
+
+fatal (s)
+ char *s;
+{
+ fprintf(stderr, "On line %d, %s\n", yylineno, s);
+ exit(1);
+}
+
+tex_verbatim_echo (s, f)
+ char *s; FILE *f;
+{
+ for (; *s != '\000'; s++)
+ switch (*s) {
+ case '\\':
+ case '{':
+ case '}':
+ case '$':
+ case '&':
+ case '#':
+ case '^':
+ case '_':
+ case '%':
+ case '~':
+ fputs("\\verb-", f);
+ putc(*s, f);
+ putc('-', f);
+ break;
+ default: putc(*s, f);
+ }
+}
+
+main()
+{
+ char c;
+ do { /* TeX mode and saw newline */
+ c = input();
+ if (c == '(') { /* TeX mode changed to code mode. */
+ unput(c);
+#if !defined STRIP
+ fputs(BEGIN_CODE,stdout); putc('\n', stdout);
+#endif
+ do { /* Copy out code using yylex. */
+ parens = 0;
+ if (0 != yylex()) fatal("Bad code section.");
+ if (parens != 0) fatal("Premature EOF.");
+ c = input();
+ unput(c); /* Repeat when there is code */
+ } while (c == '('); /* immediately after copied code. */
+#if !defined STRIP
+ fputs(END_CODE, stdout); putc('\n', stdout);
+#endif
+ }
+ else { /* Found a text line. */
+ if (c == ';') c = input(); /* For those who want to use bare load. */
+ while (c != '\n') {
+ if (c == '\000') exit(0); /* EOF. */
+#if !defined STRIP
+ output(c);
+#endif
+ c = input();
+ }
+#if !defined STRIP
+ output(c);
+#endif
+ }
+ } while (1);
+}
+SHAR_EOF
+fi # end of overwriting check
+if test -f 'st.sh'
+then
+ echo shar: will not over-write existing file "'st.sh'"
+else
+cat << \SHAR_EOF > 'st.sh'
+#! /bin/sh
+# schemeTeX @(#)st.sh 1.2 88/03/29
+EXT=.st
+DIR=`dirname $1`
+BASE=`basename $1 ${EXT}`
+
+case $# in
+0) schemeTeX ;;
+1) schemeTeX < ${DIR}/${BASE}${EXT} > ${DIR}/${BASE}.tex ;;
+2) schemeTeX < $1 > $2 ;;
+*) echo "usage: $0 file-name"; exit 1;;
+esac
+
+SHAR_EOF
+fi # end of overwriting check
+if test -f 'st.t'
+then
+ echo shar: will not over-write existing file "'st.t'"
+else
+cat << \SHAR_EOF > 'st.t'
+(herald st) ; @(#)st.t 1.2 88/03/29
+;;; SchemeTeX --- Simple support for literate programming in Scheme.
+;;; February 1988, John D. Ramsdell.
+;;;
+;;; Copyright 1988 by The MITRE Corporation. All rights reserved.
+;;; Permission to use, copy, modify, and distribute this
+;;; software and its documentation for any purpose and without
+;;; fee is hereby granted, provided that the above copyright
+;;; notice appear in all copies. The MITRE Corporation
+;;; makes no representations about the suitability of this
+;;; software for any purpose. It is provided "as is" without
+;;; express or implied warranty.
+;;;
+;;; SchemeTeX
+;;; defines a new source file format in which source lines are divided
+;;; into text and code. Lines of code start with a line beginning with
+;;; '(', and continue until the line that contains the matching ')'. The
+;;; text lines remain, and they are treated as comments. When producing
+;;; a document, both the text lines and the code lines are copied into
+;;; the document source file, but the code lines are surrounded by a pair
+;;; of formatting commands. The formatting commands are in begin-code
+;;; and end-code. SchemeTeX is currently set up for use with LaTeX.
+;;;
+;;; Exports: load-st, compile-st, and TeX-st.
+;;; (load-st filespec optional-load-env) Loads Scheme TeX source.
+;;; (compile-st filespec) Compiles Scheme TeX source.
+;;; (tex-st filespec) Makes LaTeX input.
+
+(define st-extension 'st)
+(define src-extension 't)
+(define tex-extension 'tex)
+
+(define (load-st filespec . options)
+ (let ((t-filename (tangle filespec)))
+ (and t-filename
+ (apply load t-filename options))))
+
+(define (compile-st filespec)
+ (let ((t-filename (tangle filespec)))
+ (and t-filename
+ (compile-file t-filename))))
+
+(define (tex-st st-filespec)
+ (let* ((st-filename (st-filespec->st-filename st-filespec))
+ (tex-filename (st-filename->filename st-filename tex-extension)))
+ (with-open-streams ((st-port (open st-filename '(in)))
+ (tex-port (open tex-filename '(out))))
+ (if (weave-port st-port tex-port)
+ 'done
+ 'failed))))
+
+(define (tangle st-filespec) ; => t-filename or false.
+ (let* ((st-filename (st-filespec->st-filename st-filespec))
+ (t-filename (st-filename->filename st-filename src-extension)))
+ (if (and (file-exists? t-filename)
+ (file-newer? t-filename st-filename))
+ t-filename ; No need to tangle.
+ (with-open-streams ((st-port (open st-filename '(in)))
+ (t-port (open t-filename '(out))))
+ (and (tangle-port st-port t-port)
+ t-filename)))))
+
+(define (st-filespec->st-filename st-filespec)
+ (->filename
+ (cond ((symbol? st-filespec)
+ (list '() st-filespec st-extension))
+ ((and (pair? st-filespec)
+ (= (length st-filespec) 2))
+ (append st-filespec (list st-extension)))
+ (else st-filespec))))
+
+(define (st-filename->filename st-filename default-type)
+ (make-filename
+ (filename-fs st-filename)
+ (filename-dir st-filename)
+ (filename-name st-filename)
+ (if (eq? default-type (filename-type st-filename))
+ '()
+ default-type)
+ ;;broken? (filename-generation st-filename)
+ ))
+
+(define (tangle-port st-port t-port) ; => false on failure.
+ (labels
+ (((tex-mode-and-saw-newline)
+ (let ((ch (read-char st-port)))
+ (cond ((eof? ch) '#t)
+ ((char= ch #\left-paren)
+ (unread-char st-port)
+ (t-mode))
+ ((char= ch #\newline)
+ (tex-mode-and-saw-newline))
+ (else (tex-mode-within-a-line)))))
+ ((tex-mode-within-a-line)
+ (if (eof? (read-line st-port))
+ '#t
+ (tex-mode-and-saw-newline)))
+ ((t-mode) ; This routine should return
+ (print (read-refusing-eof st-port) t-port)
+ (newline t-port) ; #f when read-refusing-eof
+ (tex-mode-within-a-line))) ; obtains an error.
+ (tex-mode-and-saw-newline)))
+
+(define begin-code "\\begin{astyped}")
+(define end-code "\\end{astyped}")
+(define begin-comment "\\notastyped{")
+
+(define (weave-port st-port tex-port)
+ (let ((spaces 0) ; Expansion of tabs into spaces.
+ (hpos 0)) ; Used in get-char and get-line.
+ (catch leave ; Exit with leave when EOF is found.
+ (labels ; All input is read with
+ (((get-char eof-value) ; get-char and get-line.
+ (if (fx> spaces 0)
+ (block (set spaces (fx- spaces 1)) #\space)
+ (let ((ch (read-char st-port)))
+ (cond ((eof? ch) (leave eof-value))
+ ((char= ch #\tab)
+ (set spaces (fx- 8 (logand 7 hpos)))
+ (set hpos (fx+ hpos spaces))
+ (get-char eof-value))
+ ((char= ch #\newline)
+ (set hpos 0) ch)
+ (else (set hpos (fx+ hpos 1)) ch)))))
+ ((get-line eof-value)
+ (set hpos 0)
+ (let ((ch (read-line st-port)))
+ (if (eof? ch)
+ (leave eof-value)
+ ch)))
+ ((tex-write-char ch) ; Write to TeX file
+ (if (or (char= ch #\\) ; escaping TeX's special
+ (char= ch #\{) ; characters.
+ (char= ch #\})
+ (char= ch #\$)
+ (char= ch #\&)
+ (char= ch #\#)
+ (char= ch #\^)
+ (char= ch #\_)
+ (char= ch #\%)
+ (char= ch #\~))
+ (format tex-port "\\verb-~a-" ch)
+ (write-char tex-port ch)))
+ ((tex-mode-and-saw-newline) ; State at which decision must
+ (let ((ch (get-char '#t))) ; be made if to go into T code
+ (if (char= ch #\left-paren) ; mode or stay in TeX mode.
+ (t-mode)
+ (block
+ (if (not (char= ch #\semicolon)) ; For those who want
+ (write-char tex-port ch)) ; to use regular load.
+ (if (char= ch #\newline)
+ (tex-mode-and-saw-newline)
+ (tex-mode-within-a-line))))))
+ ((tex-mode-within-a-line) ; Copy out TeX line.
+ (let ((line (get-line '#t)))
+ (write-line tex-port line)
+ (tex-mode-and-saw-newline)))
+ ((t-mode) ; Change from TeX mode
+ (write-line tex-port begin-code) ; to T code mode.
+ (write-char tex-port #\()
+ (sexpr 1))
+ ((sexpr parens) ; parens is used to watch
+ (let ((ch (get-char '#f))) ; for the closing paren
+ (cond ((char= ch #\semicolon) ; used to detect the
+ (copy-comment '#f) ; end of T code mode.
+ (sexpr parens))
+ (else
+ (sexpr-write-char parens ch)))))
+ ((copy-comment eof-value) ; Handle comment.
+ (let ((line (get-line eof-value)))
+ (write-string tex-port begin-comment)
+ (write-char tex-port #\semicolon)
+ (write-string tex-port line)
+ (write-char tex-port #\})
+ (newline tex-port)))
+ ((sexpr-write-char parens ch)
+ (tex-write-char ch)
+ (cond ((char= ch #\left-paren)
+ (sexpr (fx+ parens 1)))
+ ((char= ch #\right-paren)
+ (if (fx= 1 parens) ; Done reading sexpr.
+ (t-mode-after-sexpr)
+ (sexpr (fx- parens 1))))
+ ((char= ch #\")
+ (copy-out-string parens))
+ ((char= ch #\#) ; Worrying about #\( and #\).
+ (maybe-char-syntax parens))
+ (else (sexpr parens))))
+ ((copy-out-string parens)
+ (let ((ch (get-char '#f)))
+ (tex-write-char ch)
+ (cond ((char= ch #\\)
+ (let ((ch (get-char '#f)))
+ (tex-write-char ch)
+ (copy-out-string parens)))
+ ((char= ch #\")
+ (sexpr parens))
+ (else (copy-out-string parens)))))
+ ((maybe-char-syntax parens)
+ (let ((ch (get-char '#f)))
+ (cond ((char= ch #\backslash)
+ (tex-write-char ch)
+ (let ((ch (get-char '#f)))
+ (tex-write-char ch)
+ (sexpr parens)))
+ (else
+ (unread-char st-port)
+ (sexpr parens)))))
+ ((t-mode-after-sexpr)
+ (let ((ch (get-char '#t)))
+ (cond ((char= ch #\semicolon)
+ (copy-comment '#t)
+ (t-mode-merge))
+ ((char= ch #\newline)
+ (newline tex-port)
+ (t-mode-merge))
+ ((char= ch #\space)
+ (tex-write-char ch)
+ (t-mode-after-sexpr))
+ (else
+ (read-error st-port "Bad text following code")))))
+ ((t-mode-merge)
+ (let ((ch (get-char '#t)))
+ (cond ((char= ch #\left-paren)
+ (write-char tex-port ch)
+ (sexpr 1))
+ (else
+ (write-line tex-port end-code)
+ (write-char tex-port ch)
+ (if (char= ch #\newline)
+ (tex-mode-and-saw-newline)
+ (tex-mode-within-a-line)))))))
+ (tex-mode-and-saw-newline)))))
+SHAR_EOF
+fi # end of overwriting check
+if test -f 'st.tex'
+then
+ echo shar: will not over-write existing file "'st.tex'"
+else
+cat << \SHAR_EOF > 'st.tex'
+\documentstyle[proc]{article}
+% @(#)st.tex 1.2 88/03/29
+\title{Scheme\TeX{}}
+\author{John D. Ramsdell}
+\date{
+88/03/29
+}
+
+\begin{document}
+
+\maketitle
+
+Scheme\TeX{} provides simple support for literate programming in any
+dialect of Lisp. Originally created for use with Scheme, it defines a
+new source file format which may be used to produce \LaTeX{} input or
+Lisp code.
+
+Scheme\TeX{} source lines are divided into text and code. Lines of code
+start with a line beginning with ``('', and continue until the line
+containing the matching ``)''. The remaining lines are text lines,
+and they are treated as comments.
+
+When producing a \LaTeX{} document, both the text lines and the code
+lines are copied into the document source file, but the code lines are
+surrounded by a pair of formatting commands (\verb-\begin{astyped}-
+and \verb-\end{astyped}-). This \LaTeX{} environment formats the code
+as written, in typewriter font. A Lisp comment within a code line is
+formatted in an \verb-\mbox- in Roman font. A Scheme\TeX{} style
+command should include the \verb-astyped- style option, so that the
+\verb-astyped- environment is available. An example:
+\begin{center}
+\verb-\documentstyle[astyped]{article}-
+\end{center}
+
+Scheme\TeX{} was designed under the constraint that code lines must be
+unmodified Lisp code, and text lines must be unmodified \LaTeX{} code.
+Text editors with support for Lisp and \LaTeX{}, such as Emacs, may be
+used for Scheme\TeX{} code much as they are used for Lisp code and
+\LaTeX{} code.
+
+Some users prefer not modifying the \verb-LOAD- function in their Lisp
+system. To support those users, the rule that text lines must be
+unmodified \LaTeX{} code has been relaxed. Text lines that begin with
+``;'' are copied without the initial ``;''.
+
+\newpage{}
+\section*{Usage under Unix}
+
+The extension for Scheme\TeX{} files is ``\verb;.st;''. For T, the
+file \verb;st.t; contains two programs used to obtain code from an
+``\verb;.st;'' file. The T expression
+\begin{center}
+\verb;(LOAD-ST; {\it filespec environment\/}{\tt )}
+\end{center}
+loads a Scheme\TeX{} file by creating a T source file if no T source
+file exists which is younger than the Scheme\TeX{} file. The T source
+file is then loaded using the usual \verb;LOAD; procedure.
+\verb;COMPILE-ST; is like \verb;LOAD-ST; except it compiles the file
+instead of loading it.
+
+A \LaTeX{} file is produced from a file with the ``\verb;.st;''
+extension using the Unix shell command
+\begin{center}
+{\tt st} {\it file-name}
+\end{center}
+It will produce a file with the ``\verb;.tex;'' extension. The
+obvious make file is in Figure~\ref{makefile}.
+\begin{figure}
+\begin{verbatim}
+.SUFFIXES: .dvi .tex .st
+
+.st.dvi:
+ make $*.tex && make $*.dvi
+
+.st.tex:
+ st $*
+
+.tex.dvi:
+ latex $*
+\end{verbatim}
+\caption{A Scheme\TeX{} Makefile}\label{makefile}
+\end{figure}
+\end{document}
+SHAR_EOF
+fi # end of overwriting check
+cd ..
+# End of shell archive
+exit 0
+
+
+-------
diff --git a/info/digests/texhax/txh/schrod.txh b/info/digests/texhax/txh/schrod.txh
new file mode 100644
index 0000000000..d9ec586199
--- /dev/null
+++ b/info/digests/texhax/txh/schrod.txh
@@ -0,0 +1,367 @@
+ 4-Aug-87 23:16:27-PDT,14596;000000000000
+Return-Path: <XITIJSCH%DDATHD21.BITNET@forsythe.stanford.edu>
+Date: 04. August 1987, 17:04:55 (CET)
+From: XITIJSCH%DDATHD21.BITNET@forsythe.stanford.edu
+Subject: Re: footnote numbering
+To: TEXHAX@score.stanford.edu
+
+
+In the TeXhax issue #60 Malcolm Brown asked for a possibility
+to number footnotes subsequently on each page. He didn't state
+if he needs this possibility, i.e. these macros, in a special
+environment. In my eyes this is a nice small exercise to show
+the development of TeX macros and therefore I send you this
+contribution.
+
+First I introduce a macro set to number footnotes subsequently
+on each page. This macro set is written with the concept of
+literate programming in mind and is portable in the manner that few
+changes have to be made to the macros to get them running with
+every macro package that uses the PLAIN definitions (LaTeX does).
+The macro set has been tested with PLAIN TeX, LaTeX and an other
+macro package of my own, always with correct results.
+But I have only spent a few hours to write and test the macros,
+so don't blame me if errors occur.
+
+After introducing the macro set I close with some remarks on
+TeX macro development, i.e. in TeX programming and I also
+describe possible improvements to the macros and an other
+solution strategy using LaTeX.
+
+
+----------------------------------------------
+macro set for numbering footnotes on each page
+---------- cut here ------------------------------------------------------
+
+%
+% 1. (@*) Introduction.
+%
+% This macro set numbers footnotes subsequently on each page.
+% It was written by J. Schrod on August 1, 1987.
+% A footnote is typeset by the command \footnote. This command
+% has one parameter, the text of the footnote. The macro
+% package assumes that the conventions set up by PLAIN are in
+% effect and is written primarily for use with PLAIN. With two minor
+% changes it runs with LaTeX, but in LaTeX better approaches
+% are available. Every place in the macro set where the used
+% macro package is important has the line
+%
+% @~ system dependencies @>
+%
+% added (WEB lives!). We use the private macros of PLAIN
+% and for that reason we catcode the character `@' to letter.
+
+
+\begingroup % to get the catcode change local
+\catcode`\@=11
+
+
+
+% 2. But let's regard first the implementation strategy. Because
+% the contents of one page is determined at (nearly) random places
+% with an asynchronous invogation of the output routine, we can not
+% give numbers to every footnote subsequently between output and
+% output: a footnote at the top of a page will perhaps get a number
+% before the output is triggered and there is no way to change
+% this number. The problem is like forward references to text
+% places and it is solved in a similar fashion. We need two TeX runs
+% to get the numbering right but this is acceptable (who's got a
+% finished text after one run?!). In the first run we gather up in
+% a file the information where the footnotes are standing and in
+% the second run we use this information.
+
+
+
+% 3. This leads to our first code, the initialization of the
+% macro set. We need a file descriptor, \foot@file, which we
+% use for the file interaction. The name of the file is built
+% from the jobname and the suffix `.fot' (I hope that no macro
+% package uses this suffix).
+% @~ system dependencies @>
+%
+% The \init@footnote macro reads the contents of the footnote
+% file if it exists (\ifeof returns true if the file doesn't
+% exist). The description of the reading of this file
+% (\read@foot@file) is deferred until we know the structure
+% of the contents. After reading, the file is closed and we
+% can open it for writing. For security, i.e. to have a defined
+% minimal contents, we immediately write \relax to the file.
+% In the end the macro defines itself to \relax to allow calling
+% it again.
+%
+% Please note here the placement of `%' chars. Because we don't
+% know if this macro is used only in vertical mode,
+% (italics on)
+% every line not ending with a macro name is ended by a %.
+% (italics off)
+
+
+\newwrite\foot@file
+\gdef\foot@file@name{\jobname.fot \relax}
+\gdef\init@footnote{%
+ \openin\foot@file=\foot@file@name
+ \ifeof\foot@file \closein\foot@file
+ \else \closein\foot@file
+ \read@foot@file
+ \fi
+ \immediate\openout\foot@file=\foot@file@name
+ \immediate\write\foot@file{\relax}%
+ \let\init@footnote=\relax
+ }
+
+
+
+% 4. Now comes the first real macro package dependent part.
+% We want to set the footnote with a number in the superscript
+% position (or with a corresponding symbol for that number). This
+% is done with the macro \@footnote, which gets the number as its
+% parameter. Below are the definitions for PLAIN TeX and LaTeX,
+% the LaTeX part is commented out. To activate it, simply comment
+% the PLAIN part out and remove the other `%'-signs.
+%
+% I think here is the place to state that I'm no LaTeX wizard.
+% I don't know if there are any other (better) ways to get the
+% footnote.
+
+
+\let\@@footnote=\footnote % original meaning of \footnote
+ \gdef\@footnote#1{% % set footnote with mark #1 (PLAIN)
+ \@@footnote{\hbox{$~{#1}$}}%
+ }
+%\gdef\@footnote#1{% % set footnote with mark #1 (LaTeX)
+% \xdef\@thefnmark{#1}\@footnotemark\@footnotetext
+% }
+
+
+%
+% 5. (@*) Realisation.
+%
+% We must identify all footnotes if we write their numbers to
+% the footnote file, so each footnote gets an unary name
+% built with the counter \footno. The name is `f@<footno>',
+% where <footno> is the footnote name number. This name
+% building scheme has several disadvantages, e.g. the insertion
+% of a new footnote destroys the knowledge of the former run
+% about the following footnotes. In the beginning of every
+% footnote \init@footnote is called to guarantee that the
+% handling is initialized (this especially means that the
+% footnote numbers are read in by the first footnote).
+
+
+\newcount\footno % for generating footnote mark names
+\newcount\@footno % numbers of footnotes
+
+
+
+% 6. It remains an open problem how to get the numbers there.
+% The footnote numbering must be initialized to zero in the
+% output routine and every footnote must increment this footnote
+% number. The only thing that is expanded during the output
+% process is the output routine itself and the \write's, but
+% the expanded tokens of \write are written out, not interpreted.
+% Well, the idea is simple: We defer the counting to the second
+% run and write the instructions that do this to the file. The
+% counting is then done while reading the footnote file.
+%
+% That means that the output routine adds entries like
+% \@footno = 0
+% and every footnote adds an entry that looks like
+% \advance\@footno by 1 \xdef\csname f@<footno> \endcsname{\number\@footno}
+% where <footno> is replaced by the current footnote name number.
+% The expansion of \footno must be made in \footnote, therefore
+% we first define the macro \@dowrite which contains the \write
+% and the expanded tokens which are to be put out. Every token
+% that should not be expanded is prefixed by \string (resulting
+% in character tokens that represent the token name) and a \space
+% must be inserted to separate \csname from f.
+%
+% After writing the entry to the footnote file the \footnote
+% macro defines the footnote mark to `?' if it is not already
+% defined (from a previous run). To build the token name first
+% and test afterwards an \expandafter is needed. At the end the
+% \@footnote command is issued.
+
+
+\gdef\footnote{%
+ \init@footnote
+ \global\advance\footno by \@ne
+ \edef\@dowrite{%
+ \write\foot@file{%
+ \string\advance\@footno\@ne
+ \string\expandafter\xdef
+ \string\csname\space f@\number\footno \endcsname{%
+ \string\number\@footno
+ }%
+ }%
+ }%
+ \@dowrite
+ \expandafter\ifx \csname f@\number\footno \endcsname \relax
+ \expandafter\gdef \csname f@\number\footno \endcsname {?}%
+ \fi
+ \@footnote{\csname f@\number\footno \endcsname}%
+ }
+
+
+
+% 7. Now let's look at the intervention in the output routine. The
+% goal is to be (almost) independent from the used output routine.
+% This is done by forming a layer around the originial output routine,
+% but relies on the fact that the output routine is not altered
+% by itself. For macro packages doing so an expansion of the
+% output routine has to be made.
+% @~ system dependencies @>
+%
+% Output routines serve for two purposes: they put out text
+% to the file and they collect information. Usually macro packages
+% communicate with the output routine by inserting special
+% penalties. This macro set assumes that penalties above
+% -\@maxpenalty are used to output text and penalties below
+% -\@maxpenalty do other things (look at LATEX.TEX if you
+% wonder what one can do in the output routine...). For every
+% macro package \@maxpenalty has to be adjusted. If the precondition
+% of one range of penalties for text output doesn't hold the
+% following algorithm has to be altered. As with the definition
+% of \@footnote, both the values for PLAIN TeX and for LaTeX are
+% given, the LaTeX value is commented out.
+% @~ system dependencies @>
+
+
+ \mathchardef\@maxpenalty=20000 % maximal used penalty for text pages (PLAIN)
+%\mathchardef\@maxpenalty=10000 % maximal used penalty for text pages (LaTeX)
+
+
+
+% 8. We must insert a \write in front of the output. There are two
+% ways to do this. (1) We can shipout a box copy with the \write
+% in it before the rest of the box (but this must be done in one
+% shipout or an empty page will result). This approach needs deep
+% intervention in the original output routine and is therefore not
+% used. (2) We can trigger the output routine two times for each
+% page. The first time we insert the \write, put the page back to
+% the page builder and insert a special penalty, -\foot@penalty,
+% which must be less than -\@maxpenalty and which must not be used
+% by the macro package. The value 20001 is suitable for PLAIN TeX
+% and LaTeX.
+% @~ system dependencies @>
+% The next time the \outputpenalty of the first time is restored
+% and the original output routine is called. This handling is only
+% done if text output appears, otherwise the original output routine
+% is called directly. The following output routine evolves:
+%
+% \output={
+% \ifnum \outputpenalty < -\@maxpenalty
+% \perhaps@restore@penalty
+% <original output>
+% \else
+% \global\@utputpenalty = \outputpenalty
+% \write\foot@file{ \@footno = 0 }
+% \unvbox 255
+% \penalty -\foot@penalty
+% \fi
+% }
+%
+% <original output> is the contents of the output token register
+% before executing the statement below. To insert it in the new
+% contents of the output register, the old output register must
+% be evaluated before the assignment is done. We use \expandafter
+% to skip over all preceding tokens.
+
+
+\newcount\@utputpenalty % save register for \outputpenalty
+\mathchardef\foot@penalty=20001 % penalty not used in macro package
+
+\output=\expandafter{%
+ \expandafter\ifnum
+ \expandafter\outputpenalty \expandafter<%
+ \expandafter-\expandafter\@maxpenalty
+ \expandafter\perhaps@restore@penalty
+ \the\output
+ \else \global\@utputpenalty=\outputpenalty
+ \write\foot@file{\@footno\z@}%
+ \nobreak
+ \unvbox\@cclv
+ \penalty -\foot@penalty
+ \fi
+ }
+\gdef\perhaps@restore@penalty{%
+ \ifnum \outputpenalty=-\foot@penalty
+ \global\outputpenalty=\@utputpenalty
+ \fi
+ }
+
+
+
+% 9. The last section is the reading of the footnote file. We have
+% to read in macros with names containing `@' characters. This
+% will be done in horizontal mode, so we have to ignore lineends
+% to discard undesired spaces.
+
+
+\gdef\read@foot@file{%
+ \begingroup
+ \catcode`\@=11 \catcode`\~~M=9 \relax
+ \input \foot@file@name
+ \endgroup
+ }
+
+
+\catcode`\@=12
+\endgroup
+
+
+
+
+
+---------- cut here ------------------------------------------------------
+
+
+For the use of the above macro set the following fact must be
+obeyed:
+
+ IT IS STATED EXPLICITLY THAT THE COMMENTS ARE AN INTEGRAL
+ PART OF THIS MACRO SET. IF THE MACRO SET IS ALTERED THE
+ COMMENTS HAVE TO BE ALTERED, TOO. THEY MUST NOT BE DELETED.
+
+The writing of TeX macros is a task of programming. The computer
+science community has struggled for years to encourage structured
+program development. The idea of literate programming is promoted
+more and more (e.g. in the CACM).
+
+ WHY DO WE THROW ALL THIS AWAY WHEN TeX MACROS ARE WRITTEN??
+
+It is my opinion that the only satisfactory way to write TeX
+macros which can be maintained is to use the principles of
+literate programming: describing the macros for a human reader,
+not for TeX. (Perhaps the time will come, when we get a TeX-WEB.)
+
+It could be said very much about this topic, but back to the
+macros. They are not fully developed, some features are still
+missing, e.g. warnings when new footnotes are inserted or
+when footnote numbers have been changed. Other improvements
+can be made on the construction of the footnote names. By
+involving section numbers or analogous numbers the ``running
+away'' of the footnote numbers (caused by the insertion of a
+new footnote) can be limited.
+
+Scanning through the LaTeX source it seems to me that the
+same realization idea can be implemented by writing appropriate
+\newlabel commands to the auxiliary file and referencing
+them. But I'm not sure---perhaps L.Lamport can state a comment.
+
+
+Well, this has become a rather long piece. I hope, it helps you.
+
+
+ Joachim Schrod
+
+----------------------------------------------------------------
+
+ TH Darmstadt
+ Institut fuer Theoretische Informatik
+ Joachim Schrod
+ Alexanderstr. 24
+
+ D-6100 Darmstadt
+ West Germany
+
+-------
diff --git a/info/digests/texhax/txh/shapin.txh b/info/digests/texhax/txh/shapin.txh
new file mode 100644
index 0000000000..20486864b1
--- /dev/null
+++ b/info/digests/texhax/txh/shapin.txh
@@ -0,0 +1,958 @@
+28-May-87 11:17:50-PDT,729;000000000000
+Return-Path: <BEC.SHAPIN@ECLA.USC.EDU>
+Received: from ECLA.USC.EDU by SCORE.STANFORD.EDU with TCP; Thu 28 May 87 11:17:27-PDT
+Date: Thu 28 May 87 11:22:37-PDT
+From: Ted Shapin <BEC.SHAPIN@ECLA.USC.EDU>
+Subject: Two column style
+To: texhax@SCORE.STANFORD.EDU
+Phone: (714)961-3393; Mail:Beckman Instruments, Inc.
+Mail-addr: 2500 Harbor Blvd., X-11, Fullerton CA 92634
+Message-ID: <12306026518.16.BEC.SHAPIN@ECLA.USC.EDU>
+
+I have modified TUGBOT.STY to switch between one and two columns
+in the middle of a page using the method outlined in the TeXbook
+and TUGboat v.6 #1 pg 30. I have produced the files TWO.STY and
+TWO.DOC. The latter contains examples of some of the less
+obvious features.
+
+Ted Shapin
+
+
+28-May-87 11:19:44-PDT,30619;000000000000
+Return-Path: <BEC.SHAPIN@ECLA.USC.EDU>
+Date: Thu 28 May 87 11:23:07-PDT
+From: Ted Shapin <BEC.SHAPIN@ECLA.USC.EDU>
+Subject: TWO.STY
+To: texhax@SCORE.STANFORD.EDU
+Phone: (714)961-3393; Mail:Beckman Instruments, Inc.
+Mail-addr: 2500 Harbor Blvd., X-11, Fullerton CA 92634
+Message-ID: <12306026608.16.BEC.SHAPIN@ECLA.USC.EDU>
+
+%TWO.STY from TeXbook and Tugboat V. 6 No. 1 page 30
+% Also mostly stolen from TUGBOAT style
+% One or two columns. Can switch in middle of page and columns
+% will be balanced. Also uses section headings from Tugboat style.
+%
+% \onecol
+% \twocol
+% \sectitle This has a box around it<
+% \sectitle This is a very \cr long title<
+% \title The Title\\ The Author\endx
+\message{TWO.STY, May 27, 1987}
+
+\catcode`\@=11 % used as in PLAIN in protected control sequences
+
+% Stuff different from PLAIN, or reiterated for clarity
+
+\def~{\penalty\@M \ } % tie -- this is PLAIN value; it is reset in AMS-TeX
+
+\clubpenalty=10000
+\widowpenalty=10000
+
+\normallineskiplimit=1pt
+
+\newif\ifNoParIndent \NoParIndentfalse
+\def \NoParIndent{\parindent=0pt \NoParIndenttrue}
+
+\newdimen\normalparindent \normalparindent=20pt % plain = 20pt
+\def \NormalParIndent{\global\parindent=\normalparindent
+ \global\NoParIndentfalse}
+\NormalParIndent
+
+% set up auxiliary `page numbers'
+% \pageno = \count0 as used in PLAIN
+\countdef\xcol=1 \xcol=1
+\countdef\spoolno=2 \spoolno=1
+
+% some things with the same names as in, or reiterated from, AMS-TeX
+
+\def \BlackBoxes{\overfullrule=5pt }
+\def \NoBlackBoxes{\overfullrule=0pt }
+\def \document{} % override an AMS-TeX convention
+\def \linebreak{\unskip\break}
+\def \newline{\hskip0pt plus\colwd \break}
+%\let\brk=\linebreak % TeX80 version
+%\let\lbrk=\newline % TeX80 version
+\output{\output@}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Page dimensions %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newdimen\pagewidth
+\newdimen\pagewd
+\newdimen\pageheight
+\newdimen\ruleht
+\newdimen\colwidth
+\newdimen\bigcolheight
+\hsize=39pc
+\vsize=55pc
+\maxdepth=2.2pt
+\parindent=3pc
+\parskip=2pt
+\pagewidth=\hsize
+\pagewd=\hsize
+\pageheight=\vsize
+\colwidth=18.75pc
+\bigcolheight=111pc
+
+\newdimen\trimlgt \trimlgt=11in
+\newdimen\headmargin \headmargin=3.5pc
+\newdimen\pagelgt
+\newdimen\rheadlgt \rheadlgt=2.5pc % + headmargin = 6pc = 1in
+\newdimen\toplgt \toplgt=0pt
+\newdimen\normalcollgt \normalcollgt=54pc % 52pc for 5#2
+\newdimen\collgt \collgt=\normalcollgt
+\newdimen\Collgt
+\maxdepth=2pt
+\newdimen\botlgt \botlgt=0pt
+\newdimen\rfootlgt \rfootlgt=2pc
+
+\gdef\newpage{\par\vfill\eject}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% ***** abbreviations ***** %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \careof{\leavevmode\hbox{\raise.75ex\hbox{c}\kern-.15em
+ /\kern-.125em\smash{\lower.3ex\hbox{o}}}}
+\def \frac#1/#2{\leavevmode\kern.1em
+ \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
+ /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
+
+\def \d@sh#1{\nobreak\thinspace#1\penalty0\thinspace}
+\def \dash{\d@sh{--}}
+\def \Dash{\d@sh{---}}
+
+\def \TeX{\leavevmode\hbox{T\kern-.1667em\lower.424ex\hbox{E}\kern-.125emX}}
+\def \TUG{\TeX\ \UG}
+\def \UG{Users Group}
+\def \TUB{TUGboat}
+\def \POBox{P.\thinspace O.~Box }
+
+% note -- \LaTeX definition is from LATEX.TEX 2.08 of 27 Mar 85,
+% adapted for additional flexibility in TUGboat
+\def \LaTeX{\leavevmode L\kern-.36em\raise.3ex\hbox{\smc a}\kern-.15em\TeX}
+% note -- the `official' \MF uses \font\logo=manfnt, which is not
+% in general distribution (to prevent unauthorized
+% reproduction of the TeXbook)
+\let\logo=\tenssb % replace by manfnt if that is available
+\def \MF{{\logo META}\-{\logo FONT}}
+\def \mf{{\smc Metafont}}
+\def \Pas{Pascal}
+\def \UNIX{{\smc unix}}
+\def \VAX{\leavevmode\hbox{V\kern-.12em A\kern-.1em X}}
+\def \WEB{{\tt WEB}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% ***** utility registers and definitions ***** %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% test registers for transient use; paired - internal/external
+\newbox\T@stBox \newbox\TestBox
+\newcount\T@stCount \newcount\TestCount
+\newdimen\T@stDimen \newdimen\TestDimen
+
+
+% \cs existence test, stolen from TeXbook exercise 7.7
+\def \ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax }
+
+
+% Smashes repeated from AMS-TeX; PLAIN implements only full \smash .
+\newif\iftop@ \newif\ifbot@
+\def\topsmash{\top@true\bot@false\smash@}
+\def\botsmash{\top@false\bot@true\smash@}
+\def\smash{\top@true\bot@true\smash@}
+\def\smash@{\relax\ifmmode\def\next{\mathpalette\mathsm@sh}%
+ \else\let\next\makesm@sh\fi \next }
+\def\finsm@sh{\iftop@\ht\z@\z@\fi\ifbot@\dp\z@\z@\fi\box\z@}
+
+
+% Vertical `laps'; cf. \llap and \rlap
+\def\ulap#1{\vbox to \z@{\vss#1}}
+\def\dlap#1{\vbox to \z@{#1\vss}}
+
+% And a horizontal `lap' that takes up no space on either side.
+\def\zlap#1{\hbox to \z@{\hss#1\hss}}
+
+
+% Avoid unwanted vertical glue when making up pages.
+%\def \basezero{\baselineskip\z@ \lineskip\z@} Use \offinterlineskip
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% ***** fonts and friends ***** %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Struts give ascenders and descenders to assist in baseline alignment
+% (e.g. of adjoining vertical boxes); useful only with text fonts.
+%
+% \strut is defined in PLAIN . The structure of \strutt is equivalent.
+
+\newbox\struttbox
+\def\strutt{\relax\ifmmode\copy\struttbox\else\unhcopy\struttbox\fi}
+
+% Struts are given the following dimensions for use in TUGboat:
+%
+% \strut = height/depth of parenthesis in current font
+% (not the same as PLAIN)
+% \strutt height + depth = \normalbaselineskip,
+% height = same as \strut
+% (equivalent to PLAIN \strut )
+
+
+% The fonts below are sufficient for most ordinary TUGboat production.
+% Additional titling fonts are defined elsewhere, and occasionally an
+% extra font will be needed for a particular item (e.g. the device
+% charts) and defined in that file.
+
+% fonts preloaded but not named in PLAIN
+
+\font\ninerm=amr9
+\font\eightrm=amr8
+\font\sixrm=amr6
+
+\font\ninei=ammi9 \skewchar\ninei='177
+\font\eighti=ammi8 \skewchar\eighti='177
+\font\sixi=ammi6 \skewchar\sixi='177
+
+\font\ninesy=amsy9 \skewchar\ninesy='60
+\font\eightsy=amsy8 \skewchar\eightsy='60
+\font\sixsy=amsy6 \skewchar\sixsy='60
+
+\font\ninebf=ambx9
+\font\eightbf=ambx8
+\font\sixbf=ambx6
+
+\font\ninesl=amsl9
+\font\eightsl=amsl8
+
+\font\nineit=amti9
+\font\eightit=amti8
+\font\sevenit=amti7
+
+\font\ninett=amtt9
+\font\eighttt=amtt8
+
+\font \tenupit=amu10
+
+
+\def \mit{\fam\@ne}
+\def \cal{\fam\tw@}
+\def \sy{\cal} % old name
+
+% fonts added at AMS
+
+% \font\eightex=amex8
+
+% \newfam\cyrfam % uncomment if needed
+
+% \font\tencyr=mcyr10
+% \font\ninemcyr=mcyr9
+% \font\eightcyr=mcyr8
+% \font\sixcyr=mcyr6
+
+\font\tensmc=amcsc10
+%\font\ninesmc=amcsc9 % when available
+\let\ninesmc=\tensmc % temporary expedient
+%\font\eightsmc=amcsc8
+\let\eightsmc=\tensmc % temporary expedient
+
+%\font \sixteenssb=amssbx16
+%\font \sixteenssb=amssbx10 scaled \magstep3 % for distribution
+\font \sixteenssb=amr10 scaled \magstep3 % Ted's substitution
+%\font \twelvessb=amssbx12
+\font \twelvessb=amssbx10 scaled \magstep1 % for distribution
+\font \tenssb=amssbx10
+%\font \eightssb=amssbx8
+
+%\font \seventphon=tphon7 % used in macro index and device list
+
+\def \titlefont{\def\smc{\eightssb}\sixteenssb\baselineskip=16pt }
+
+
+% Allow text to be a bit stretchier than the built-in setting;
+% TeXbook, page 433, 355
+
+\newdimen\normaltenptstretch \normaltenptstretch=1.6667pt
+\newdimen\extratenptstretch \extratenptstretch=4pt
+\def\NormalTenPointSpacing{\fontdimen3\tenrm=\normaltenptstretch
+ \fontdimen3\tenit=\normaltenptstretch}
+\def\StretchyTenPointSpacing{\fontdimen3\tenrm=\extratenptstretch
+ \fontdimen3\tenit=\extratenptstretch}
+
+\def \AddToTenPoint{} % permit external additions to font
+
+\def \tenpoint{\normalbaselineskip=12pt % \def\pointsize@AmS{t}
+ \abovedisplayskip=3pt plus 3pt minus 1pt
+ \belowdisplayskip=3pt plus 3pt minus 1pt
+ \abovedisplayshortskip=0pt plus 3pt
+ \belowdisplayshortskip=1pt plus 3pt minus 1pt
+ \def\rm{\fam\z@\tenrm}%
+ \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \def\oldstyle{\fam\@ne\teni}%
+ \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\tenit}%
+ \textfont\itfam=\tenit
+ \def\sl{\fam\slfam\tensl}%
+ \textfont\slfam=\tensl
+ \def\bf{\fam\bffam\tenbf}%
+ \textfont\bffam=\tenbf \scriptfont\bffam=\eightbf
+ \scriptscriptfont\bffam=\sixbf
+% \def\cyr{\fam\cyrfam\tencyr}%
+% \textfont\cyrfam=\tencyr \scriptfont\cyrfam=\eightcyr
+% \scriptscriptfont\cyrfam=\sixcyr
+ \def\smc{\tensmc}%
+ \def\tt{\tentt}%
+ \def\upright{\tenupit}%
+ \setbox\strutbox=\hbox{\vrule height7.5pt depth2.5pt width\z@}%
+ \setbox\struttbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}%
+ \normalbaselines \AddToTenPoint \rm }
+
+\tenpoint % initialize -- default font
+
+
+\newdimen\normalnineptstretch \normalnineptstretch=1.5pt
+\newdimen\extranineptstretch \extranineptstretch=3.6pt
+\def\NormalNinePointSpacing{\fontdimen3\ninerm=\normalnineptstretch}
+\def\StretchyNinePointSpacing{\fontdimen3\ninerm=\extranineptstretch}
+
+\def \AddToNinePoint{}
+
+\def \ninepoint{\normalbaselineskip=11pt
+ \abovedisplayskip=2.5pt plus 2.5pt minus 1pt
+ \belowdisplayskip=2.5pt plus 2.5pt minus 1pt
+ \abovedisplayshortskip=0pt plus 2.5pt
+ \belowdisplayshortskip=1pt plus 2.5pt minus 1pt
+ \def\rm{\fam\z@\ninerm}%
+ \textfont0=\ninerm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \def\oldstyle{\fam\@ne\ninei}%
+ \textfont1=\ninei \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \textfont2=\ninesy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \def\it{\fam\itfam\nineit}%
+ \textfont\itfam=\nineit
+ \def\sl{\fam\slfam\ninesl}%
+ \textfont\slfam=\ninesl
+ \def\bf{\fam\bffam\ninebf}%
+ \textfont\bffam=\ninebf \scriptfont\bffam=\sevenbf
+ \scriptscriptfont\bffam=\sixbf
+% \def\cyr{\fam\cyrfam\ninmcyr}%
+% \textfont\cyrfam=\ninmcyr \scriptfont\cyrfam=\sixcyr
+% \scriptscriptfont\cyrfam=\sixcyr
+ \def\smc{\ninesmc}%
+ \def\tt{\ninett}%
+ \setbox\strutbox=\hbox{\vrule height 6.75pt depth 2.25pt width\z@}%
+ \setbox\struttbox=\hbox{\vrule height 7.25pt depth 2.75pt width\z@}%
+ \normalbaselines \AddToNinePoint \rm }
+
+% this is equivalent to baselineskip = 10pt
+% \setbox\struttbox=\hbox{\vrule height 7.75pt depth 3.25pt width\z@}%
+
+
+\newdimen\normaleightptstretch \normaleightptstretch=1.333pt
+\newdimen\extraeightptstretch \extraeightptstretch=3pt
+\def\NormalEightPointSpacing{\fontdimen3\eightrm=\normaleightptstretch}
+\def\StretchyEightPointSpacing{\fontdimen3\eightrm=\extraeightptstretch}
+
+\def \AddToEightPoint{}
+
+\def \eightpoint{\normalbaselineskip=10pt
+ \abovedisplayskip=2pt plus 2pt minus 1pt
+ \belowdisplayskip=2pt plus 2pt minus 1pt
+ \abovedisplayshortskip=0pt plus 2pt
+ \belowdisplayshortskip=1pt plus 2pt minus 1pt
+ \def\rm{\fam\z@\eightrm}%
+ \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \def\oldstyle{\fam\@ne\eighti}%
+ \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+% \textfont3=\eightex \scriptfont3=\eightex \scriptscriptfont3=\eightex
+ \def\it{\fam\itfam\eightit}%
+ \textfont\itfam=\eightit
+ \def\sl{\fam\slfam\eightsl}%
+ \textfont\slfam=\eightsl
+ \def\bf{\fam\bffam\eightbf}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\sixbf
+% \def\cyr{\fam\cyrfam\eightcyr}%
+% \textfont\cyrfam=\eightcyr \scriptfont\cyrfam=\sixcyr
+% \scriptscriptfont\cyrfam=\sixcyr
+ \def\smc{\eightsmc}%
+ \def\tt{\eighttt}%
+ \setbox\strutbox=\hbox{\vrule height 6pt depth 2pt width\z@}%
+ \setbox\struttbox=\hbox{\vrule height 7pt depth 3pt width\z@}%
+ \normalbaselines \AddToEightPoint \rm }
+
+% this is equivalent to baselineskip = 9pt
+% \setbox\struttbox=\hbox{\vrule height 6.5pt depth 2.5pt width\z@}%
+
+% PLAIN's definition of \raggedright doesn't permit any stretch, and
+% results in too many overfull boxes. Change.
+\newdimen\raggedskip \raggedskip=\z@
+\newdimen\raggedstretch \raggedstretch=5em
+\newskip\raggedparfill \raggedparfill=\z@ plus 1fil
+
+\def \raggedspaces{\spaceskip=.3333em \xspaceskip=.5em }
+% Some applications may have to add stretch, in order to avoid
+% all overfull boxes.
+
+\def \raggedright{\rightskip=\raggedskip plus\raggedstretch \raggedspaces
+ \parfillskip=\raggedparfill }
+\def \raggedleft{\leftskip=\raggedskip plus\raggedstretch \raggedspaces
+ \parfillskip=\z@ }
+\def \raggedcenter{\leftskip=\raggedskip plus\raggedstretch
+ \rightskip=\leftskip \raggedspaces
+ \parindent=\z@ \parfillskip=\z@ }
+
+\def \normalspaces{\spaceskip=.3333em plus.1667em minus.1111em
+ \xspaceskip=.4444em plus.5em minus.037em }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** Section titles and separators *****
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newskip\Tabskss
+\Tabskss=0pt plus 1000pt minus 1000pt
+\newskip\AboveTitleSkip \AboveTitleSkip=12pt % 10pt plus 2pt minus 2pt
+\newskip\BelowTitleSkip \BelowTitleSkip=8pt % plus 1pt minus 1pt
+
+\setbox\T@stBox=\hbox{\titlefont O}
+\newdimen\stfontheight \stfontheight=\ht\T@stBox
+\newdimen\strulethickness \strulethickness=.6pt
+\newcount\n@stnum \n@stnum=0
+\def \sthrule{\hrule height\strulethickness depth 0pt }
+\def \stvrule{\vrule height 1.4\stfontheight depth.4\stfontheight
+ width\strulethickness }
+\def \sectitlebox #1<{\vbox{\sthrule
+ \hbox to \hsize{\stvrule\hfil #1\hfil\vrule width\strulethickness }%
+ \sthrule }}
+
+\def \secsep{\vskip 3\baselineskip}
+
+\newif\ifSecTitle
+\SecTitlefalse
+
+\def \sectitle #1<{\par \SecTitletrue
+ \penalty-1000\secsep
+ \n@stnum=0
+ {\def\\{ }\setbox\T@stBox=\hbox{\titlefont#1}%
+ \ifdim\wd\T@stBox < \hsize \def\result{\unhbox\T@stBox}%
+ \else \def\\{\cr\noalign{\global\advance\n@stnum by 1 }}%
+ \setbox\T@stBox=\vbox{\titlefont
+ \halign{\hfil##\hfil\cr#1\crcr}}%
+ \def\result{\vbox{\unvbox\T@stBox}}\fi
+ \ifnum\n@stnum=1 \def\stvrule{\vrule height 3.5\stfontheight
+ depth\stfontheight width\strulethickness }\fi
+ \centerline{\sectitlebox \titlefont\result<}}%
+ \nobreak \vskip\baselineskip }
+
+\def \littlesep{\vskip 3pt plus 1pt minus 1pt
+ \centerline{\hbox to 90pt{\ignorespaces
+ \leaders\hbox to 10pt{\hfil .\hfil}\hfill} }%
+ \vskip 3pt plus 1pt minus 1pt}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Titles, authors, subtitles, and first-paragraph formatting %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif\ifFirstPar \FirstParfalse
+
+% make the first paragraph after a title start flush left,
+% then reset \parindent; but if all paragraphs should start
+% flush left, then don't reset.
+\everypar{\ifNoParIndent
+ \else \ifFirstPar \NormalParIndent \FirstParfalse \fi
+ \fi }
+
+% For uppercasing title and author; from AMSPPT.STY, version 0
+
+\def\uctext@#1{\uppercase@#1\gdef\uppercase@@{}$\m@th$}
+\def\uppercase@#1$#2${\gdef\uppercase@@{\uppercase@}\uppercase
+ {#1}${#2}$\uppercase@@}
+
+
+\newif\ifCtrTitle \CtrTitlefalse
+\def \TitleUC{} % ordinary titles uc/lc
+\def \titleframe #1#2#3{\ifSecTitle \SecTitlefalse
+ \else \vskip\AboveTitleSkip \fi
+ \ifCtrTitle \def\CTSkip{\unskip\hfil}\CtrTitlefalse
+ \else \def\CTSkip{}\fi
+ \vbox{#1\halign{\hbox to \hsize
+ {\bf\TitleUC{\CTSkip\ignorespaces##\unskip\hfil}}\strutt\cr
+ #2\crcr}}%
+ \let\oldcr=\cr\def\cr{}%
+ \setbox\T@stBox=\hbox{#3}%
+ \let\cr=\oldcr
+ \ifdim \wd\T@stBox < 5pt % omit if author is null
+ \else \nobreak \vskip 4pt % 4pt + \BelowTitleSkip = \baselineskip
+ \vbox{\halign{\hbox to \hsize
+ {\hskip\parindent\CTSkip\ignorespaces##\hfil}\cr
+ #3\crcr}}\fi
+ \setbox\T@stBox=\hbox{}%
+ \nobreak \vskip\BelowTitleSkip
+ \global\parindent=0pt \global\FirstPartrue }
+
+\def \title #1\\#2\endx{\titleframe{}{#1}{#2}}
+\def \Title #1\\#2\endx{\titleframe{\def\TitleUC{\uctext@}}{#1}{#2}}
+
+\def \ctrtitle #1\\#2\endx{\CtrTitletrue\titleframe{}{#1}{#2}}
+\def \ctrTitle #1\\#2\endx{\CtrTitletrue
+ \titleframe{\def\TitleUC{\uctext@}}{#1}{#2}}
+
+% \subtitle and \subsubtitle are used in the announcements box
+
+\def \subtitle #1\endx{{\CtrTitletrue
+ \ifFirstPar \AboveTitleSkip=0pt \fi % \AboveTitleSkip=10pt
+ \titleframe{}{#1}{}}}
+
+\def \subsubtitle #1\endx{{\CtrTitletrue
+ \ifFirstPar \AboveTitleSkip=0pt \fi % \AboveTitleSkip=10pt
+ \titleframe{}{\sl#1}{}}}
+
+% \section was first defined for Jacques Desarmenien's article in 5#2
+\def \section #1 #2\par{\ifFirstPar \nobreak
+ \else \penalty-200 \vskip 8pt \fi
+ \noindent{\bf\hbox to \normalparindent{#1\hfil}#2}\endgraf
+ \nobreak \vskip 4pt \parindent=0pt \FirstPartrue }
+
+% This is based on \beginsection in PLAIN and \section above.
+\outer\def\beginsection#1\par{\ifFirstPar \nobreak
+ \else \vskip\z@ plus 6\baselineskip \penalty-250
+ \vskip\z@ plus-6\baselineskip \vskip 8pt \vskip\parskip \fi
+ \message{#1}\leftline{\bf#1}\nobreak \vskip 4pt
+ \parindent=0pt \FirstPartrue }
+
+% Define address blocks and other structures that use \obeylines
+% in the context \tag ...<
+% This requires that < be active, so that \obeylines is invoked
+% at the outer level. \tag{...} will not deliver the data with
+% ^M (carriage return) intact, so is not a suitable format for
+% any construction using \obeylines; the reference (if any) in
+% The TeXbook has not been found, and this information has been
+% determined empirically, referring to \obeylines constructions
+% in PLAIN and MANMAC.TeX (The TeXbook macros).
+
+{\catcode`\<=\active \obeylines
+\gdef\AddrFrame#1#2{\endgraf\def\Phone{\leavevmode\kern\parindent}#1%
+ \catcode`\<=\active %
+% next line intentionally ends with <cr> %
+ \def<{
+ \egroup\catcode`\<=12 #2 }\bgroup \obeylines }%
+\gdef\LetterAddr{\AddrFrame{\smallskip}{}}%
+\gdef\TextAddr{\AddrFrame{}{}}%
+\gdef\Submitted{\AddrFrame{\nobreak\smallskip \parindent=2\normalparindent %
+ \def\Signed{\parfillskip=\normalparindent \qquad\hfil }}{}}%
+\gdef\Columnist{\AddrFrame{\FirstParfalse %
+ \def\NetAddr{\smallskip \indent\indent }%
+ \def\Phone{\NetAddr }}%
+ {\nobreak \vskip\BelowTitleSkip %
+ \global\parindent=0pt \global\FirstPartrue }\sl }%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Support verbatim listing of TeX source, as defined in TeXbook, p. 421;
+% lifted from MANMAC.TEX, and modified slightly for narrower columns.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chardef\other=12
+\def\ttverbatim{\begingroup \catcode`\\=\other
+ \catcode`\{=\other \catcode`\}=\other \catcode`\$=\other
+ \catcode`\&=\other \catcode`\#=\other \catcode`\%=\other
+ \catcode`\~=\other \catcode`\_=\other \catcode`\^=\other
+ \obeyspaces \obeylines \tt}
+
+\newdimen\ttrightskip
+\ttrightskip=5pc
+
+%\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@
+\outer\def\begintt{$$\def\par{\leavevmode\null\endgraf}\ttverbatim \parskip=\z@
+ \catcode`\|=0 \rightskip=-\ttrightskip \ttfinish}
+{\catcode`\|=0 |catcode`|\=\other % | is temporary escape character
+ |obeylines % end of line is active
+ |gdef|ttfinish#1^^M#2\endtt{#1|vbox{#2}|endgroup$$}}
+
+\catcode`\|=\active
+{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}}
+
+\newskip\ttglue
+{\tenpoint\tt \global\ttglue=.5em plus .25em minus .15em}
+% this should be installed in each font
+
+% From David Eppstein's ``Trees'' paper (6#1), preserve initial spaces.
+{\obeyspaces\gdef {\ifvmode\indent\fi\space}}
+
+\chardef\bs='134 % for \tt mode
+
+% Permit math to be embedded within \begintt...\endtt .
+\def\MTH{$}
+\def\sb{_}
+\def\sp{^}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% ***** headers/footers ***** %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\masthead{} % masthead should be used with \OmitHeadtrue
+ % to omit the running head on that page
+
+\def\rhead{} % Running Head
+
+\def \rtitle{\hbox to \pagewd{\tenrm%
+ \ifodd\pageno \rhead\hfil\number\pageno
+ \else \number\pageno\hfil\rhead \fi }}
+
+\def \dohead{\ifOmitHead
+ \global\OmitHeadfalse
+ % \vbox to \rheadlgt{}
+ \else
+ \vbox to \rheadlgt{\topskip=1pc \rtitle \vfil }
+ \fi}
+
+\def \runfoot{\vbox to \rfootlgt{\topskip=1.5pc
+ \ifnum\xcol=2 \hbox to \pagewd{\midrtitle\hfil\midrtitle}\fi
+ \vfil }}
+
+\def \firsthead{}
+\newbox\firsth@@d \newbox\firsth@ad
+\long\def \setfirsthead #1{\ThisIsFirstPagetrue
+ \ifdim \toplgt=\z@
+ \global\setbox\firsth@ad=\vbox{\hsize=\pagewd #1}%
+% assume that \firsth@ad ends with glue, hence no \dp
+ \global\toplgt=\ht\firsth@ad \resetpagelgt
+ \else \global\setbox\firsth@ad=\vbox to \toplgt{\hsize=\pagewd #1}%
+ \fi
+ \global\setbox\firsth@@d=\vbox to \toplgt{\vfil}%
+ \gdef\firsthead{\ifnum \xcol=2 \box\firsth@ad
+ \else \copy\firsth@@d \fi }}
+
+\def \firstfoot{}
+\newbox\firstf@@t \newbox\firstf@ot
+\long\def \setfirstfoot #1{\ThisIsFirstPagetrue
+ \ifdim \botlgt=\z@
+ \global\setbox\firstf@ot=\vbox{\hsize=\pagewd #1}%
+ \botlgt=\ht\firstf@ot
+ \global\advance\botlgt by \dp\firstf@ot \resetpagelgt
+ \else \global\setbox\firstf@ot=\vbox to \botlgt{\hsize=\pagewd #1}%
+ \fi
+ \global\setbox\firstf@@t=\vbox to \botlgt{\vfil}%
+ \gdef\firstfoot{\ifnum \xcol=2 \copy\firstf@ot
+ \else \copy\firstf@@t \fi }}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% ***** output ***** %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ruleht=.5pt
+\newinsert\margin
+\dimen\margin=\maxdimen % no limit on number of marginal notes
+\count\margin=0 \skip\margin=0pt % marginal inserts take up no space
+
+\newif\ifOmitHead \global\OmitHeadfalse % for page without running head
+
+\newif\ifTwoCol \global\TwoColfalse % flag if in twocol
+
+\def\onepageout#1{\shipout\vbox{ % here we define one page of output
+ \hrule height\z@ depth \z@ width \p@
+ \vskip - \rheadlgt
+ \offinterlineskip % butt the boxes together
+ \dohead
+ \vbox to \pageheight{
+ \ifvoid\margin\else % marginal info is present
+ \rlap{\kern31pc\vbox to 0pt{\kern4pt\box\margin \vss}}\fi
+ #1 % now insert the main information
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins \kern-3pt
+ \hrule height\ruleht width\pagewidth \kern-\ruleht \kern3pt
+ \unvbox\footins\fi
+ \boxmaxdepth=\maxdepth}}
+ \advancepageno}
+
+\def\setcornerrules{\hbox to \pagewidth{% for camera alignment
+ \vrule width 1pc height\ruleht \hfil \vrule width 1pc}
+ \hbox to \pagewidth{llap{\sevenrm(page \folio)\kern1pc}%
+ \vrule height1pc width\ruleht depth0pt
+ \hfil \vrule width\ruleht depth0pt}}
+
+\output{\onepageout{\unvbox255}}
+\newbox\partialpage
+\newdimen\savesize
+
+\def\twocol{\ifTwoCol \errmessage{Already in two columns}\else
+ \begingroup
+ \savesize=\vsize
+ \output={\global\setbox\partialpage=\vbox{\unvbox255}}\eject
+ \output={\doublecolumnout} \hsize=\colwidth \vsize=\bigcolheight
+ \advance\vsize by -2\ht\partialpage
+ \TwoColtrue\fi}
+
+
+\def\onecol{\ifTwoCol
+ \output={\balancecolumns}\eject
+ \global\output={\onepageout{\unvbox255}}
+ \global\vsize=\savesize
+ \endgroup \pagegoal=\vsize
+ \TwoColfalse
+ \else\errmessage{Already in one column}\fi}
+
+\def\doublecolumnout{\dimen0=\pageheight
+ \advance\dimen0 by-\ht\partialpage \splittopskip=\topskip
+ \setbox0=\vsplit255 to\dimen0
+ \setbox2=\vsplit255 to\dimen0
+ \onepageout\pagesofar
+ \global\vsize=\bigcolheight
+ \unvbox255 \penalty\outputpenalty}
+
+\def\pagesofar{\unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+
+\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen0=\ht0
+ \advance\dimen0 by\topskip \advance\dimen0 by -\baselineskip
+ \divide\dimen0 by2 \splittopskip=\topskip
+ {\vbadness=10000 \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to \dimen0
+ \ifdim\ht3>\dimen0 \global\advance\dimen0 by1pt \repeat}
+ \setbox0=\vbox to \dimen0{\unvbox1}
+ \setbox2=\vbox to \dimen0{\unvbox3}
+ \global\output={\balancingerror}
+ \pagesofar}
+
+\newhelp\balerrhelp{Please change the page
+ into one that works.}
+
+\def\balancingerror{\errhelp=\balerrhelp
+ \errmessage{Page can't be balanced}
+ \onepageout{\unvbox255}}
+
+
+\newcount\issueseqno \issueseqno=-1
+
+% Write out (both to a file and to the log) the starting page number
+% of an article, to be used for cross references and in contents.
+% \pagexref is used for articles fully processed in the TUGboat run.
+% \PageXref is used for "extra" pages, where an item is submitted
+% as camera copy, and only running heads (at most) are run.
+\def \pagexref#1{\ifFirstPar \nobreak \fi % don't clobber switch by accident
+ \write-1{\def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}%
+ \write1{\def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}%
+ \ifFirstPar \nobreak \fi } % and don't allow page break
+\def \PageXref#1{%
+ \immediate\write-1{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\pageno}}%
+ \immediate\write1{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\pageno}}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% INRS tables.tex from TUG %
+% Can be added to this style at this point %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`\@=12 % used as in PLAIN in protected control sequences
+
+
+28-May-87 11:19:53-PDT,6612;000000000000
+Return-Path: <BEC.SHAPIN@ECLA.USC.EDU>
+Received: from ECLA.USC.EDU by SCORE.STANFORD.EDU with TCP; Thu 28 May 87 11:19:35-PDT
+Date: Thu 28 May 87 11:23:31-PDT
+From: Ted Shapin <BEC.SHAPIN@ECLA.USC.EDU>
+Subject: TWO.DOC
+To: texhax@SCORE.STANFORD.EDU
+Phone: (714)961-3393; Mail:Beckman Instruments, Inc.
+Mail-addr: 2500 Harbor Blvd., X-11, Fullerton CA 92634
+Message-ID: <12306026680.16.BEC.SHAPIN@ECLA.USC.EDU>
+
+\input two.sty % two columns style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Define the masthead %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\issueno{1} % Change these each issue
+\def\issdt{June 1987}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\font\lfont=school36 % used for masthead large
+\def\masthead{\vbox to 1in
+ {\hbox to \pagewd{\lfont
+ TWO COLUMN STYLE\hfil}
+ \bigskip
+ \hrule height.4pt width \pagewd
+ \smallskip
+ {\hbox to \pagewd{\bf Ted Shapin
+ \hfil Beckman Instruments, Inc.}}
+ \smallskip
+ \hrule height.4pt width \pagewd
+ \bigskip}}
+\def\rhead{TWO.STY,\ \issdt.} % the running head
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NoBlackBoxes % Omit overfull black marks
+\StretchyTenPointSpacing
+\StretchyNinePointSpacing
+\StretchyEightPointSpacing
+\openout1=pages
+\pageno=1
+\def \Input #1{\input /md/#1}
+\def\ldr{\leaders\hbox to 1em{\hss.\hss}\hfill}
+\OmitHeadtrue % Use our own masthead on first page
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Copy starts here:
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\masthead
+\twocol
+\sectitle ANCESTRY<
+
+\title Where It Comes From\\Ted Shapin\endx
+TWO.STY is a modification of TUGBOT.STY that allows switching from one
+column to two columns and back in the middle of a page. It uses the
+method described in the \TeX book as modified in Tugboat v.~6, no.~1,
+page 30.
+
+\subtitle This Is A Very Long Subtitle\cr So We'll Put It On Two Lines\endx
+
+The macros I added are called $\backslash$twocol to change to two columns and
+$\backslash$onecol to change to one column. I added a test that will
+print an error message if you try to change to a mode you are already in.
+
+I also made some minor changes to TUGBOT.STY. I made the box around the
+section titles a little shorter, and reduced the skip before them to 3 lines.
+
+I let the masthead be defined and called as regular text outside of the style.
+\onecol
+\title TUGBOT Style\\\endx
+
+Here are some comments from Barbara Beeton on the original TUGBOT.STY
+which will help you use some of the features [all the changes are my own
+fault]:
+
+\begintt
+
+Paragraphs don't flush left after \sectitle, only after \title .
+\title ia a 2-parter -- \title #1\\#2[author]\endx .
+Multi-line title and author parts are split by \cr ;
+this is probably a bit weird, but it's an artifact of an earlier
+version that used \halign .
+Because the article on pages 104 ff. of tb 7#2 seems to have the sorts
+of things you're looking for, I've stripped it down to contain one each
+of the interesting stuff, and here are the remains:
+
+%tb15pfeffer.tex
+\title The Sperry~IT: An IBM AT~Compatible
+\\M.~Pfeffer and A.~Hoenig
+\endx
+
+\pagexref{pfeffer}
+
+The high speed of the Sperry IT makes \TeX ing and previewing
+comfortable\Dash far more comfortable than on a PC-class machine.
+..., costs about \$3,400.%
+\footnote{}{\copyright 1986 M.~Pfeffer.\strutt}
+\footnote{}{Date submitted: May 21, 1986.}
+
+\medskip
+\noindent{\bf The System unit:} Because \TeX\ is a
+computation-intensive program, ...
+
+\endtt
+\newpage
+\begintt
+For comparison, a 6$\,$MHz AT is two to three times faster than a
+4.77$\,$MHz PC; an 8$\,$MHz AT is 33\% faster than a 6$\,$MHz AT,
+while the Sperry, at 7.16$\,$MHz, is 45\% faster than a 6$\,$MHz AT\null.
+
+\smallskip
+When using the Textset Preview program, the bottle-neck is disk
+access. ...
+
+... Technical reference manuals are available.
+
+{\sl Important\/}: Sperry currently ships the IT with either a
+44\thinspace Mb drive made by Miniscribe, ...
+
+Sperry's corporate personnel proved to be conscientious and responsive.
+
+\beginsection Peripherals
+
+The following recommendations on peripherals apply to other AT- and
+PC-class computers, including the ACS computer I discussed in
+volume~6, number~3.
+
+\smallskip
+\noindent{\bf Display:} The most comfortable display I've used to date
+is the Panasonic TR-122MYP. ...
+
+\endtt
+\twocol
+\title The Sperry~IT: An IBM AT~Compatible
+\\M.~Pfeffer and A.~Hoenig
+\endx
+
+\pagexref{pfeffer}
+
+The high speed of the Sperry IT makes \TeX ing and previewing
+comfortable\Dash far more comfortable than on a PC-class machine.
+..., costs about \$3,400.%
+\footnote{}{\copyright 1986 M.~Pfeffer.\strutt}
+\footnote{}{Date submitted: May 21, 1986.}
+
+\medskip
+\noindent{\bf The System unit:} Because \TeX\ is a
+computation-intensive program, ...
+
+For comparison, a 6$\,$MHz AT is two to three times faster than a
+4.77$\,$MHz PC; an 8$\,$MHz AT is 33\% faster than a 6$\,$MHz AT,
+while the Sperry, at 7.16$\,$MHz, is 45\% faster than a 6$\,$MHz AT\null.
+
+\smallskip
+When using the Textset Preview program, the bottle-neck is disk
+access. ...
+
+... Technical reference manuals are available.
+
+{\sl Important\/}: Sperry currently ships the IT with either a
+44\thinspace Mb drive made by Miniscribe, ...
+
+Sperry's corporate personnel proved to be conscientious and responsive.
+
+\beginsection Peripherals
+
+The following recommendations on peripherals apply to other AT- and
+PC-class computers, including the ACS computer I discussed in
+volume~6, number~3.
+
+\smallskip
+\noindent{\bf Display:} The most comfortable display I've used to date
+is the Panasonic TR-122MYP. ...
+
+\smallskip
+\noindent{\bf Display Adapter:} Low-cost Hercules-compatible video
+cards use slow chips, ...
+\littlesep
+\title INRS\TeX\\\endx
+The INRS\TeX\ table making macros work very well with this style.
+They are available for \$40 from TUG.
+\onecol
+\bye
+
+-------
diff --git a/info/digests/texhax/txh/springer.txh b/info/digests/texhax/txh/springer.txh
new file mode 100644
index 0000000000..82b2137af4
--- /dev/null
+++ b/info/digests/texhax/txh/springer.txh
@@ -0,0 +1,623 @@
+To: ABBOTTP@UK.AC.ASTON
+From: Dave Love <FX@UK.AC.DARESBURY.NNGA>
+Date: Thu, 16 Jun 88 17:13 GMT
+Message-Id: <16 JUN 1988 17:13:50 FX@UK.AC.DARESBURY.NNGA>
+Subject: Re: Springer.txh
+Comments: Thanks for fetching this. I made some mods to it in line with
+ comments from someone in TeXhax about long lines which seem to
+ have got folded. Here's the changed version if you want to put it
+ in instead.
+
+
+
+23-Apr-88 22:40:23-PDT,23400;000000000000
+Return-Path: <DBUERGER%SCU.BITNET@forsythe.stanford.edu>
+Date: Thu, 16 Jun 88 17:13 GMT
+From: <DBUERGER%SCU.BITNET@forsythe.stanford.edu>
+Subject: LaTeX macros for Springer-Verlag now available
+
+LaTeX users who write books for Springer-Verlag will be pleased to know
+that special macros have been designed to facilitate this process. Ed
+Sznyter, at Stanford's Distributed Systems Group in Computer Science
+(ews@Pescadero.stanford.edu), cooperatively developed these macros in
+conjunction with SV. These macros are variations of the standard LaTeX
+"report" documentstyle.
+
+Following are the two macros, plus a user manual in LaTeX source code.
+
+----------------------
+
+From: IN%"ews@Pescadero.STANFORD.EDU" "Ed Sznyter" 21-APR-1988 11:18
+To: dbuerger@SCU.BITNET
+Subj: Springer-Verlag LaTeX macro packages
+
+Received: from JNET-DAEMON by SCU.BITNET; Thu, 21 Apr 88 11:18 PDT
+Received: From STANFORD(MAILER) by SCU with Jnet id 5010 for DBUERGER@SCU;
+Thu,
+ 21 Apr 88 11:18 PDT
+Received: by Forsythe.Stanford.EDU; Thu, 21 Apr 88 11:14:28 PDT
+Received: by Pescadero from LOCALHOST.AF_INET (5.54/Ultrix2.0-B) id
+AA01839;
+ Thu, 21 Apr 88 11:10:02 PDT
+Date: Thu, 21 Apr 88 11:09:59 PDT
+From: Ed Sznyter <ews@Pescadero.STANFORD.EDU>
+Subject: Springer-Verlag LaTeX macro packages
+To: dbuerger@SCU.BITNET
+Cc: mk74@cmstat.stat.CMU.EDU
+Cc: miller@csfsa.cs.UMN.EDU
+Cc: dragon@nscvax.PRINCETON.EDU
+Cc: fishwick@ufl.EDU
+Cc: iad3tao@oac.ucla.EDU
+Cc: pang@watale.waterloo.EDU
+Cc: lamport@src.dec.COM
+Cc: sirovich@lfm.brown.EDU
+Cc: mshull@JILA.BITNET
+Cc: tsp@janus.BERKELEY.EDU
+Cc: halpern@ibm.COM
+Message-Id: <8804211810.AA01839@Pescadero>
+
+
+Gerhard's transmission program has stripped some backslashes, so I'm
+resending this for him. It's a shell archive; just delete all the lines
+up the the ------, then run it through shell. If you don't have UNIX,
+you'll probably have to separate the files out by hand.
+
+Manifest: svma.sty svsa.sty manual.tex
+
+--------
+#! /bin/sh
+: This is a shar archive. Extract with sh, not csh.
+echo x - svma.sty
+cat > svma.sty << '1549!Funky!Stuff!'
+% svma.sty 01 Nov 87
+\newif\if@multipleauthors
+\@ifundefined{@svsa}{%
+ \@multipleauthorstrue
+ \typeout{Sub-style 'svma' (Springer-Verlag Multi-Authored).
+Released November 1, 1987}}%
+ {\@multipleauthorsfalse}
+\ds@twoside
+\headheight=9pt
+\headsep=15pt % 2pc-9pt
+\textheight=45pc
+\textwidth=27pc
+\parindent=1em
+%
+% Running head: 9 pt TR, c/lc, 2em# inside of fl. outside folio, base aligns
+% with folio; recto: CN, period, word # to CT; verso: contributor's name(s).
+% In single-author, verso: SN, period, word # to ST.
+%
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}% No feet.
+ \def\@oddhead{\ixONxi\rm
+ \hbox{}\hfil\rightmark\hskip 2em\thepage}%
+ \def\@evenhead{\ixONxi\rm
+ \thepage\hskip 2em
+ \if@multipleauthors\@chapterauthors\else\leftmark\fi
+ \hfill}%
+ \def\chaptermark##1{\markbothsame{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}%
+ \def\sectionmark##1{\markleft{\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}}
+\pagestyle{headings}
+\def\@chapterauthors{}
+\def\markbothsame#1{\markboth{#1}{#1}}
+\def\markleft#1{{\let\protect\noexpand\expandafter\@markleft\@themark
+ {#1}\mark{\@themark}}}
+\def\@markleft#1#2#3{\gdef\@themark{{#3}{#2}}}
+\def\leftmark{\expandafter\@leftmark\topmark}
+%
+% All pages without running heads must carry corner marks.
+%
+\def\clap#1{\hbox to 0pt{\hss#1\hss}}
+\newdimen\@crosshairrule \@crosshairrule=.24pt
+\def\@crosshairs{\vbox to 0pt{\hsize=0pt\baselineskip=0pt\lineskip=0pt
+ \vss
+ \clap{\vrule height .125in width \@crosshairrule depth 0pt}
+ \clap{\vrule width .25in height \@crosshairrule depth 0pt}
+ \clap{\vrule height .125in width \@crosshairrule depth 0pt}
+ \vss}}
+\def\ps@empty{%
+\def\@oddhead{\hfill\raise\headheight\@crosshairs}
+\let\@evenhead\@oddhead
+\def\@evenfoot{}\let\@oddfoot\@evenfoot}
+\frenchspacing
+\def\@chapapp{}
+\def\viiiONx{\@setsize\viiiONx{10pt}\viipt\@viipt}
+\def\ixONxi{\@setsize\ixONxi{11pt}\ixpt\@ixpt}
+\def\xONxii{\normalsize}
+\def\xiiONxiv{\@setsize\xiiONxiv{14pt}\xiipt\@xiipt}
+\def\xivONxvi{\@setsize\xivONxvi{16pt}\xivpt\@xivpt}
+\def\xivONxiv{\@setsize\xivONxiv{14pt}\xivpt\@xivpt}
+\def\xxONxx{\@setsize\xxONxx{20pt}\xxpt\@xxpt}
+
+\def\chapter{\clearpage % Starts new page.
+ \thispagestyle{empty} % Page style of chapter page is 'empty'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
+
+%
+% Chapter number: 20 TR bold, arabic numeral, fl.l, top text
+% Chapter title: 20/20 TR bold x 27pc, c/lc, fl.l, sink 60 pt from top
+% type to base of CT, to's fl.l, do not hyphenate
+%
+\def\@makechapterhead#1{ % Heading for \chapter command
+% We want the chapter number to be 20 pts from top text. The simplest
+% was is to set \topskip, making sure there's nothing between the number
+% and the top of page, so \baselineskip doesn't come in.
+ { \topskip=20pt \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ \xxONxx\bf \@chapapp{} \thechapter % Print 'Chapter' and number.
+ \par
+ \vskip 20pt \fi % Space between number and title.
+ \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip-\prevdepth % Fool TeX into ignoring the depth of
+ \prevdepth=0pt % the CT when spacing to the CA
+ \vskip 16pt % 2.5pi b/b between title and chapter authors
+ } }
+
+\if@multipleauthors
+\gdef\chapterauthors#1{%
+ {\def\\{, }\def\footnote##1{}\xdef\@chapterauthors{#1}}%
+ {\parindent0pt \raggedright\xivONxiv\bf #1\par
+ \nobreak
+}}\fi
+
+%
+% Restart the footnote counter each chapter.
+%
+%\newcounter{footnote}[chapter]
+%
+% FN 1pc space above footnotes to text.
+% 5 pc 1/2 pt rule fl.l. above footnotes
+% leave 6pt # afte4r rule followed by ftn
+%
+\skip\footins=18.5pt % space above line and below line, 1pc+6pt+.5pt
+\footskip=16pt
+\footnotesep=7pt % pretty arbitrary
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\footnoterule{\kern-6.5pt\hrule width 5pc height .5pt\vskip 6pt}
+%
+% Footnote at end of chapter position below last text line (not at bottom
+% of page).
+%
+\def\clearpage{\par\penalty -\@M \write\m@ne{}\vbox{}\penalty -\@Mi}
+\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
+ \else\setbox\@outputbox
+ \vbox{\unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop
+ \@tempdima=\@colht \multiply\@tempdima by 10 \divide\@tempdima by 9
+ \ifdim \ht\@outputbox<\@tempdima
+ \unvbox\@outputbox \vfill
+ \else
+ \unvbox\@outputbox
+ \fi
+ \@textbottom}\global\maxdepth\@maxdepth}
+%
+% Abstract: 9/11 TRx25pi, sink 2.5pi b/b from CA
+%
+\def\abstract{\vskip 21pt % from CA
+\rightskip=1pc\leftskip=1pc\parindent=\z@
+\ixONxi\rm
+{ABSTRACT }}
+\def\endabstract{\par} % If we don't do this, the paragraph won't be
+ % set until after rightskip and leftskip have been
+ % returned to their old values.
+
+%
+% Don't indent the paragraph following each header. Vertical distances
+% showld have \baselineskip taken out, and the height of the next
+% line, which should be text (10/12 TR).
+%
+\setcounter{secnumdepth}{2} % number section and subsections
+\setcounter{tocdepth}{2} % and put them in the table of contents
+% No 1 Head, 14/16 TR, 36pt b/b above, 24 tp b/b below
+\def\section{\@startsection
+ {section}{1}{\z@}{-21pt}{12pt}{\xivONxvi\rm\raggedright}}
+% No 2 Head, 12/14 TR, c/sc, 30pt above, 18 pt below
+\def\subsection{\@startsection
+ {subsection}{2}{\z@}{-16pt}{6pt}{\xiiONxiv\sc\raggedright}}
+% No 3 Head, 10/12 TR, 24pt above, 18pt below
+\def\subsubsection{\@startsection
+ {subsubsection}{3}{\z@}{-12pt}{6pt}{\xONxii\rm\raggedright}}
+% No 4 Head, 10/12 TR italic, 20pt above, 18pt below
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{-8pt}{6pt}{\xONxii\it\raggedright}}
+% No 5 Head, 10/12 TR italic, period, en space to run in text, 18pt above
+\def\subparagraph#1{\@startsection
+ {subparagraph}{5}{\z@}{-6pt}{-.5em}{\xONxii\it}{#1.}}
+% Ack: Acknowledgements same as No 5 head, 36pt above
+\def\acknowledgements{\@startsection
+ {subparagraph}{6}{\z@}{-24pt}{-.5em}{\xONxii\it}*{Acknowledgements:\/}}
+% R-1: ``References'', same as No.2 head
+\def\thebibliography#1{%
+ \@startsection
+ {section}{2}{\z@}{-16pt}{6pt}{\xiiONxiv\sc\raggedright}{References}%
+ \list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+%
+% lists: 10/12 TRx27pc, 1/2line# above/below
+%
+\topsep 6pt plus 3pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\itemsep 6pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+%
+% Eq: Center on text width; equation numbers set flush right, align with
+% last line of equation, 6pt # above/below.
+%
+\abovedisplayskip=6pt plus 1.5pt minus 3pt
+\belowdisplayskip=\abovedisplayskip
+%
+% FL: Figure legends ``FIGURE 0.0'' 9/11 TR, c/lc, period, word # to text.
+%
+\long\def\@makecaption#1#2{{
+ \vskip 10pt
+ \ixONxi
+ \setbox\@tempboxa\hbox{#1. #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}}
+\def\fnum@figure{FIGURE \thefigure}
+%
+% TN+TT: ``TABLE 0.0'' 9/11 TR, c/lc. period, word # to table title:
+% 3 pt # below to 1/2 pt rule x table measuer, 3 pt # below rule to
+% TCH
+%
+\arrayrulewidth=.5pt
+\def\fnum@table{\ixONxi TABLE \thetable}
+\def\TableSubtitleRule{\noalign{\vskip 3pt}\hline\noalign{\vskip 3pt}}
+\def\TableFootnote#1{\gdef\TFN{#1}}
+
+\def\@@startpbox#1{\vtop\bgroup \hsize #1\@arrayparboxrestore
+\parindent=-1em\leftskip=1em}
+\newsavebox{\@stablebox}
+\@namedef{stable}#1#2{\begin{table}[ht]
+ \def\foo{#1}\def\TFN{}
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup
+ \begin{tabular}{#2}
+ \noalign{\vskip 3pt}
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstable}{\crcr\noalign{\vskip 6pt}\hline\end{tabular}\egroup
+$$\vbox{\hsize=\wd\@stablebox
+\caption{\foo}
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\end{table}}
+1549!Funky!Stuff!
+echo x - svsa.sty
+cat > svsa.sty << '1549!Funky!Stuff!'
+\typeout{Sub-style 'svsa' (Springer-Verlag Single-Authored). Released November 1, 1987}
+\let\@svsa=\par
+\input svma.sty
+1549!Funky!Stuff!
+echo x - manual.tex
+cat > manual.tex << '1549!Funky!Stuff!'
+\def\UNX{UN$\star$X}
+%\documentstyle[svma,draft]{report}
+\documentstyle[svma]{report}
+\begin{document}
+\tableofcontents
+\chapter{Springer-Verlag Document Styles for \LaTeX}
+\chapterauthors{Ed Sznyter\footnote{Distributed Systems Group,
+ Computer Science Department,
+ Stanford University, Stanford, CA 94305--2140}}
+\begin{abstract}
+This document describes the \LaTeX\ styles ``svma,'' Springer-Verlag's
+style package for multiauthored books,
+and ``svsa,'' Springer-Verlag's style package for single-authored books.
+These styles are variations of the standard ``report'' style, and
+only the differences are noted here.
+For a complete reference, see {\it \LaTeX: A Document Preparation System}
+by Leslie Lamport.
+
+A short example of a paper prepared with the ``svma'' style
+may be found at the end of this document.
+\end{abstract}
+
+\section{Starting the Document}
+\label{starting}
+
+\subsection{Multi-Authored Books}
+Each chapter in a multiauthored book may be written by different authors,
+who write and test their parts as self-contained manuscripts.
+The chapters are then submitted to the editor to be collected into the whole.
+
+An author's document should start out as follows.
+\begin{verbatim}
+\documentstyle[svma,draft]{report}
+\begin{document}
+\chapter{Title of your Chapter}
+\chapterauthors{Your Name\footnote{Your institution}\\
+Another Author's Name\footnote{Their institution}}
+
+\begin{abstract}
+The abstract...
+\end{abstract}
+\end{verbatim}
+
+and should end with
+\begin{verbatim}
+\end{document}
+\end{verbatim}
+
+All these are standard \LaTeX\ commands, except for \verb|\chapterauthors|.
+\verb|\chapterauthors|
+takes as an argument a list of authors, separated by the command \verb|\\|.
+Each author should have a footnote which specifies their institution.
+
+As a side-effect of this command,
+the chapter name and the names of the authors will be placed in the
+running heads automatically.
+
+\subsection{Single-Authored Books}
+A document that uses the ``svsa'' style should start as follows.
+\begin{verbatim}
+\documentstyle[svsa,draft]{report}
+\begin{document}
+\end{verbatim}
+and each chapter starts with
+\begin{verbatim}
+\chapter{Chapter Title}
+\end{verbatim}
+Naturally, \verb|\chapterauthors| and the abstract is not necessary
+for each chapter. In this style, the chapter name and the section name
+will be placed in the running heads.
+
+\section{Sectioning Commands}
+The following sectioning commands, as described in the \LaTeX\ book,
+are available in this style:
+\verb|\part|, \verb|\chapter|,
+\verb|\section|, \verb|\subsection|, \verb|\subsubsection|,
+\verb|\paragraph|, and \verb|\subparagraph|.
+\verb|\part| is only used when the separate papers are put together
+into one document.
+
+By default,
+\verb|\part|, \verb|\chapter|, \verb|\section|, and \verb|\subsection|
+are numbered and placed in the table of contents.
+The commands
+\begin{verbatim}
+\setcounter{secnumdepth}{2} % number section and subsections
+\setcounter{tocdepth}{2} % and put them in the table of contents
+\end{verbatim}
+found in the style file may be copied and changed by the editor if desired,
+but should not be changed by the individual authors.
+
+The important words in a section argument should be capitalized.
+
+\section{Tables}
+A special type of float, the \verb|stable|, has been added. For example,
+
+\begin{verbatim}
+\begin{stable}{HYN Common Stock}{rcrp{2in}}
+\multicolumn{1}{c}{Year}
+ & \multicolumn{1}{c}{Price}
+ & \multicolumn1c{Dividend}\\
+\TableSubtitleRule
+1971 & 41--54 & \$2.60\\
+2 & 41--54 & 2.70 & This paragraph is long enough to span
+ at least two lines.
+\TableFootnote{Prices are in dollars per share}
+\end{stable}
+\end{verbatim}
+will produce table \ref{shorttable} here or at the top of the next page.
+
+\begin{stable}{HYN Common Stock}{rcrp{2in}}
+\multicolumn{1}{c}{Year}
+ & \multicolumn{1}{c}{Price}
+ & \multicolumn1c{Dividend}\\
+\TableSubtitleRule
+1971 & 41--54 & \$2.60\\
+2 & 41--54 & 2.70 & This paragraph is long enough to span
+ at least two lines.
+\TableFootnote{Prices are in dollars per share}
+\label{shorttable}
+\end{stable}
+
+The first argument to \verb|stable| is the title of the table,
+the second is the normal preamble that would be specified for a table
+made with the \verb|tabular| environment.
+
+The body of the \verb|stable| is specified in the same manner as
+the body of \verb|tabular|. The command \verb|\TableSubtitleRule|
+will draw a horizontal rule below the column heads, with the proper
+vertical spacing. Note that you have to specify the centering of the
+column heads, since \TeX\ doesn't know they're different from normal
+column entries.
+
+\verb|\TableFootnote| takes one argument, the text to go in the footnote
+of the table. It may appear anywhere in the body of the \verb|stable|.
+
+\section{Acknowledgements}
+Acknowledgements go at the end of a chapter, just before the bibliography.
+\verb|\acknowledgements| is a sectioning command without any arguments,
+and should be followed by a paragraph of text.
+
+\section{The Bibliography}
+\label{bibl}
+
+Bibliographies are created with \verb|bibtex|.
+Generally, you will have a central bibliography database,
+which will have an entry for every paper you have ever referenced.
+
+In the text of the document, put the command
+\verb|\cite{CHERI83}| to reference the paper ``The Distributed V Kernel
+and its Performance for Diskless Workstations'' by D.R. Cheriton.
+Then, at the end of the document, but before the
+\verb|\end{document}|, put
+\begin{verbatim}
+\bibliographystyle{alpha}
+\bibliography{master} % name of your bibliography database
+\end{verbatim}
+
+Then, run your document through \LaTeX. It will complain
+\begin{verbatim}
+LaTeX Warning: Citation `CHERI83' on page 1 undefined.
+\end{verbatim}
+and
+\begin{verbatim}
+No file paper.bbl
+\end{verbatim}
+
+This will put some entries in the .aux file. Now run \verb|bibtex paper|,
+which will create the file paper.bbl, by extracting the proper
+references from your bibliographic database. \verb|bibtex| should not
+give any error messages.
+Then run \LaTeX\ again. Again, the warning
+\begin{verbatim}
+LaTeX Warning: Citation `CHERI83' on page 1 undefined.
+\end{verbatim}
+will appear. Run \LaTeX\ yet again, and there should be no warnings.
+
+This process must be repeated every time a new reference is added to
+your document, so you will probably want to wait until the paper is
+nearly finished before producing the bibliography.
+
+\subsection{The Bibliography Database}
+The bibliography entry for the preceding example would have been put
+into the file master.bib thusly:
+\begin{verbatim}
+@Inproceedings(CHERI83, key ="CHERI83",
+author="D.R.~Cheriton and W.~Zwaenepoel",
+title="The Distributed V Kernel and its Performance for Diskless Workstations",
+booktitle="Proceedings of the 9th Symposium on Operating System Principles",
+Organization="ACM",
+Year=1983)
+\end{verbatim}
+\subsection{What Bibtex Produces}
+
+In the preceding example, the file paper.bbl might contain
+
+\begin{verbatim}
+\begin{thebibliography}{CZ83}
+
+\bibitem[BL80]{lampson}
+Ed. B.W.~Lampson.
+\newblock {\it Distributed Systems: Architecture and Implementation}.
+\newblock Springer-Verlag, 1980.
+
+\bibitem[CZ83]{cheri83}
+D.R.~Cheriton and W.~Zwaenepoel.
+\newblock The distributed v kernel and its performance for diskless
+ workstations.
+\newblock In {\it Proceedings of the 9th Symposium on Operating System
+ Principles}, ACM, 1983.
+
+\end{thebibliography}
+\end{verbatim}
+
+If you don't have bibtex, this file could be produced by hand. However,
+bibtex should be part of the \LaTeX\ package.
+
+\section{Producing the Collected Works in the ``svma'' Style}
+
+The standard commands up to and including \verb|\begin{document}|,
+and after and including
+\verb|\end{document}| must be removed from each chapter.
+Then, a master file should be produced, with the commands
+\begin{verbatim}
+\documentstyle[svma]{report}
+\begin{document}
+\tableofcontents
+\end{verbatim}
+followed by an \verb|\include| command for each chapter.
+Front material may be in this master file, or a separate file that's included.
+\verb|part| commands, if desired, should be put in this file, between the
+\verb|include| commands.
+
+\acknowledgements
+Thanks to Gerhard Rossbach, Donna Moore, and Barbara Tompkins of
+Springer-Verlag for their patience with my endless questions.
+
+\subsection{Bibliography}
+In order to produce a bibliography for each chapter in a collected work,
+each chapter must be in a separate file, and be set up as in
+section \ref{bibl} (except the chapter doesn't end in \verb|\end{document}|).
+Run \LaTeX\ on the whole document, then bibtex on each chapter, then
+re-run \LaTeX\ on the whole document twice.
+
+A master bibliography for the entire work may be produced in the normal
+manner, by putting the appropriate commands in the master file and
+running bibtex on the master file. You can have both bibliographies
+for each chapter and for the entire work at the same time.
+
+\appendix
+\chapter{A Short Example}
+
+This example will serve as a framework from which to start.
+
+\begin{verbatim}
+\documentstyle[svma,draft]{report}
+\begin{document}
+\chapter{Springer-Verlag Multi-Author Style for \LaTeX}
+\chapterauthors{Ed Sznyter\footnote{Distributed Systems Group,
+ Computer Science Department,
+ Stanford University, Stanford, CA 94305--2140}}
+\begin{abstract}
+This document describes the style ``svma,'' Springer-Verlag's
+style package for multiauthored books that are typeset using
+\LaTeX.
+\end{abstract}
+
+\section{Starting the Document}
+Each chapter in a multiauthored book may be written by a
+different author, who write and test their parts as
+self-contained manuscripts.
+
+\subsection{The Bibliography Database}
+
+\acknowledgements
+Thanks go to the appropriate people.
+
+\appendix
+\chapter{A Short Example}
+
+\bibliographystyle{alpha}
+\bibliography{master} % name of your bibliography database
+
+\end{document}
+\end{verbatim}
+
+\chapter{Installing the Style Packages}
+Optimally, the files svma.sty and svsa.sty
+ should be placed in the same location
+as the rest of the style files; on \UNX, that might be\linebreak[4]
+/usr/local/lib/tex/macros/svma.sty.
+If the user doesn't have the privileges to install system software,
+the environment variable \verb|TEXINPUTS| may be set to look for
+style files wherever desired. For example, on \UNX, the csh command
+\begin{verbatim}
+setenv TEXINPUTS ".:$HOME/lib:/usr/local/lib/tex/macros"
+\end{verbatim}
+will cause \TeX\ to look in the current directory, the user's private
+library directory, and the default system directory. svma.sty will be
+found if placed in any of these locations. Equivalent commands are
+available on most other operating systems.
+
+Directly including the style file into your source, or using \verb|\input|
+or \verb|\include| will not work, because the style files contain
+special commands that are valid only when processed using
+\verb|documentstyle|.
+\end{document}
+1549!Funky!Stuff!
+
+
+
diff --git a/info/digests/texhax/txh/taj.txh b/info/digests/texhax/txh/taj.txh
new file mode 100644
index 0000000000..b8cdfd73ec
--- /dev/null
+++ b/info/digests/texhax/txh/taj.txh
@@ -0,0 +1,341 @@
+% new version of supertabular
+% theo jurriens, TAJ@HGRRUG5
+% supports now also tabular* and a kind of page-eject
+\def\@tablehead{\ }
+\def\tablehead#1{\gdef\@tablehead{#1}}
+\newcount\tablefractionperc
+\def\tablefraction#1{\global\tablefractionperc = #1}
+\tablefraction{100}
+\def\@tabletail{\ }
+\def\tabletail#1{\gdef\@tabletail{#1}}
+\newcount\numline %
+\newcount\maxline %
+\newcount\startmaxline
+%
+\def\calmaxline{
+\global\maxline=\textheight
+\global\startmaxline=\textheight
+\global\advance\maxline by -\pagetotal
+\global\divide\maxline by \baselineskip
+\global\multiply\maxline by 9
+\global\divide\maxline by 10
+\global\divide\startmaxline by \baselineskip
+\global\multiply\startmaxline by 9
+\global\divide\startmaxline by 10
+\global\multiply\maxline by\tablefractionperc
+\global\divide\maxline by 100
+\global\multiply\startmaxline by\tablefractionperc
+\global\divide\startmaxline by 100}
+%
+\newif\ifstar
+\global\starfalse
+\newdimen\tabularwidth
+\newenvironment{supertabular}[1]{ %
+\edef\tableformat{\string#1} %
+\numline=0 %
+\calmaxline
+\begin{tabular}{\tableformat}\@tablehead}{\@tabletail \end{tabular}}%
+%
+%
+\newenvironment{supertabular*}[2]{ %
+\edef\tableformat{\string#2} %
+\numline=0 %
+\tabularwidth=#1
+\calmaxline
+\global\startrue
+\begin{tabular*}{\tabularwidth}
+{\tableformat}\@tablehead}{\@tabletail \end{tabular*}}%
+%
+%
+\def\nextline{\global\advance\numline by 1 \\
+\ifnum\numline=\maxline
+% supertab-eject page
+ \@tabletail %
+ \ifstar
+ \end{tabular*}
+ \else
+ \end{tabular}%
+ \fi
+ \clearpage %
+ \global\maxline=\startmaxline
+ \ifstar
+ \begin{tabular*}{\tabularwidth}{\tableformat}
+ \else
+ \begin{tabular}{\tableformat}%
+ \fi
+ \@tablehead %
+ \global\numline=0 %
+\fi}%
+%
+\def\ejectline{\global\advance\numline by 1 \\
+% supertab-eject page
+ \@tabletail %
+ \ifstar
+ \end{tabular*}
+ \else
+ \end{tabular}%
+ \fi
+ \clearpage %
+ \global\maxline=\startmaxline
+ \ifstar
+ \begin{tabular*}{\tabularwidth}{\tableformat}
+ \else
+ \begin{tabular}{\tableformat}%
+ \fi
+ \@tablehead %
+ \global\numline=0 %
+}
+%
+%
+% cut here
+%
+%
+\documentstyle[supertab]{article}
+\begin{document}
+\tablehead{\hline
+Ster&Harvardnr&max&periode&\multicolumn{3}{l|}{Datum}\\
+\hline}
+\tabletail{\hline}
+%
+\begin{supertabular}{|llrrrrc|}
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\nextline
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\nextline
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\nextline
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\ejectline
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\nextline
+R Ari &021024 & 7.4&186.78&25&mei&1989\nextline
+W And &021143a& 6.7&395.93& 1&dec&1989\nextline
+R Cet &0220-00& 7.2&166.24&21&feb&1989\nextline
+R Tri &023133 & 5.4&266.48& 3&apr&1989\nextline
+T Ari &024217 & 7.5&316.6 &19&jun&1989\nextline
+Y Per &032043 & 8.1&252.61& 1&aug&1989\nextline
+R Per &032335 & 8.1&209.97& 7&dec&1989\nextline
+X Cam &043274 & 7.4&143.56&21&jan&1989\nextline
+X Cam &043274 & 7.4&143.56& 4&nov&1989\nextline
+U Ori &054920a& 4.8&368.3 & 3&dec&1989\nextline
+X Aur &060450 & 8.0&163.79& 1&jul&1989\nextline
+S Lyn &063558 & 8.5&296.34& 3&mei&1989\nextline
+X Gem &064030 & 7.5&264.16&23&sep&1989\nextline
+R Gem &070122a& 6.0&369.91&30&aug&1989\nextline
+S CMi &072708 & 6.6&332.94&23&dec&1989\nextline
+V Cnc &081617 & 7.5&272.13&25&jan&1989\nextline
+R Ari &021024 & 7.4&186.78&25&mei&1989\nextline
+W And &021143a& 6.7&395.93& 1&dec&1989\nextline
+R Cet &0220-00& 7.2&166.24&21&feb&1989\nextline
+R Tri &023133 & 5.4&266.48& 3&apr&1989\nextline
+T Ari &024217 & 7.5&316.6 &19&jun&1989\nextline
+Y Per &032043 & 8.1&252.61& 1&aug&1989\nextline
+R Per &032335 & 8.1&209.97& 7&dec&1989\nextline
+X Cam &043274 & 7.4&143.56&21&jan&1989\nextline
+X Cam &043274 & 7.4&143.56& 4&nov&1989\nextline
+U Ori &054920a& 4.8&368.3 & 3&dec&1989\nextline
+X Aur &060450 & 8.0&163.79& 1&jul&1989\nextline
+S Lyn &063558 & 8.5&296.34& 3&mei&1989\nextline
+X Gem &064030 & 7.5&264.16&23&sep&1989\nextline
+R Gem &070122a& 6.0&369.91&30&aug&1989\nextline
+S CMi &072708 & 6.6&332.94&23&dec&1989\nextline
+V Cnc &081617 & 7.5&272.13&25&jan&1989\nextline
+R Ari &021024 & 7.4&186.78&25&mei&1989\nextline
+W And &021143a& 6.7&395.93& 1&dec&1989\nextline
+R Cet &0220-00& 7.2&166.24&21&feb&1989\nextline
+R Tri &023133 & 5.4&266.48& 3&apr&1989\nextline
+T Ari &024217 & 7.5&316.6 &19&jun&1989\nextline
+Y Per &032043 & 8.1&252.61& 1&aug&1989\nextline
+R Per &032335 & 8.1&209.97& 7&dec&1989\nextline
+X Cam &043274 & 7.4&143.56&21&jan&1989\nextline
+X Cam &043274 & 7.4&143.56& 4&nov&1989\nextline
+U Ori &054920a& 4.8&368.3 & 3&dec&1989\nextline
+X Aur &060450 & 8.0&163.79& 1&jul&1989\nextline
+S Lyn &063558 & 8.5&296.34& 3&mei&1989\nextline
+X Gem &064030 & 7.5&264.16&23&sep&1989\nextline
+R Gem &070122a& 6.0&369.91&30&aug&1989\nextline
+S CMi &072708 & 6.6&332.94&23&dec&1989\nextline
+V Cnc &081617 & 7.5&272.13&25&jan&1989\nextline
+R LMi &093934 & 6.3&372.19& 5&jul&1989\nextline
+S LMi &094735 & 7.5&233.83& 8&apr&1989\nextline
+V Leo &095421 & 8.4&273.25& 4&apr&1989\nextline
+T CVn &122532 & 7.7&290.09& 6&mei&1989\nextline
+RS UMa &123459 & 8.3&258.97&20&jan&1989\nextline
+S UMa &123961 & 7.4&226.02&23&feb&1989\nextline
+R CVn &134440 & 6.5&328.53& 8&nov&1989\nextline
+Z Boo &140113 & 8.2&281.14& 4&nov&1989\nextline
+S Boo &141954 & 7.8&270.73& 2&mei&1989\nextline
+R Cam &142584 & 7.9&270.22&20&dec&1989\nextline
+R Boo &143227 & 6.9&223.40&10&dec&1989\nextline
+S UMi &153378a& 7.7&326.25&30&jan&1989\nextline
+R Ser &154615 & 5.2&356.41&11&mei&1989\nextline
+R Her &160118 & 8.2&318.14&28&mrt&1989\nextline
+U Ser &160210 & 7.8&237.85&23&sep&1989\nextline
+U Her &162119 & 6.4&406.1 &16&nov&1989\nextline
+W Her &163137 & 7.6&280.03&30&okt&1989\nextline
+SY Her &165722 & 8.0&116.91& 3&mrt&1989\nextline
+SY Her &165722 & 8.0&116.91&23&okt&1989\nextline
+RS Her &171723 & 7.0&219.70&18&okt&1989\nextline
+RY Her &175519 & 8.3&221.47& 6&dec&1989\nextline
+T Her &180531 & 6.8&164.98& 8&sep&1989\nextline
+W Lyr &181136 & 7.3&197.88&28&nov&1989\nextline
+R Aql &190108 & 5.5&284.2 &27&jun&1989\nextline
+RT Cyg &194048 & 6.0&190.28&15&apr&1989\nextline
+TU Cyg &194348 & 8.7&219.44& 2&apr&1989\nextline
+X Aql &194604 & 8.3&347.04&10&aug&1989\nextline
+Z Cyg &195849 & 7.1&263.69& 4&jan&1989\nextline
+Z Del &202817 & 8.3&304.48& 1&jan&1989\nextline
+T Del &204016 & 8.5&332.02&14&apr&1989\nextline
+R Vul &205923a& 7.4&136.36&22&apr&1989\nextline
+T Cep &210868 & 5.2&388.14&21&jun&1989\nextline
+S Lac &222439 & 7.6&241.50&11&mei&1989\nextline
+RW Peg &225914 & 8.8&208.43&23&aug&1989\nextline
+V Cas &230759 & 6.9&228.83&18&feb&1989\nextline
+W Peg &231425 & 7.9&344.92&27&apr&1989\nextline
+S Peg &231508 & 7.1&319.22& 4&dec&1989\nextline
+Z Peg &235525 & 7.7&325.47&23&jun&1989\\
+\end{supertabular}
+\clearpage
+\begin{supertabular*}{15cm}{|llrr@{\extracolsep{\fill}}rrc|}
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\nextline
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\nextline
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\nextline
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\ejectline
+SS Cas &000451 & 8.8&140.57&30&jan&1989\nextline
+SS Cas &000451 & 8.8&140.57& 7&nov&1989\nextline
+T And &001726 & 7.7&280.76&10&aug&1989\nextline
+R And &001838 & 5.6&409.33&18&jun&1989\nextline
+RV Cas &004746a& 7.3&331.68& 8&mei&1989\nextline
+Y And &013338 & 8.2&220.53& 5&jul&1989\nextline
+R Ari &021024 & 7.4&186.78&25&mei&1989\nextline
+W And &021143a& 6.7&395.93& 1&dec&1989\nextline
+R Cet &0220-00& 7.2&166.24&21&feb&1989\nextline
+R Tri &023133 & 5.4&266.48& 3&apr&1989\nextline
+T Ari &024217 & 7.5&316.6 &19&jun&1989\nextline
+Y Per &032043 & 8.1&252.61& 1&aug&1989\nextline
+R Per &032335 & 8.1&209.97& 7&dec&1989\nextline
+X Cam &043274 & 7.4&143.56&21&jan&1989\nextline
+X Cam &043274 & 7.4&143.56& 4&nov&1989\nextline
+U Ori &054920a& 4.8&368.3 & 3&dec&1989\nextline
+X Aur &060450 & 8.0&163.79& 1&jul&1989\nextline
+S Lyn &063558 & 8.5&296.34& 3&mei&1989\nextline
+X Gem &064030 & 7.5&264.16&23&sep&1989\nextline
+R Gem &070122a& 6.0&369.91&30&aug&1989\nextline
+S CMi &072708 & 6.6&332.94&23&dec&1989\nextline
+V Cnc &081617 & 7.5&272.13&25&jan&1989\nextline
+R Ari &021024 & 7.4&186.78&25&mei&1989\nextline
+W And &021143a& 6.7&395.93& 1&dec&1989\nextline
+R Cet &0220-00& 7.2&166.24&21&feb&1989\nextline
+R Tri &023133 & 5.4&266.48& 3&apr&1989\nextline
+T Ari &024217 & 7.5&316.6 &19&jun&1989\nextline
+Y Per &032043 & 8.1&252.61& 1&aug&1989\nextline
+R Per &032335 & 8.1&209.97& 7&dec&1989\nextline
+X Cam &043274 & 7.4&143.56&21&jan&1989\nextline
+X Cam &043274 & 7.4&143.56& 4&nov&1989\nextline
+U Ori &054920a& 4.8&368.3 & 3&dec&1989\nextline
+X Aur &060450 & 8.0&163.79& 1&jul&1989\nextline
+S Lyn &063558 & 8.5&296.34& 3&mei&1989\nextline
+X Gem &064030 & 7.5&264.16&23&sep&1989\nextline
+R Gem &070122a& 6.0&369.91&30&aug&1989\nextline
+S CMi &072708 & 6.6&332.94&23&dec&1989\nextline
+V Cnc &081617 & 7.5&272.13&25&jan&1989\nextline
+R Ari &021024 & 7.4&186.78&25&mei&1989\nextline
+W And &021143a& 6.7&395.93& 1&dec&1989\nextline
+R Cet &0220-00& 7.2&166.24&21&feb&1989\nextline
+R Tri &023133 & 5.4&266.48& 3&apr&1989\nextline
+T Ari &024217 & 7.5&316.6 &19&jun&1989\nextline
+Y Per &032043 & 8.1&252.61& 1&aug&1989\nextline
+R Per &032335 & 8.1&209.97& 7&dec&1989\nextline
+X Cam &043274 & 7.4&143.56&21&jan&1989\nextline
+X Cam &043274 & 7.4&143.56& 4&nov&1989\nextline
+U Ori &054920a& 4.8&368.3 & 3&dec&1989\nextline
+X Aur &060450 & 8.0&163.79& 1&jul&1989\nextline
+S Lyn &063558 & 8.5&296.34& 3&mei&1989\nextline
+X Gem &064030 & 7.5&264.16&23&sep&1989\nextline
+R Gem &070122a& 6.0&369.91&30&aug&1989\nextline
+S CMi &072708 & 6.6&332.94&23&dec&1989\nextline
+V Cnc &081617 & 7.5&272.13&25&jan&1989\nextline
+R LMi &093934 & 6.3&372.19& 5&jul&1989\nextline
+S LMi &094735 & 7.5&233.83& 8&apr&1989\nextline
+V Leo &095421 & 8.4&273.25& 4&apr&1989\nextline
+T CVn &122532 & 7.7&290.09& 6&mei&1989\nextline
+RS UMa &123459 & 8.3&258.97&20&jan&1989\nextline
+S UMa &123961 & 7.4&226.02&23&feb&1989\nextline
+R CVn &134440 & 6.5&328.53& 8&nov&1989\nextline
+Z Boo &140113 & 8.2&281.14& 4&nov&1989\nextline
+S Boo &141954 & 7.8&270.73& 2&mei&1989\nextline
+R Cam &142584 & 7.9&270.22&20&dec&1989\nextline
+R Boo &143227 & 6.9&223.40&10&dec&1989\nextline
+S UMi &153378a& 7.7&326.25&30&jan&1989\nextline
+R Ser &154615 & 5.2&356.41&11&mei&1989\nextline
+R Her &160118 & 8.2&318.14&28&mrt&1989\nextline
+U Ser &160210 & 7.8&237.85&23&sep&1989\nextline
+U Her &162119 & 6.4&406.1 &16&nov&1989\nextline
+W Her &163137 & 7.6&280.03&30&okt&1989\nextline
+SY Her &165722 & 8.0&116.91& 3&mrt&1989\nextline
+SY Her &165722 & 8.0&116.91&23&okt&1989\nextline
+RS Her &171723 & 7.0&219.70&18&okt&1989\nextline
+RY Her &175519 & 8.3&221.47& 6&dec&1989\nextline
+T Her &180531 & 6.8&164.98& 8&sep&1989\nextline
+W Lyr &181136 & 7.3&197.88&28&nov&1989\nextline
+R Aql &190108 & 5.5&284.2 &27&jun&1989\nextline
+RT Cyg &194048 & 6.0&190.28&15&apr&1989\nextline
+TU Cyg &194348 & 8.7&219.44& 2&apr&1989\nextline
+X Aql &194604 & 8.3&347.04&10&aug&1989\nextline
+Z Cyg &195849 & 7.1&263.69& 4&jan&1989\nextline
+Z Del &202817 & 8.3&304.48& 1&jan&1989\nextline
+T Del &204016 & 8.5&332.02&14&apr&1989\nextline
+R Vul &205923a& 7.4&136.36&22&apr&1989\nextline
+T Cep &210868 & 5.2&388.14&21&jun&1989\nextline
+S Lac &222439 & 7.6&241.50&11&mei&1989\nextline
+RW Peg &225914 & 8.8&208.43&23&aug&1989\nextline
+V Cas &230759 & 6.9&228.83&18&feb&1989\nextline
+W Peg &231425 & 7.9&344.92&27&apr&1989\nextline
+S Peg &231508 & 7.1&319.22& 4&dec&1989\nextline
+Z Peg &235525 & 7.7&325.47&23&jun&1989\\
+\end{supertabular*}
+\end{document}
+%
+% end of file
+
+
diff --git a/info/digests/texhax/txh/takagi.txh b/info/digests/texhax/txh/takagi.txh
new file mode 100644
index 0000000000..89e79b18e9
--- /dev/null
+++ b/info/digests/texhax/txh/takagi.txh
@@ -0,0 +1,388 @@
+10-Mar-88 00:50:24-PST,10025;000000000001
+Return-Path: <@RELAY.CS.NET:takagi@icot.jp>
+Date: Thu, 10 Mar 88 13:33:10 JST
+From: Takagi Shigeyuki <takagi%icot.jp@RELAY.CS.NET>
+Subject: Symmetry undump
+
+Dear Dr. MacKay and TeXhax readers:
+
+Dr. Chikayama modified the Balance version of undump for Symmetry.
+This is now running on our Symmetry and used for installing TeX.
+
+I expect that the moderator of texhax will split the actual shar file
+and ship only this message to texhax.
+
+The actual shar file will be included in the UNIX TeX distribution from
+U. of Washington and also kept in the public directory at SCORE.
+
+The same thing was done for Balance undump before.
+
+S.Takagi, Japanese TeXhax re-distribution
+takagi%icot.jp@relay.cs.net
+======================================================================
+#!/bin/sh
+# to extract, remove the header and type "sh filename"
+if `test ! -s ./Makefile.SYMMETRY`
+then
+echo "writing ./Makefile.SYMMETRY"
+cat > ./Makefile.SYMMETRY << '\Rogue\Monster\'
+BINDIR=/usr/local/bin
+CFLAGS = -O
+
+undump: & undump.o scanargs.o
+ cc -o undump undump.o scanargs.o
+
+clean:
+ rm -f *.o
+
+install: undump
+ cp undump $(BINDIR)
+\Rogue\Monster\
+else
+ echo "will not over write ./Makefile.SYMMETRY"
+fi
+chmod 444 ./Makefile.SYMMETRY
+if [ `wc -c ./Makefile.SYMMETRY | awk '{printf $1}'` -ne 156 ]
+then
+echo `wc -c ./Makefile.SYMMETRY | awk '{print "Got " $1 ", Expected " 156}'`
+fi
+if `test ! -s ./Setup.SYMMETRY`
+then
+echo "writing ./Setup.SYMMETRY"
+cat > ./Setup.SYMMETRY << '\Rogue\Monster\'
+# /bin/sh
+# setup the ./undump area for Sequent Symmetry/DYNIX
+cp Makefile.SYMMETRY Makefile
+cp undump.SYMMETRY.c undump.c
+\Rogue\Monster\
+else
+ echo "will not over write ./Setup.SYMMETRY"
+fi
+chmod 555 ./Setup.SYMMETRY
+if [ `wc -c ./Setup.SYMMETRY | awk '{printf $1}'` -ne 123 ]
+then
+echo `wc -c ./Setup.SYMMETRY | awk '{print "Got " $1 ", Expected " 123}'`
+fi
+if `test ! -s ./undump.SYMMETRY.c`
+then
+echo "writing ./undump.SYMMETRY.c"
+cat > ./undump.SYMMETRY.c << '\Rogue\Monster\'
+/*
+ * This program is hacked for Sequent Balance.
+ * The original is from 4.2undump.c of UNIX TeX distribution.
+ * This is tested on Serquent Balance 21000, DYNIX 2.1.1
+ * with UNIX TeX 2.1. Modification may be necessary for newer DYNIX.
+ * Takashi Chikayama, ICOT Research Center.
+ */
+
+/*
+ * This program was advertised on unix-wizards. I have had such a large
+ * response I'm sending it out to the world.
+ *
+ * Here is the source. It works fine under 4.1bsd, I see no fundamental
+ * reason why it shouldn't work on an 11. (Except possibly small format
+ * changes in exec header or user structure.) No documentation yet.
+ * Usage is
+ * undump new-a.out-file [old-a.out-file] [core-file]
+ * where old-a.out-file and core-file default to "a.out" and "core",
+ * respectively. Probably should have an option to not require
+ * old-a.out-file if the core came from a 407 file.
+ *
+ * It doesn't preserve open files, and the program is re-entered at main
+ * when you run it. It's used locally to dump a lisp and restart it.
+ *
+ * It requires a local subroutine called scanargs, somewhat similar to
+ * getopt (I think). You should be able to easily get around this, though.
+ * =Spencer
+ */
+
+
+/*
+ * undump.c - Convert a core file to an a.out.
+ *
+ * Author: Spencer W. Thomas
+ * Computer Science Dept.
+ * University of Utah
+ * Date: Wed Feb 17 1982
+ * Copyright (c) 1982 Spencer W. Thomas
+ *
+ * Modification for Balance/DYNIX 2.1.1:
+ * Takashi Chikayama
+ * ICOT Research Center
+ * Date: Wed Nov 25 1987
+ * Copyright (c) 1987 Takashi Chikayama
+ * See copy_text for details.
+ *
+ * Usage:
+ * undump new-a.out [a.out] [core]
+ */
+
+#include <stdio.h>
+#include <sys/param.h>
+#include <sys/dir.h>
+#include <sys/user.h>
+#include <sys/stat.h>
+#include <a.out.h>
+
+#define PSIZE 10240
+
+struct user u;
+struct exec hdr, ohdr;
+
+main(argc, argv)
+char **argv;
+{
+ char *new_name, *a_out_name = "a.out", *core_name = "core";
+ FILE *new, *a_out, *core;
+
+ if (scanargs(argc, argv, "undump new-a.out!s a.out%s core%s",
+ &new_name, &a_out_name, &core_name)
+ != 1)
+ exit(1);
+
+ if ((a_out = fopen(a_out_name, "r")) == NULL)
+ {
+ perror(a_out_name);
+ exit(1);
+ }
+ if ((core = fopen(core_name, "r")) == NULL)
+ {
+ perror(core_name);
+ exit(1);
+ }
+ if ((new = fopen(new_name, "w")) == NULL)
+ {
+ perror(new_name);
+ exit(1);
+ }
+
+ read_u(core);
+ make_hdr(new, a_out);
+ copy_text(new, a_out);
+ copy_data(new, core);
+ copy_sym(new, a_out);
+ fclose(new);
+ fclose(core);
+ fclose(a_out);
+ mark_x(new_name);
+}
+
+/*
+ * read the u structure from the core file.
+ */
+read_u(core)
+FILE *core;
+{
+ if ( fread(&u, sizeof u, 1, core) != 1 )
+ {
+ perror("Couldn't read user structure from core file");
+ exit(1);
+ }
+}
+
+/*
+ * Make the header in the new a.out from the header in the old one
+ * modified by the new data size.
+ */
+make_hdr(new, a_out)
+FILE *new, *a_out;
+{
+ if (fread(&hdr, sizeof hdr, 1, a_out) != 1)
+ {
+ perror("Couldn't read header from a.out file");
+ exit(1);
+ }
+ ohdr = hdr;
+ if N_BADMAG(hdr)
+ {
+ fprintf(stderr, "a.out file doesn't have legal magic number\n");
+ exit(1);
+ }
+
+/*** Checks are omitted for now. (T.C.)
+ if (hdr.a_magic != u.u_exdata.ux_mag ||
+ hdr.a_text != u.u_exdata.ux_tsize ||
+ hdr.a_data != u.u_exdata.ux_dsize ||
+ hdr.a_entry != u.u_exdata.ux_entloc)
+ {
+ fprintf(stderr, "Core file didn't come from this a.out\n");
+ exit(1);
+ }
+***/
+
+ printf("Data segment size was %u", hdr.a_data);
+/*
+ * Modification by T.C.:
+ * u_dsize is text+data size (rather than data size) on Symmetry.
+ */
+ hdr.a_data = ctob(u.u_dsize-u.u_tsize);
+ hdr.a_bss = 0; /* all data is inited now! */
+ printf(" now is %u\n", hdr.a_data);
+ if (fwrite(&hdr, sizeof hdr, 1, new) != 1)
+ {
+ perror("Couldn't write header to new a.out file");
+ exit(1);
+ }
+}
+
+/*
+ * Copy the text from the a.out to the new a.out
+ */
+copy_text(new, a_out)
+FILE *new, *a_out;
+{
+ char page[PSIZE];
+/*
+ * Modification by T.C.:
+ * Text size is actually smaller in files in case of DYNIX.
+ * As a_text includes exec structure, we avoid overwriting it here.
+ */
+ int txtcnt = hdr.a_text - N_ADDRADJ(hdr) - sizeof(struct exec);
+ fseek(new, sizeof(struct exec), 0);
+ fseek(a_out, sizeof(struct exec), 0);
+ if (hdr.a_magic == OMAGIC)
+ {
+ printf("a.out file is not shared text, getting text from core file\n");
+ fseek(a_out, hdr.a_text, 1); /* skip over text */
+ return;
+ }
+ while (txtcnt >= PSIZE)
+ {
+ if (fread(page, PSIZE, 1, a_out) != 1)
+ {
+ perror("Read failure on a.out text");
+ exit(1);
+ }
+ if (fwrite(page, PSIZE, 1, new) != 1)
+ {
+ perror("Write failure in text segment");
+ exit(1);
+ }
+ txtcnt -= PSIZE;
+ }
+ if (txtcnt)
+ {
+ if (fread(page, txtcnt, 1, a_out) != 1)
+ {
+ perror("Read failure on a.out text");
+ exit(1);
+ }
+ if (fwrite(page, txtcnt, 1, new) != 1)
+ {
+ perror("Write failure in text segment");
+ exit(1);
+ }
+ }
+}
+
+/*
+ * copy the data from the core file to the new a.out
+ */
+copy_data(new, core)
+FILE *new, *core;
+{
+ char page[PSIZE];
+ int datacnt = ctob(u.u_dsize);
+
+/*
+ * Modification by T.C.:
+ * u_dsize is text+data size (rather than data size) on Symmetry.
+ */
+ if (hdr.a_magic != OMAGIC)
+ datacnt -= ctob(u.u_tsize);
+ fseek(core, ctob(UPAGES), 0);
+ while (datacnt >= PSIZE)
+ {
+ if (fread(page, PSIZE, 1, core) != 1)
+ {
+ perror("Read failure on core data");
+ exit(1);
+ }
+ if (fwrite(page, PSIZE, 1, new) != 1)
+ {
+ perror("Write failure in data segment");
+ exit(1);
+ }
+ datacnt -= PSIZE;
+ }
+ if (datacnt)
+ {
+ if (fread(page, datacnt, 1, core) != 1)
+ {
+ perror("Read failure on core data");
+ exit(1);
+ }
+ if (fwrite(page, datacnt, 1, new) != 1)
+ {
+ perror("Write failure in data segment");
+ exit(1);
+ }
+ }
+}
+
+/*
+ * Copy the relocation information and symbol table from the a.out to the new
+ */
+copy_sym(new, a_out)
+FILE *new, *a_out;
+{
+ char page[PSIZE];
+ int n;
+
+/*
+ * Modification by T.C.:
+ * Use macro N_SYMOFF to compute symbol table offset.
+ */
+ fseek(a_out, N_SYMOFF(ohdr), 0); /* find symbol table */
+ while ((n = fread(page, 1, PSIZE, a_out)) > 0)
+ {
+ if (fwrite(page, 1, n, new) != n)
+ {
+ perror("Error writing symbol table to new a.out");
+ fprintf(stderr, "new a.out should be ok otherwise\n");
+ return;
+ }
+ }
+ if (n < 0)
+ {
+ perror("Error reading symbol table from a.out");
+ fprintf(stderr, "new a.out should be ok otherwise\n");
+ }
+}
+
+/*
+ * After succesfully building the new a.out, mark it executable
+ */
+mark_x(name)
+char *name;
+{
+ struct stat sbuf;
+ int um;
+
+ um = umask(777);
+ umask(um);
+ if (stat(name, &sbuf) == -1)
+ {
+ perror ("Can't stat new a.out");
+ fprintf(stderr, "Setting protection to %o\n", 0777 & ~um);
+ sbuf.st_mode = 0777;
+ }
+ sbuf.st_mode |= 0111 & ~um;
+ if (chmod(name, sbuf.st_mode) == -1)
+ perror("Couldn't change mode of new a.out to executable");
+
+}
+
+\Rogue\Monster\
+else
+ echo "will not over write ./undump.SYMMETRY.c"
+fi
+chmod 444 ./undump.SYMMETRY.c
+if [ `wc -c ./undump.SYMMETRY.c | awk '{printf $1}'` -ne 6973 ]
+then
+echo `wc -c ./undump.SYMMETRY.c | awk '{print "Got " $1 ", Expected " 6973}'`
+fi
+echo "Finished archive 1 of 1"
+exit
+
+-------
diff --git a/info/digests/texhax/txh/vulis.txh b/info/digests/texhax/txh/vulis.txh
new file mode 100644
index 0000000000..e35bde570e
--- /dev/null
+++ b/info/digests/texhax/txh/vulis.txh
@@ -0,0 +1,267 @@
+10-Nov-87 14:05:55-PST,10055;000000000000
+Return-Path: <CLDLV%NASAGISS.BITNET@forsythe.stanford.edu>
+Date: Tue, 10 Nov 87 15:46:49 EDT
+From: Dimitri Vulis <CLDLV%NASAGISS.BITNET@forsythe.stanford.edu>
+Subject: Foo (bar codes)
+
+Dear Malcolm: I believe that the following file would of general
+interest, but I think it's too long for the digest:
+
+% I was amazed to find out that business people pay enormous money for the
+% ability to produce bar codes. This ought to be TRIVIAL with \TeX.
+% So, I got hold of a public domain BASIC program that supposedly does that and
+% lifted the codes and put them into METAFONT (it was EASY). Caveat(s): I have
+% never tested these codes with an OCR. The BASIC program said it used `3 of 9'
+% encoding. I presume it's not the same as UPC. The sizes may be off---I
+% took them from the BASIC program that used HP LJ's 100dpi graphics mode.
+% Disclaimer: I haven't tested these codes. Use them at your own risk.
+% Remarks:
+% 1) White space is a displayable character.
+% 2) There are 9 significant strips, bwbwbwbwb; 3 of them are wide.
+% 3) The white_naro; at the end of each code is the inter-code spacing.
+% Credits: the original BASIC program was written by `Bill Wood Mil., WI' and
+% later re-written by `Bill Baines, Enfield, CT.'. METAFONT version is by
+% `Dimitri Vulis CLDLV@NASAGISS.BITNET'
+mode_setup;
+font_identifier "DVBar"; font_size .35in#;
+naro#:=.01in#; % narrow strip width
+wide#:=3naro#; % wide strip width
+wdth#:=3wide#+7naro#; % common width of all codes
+hght#:=.35in#; % common height of all codes
+define_pixels(naro,wide,wdth,hght);
+def white_naro=
+ wid:=wid+naro;
+enddef;
+def black_naro=
+ filldraw (wid,0)--(wid,hght)--(wid+naro,hght)--(wid+naro,0)--cycle;
+ wid:=wid+naro;
+enddef;
+def white_wide=
+ wid:=wid+wide;
+enddef;
+def black_wide=
+ filldraw (wid,0)--(wid,hght)--(wid+wide,hght)--(wid+wide,0)--cycle;
+ wid:=wid+wide;
+enddef;
+beginchar("1",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_naro; white_wide; black_naro;
+white_naro; black_naro; white_naro; black_wide; white_naro;
+endchar;
+beginchar("2",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_wide; white_wide; black_naro;
+white_naro; black_naro; white_naro; black_wide; white_naro;
+endchar;
+beginchar("3",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_wide; white_wide; black_naro;
+white_naro; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("4",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_naro; white_wide; black_wide;
+white_naro; black_naro; white_naro; black_wide; white_naro;
+endchar;
+beginchar("5",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_naro; white_wide; black_wide;
+white_naro; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("6",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_wide; white_wide; black_wide;
+white_naro; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("7",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_naro; white_wide; black_naro;
+white_naro; black_wide; white_naro; black_wide; white_naro;
+endchar;
+beginchar("8",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_naro; white_wide; black_naro;
+white_naro; black_wide; white_naro; black_naro; white_naro;
+endchar;
+beginchar("9",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_wide; white_wide; black_naro;
+white_naro; black_wide; white_naro; black_naro; white_naro;
+endchar;
+beginchar("0",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_naro; white_wide; black_wide;
+white_naro; black_wide; white_naro; black_naro; white_naro;
+endchar;
+beginchar("A",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_naro; white_naro; black_naro;
+white_wide; black_naro; white_naro; black_wide; white_naro;
+endchar;
+beginchar("B",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_wide; white_naro; black_naro;
+white_wide; black_naro; white_naro; black_wide; white_naro;
+endchar;
+beginchar("C",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_wide; white_naro; black_naro;
+white_wide; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("D",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_naro; white_naro; black_wide;
+white_wide; black_naro; white_naro; black_wide; white_naro;
+endchar;
+beginchar("E",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_naro; white_naro; black_wide;
+white_wide; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("F",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_wide; white_naro; black_wide;
+white_wide; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("G",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_naro; white_naro; black_naro;
+white_wide; black_wide; white_naro; black_wide; white_naro;
+endchar;
+beginchar("H",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_naro; white_naro; black_naro;
+white_wide; black_wide; white_naro; black_naro; white_naro;
+endchar;
+beginchar("I",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_wide; white_naro; black_naro;
+white_wide; black_wide; white_naro; black_naro; white_naro;
+endchar;
+beginchar("J",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_naro; white_naro; black_wide;
+white_wide; black_wide; white_naro; black_naro; white_naro;
+endchar;
+beginchar("K",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_naro; white_naro; black_naro;
+white_naro; black_naro; white_wide; black_wide; white_naro;
+endchar;
+beginchar("L",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_wide; white_naro; black_naro;
+white_naro; black_naro; white_wide; black_wide; white_naro;
+endchar;
+beginchar("M",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_wide; white_naro; black_naro;
+white_naro; black_naro; white_wide; black_naro; white_naro;
+endchar;
+beginchar("N",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_naro; white_naro; black_wide;
+white_naro; black_naro; white_wide; black_wide; white_naro;
+endchar;
+beginchar("O",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_naro; white_naro; black_wide;
+white_naro; black_naro; white_wide; black_naro; white_naro;
+endchar;
+beginchar("P",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_wide; white_naro; black_wide;
+white_naro; black_naro; white_wide; black_naro; white_naro;
+endchar;
+beginchar("Q",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_naro; white_naro; black_naro;
+white_naro; black_wide; white_wide; black_wide; white_naro;
+endchar;
+beginchar("R",wdth#,hght#,0);
+wid:=0;
+black_wide; white_naro; black_naro; white_naro; black_naro;
+white_naro; black_wide; white_wide; black_naro; white_naro;
+endchar;
+beginchar("S",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_wide; white_naro; black_naro;
+white_naro; black_wide; white_wide; black_naro; white_naro;
+endchar;
+beginchar("T",wdth#,hght#,0);
+wid:=0;
+black_naro; white_naro; black_naro; white_naro; black_wide;
+white_naro; black_wide; white_wide; black_naro; white_naro;
+endchar;
+beginchar("U",wdth#,hght#,0);
+wid:=0;
+black_wide; white_wide; black_naro; white_naro; black_naro;
+white_naro; black_naro; white_naro; black_wide; white_naro;
+endchar;
+beginchar("V",wdth#,hght#,0);
+wid:=0;
+black_naro; white_wide; black_wide; white_naro; black_naro;
+white_naro; black_naro; white_naro; black_wide; white_naro;
+endchar;
+beginchar("W",wdth#,hght#,0);
+wid:=0;
+black_wide; white_wide; black_wide; white_naro; black_naro;
+white_naro; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("X",wdth#,hght#,0);
+wid:=0;
+black_naro; white_wide; black_naro; white_naro; black_wide;
+white_naro; black_naro; white_naro; black_wide; white_naro;
+endchar;
+beginchar("Y",wdth#,hght#,0);
+wid:=0;
+black_wide; white_wide; black_naro; white_naro; black_wide;
+white_naro; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("Z",wdth#,hght#,0);
+wid:=0;
+black_naro; white_wide; black_wide; white_naro; black_wide;
+white_naro; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("-",wdth#,hght#,0); % minus
+wid:=0;
+black_naro; white_wide; black_naro; white_naro; black_naro;
+white_naro; black_wide; white_naro; black_wide; white_naro;
+endchar;
+beginchar(".",wdth#,hght#,0); %period
+wid:=0;
+black_wide; white_wide; black_naro; white_naro; black_naro;
+white_naro; black_wide; white_naro; black_naro; white_naro;
+endchar;
+beginchar(" ",wdth#,hght#,0); %white space
+wid:=0;
+black_naro; white_wide; black_wide; white_naro; black_naro;
+white_naro; black_wide; white_naro; black_naro; white_naro;
+endchar;
+beginchar("*",wdth#,hght#,0); %ascii asterisk
+wid:=0;
+black_naro; white_wide; black_naro; white_naro; black_wide;
+white_naro; black_wide; white_naro; black_naro; white_naro;
+endchar;
+beginchar("$",wdth#,hght#,0); %dollar sign
+wid:=0;
+black_naro; white_wide; black_naro; white_wide; black_naro;
+white_wide; black_naro; white_naro; black_naro; white_naro;
+endchar;
+beginchar("/",wdth#,hght#,0); %forward slash
+wid:=0;
+black_naro; white_wide; black_naro; white_wide; black_naro;
+white_naro; black_naro; white_wide; black_naro; white_naro;
+endchar;
+beginchar("+",wdth#,hght#,0); %plus
+wid:=0;
+black_naro; white_wide; black_naro; white_naro; black_naro;
+white_wide; black_naro; white_wide; black_naro; white_naro;
+endchar;
+beginchar("%",wdth#,hght#,0); %percent sign
+wid:=0;
+black_naro; white_naro; black_naro; white_wide; black_naro;
+white_wide; black_naro; white_wide; black_naro; white_naro;
+endchar;
+end; %all done
+-------
diff --git a/info/digests/texhax/txh/wolczko.txh b/info/digests/texhax/txh/wolczko.txh
new file mode 100644
index 0000000000..8a0ee65c0d
--- /dev/null
+++ b/info/digests/texhax/txh/wolczko.txh
@@ -0,0 +1,261 @@
+% WOLCZKO.TXH; reference in TeXhax.8728
+
+Date: Wed, 15 Apr 87 13:00:36 BST
+From: Mario Wolczko <miw%unix.computer-science.manchester.ac.uk@Cs.Ucl.AC.UK>
+Subject: Another feature for dvi2ps
+
+Following Jean-Francois Lamy's message clarifying which versions of dvi2ps
+can do what, here is yet another feature. Strictly speaking, I suppose it
+should be posted to the Unix-TeX mailing list, but that seems to have died
+a sudden death. It was written by Ifor Williams, a PhD student here. The
+differences listed below can be applied directly to the "2.10gf" version of
+dvi2ps (last modified by Rick Furuta, 8th Aug 1986).
+
+The modifications add a "-x n" option to dvi2ps, enabling the printing of
+n TeX pages on a PostScript page. This is great at saving paper; the use
+of -x 2 is recommended for all drafts, and even -x 4 works fine with 12pt
+text. Obviously, only powers of 2 are sensible values for n.
+
+Other things to note:
+1. The sense of the -r switch is reversed in the presence of -x; pages now
+ come out with pages 1..n at the bottom of the paper tray.
+2. Specials don't seem to scale along with the rest of the text (this is a
+ bug).
+3. All dimensions relate to the A4 page size. This has the nice property
+ that the length of the long edge is sqrt(2) times the length of the
+ short edge.
+4. Certain magic numbers appear within the PostScript prolog; these may
+ have to be tweaked at your installation. Comments indicate where this
+ should take place.
+
+Incidentally, does anyone know if it's possible to set a LaserWriter up to
+print on a full A4 page (including the bottom 1/2 inch)? I tried messing
+about with the definition of PostScript "letter" but got nowhere.
+
+Mario Wolczko
+------------------------------------------------------------------------
+Dept. of Computer Science ARPA: miw%uk.ac.man.cs.ux@cs.ucl.ac.uk
+The University USENET: mcvax!ukc!man.cs.ux!miw
+Manchester M13 9PL JANET: miw@uk.ac.man.cs.ux
+U.K. 061-273 7121 x 5699
+------------------------------------------------------------------------
+
+
+*** dvi2ps-gf/dvi2ps.c Wed Oct 15 16:20:18 1986
+--- dvi2ps-gf-n/dvi2ps.c Thu Feb 5 09:37:53 1987
+***************
+*** 350,355 ****
+--- 350,356 ----
+ int vv = 0; /* current v on device */
+ int mag; /* magnification specified in preamble */
+ int ncopies = 1; /* number of copies to print */
++ int pages_per_page = 1; /* number of TeX pages per LaserWriter page*/
+ int ndone = 0; /* number of pages converted */
+ int nif = 0; /* number of files to include */
+ int nopen; /* number of open PXL files */
+***************
+*** 453,459 ****
+ for( i=0; i<nif; i++ ) /* copy all included files */
+ CopyFile( Ifile[i] );
+
+! EMIT(outfp, "TeXDict begin @start\n");
+ EMIT(outfp, "%%%%Title: %s\n", filename);
+ EMIT(outfp, "%%%%Creator: %s\n", G_progname);
+ EMIT(outfp, "%%%%EndProlog\n");
+--- 454,462 ----
+ for( i=0; i<nif; i++ ) /* copy all included files */
+ CopyFile( Ifile[i] );
+
+! EMIT(outfp, "TeXDict begin \n");
+! EMIT(outfp, "%d @TexPagesPerPage\n", pages_per_page);
+! EMIT(outfp, "@start\n");
+ EMIT(outfp, "%%%%Title: %s\n", filename);
+ EMIT(outfp, "%%%%Creator: %s\n", G_progname);
+ EMIT(outfp, "%%%%EndProlog\n");
+***************
+*** 927,932 ****
+--- 930,942 ----
+ Fatal("Argument is not a valid integer\n", 0);
+ break;
+
++ case 'x': /* next arg is number of TeX pages per LaserWriter page */
++ if( ++argind >= argc || sscanf(argv[argind], "%d", &pages_per_page) != 1 )
++ Fatal("Argument is not a valid integer\n", 0);
++ if (pages_per_page != 1)
++ Reverse = !Reverse; /* forward makes more sense here */
++ break;
++
+ case 'o': /* next arg is a PostScript command to send */
+ if( ++argind >= argc )
+ Fatal("No argument following -o\n", 0);
+***************
+*** 943,949 ****
+ break;
+
+ case 'r': /* don't process pages in reverse order */
+! Reverse = FALSE;
+ break;
+ #ifdef STATS
+ case 's': /* print some statistics */
+--- 953,959 ----
+ break;
+
+ case 'r': /* don't process pages in reverse order */
+! Reverse = !Reverse;
+ break;
+ #ifdef STATS
+ case 's': /* print some statistics */
+*** tex-gf.ps Mon Jan 19 18:09:04 1987
+--- tex-gf-n.ps Sat Mar 14 14:50:25 1987
+***************
+*** 47,58 ****
+ % [ 1 e ]
+ % where the "e"s were almost exactly but not quite unlike zeros.
+
+ /@letter
+! { letter initmatrix
+! 72 Resolution div dup neg scale % set scaling to 1.
+! 310 -3005 translate % move origin to top (these are not exactly 1"
+! Mtrx currentmatrix pop % and -10" because margins aren't set exactly right)
+ } def
+ % note mode is like letter, except it uses less VM
+ /@note
+ { note initmatrix
+--- 47,104 ----
+ % [ 1 e ]
+ % where the "e"s were almost exactly but not quite unlike zeros.
+
++
++ %%%%%%%%%#### Additional Procedure Definitions ####%%%%%%%%%%%%%%%%%%%%%%%%%%
++
++ /numberOfRows % the number of page rows on LaserWriter page
++ {2 power 2 div truncate exp} def
++
++ /numberOfColumns % the number of page columns on LaserWriter page
++ {2 power 2 div ceiling exp} def
++
++ /setscale
++ {72 Resolution div dup xscale mul exch yscale mul neg scale} def
++ % Sets the scaling to the appropriate ammount. Note
++ % the negative y direction scaling factor to account for the
++ % discrepancy between TeX and PostScript co-ordinates
++
++ /@TexPagesPerPage
++ {
++ /power exch log 2 log div ceiling def % numberofpages <= 2^power.
++ /odd power cvi 2 mod 1 eq def % boolean, "power is odd".
++ /rowCount numberOfRows def % initialise loop count variables.
++ /columnCount numberOfColumns def
++ /xscale 1 rowCount div def % 1/No. rows for x scaling
++ /yscale 1 columnCount div def % 1/No. columns for y scaling
++ } def
++
++
++ %%%%%%%%%%%####---------------------------------####%%%%%%%%%%%%%%%%%%%%%%
++
+ /@letter
+! {
+! odd
+! {
+! Mtrx currentmatrix 0 0.0 put
+! Mtrx 1 -1.0 put
+! Mtrx 2 1.0 put
+! Mtrx 3 0.0 put
+! Mtrx setmatrix
+! 0.707101 1.41421 yscale mul exch xscale mul scale
+! % dont ask!....It works.
+! 300 390 translate % move origin to top
+! Mtrx currentmatrix pop
+! }
+! {
+! letter initmatrix
+! setscale
+! 390 -3000 numberOfRows mul translate
+! % move origin to top (these are not exactly 1"
+! % and -10" because margins aren't set exactly right)
+! Mtrx currentmatrix pop
+! } ifelse
+ } def
++
+ % note mode is like letter, except it uses less VM
+ /@note
+ { note initmatrix
+***************
+*** 162,176 ****
+
+ /@bop1 % n @bop1 - -- begin a brand new page
+ { pop
+! erasepage initgraphics
+! Mtrx setmatrix
+! /SaveImage save def() pop
+ } def
+
+ /@eop % - @eop - -- end a page
+! { showpage
+! SaveImage restore() pop
+! } def
+
+ /@start % - @start - -- start everything
+ { @letter % (there is not much to do)
+--- 208,242 ----
+
+ /@bop1 % n @bop1 - -- begin a brand new page
+ { pop
+! % erasepage initgraphics
+! % Mtrx setmatrix
+! % /SaveImage save def() pop
+ } def
+
+ /@eop % - @eop - -- end a page
+! {
+! columnCount 1 ne
+! {
+! 2250 0 translate % move right one TeX page
+! /columnCount columnCount 1 sub def % and note new column
+! }
+! {
+! rowCount 1 ne
+! {
+! /columnCount numberOfColumns def % reset the column count
+! /rowCount rowCount 1 sub def % note entry into a new row
+! -2250 columnCount 1 sub mul 3005 translate
+! % move far left and down one TeX page
+! }
+! {
+! showpage
+! /columnCount numberOfColumns def % reset the column count
+! /rowCount numberOfRows def % reset the row count
+! erasepage initgraphics
+! Mtrx setmatrix
+! } ifelse
+! } ifelse
+! } def
+
+ /@start % - @start - -- start everything
+ { @letter % (there is not much to do)
+***************
+*** 177,183 ****
+ } def
+
+ /@end % - @end - -- done the whole shebang
+! { end
+ } def
+
+ /p % x y p - -- move to position
+--- 243,255 ----
+ } def
+
+ /@end % - @end - -- done the whole shebang
+! {
+! columnCount numberOfColumns eq
+! rowCount numberOfRows eq
+! and not
+! {showpage}
+! if
+! end
+ } def
+
+ /p % x y p - -- move to position
+
+----------------------------------------------------------------
+-------
diff --git a/info/digests/texhax/txh/wujastyk.txh b/info/digests/texhax/txh/wujastyk.txh
new file mode 100644
index 0000000000..84978c70b7
--- /dev/null
+++ b/info/digests/texhax/txh/wujastyk.txh
@@ -0,0 +1,2280 @@
+% Split this file into FONTMEMO.STY and FONTMEMO.TEX
+%
+%
+% This is FONTMEMO.STY
+%
+%================================ CHANGES TO LATEX ARTICLE 10pt STYLE =======
+% REDUCE SPACING AROUND AND IN QUOTATIONS (TOPSEP AND ITEMSEP) AND
+% FIRST LEVEL LISTS IN GENERAL, LIKE 'DESCRIPTION'.
+% (Fiddle with the dimensions given in ART10.STY; see LaTeXbook, pp.113, 163)
+% Old:
+% \def\@listI{\leftmargin\leftmargini \parsep 4pt plus 2pt minus 1pt%
+% \topsep 8pt plus 2pt minus 4pt%
+% \itemsep 4pt plus 2pt minus 1pt}
+% New:
+\def\@listI{\leftmargin\leftmargini \parsep 0pt plus 1pt%
+\topsep 2pt plus 1pt%
+\itemsep 1pt plus .5pt}
+%
+%----------------------------------------------------------------------------
+% MAKE THE FIRST PARAGRAPH OF A QUOTATION FLUSH LEFT
+\renewcommand{\quotation}{\list{}{\listparindent 1.5em
+% \itemindent\listparindent % line commented out March 13, 1987, DW, to
+ % make 1st paragraph of a quotation not be indented
+ \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
+%
+%================================ METAFONT LOGO =============================
+% The hanky-panky below is a hack designed to integrate
+% the LOGO font into LaTeX so that size changes are automatic. The command
+% \mf is set up to invoke a LOGO font at the right size for the current LaTeX
+% environment (heading, toc, text, footnote, etc.):
+%
+% The macro \@setsize below is taken from LFONTS.TEX with the addition of
+% the assignment of the current font size to \@fontxsize:
+%
+\def\@setsize#1#2#3#4{\@nomath#1\let\@currsize#1\baselineskip
+ #2\setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}\baselineskip\baselinestretch\baselineskip
+ \normalbaselineskip\baselineskip#3\let\@fontxsize#3 #4}
+%
+% Now the font macros:
+\def\eightmf{\font\mfviii=logo8 \mfviii}
+\def\ninemf{\font\mfix=logo9 \mfix}
+\def\tenmf{\font\mfx=logo10 \mfx}
+\def\elevenmf{\font\mfxi=logo10 scaled\magstephalf \mfxi}
+\def\twelvemf{\font\mfxii=logo10 scaled\magstep1 \mfxii}
+\def\fourteenmf{\font\mfxiv=logo10 scaled\magstep2 \mfxiv}
+\def\seventeenmf{\font\mfxvii=logo10 scaled\magstep3 \mfxvii}
+%
+% Define \mf to select the font according to context:
+\def\mf{\ifx\@fontxsize \viiipt \eightmf
+\else \ifx\@fontxsize \ixpt \ninemf
+\else \ifx\@fontxsize \xpt \tenmf
+\else \ifx\@fontxsize \xipt \elevenmf
+\else \ifx\@fontxsize \xiipt \twelvemf
+\else \ifx\@fontxsize \xivpt \fourteenmf
+\else \ifx\@fontxsize \xviipt \seventeenmf
+\else \@warning{No Logo font available at this font size. Substituting
+ten point font.} \tenmf
+\fi\fi\fi\fi\fi\fi\fi}
+%**********************************************
+% Now define the Metafont logo:
+\newcommand{\MF}{\protect{{\mf META}\-{\mf FONT}}}
+\newcommand{\METAfont}{\protect{{\mf META}font}} % or would just {meta-font}
+% be better?
+%
+%%================================ SET TUGBOAT DIMENSIONS ====================
+\setlength{\textwidth}{39pc}
+\setlength{\textheight}{52pc}
+\setlength{\topmargin}{0pc}
+\setlength{\columnsep}{1.5pc}
+\setlength{\columnseprule}{0pc}
+%
+%================================ SET COUNTERS ==============================
+%\setcounter{tocdepth}{2} % !!! remove the % to get rid of subheadings !!!
+\setcounter{secnumdepth}{2}
+%
+\sloppy % Ahem. Polite cough!
+%
+%
+% This is FONTMEMO.TEX
+%
+%
+\documentstyle[twocolumn,fontmemo]{article} % Draft of July 3, 1988
+%
+\title{ The Many Faces of \TeX \\
+\normalsize A Survey of Digital \METAfont s
+}
+\author{ Dominik Wujastyk
+}
+\date{July 3, 1988}
+%
+\begin{document}
+\maketitle
+\tableofcontents % You'll probably want to get rid of this.
+%
+%========================== AND ... WE'RE OFF! =======================
+%
+\section{Introduction}
+
+This article seeks to give a reasonably complete survey of the fonts
+and \METAfont s that are currently available for use with \TeX.
+Although I have been primarily interested in cataloguing fonts
+designed with \MF, I also wanted to include information about any
+other fonts that have been successfully used with \TeX, i.e., fonts
+with \TeX\ Font Metric files, and a mechanism for the creation of the
+appropriate ligatures and kerning pairs, be it within the {\tt TFM}
+file, or by means of a preprocessor.
+
+I first started compiling this article late in 1987, as a note to
+myself and my immediate Indological colleagues. But it seemed little
+extra work to include more information in it about other fonts that I
+had heard of, and doing this greatly widened its usefulness to \TeX\
+users in general. But you may still detect a slight Indic leaning.
+
+For those with access to the academic computer networks, I post
+information about revisions of this article to \TeX hax from time to
+time, and send the latest version of the article to {\tt
+score.stanford.edu}, where it ends up as {\tt WUJASTYK.TXH} in the
+directory {\tt TEX.TEXHAX}. This way, people will know from \TeX hax
+whether there is enough new stuff for it to be worth downloading the
+whole article afresh.
+
+I would be grateful for any relevant information that is not already
+mentioned and, of course, for any corrections. While keeping the memo
+reasonably concise, I have given all the useful information that I
+currently have. I have also given everything I know about how to get
+more information about each font, so follow those leads rather than
+contacting me directly, in the first instance.
+
+This article is made up of information given to me by others, both in
+person and through general publication in {\em TUGboat\/}, \TeX hax and the
+net. My sincere thanks to all the contributors.
+
+
+\section{Computer Modern}
+
+It may seem odd to start with Computer Modern (CM), the typeface
+family that most \TeX\ users use most of the time, since it was
+created side by side with \TeX, and is included in all distributions
+of \TeX. Nevertheless, I feel that there is an important point to be
+made about CM.
+
+When Knuth developed \MF, one of the central ideas of the whole
+project was that of producing {\em parametrized\/} typefaces. In Douglas
+Hofstadter's memorable phrase, \MF\ is a `knobbed category
+machine'\footnote{Douglas R.~Hofstadter, `Metafont, Metamathematics
+and Metaphysics: comments on Donald Knuth's Article ``The Concept of a
+Meta-Font''\,', {\em Visible Language\/} {\bf 16} (1982), 309--338. This article,
+and selections from the discussion which it engendered in the pages of
+{\em Visible Language\/} (henceforth {\em VL\/}), were republished as chapter 13 of
+Hofstadter's {\em Metamagical Themas\/} (New York, 1986$^2$).}, and when Knuth
+announced the capabilities of \MF\ to the world in {\em Visible Language\/} it
+was precisely this parametrization that he emphasized and demonstrated
+so brilliantly.\footnote{'The Concept of a Meta-Font', {\em VL\/} {\bf 16} (1982),
+3--27.}
+
+Later on, Knuth explained that the whole inspiration for \MF\ had
+arisen from the three ideas of {\em pens, parameters\/} and
+{\em programs\/}.\footnote{Donald E. Knuth, `Lessons Learned from Metafont',
+{\em VL\/} {\bf 19} (1985), 35--53.} Hofstadter argued, wrongly I think, that this
+idea contained basic flaws, and that some of Knuth's implications
+about using \MF\ to generate different typefaces by twiddling the
+`knobs' of a single underlying typeface description were
+misleading.\footnote{I agree with the refutation by Geoffrey Sampson,
+`Is Roman Type an Open-Ended System: A Response to Douglas Hofstadter'
+{\em VL\/} {\bf 17} (1983), 410--412, in spite of Hofstadter's reply in pages
+413--416 of the same issue.} Knuth made it clear that he had never
+meant to imply that all typefaces could usefully be combined into one
+single \METAfont (although he did not actually deny the feasibility of
+such an endeavor), and again emphasized the desirability of trying to
+incorporate variability into a design.\footnote{{\em VL\/} {\bf 17} (1983), 417.}
+
+In view of the vigor with which Knuth has maintained the idea of
+parametrization, both in discussion and in the actual implementation
+of Computer Modern, I am very surprised that the following survey of
+\TeX\ fonts does not include a single example of a new typeface
+created from CM by changing its parameters. In Knuth's own hands, CM
+is utterly plastic, as was demonstrated so startlingly in his article
+`The Concept of a Meta-Font' referred to above, and by the inclusion
+of such fonts as Computer Modern Funny Roman ({\tt CMFF}), Unslanted
+Text Italic ({\tt CMU}), and the delightful {\tt CMFIB} (which uses
+the Fibonacci series for the ratios of several of the CM parameters)in the standard distributions of CM. But none of us has taken up the
+challenge, implicit in the 62 parameters of CM, to produce a new face
+for general distribution. It would be very nice, for example, to
+produce a full set of {\tt CMFIB}, with bold, slanted, italic,
+typewriter and other versions. And someone should pick up the gauntlet
+thrown down by Hofstadter, and try to produce a Times Roman, or a
+Baskerville or some other familiar face from the CM programs. Knuth
+has said that we should not blindly copy the old masters, without
+trying to understand why they produced what they did.\footnote{{\em VL\/} {\bf 17}
+(1983), 417.} How interesting it might be, then, to try to manipulate
+the parameters of CM to produce a different, but recognizable family
+of faces. And if the experiment failed, the reasons why it did so
+would themselves be of
+great interest. The first sentences of the Introduction to {\em Computer\/}
+{\em Modern\/} {\em Typefaces\/} are:
+\begin{quotation}
+Infinitely many alphabets can be generated by the programs in this
+book. All you have to do is assign values to 62 parameters and fire
+up the \MF\ system; then presto---out comes a new font of type.
+\end{quotation}
+Let's do it, but of course in the best possible taste!
+
+
+\section{Devan\={a}gar\={\i}}
+
+Devan\={a}gar\={\i} is the alphabet used for writing and printing
+Sanskrit, Hindi and several other languages of South Asia, both
+ancient and modern.
+
+\subsection{Knuth}
+
+As far as I know, Donald Knuth coded the first Devan\={a}gar\={\i}
+character to be created with \MF. This was the single syllable {\em la\/},
+which Matthew Carter gave to Knuth in 1980 as a challenge to test the
+capabilities of the then nascent \MF. The smoke proof of the
+character, and several interesting remarks about the experience, were
+published as `My First Experience with Indian Scripts', in {\em CALTIS-84:\/}
+{\em Special Issue on Calligraphy, Lettering \& Typography of Indian\/}
+{\em Scripts\/}, (Proceedings of a Delhi 1984 conference).
+
+\subsection{Ghosh}
+
+An early Devan\={a}gar\={\i} font was designed with old \MF\
+(MF-in-SAIL) by P.~K.~Ghosh during a visit to Stanford in 1982--83.
+Ghosh published what he had done as Stanford Computer Science Report
+965: {\em An Approach to Type Design and Text Composition in Indian\/}
+{\em Scripts\/} (Stanford, 1984). One of the valuable aspects of this work
+was that Ghosh worked from Devan\={a}gar\={\i} characters designed and
+drawn for him by the famous Bombay calligrapher R.~K.~Joshi. Drawings
+of these, on a grid, are published in the {\em Report\/}. Unfortunately,
+Ghosh's work was done in a now superseded version of \MF, and was not
+fully worked out at the keyboard level. It also lacked a number of
+the conjunct consonant clusters necessary for fine Indian typography.
+The report, however, remains of considerable interest for general
+background. The source code is available at the University of
+Washington, through Pierre MacKay (address below), and presumably at
+Stanford (try Emma Pease). Ghosh has said explicitly that he has no
+objection to others doing further work on it.
+
+\subsubsection{Contact}
+
+If you wish to contact Ghosh he can be reached at the following
+address:\\
+ National Centre for Software Technology,\\
+ Gulmohar Cross Road 9,\\
+ Juhu, Bombay 400 049,\\
+ India.
+
+\subsection{Velthuis}
+
+The only fully worked out version of Devan\={a}gar\={\i} presently
+available is that of Frans Velthuis.
+
+%\paragraph{Date of information} 25 December 1987.
+
+\subsubsection{The Font}
+
+In November 1987, Frans Velthuis completed version 1.0 of a
+Devan\={a}gar\={\i} \METAfont\ for \TeX. He has written \MF\ code for
+all the {\em ak\d{s}aras\/} (syllabic characters) necessary for Hindi, and
+most of those for Sanskrit too, although in the latter case some
+{\em vir\={a}mas\/} are used. Frans intends to produce a special Sanskrit
+version of his font in the future. Also included are the
+Devan\={a}gar\={\i} numerals, {\em anusv\={a}ra, vir\={a}ma, da\d{n}\d{d}a,\/}
+{\em candrabindu, visarga, avagraha\/}, full stop, and the superscript
+abbreviation circle.
+
+\subsubsection{Usage}
+
+You prepare your \TeX\ or \LaTeX\ file normally, and mark any Hindi
+portions, typed in a simple Roman transliteration, with a font marker,
+thus: \verb|{\dn ...}|. At the top of the \TeX\ file you
+\verb|\input| a file called {\tt DNMACS}; in \LaTeX, a {\tt DEV.STY}
+file is provided which inputs the necessary macros, and automatically
+makes appropriate font size changes. Frans provides a preprocessor,
+{\tt DEVNAG}, available compiled for several systems, or in Pascal or
+C, which reads your file and converts the Hindi transliteration into
+the appropriate codes for Frans's font. The converted file is then
+processed by \TeX\ or \LaTeX\ in the normal way, and the resulting
+{\tt DVI} file can be printed using a standard {\tt DVI} outputprogram. The portions of Hindi text originally in Roman
+transliteration will be printed in Devan\={a}gar\={\i}, with full use
+of conjunct consonants ({\em sandhyak\d{s}aras\/}), etc.
+
+\subsubsection{Quality}
+
+The quality of the typeface is excellent, with full calligraphic
+molding of the curves and loops, like some of the best handwriting of
+manuscript scribes using a broad nib.
+
+\subsubsection{Terms of Availability}
+
+Frans will sell a set of four or five sizes of the Devan\={a}gar\={\i}
+fonts, at the printer resolution you specify (Epson-type 9 pin matrix,
+24 pin matrix ($180\times 180, 360\times 360, 180\times 360$),
+write-white laser, or write-black laser), together with the compiled
+code (specify VAX/VMS, SUN, Cyber, IBM/PC, Atari ST) of the text
+preprocessor DEVNAG, for \$119. The \MF\ source programs are not at
+present being made generally available.
+
+\subsubsection{Contact}
+
+Frans J.~Velthuis,\\
+ Nyensteinheerd 267,\\
+ 9736 TV Groningen,\\
+ The Netherlands.\\
+ Bitnet: {\tt velthuis@hgrrug5}
+
+\subsubsection{Further information}
+
+A note about Velthuis's Devan\={a}gar\={\i} font appeared in \TeX hax,
+1987, issue 93. Velthuis intends to publish a full account of his
+font in a future
+issue of {\em TUGboat\/}.
+
+
+\section{Tamil}
+
+\subsection{Arthanari}
+
+According to Emma Pease (network response on 10 November 1987 to my
+query in \TeX hax 1987, issue 93) a basic set of Tamil characters for
+\TeX\ was designed at Stanford by T.~S.~Arthanari created when he was
+at Stanford from May to July, 1985. Emma has the source code but does
+not want to distribute it further without his knowledge.
+
+\subsubsection{The Font}
+
+There are approximately 160 characters in several styles written in a
+pre-release version of the current \MF. Emma has only tried producing
+characters for one style but had little difficulty in doing so (a few
+commands had changed). They are rough but look fairly good.
+
+%\paragraph{Date of information} December 26, 1987.
+
+\subsubsection{Contact}
+
+T.~S.~Arthanari's last known address was:\\
+ Quality Informatics Labs, Ltd.,\\
+ 312, P.~M.~G.~Complex,\\
+ 57, South Usman Road,\\
+ Madras, 600 017, India.
+
+I wrote to Mr.~Arthanari in December 1987 to ascertain his intentions
+concerning his work, and especially to learn whether he is willing and
+able to allow the source code of his Tamil font to be distributed as
+public domain software. There has been, as yet, no reply. A
+colleague is visiting Madras in a few weeks, and will try to make
+contact with him.
+
+\subsection{Ramanujan}
+
+%\paragraph{Date of information} Fri Jan 22 1988 (mail from Pierre
+%MacKay).
+
+\subsubsection{The Font}
+
+According to information received by e-mail from Pierre MacKay (Fri
+Jan 22, 1988), Ramanujan, a graduate student who worked at Washington
+two years ago, designed a Tamil font in \MF84 (I think). According to
+Pierre, the problem with this, as with Ghosh's Devan\={a}gar\={\i}, is
+that it was arbitrarily developed in a framework that bears no
+relation to the monotype-based character grid used for Computer
+Modern, i.e., the characters do not sit in a box or on a baseline that
+relates in an appropriate manner to CM; this is unfortunate, since it
+makes it almost unusable in an environment with CM. Moreover, it does
+not make much use of the macro capabilities of \MF.
+
+%\paragraph{Date of information} June 7, 1988.
+
+\subsection{Ridgeway and Schiffman}
+
+After a thorough evaluation of the Ramanujan characters, the
+Humanities and Arts Computing Center at the University of Washington
+decided that it was better to begin again. Dr.~Thomas Ridgeway,
+director of the Center, in consultation with Prof.~Harold Schiffman
+of the Department of Asian Languages, has almost completed a fully
+vowelled \MF\ for Tamil. It will be tested during the summer, and
+should be ready for release in early fall 1988, together with some
+sort of macro package to make it usable from a Latin-letter keyboard.
+Characters are arranged in the font in rough alphabetical order,
+starting from position zero. We have not found any other coding
+system which seems definite enough to use as a model. The Tamil
+phonetic subset of ISCII does not provide nearly enough character
+positions. It is expected that with this as with many other non-Latin
+fonts some sort of input preprocessor will be used to mediate between
+the code used for text-editing and the \TeX\ font coding.
+
+\subsubsection{Contact}
+
+Dr.~Thomas Ridgeway, Director \\
+ Humanities and Arts Computing Center \\
+ Mail~Stop DW-10 \\
+ University of Washington \\
+ Seattle, WA 98195, USA \\
+ Phone: (206) 543-6259 \\
+ Net: {\tt mackay@june.cs.washington.edu}
+
+\subsection{Other Developments}
+
+%\paragraph{Date of information} March 11, 1988.
+
+T.~K.~Rengarajan, a software engineer (Database Systems, Digital
+Equipment Corporation), e-mailed me on Fri 5 Feb, 1988, and mentioned
+that he may do a \MF\ Tamil. He can be contacted at:\\
+ Net: {\tt ranga\%debit.DEC@decwrl.dec.com}
+
+
+\section{Telugu}
+Telugu is the name of the language and script used in Indian state of
+Andhra Pradesh.
+\subsection{Mukkavilli}
+
+%\paragraph{Date of information} March 11, 1988.
+
+\subsubsection{The Font}
+
+Recent mail from Lakshmi Mukkavilli indicates her intention, together
+with her husband Lakshmankumar Mukkavilli, to implement a Telugu
+script font in \MF. Their work on this font will intensify during the
+summer of 1988. Incidentally, they are looking for a good Telugu
+calligrapher and would welcome suggestions. In their opinion,
+existing Telugu typefaces are not good, tending to be very heavy along
+the baseline, which is hard on eyes. So they are not keen on
+imitating existing typefaces, and will probably create their own.
+
+A note from Lakshmi in May 1988 said that she and her husband have now
+started working full time on the Telugu fonts using \MF, and they
+expect to start coding \MF\ programs in the second week of June. They
+are at present deciding on parameters, and the characters for which
+\MF\ programs are to be written. They are also concerned about how to
+incorporate context analysis logic in the form of \TeX\ macros.
+Entering text in Roman transliteration and preprocessing the text for
+input to \TeX\ does not seem very attractive to them, although, in the
+absence of widely available customizable terminals that could cope
+with Telugu, they may be forced down this path.
+
+Another point of concern is their desire to use the ISCII standard (a
+version of ASCII for Indian languages). This is the only really
+widely published standard for the arrangement of the characters of
+Indian languages in a font grid, and I suspect that all creators of
+Indic fonts should be using it as far as possible.
+
+\subsubsection{Contact}
+
+Lakshmankumar Mukkavilli and \\
+Lakshmi Mukkavilli,\\
+ 226 Computer Science,\\
+ Iowa State University,\\
+ Ames IA 50011, USA.\\
+ Phone: (515) 296--7808\\
+ CSnet: {\tt lakshmi@atanasoff.cs.iastate.edu}\\
+ Uucp: {\tt lakshmi!atanasoff}
+
+\subsection{Other Developments}
+
+%\paragraph{Date of information} March 11, 1988.
+
+E-Mail from K.~Sankara Rao in March 1988 indicates his similar
+intention to implement a Telugu font in \MF. He can be contacted
+at:\\
+ Department of Electrical Engineering \\
+ North Dakota State University \\
+ Fargo, ND 58105, USA. \\
+ Bitnet: {\tt nu043109@ndsuvm1}
+
+
+%\section{Mar\={a}\d{t}h\={\i}}
+
+%No known font, but the addition of a few extra characters, such as
+%retroflex {\em la\/}, to Velthuis's Devan\={a}gar\={\i} (which he is
+%considering) will make his font perfectly suitable for
+%Mar\={a}\d{t}h\={\i}.
+
+
+\section{Perso-Arabic}
+
+%\paragraph{Date of information} June 7, 1988.
+\subsection{MacKay}
+
+Pierre A.~MacKay (TUG Site Coordinator for Unix-flavored \TeX) and the
+Washington team have been working on an Arabic implementation of \TeX\
+for some years. Their plans are ambitious, and include building a
+customized version of \TeX, called \TeX--XeT, which has a built-in
+capability for handling bidirectional text. Details of this change to
+\TeX\ were published by Don Knuth and Pierre MacKay in {\em TUGboat\/} {\bf 8},
+issue 1 (1987). This is an active project, but MacKay says wistfully
+that Arabic remains a long-term dream.
+
+\subsubsection{Terms of Availability}
+
+\TeX-XeT can be compiled with the C compiler using {\tt WEB}-to-C and
+the change file {\tt Cxet.ch}, both of which are part of the Unix
+\TeX\ distribution. Several sites have actually made use of the
+reflection primitives, and Larry Denenberg of BBN has rewritten the
+{\tt dvi2ps} device driver to do the correct things with
+right-to-left text. The Denenberg {\tt dvi2ps} is vastly superior to
+the old {\tt dvi2ps} in many other ways, and it will become a part of
+the distribution very shortly. (The driver is available as an {\tt
+FTP} file from the {\tt pub} directory on {\tt
+june.cs.washington.edu}. Look for \verb|ld_dvi2ps.tar.Z|.) {\tt
+WEB}-to-C is also available as the file {\tt web2c.tar.Z}, along with
+{\tt Cxet.ch.Z}.
+
+\subsubsection{Contact}
+
+Pierre MacKay, \\
+ Department of Computer Science, FR-35,\\
+ University of Washington,\\
+ Seattle, WA 98195, USA.\\
+ Phone: (206) 545-2386/543-6259.\\
+ Net: {\tt MacKay@June.cs.Washington.edu}
+
+\subsection{Goldberg}
+
+%\paragraph{Date of information} February 3, 1988, February 11, 1988.
+
+On Monday, 18 Jan 1988, and again on 15 Feb 1988, Jacques J.~Goldberg
+wrote to \TeX hax (1988, issues 7 and 15), giving details of a
+package giving the capability of printing Hebrew. He said that an
+article is currently being written about the package, for submission
+to {\em TUGboat\/} (see under {\bf Hebrew}). At the same time he included a brief
+note referring to a nearly completed Arabic font.
+
+\subsubsection{The Font}
+
+Goldberg said,
+\begin{quotation}
+An Arabic font is three characters away from completion, but the
+MetaFounders are near midyear exams and unpaid, so the Arabic font
+{\sl might} show up around mid March [1988]. (To be precise, their
+font is Parsi, and some limited work is needed to extend it to full
+Arabic). \ldots\ This needs {\sl no} change either in \TeX\ or in {\tt
+DVI} drivers: a simple preprocessing of the \TeX\ input file and a
+small additional macro package do it.
+\end{quotation}
+
+\subsubsection{Terms of Availability}
+
+It is likely that the Arabic fonts and macros may be distributed on
+similar terms to the Hebrew; see the {\bf Hebrew} section.
+
+\subsubsection{Contact}
+
+For Prof.~Goldberg's address see under {\bf Hebrew}.
+
+\subsection{Other Developments}
+
+See also the bitmap Arabic (?) fonts distributed by the {\bf Austin Code}
+{\bf Works}.
+
+
+\section{Hebrew}
+
+%\paragraph{Date of information} February 3, 1988.
+
+\subsection{Goldberg}
+
+On Monday, 18 Jan 1988, and again on 15 Feb 1988, Jacques J.~Goldberg
+wrote to \TeX hax (1988, issues 7 and 15), giving details of a
+package giving the
+capability of printing Hebrew. He said that an article is currently
+being written about the package, for submission to {\em TUGboat\/}.
+
+\subsubsection{The Font}
+
+Goldberg says that the package comprises:
+\begin{itemize}
+\item a set of fonts at 8, 9, 10, 12, 17 points in regular type, 10
+ points slanted and bold, and any magnification on request (1000
+ off the shelf).
+\item a 100\% portable preprocessor written in C (MSDOS users who do
+ not have a compiler can get the {\tt .COM} file).
+\item a small set of \TeX\ macros.
+\item a sample file.
+\end{itemize}
+
+\subsubsection{Usage}
+Hebrew words in Roman transliteration are inserted either by typing
+first-typed-last-read with the font invoked, which is a pain but
+`displays' in natural reading order, or by typing first typed first
+read as argument of the \verb|\reflect| macro given by D.~Knuth and
+P.~MacKay, {\em TUGboat\/} {\bf 8} (1987), p.\,14. Long Hebrew sequences are typed,
+in first-typed-first-read order, within delimiters. The preprocessor
+copies non Hebrew sequences to an auxiliary file. Hebrew sequences are
+parsed into words, and written to the auxiliary file one word at a
+time after each word has been reflected. \TeX\ is then invoked on the
+file containing the macro package, which itself \verb|\inputs| the
+auxiliary files, feeding \TeX\ with either normal English input or
+\verb|\lines{ }| adjusted by the macro to the optimal number of Hebrew
+words.
+
+\subsubsection{Quality}
+
+Goldberg is---I suspect unnecessarily---diffident about the quality of
+the fonts. He calls them `ugly fonts not good for anything else than
+Office documents (drafts, reports, \ldots)'.
+
+\subsubsection{Future development}
+
+Goldberg is looking for a convenient table representing the 22 Hebrew
+letters by Roman letters. Then the preprocessor could translate to
+standard ASCII the character codes used in Israel with their special
+Hebrew terminals, so that anybody with an English-only terminal could
+write in Hebrew.
+
+\subsubsection{Terms of Availability}
+
+Goldberg says,
+\begin{quotation}
+I do not expect any fee from individuals, but I would be happy if {\sl
+institutions} that may use this package would later voluntarily
+contribute \$25 to \$50 [payable to the Treasurer of the University]
+to help my Department \ldots\ pay students employed on font
+development.
+\end{quotation}
+He later added,
+\begin{quotation}
+All that project is stored and freely available on a Bitnet server.
+To get the whole package, send an interactive message {\tt GET IVRITEX
+PACKAGE} to {\tt LISTSERV@TAUNIVM}. Arpanet or other nets not
+interactively connected to Bitnet, just send a {\tt MAIL} file to that
+address, with the request {\tt GET IVRITEX PACKAGE} in the first line
+({\sl not} Subject) of the message. Other useful commands to that
+server are:
+\begin{description}
+\item[{\tt GET IVRITEX FILELIST}] to get a directory of the project,
+and
+\item[{\tt INFO FILES}] to get instructions how to sign up for
+automatic updates.
+\end{description}
+\end{quotation}
+
+\subsubsection{Contact}
+
+Prof.~Jacques J.~Goldberg,\\
+ Department of Physics,\\
+ Technion-City,\\
+ 32000 Haifa, Israel.\\
+ Bitnet: {\tt phr00jg@technion}\\
+ If you are not on Bitnet, try: \\
+ {\tt phr00jg\%technion.bitnet} at \\
+ {\tt forsythe.stanford.edu}
+
+\subsection{Other Developments}
+
+See also the experimental Hebrew font described under the heading
+{\bf Georgia Tobin}, and the bitmaps distributed by the {\bf Austin Code Works}.
+
+
+\section{Greek}
+
+%\paragraph{Date of information} January 21, 1988.
+
+\subsection{Levy}
+
+\subsubsection{The Font}
+
+Regular, bold, and typewriter versions of the Greek alphabet have been
+coded in \MF84 by Silvio Levy of Princeton, starting from the Greek
+character set created by Don Knuth as part of the CM family, but with
+all accents, breathings, correct spacing, ligatures, and macros to
+implement a convenient Roman transliteration for input. The font is
+suitable for both classical and modern Greek.
+
+Full details and illustrations of the use of the fonts have been given
+by Silvio Levy in his two publications:
+\begin{description}
+\item `Typesetting Greek', in {\em \TeX\ Users Group Eighth Annual Meeting:\/}
+{\em Conference Proceedings\/}, edited by Dean Guenther (Providence: TUG,
+1988), 27--33.
+\item `Using Greek Fonts with \TeX', {\em TUGboat\/} {\bf 9} (1988), 20--24.
+\end{description}
+
+\subsubsection{Terms of Availability}
+
+Silvio Levy has released his Greek fonts freely, without charge (andwithout any warranty). He maintains an electronic mailing list of
+interested parties, and the \MF\ source is available to Arpanet users
+by anonymous FTP from {\tt princeton.edu}.
+
+\subsubsection{Contact}
+
+Silvio Levy, \\
+ Math Department, Fine Hall,\\
+ Princeton University,\\
+ Washington Road,\\
+ Princeton, NJ 08544, USA.\\
+ Phone: (609) 452-5790\\
+ Net: {\tt levy@princeton.edu}
+
+\subsection{Kelly}
+
+Issue 14 of UK\TeX\ 1988 (Fri, May 20), the UK's answer to \TeX hax,
+put out from Aston by Peter Abbott ({\tt abbottp@aston.ac.uk.bitnet}),
+carried a notice by Christopher P.~Andrasic (of Cranfield) reporting
+some Greek fonts.
+
+\subsubsection{The Fonts}
+
+Brian Hamilton Kelly (also at Cranfield) created these Greek fonts
+using \MF84. The \MF\ sources of the non-Math Greek fonts are
+contained in the files {\tt CMGI10.MF, CMGTT10.MF, CMG10.MF,
+CMGB10.MF}, and {\tt GRKTXT.MF}. As far as I know, there are no
+macros or preprocessor offered for implementing the font at the
+keyboard level.
+
+\subsubsection{Terms of Availability}
+
+These fonts are being offered for general, free release. They are
+available for FTP within the UK, from the directory {\tt
+public.mffiles} of the UK\TeX\ archive at Aston.
+
+\subsubsection{Contact}
+
+Christopher P.~Andrasic \\
+ Net: {\tt rm001a@uk.ac.cranfield.cdvc}
+
+
+\section{Cyrillic}
+
+\subsection{MacKay}
+
+%\paragraph{Date of information} Fri Jan 22 1988 (mail from Pierre
+%MacKay).
+
+Pierre MacKay reports that the Washington team is working on Old
+Russian (more or less Old Church Slavonic, but specifically designed
+for the Slovo).
+
+\subsubsection{Contact}
+
+For Prof.~MacKay's address see under {\bf Arabic}.
+
+\subsection{MF Slavic Family}
+
+This family of Cyrillic fonts is described under {\bf Georgia Tobin}.
+
+\subsection{AMS}
+
+The American Mathematical Society has developed a post revolution
+Cyrillic font, in old \MF79, and a set of macros to implement it
+comfortably. Details of the font, with examples of its use, and grids
+of the character set were published in {\em TUGboat\/} {\bf 6} (1985), 124 ff.
+
+\subsubsection{Terms of Availability}
+
+Same terms and contact addresses as described under {\bf AMSfonts Package}.
+
+\subsection{Other Developments}
+
+See also the Cyrillic bitmap fonts distributed by the {\bf Austin Code}
+{\bf Works}.
+
+
+\section{Turkish}
+
+\subsection{Washington}
+
+%\paragraph{Date of information} June 7, 1988. (P. A. MacKay)
+
+\subsubsection{The Font}
+
+Pierre MacKay informs me (Jan 22 1988) that work on properly accented
+Roman-letter Turkish fonts in \MF\ has been undertaken at the
+University of Washington by himself and Walter Andrews. The accented
+characters are developed from Computer Modern descriptions, so as to
+maintain the maximum possible compatibility with the Computer Modern
+faces. Andrews and MacKay have published a description of their work
+as:
+\begin{description}
+\item `The Ottoman Texts Project' in {\em \TeX\ Users Group Eighth Annual\/}
+{\em Meeting:\/} {\em Conference Proceedings\/}, edited by Dean Guenther (Providence:
+TUG, 1988), 35--52.
+\end{description}
+Pierre also wrote on `Turkish Hyphenations for \TeX' in {\em TUGboat\/} {\bf 9}
+(1988), 12--14. See also the note in {\em TUGboat\/} {\bf 8} (1987), 260.
+\subsubsection{Terms of Availability}
+
+A first release is available for FTP on {\ tt june.cs.washington.edu}
+in the {\tt pub} directory under the name {\tt turkish.tar.Z}. This
+is a do-it-yourself kit, with driver files for {\tt WTKR10} and {\tt
+WTKTI10} only. Fonts can be made up in 128-character form for drivers
+which still use {\tt PXL} files, and in 256 character form for all
+others. The 256 character form contains all the expected characters
+of Computer Modern, and all except @ and \# are in the expected
+places.
+
+\subsubsection{Usage}
+
+The {\tt turkish.tar} file includes the hyphenation table described in
+the {\em TUGboat\/} article mentioned above, and a modified {\tt TPLAIN.TEX}
+in which Turkish fonts will take the place of CM fonts, and the
+messages will ultimately be translated into Turkish. There is a
+good-sized sample of Ottoman literary text for testing.
+
+\subsubsection{Contact}
+
+For Prof.~MacKay's address see under {\bf Arabic}.
+
+
+\section{Japanese}
+
+%\paragraph{Date of information} March 11, 1988
+
+In order to typeset Japanese text it is insufficient merely to have a
+Japanese font. There are several problems, including the very large
+size of the Japanese character set, which mean that a modified
+implementation of the \TeX\ system as a whole is necessary.
+
+Some of the issues concerned in using \TeX\ for typesetting Japanese
+were surveyed by Nobuo Saito and Kazuhiro Kitagawa of Keio University,
+Yokohama: \begin{description}
+\item `What Should We Do for Japanese \TeX', in {\em \TeX\ Users Group\/}
+{\em Eighth Annual\/} {\em Meeting: Conference Proceedings\/}, edited by Dean Guenther
+(Providence: TUG, 1988), 53--56.
+\end{description}
+
+Saito and Kitagawa have taken Pat Monardo's Common \TeX\ as the
+starting point for a series of modifications to \TeX\ itself that have
+some features in common with the ASCII Corporation's work, described
+below.
+
+I recently received a comprehensive message from Edgar M.~Cooke about
+the current state of \TeX\ in Japan. Most what follows is reproduced
+verbatim from this message.
+
+At present, two publicly available versions of \TeX\ are being
+distributed that support Japanese, and one further version is supposed
+to become available shortly. These are not entirely mutually
+compatible, and each has its strong and weak points.
+
+\subsection{ASCII Corporation}
+
+The ASCII Corporation is a microcomputer oriented publishing and
+software house that has taken a strong interest in \TeX\ for their own
+publishing work, and whose UNIX support section has produced and
+distributes the Japanized version of \TeX.
+
+ASCII's version was implemented without concern for 100\% internal
+compatibility with Knuth's \TeX, and cannot pass the {\tt TRIP} test
+(N.B.: it is closer to passing as of version 1.0). However, the
+output of an identical English \TeX\ input file is, to the best of my
+knowledge, identical with that of standard \TeX. They have added a
+few primitives (concerned with spacing between the ideographs and
+letters, etc.) useful in handling Japanese or Japanese with Romanized
+languages, and have created a variant of {\tt TFM} which they call
+{\tt JFM} (but which still has the {\tt TFM} extension, although it is
+internally identifiable by a coded ID byte). The purpose of this is
+to allow one font to hold the more than 6000 characters of a typical
+Japanese font. It also differs in other ways, notably that the
+ligature table (unnecessary in Japanese) has been replaced by a `glue
+table', which handles much of the information necessary concerning
+spacing between the characters (which usually appear without
+distinction between inter-character and inter-word spaces, unlike in
+modern Western languages).
+
+\subsubsection{Terms of Availability}
+
+At present, the ASCII Corporation is freely distributing this
+implementation in the form of sources including change files for
+INI\TeX, VIR\TeX, and BiB\TeX, and Japanized macro files for plain
+\TeX, \LaTeX, and Sli\TeX\ (with the \LaTeX\ style files), and they
+include the source for a (just adequate) printer driver for the Canon
+LBP--8 that uses its internal Japanese character set, and {\tt JFM}
+files for point sizes 5 through 10 of a standard (`Mincho' = Ming
+Dynasty style) typeface and of an emboldened (`Gothic') typeface which
+can probably be used with a number of different pixel font sets, e.g.,
+the internal Canon LBP--8 set, (but which in ver.~1.0 is based on the
+Dai Nippon Printing Co.~[DNP] fonts). A printer driver and X-windows
+previewer handling the DNP fonts is now available.
+
+\subsubsection{Contact}
+
+ASCII Corporation,\\
+ Sumitomo Minamiaoyama Building,\\ 5--1--5 Minamiaoyama Minato-ku,\\
+ Tokyo 107, Japan.
+
+\subsection{J\TeX}
+
+The following articles on J\TeX\ and its fonts, by Yasuki Saito, have
+appeared:
+\begin{description}
+\item `Japanese \TeX', {\em TUGboat\/} {\bf 8} (1987), 103--116.
+\item `\TeX: J\TeX', in {\em \TeX\ Users Group Eighth Annual Meeting:\/}
+{\em Conference\/} {\em Proceedings\/}, edited by Dean Guenther (Providence: TUG,
+1988), 57--68.
+\end{description}
+J\TeX\ was developed by Yasuki Saito of Nippon Telephone \& Telegraph
+(NTT). Saito's policy has been to attempt to avoid radical changes to
+standard \TeX\ as much as possible, but this increased compatibility
+has led to problems: since a font can have only 256 characters, the
+number of fonts one needs even to support a single real Japanese font
+set (33) tends to be quite large, even if one only declares the fonts
+corresponding to the various sections of the original font that
+include characters that have actually been input into the document.
+
+A standard (but ugly) set of Japanese characters that is in the public
+domain (known as the JIS fonts, for the Japanese Industrial Standards
+Institute, which is responsible for the (abjectly arbitrary) standard
+coding of Japanese characters and for making the font set available)
+is included with J\TeX. This originally consisted of only 1 size,
+namely characters described in a 24-dot square matrix, but Saito
+mechanically generated 36-, 48-, and 72-dot fonts to imitate other
+point sizes or \verb|\magsteps|. This set is not very high quality by
+any standard, but it is the only public domain font known to me
+[Cooke].
+
+Yasuki Saito has also collaborated with Dai Nippon Printing Co.~to
+make their industry standard fonts available---but for a price: 95,000
+Japanese yen.\footnote{ASCII and SONY are also negotiating with Dai
+Nippon to allow similar font sets to become available for different
+resolutions of printers, and, if we are lucky, a vector stroke
+typeface of high quality that is applicable to various sizes and
+resolutions may become available next year.}
+
+Saito's 1988 article, cited above, includes a section describing the
+JIS and DNP Japanese fonts, with illustrations.
+J\TeX\ has 240, 300, 400, and 480 dpi fonts available currently.
+Please note that 6000+ characters makes for a largish distribution
+tape---the rudimentary set of JIS fonts in an adapted {\tt GF} format
+with {\tt TFM}s takes up about 10 M of disk space, while the {\tt
+PXL}, {\tt GF}, and {\tt TFM} files for the DNP Mincho and Gothic
+fonts very nearly fill an entire 2400 ft magtape at 6250 bpi! I had a
+chance to measure these more carefully:
+\begin{center}
+\begin{tabular}{lrlr}
+\hline
+\multicolumn{2}{c}{DNP fonts} &\multicolumn{2}{c}{JIS
+fonts}\\
+\hline {\tt GF} Mincho & 49,312,713 & {\tt PXL} &
+11,321,384\\
+{\tt GF} Gothic & 43,401,652 & {\tt GF} & 7,729,124\\
+{\tt TFM}s & 559,152 & {\tt TFM}s & 137,417 \\
+{\bf Total bytes} & 93,273,517 & & 19,187,925
+\end{tabular}
+\end{center}
+In other words, non-trivial.
+
+\subsubsection{Terms of Availability}
+
+J\TeX\ is in the public domain, and comes free with the JIS fonts. In
+Japan, the Japan Society for Software Science and Technology
+distributes it.
+
+J\TeX\ is is available in the US by anonymous FTP from {\tt
+turing.stanford.edu}. The Tops-20 version is installed on {\tt
+Turing} in directory \verb|PS:<JTEX>|.
+
+The UNIX version is being distributed for the time being by Yasuki
+Saito, with source files for pretty much what ASCII has, but with an
+Imagen printer driver that handles external Japanese font data and an
+X-windows previewer for J\TeX, as well as a version of DVI2PS
+supporting Japanese, but no support for BiB\TeX\ or Sli\TeX\ is
+offered.
+
+But in a note to \TeX hax 1987, issue 106 (Fri 25 Dec), Hideki Isozaki
+announced that he has prepared \LaTeX\ and Sli\TeX\ files to work with
+J\TeX.
+
+\subsubsection{Contacts}
+
+%\paragraph{Date of information} Fri 25 Dec 1987, given in \TeX hax
+%1987, issue \#106.
+
+Yasuki Saito, \\
+ NTT Electrical Communications Laboratories, \\
+ NTT Corp., 3-9-11\\
+ Midori-cho Musashina-shi,\\
+ Tokyo 180, Japan.\\
+ Phone: +81 (422) 59-2537\\
+ Net: {\tt yaski\%ntt-20@sumex-aim.stanford.edu}\\[1.5ex]
+Hideki Isozaki, \\
+ NTT Software Laboratories,\\
+ JUNet: {\tt isozaki@ntt-20.ntt.junet}\\ CSNet: {\tt isozaki@ntt-20.ntt.jp}\\
+ Arpa: {\tt isozaki\%ntt-20@sumex-aim.stanford.edu}
+
+\subsection{Other Developments}
+
+There is a version of Japanese \TeX\ that is likely to become
+available from Canon which resembles J\TeX, but it may take a {\sl
+long} time for the management at Canon to make anything available to
+the public domain, so it may not be available until some time next
+year.
+
+Similarly, IBM Japan has a Japanese version based on the Canon
+algorithm (which was also the stimulus for the Saito's J\TeX).
+
+The Bitstream Kanji fonts could almost certainly be integrated into
+the above Japanese \TeX\ implementations (see {\bf Bitstream}).
+
+\subsection{Conclusion}
+
+There has been a meeting of the leaders and interested parties of
+J-TUG about whether it is possible to merge these three versions, and
+a number of suggestions and guidelines have been set forth. But
+lacking a central authority figure along the lines of a Donald Knuth
+has limited this from going beyond recommendations.
+
+All three parties are working on improving the inherent quality and
+mutual compatibility of their versions, and I expect that they will be
+working on this throughout the next year (all this being more or less
+volunteer work). Except for the fact that just about none of the other
+utilities ({\tt DVITYPE}, etc.) seem to work with the ASCII version
+(except {\tt TFtpPL} and {\tt PLTOTF} to preen {\tt JFM}s), I suspect
+that it is a leading contender, because \begin{itemize}
+\item they are promoting it through prompt and widespread distribution
+of the sources advertised in their own and others' publications, and
+\item because they have obviously lavished a good deal of care in
+attending to details of Japanese printing practice that make it at
+least as good as either of the others---in addition, of course, to
+removing the burden of having to deal with a plethora of fonts each
+comprising a tiny fragment of a whole Japanese font set.
+\end{itemize}
+
+\subsubsection{Contact for all Japanese \TeX}
+
+Edgar M.~Cooke is prepared to act as a clearing house for \TeX\ going
+into and coming out of Japan. He can be contacted at:\\
+ Software Research Association Inc.,\\
+ 1--1--1 Hirakawa-cho,\\
+ Chiyoda-ku,\\
+ Tokyo 102, Japan.\\
+ Net: {\tt cooke\%srava.sra.junet@uunet.uu.NET}\footnote{N.B. It is
+possible to reply to any mail he will send you by `{\tt R}' or `{\tt
+r}' from the Unix {\tt mail(1)} program, but then it will come via
+CSnet, which (although days faster) is prohibited to non-member,
+non-academic institutions such as his.}
+
+Edgar Cooke is in close touch with Pierre MacKay, and has sent Pierre
+the two
+versions of Japanese \TeX\ (ASCII Corp.~and J\TeX) mentioned above.
+
+
+\section{Chinese}
+
+Work done on a Chinese \METAfont\ by Gu Guoan and John D.~Hobby is
+available by anonymous FTP from {\tt june.cs.washington.edu}, in the
+directory {\tt /pub}, as the (large) file {\tt CHINESE.TAR.Z}. This
+was written up in {\em TUGboat\/} {\bf 5} (1984), pp.119--136. (This is a reprint
+of the Stanford Computer Science Report 974 by Gu Guoan and
+J.~D.~Hobby: {\em A Chinese Meta-font\/} (Stanford, 1983).)
+
+
+\section{International Phonetic Alphabet}
+
+\subsection{Washington State University}
+
+Dean Guenther informs me (June 22, 1988) that Washington State
+University has an IPA font available. It contains 128 popular IPA
+characters and diacritics as specified in the {\em Phonetic Symbol Guide\/} by
+Geoffrey K.~Pullum and William A.~Ladusaw (Chicago, London, 1986).
+Janene Winter did the \MF\ work on this font. The character positions
+were coordinated with help from Helmut Feldweg at the
+Max-Planck-Institut f\"{u}r Psycholinguistik in the Netherlands,
+Christina Thiele at Carleton University and some ideas from Brian
+MacWhinney at Carnegie Mellon and Karen Mullen at the University of
+Kentucky at Louisville.
+
+The font also comes with a set of macros to access the characters
+easily. For
+example, \verb|\schwa| prints what you would expect.
+
+\subsubsection{Terms of Availability}
+
+The Washington IPA is available for \$100. The package includes {\tt
+GF}, {\tt PXL} or {\tt PK} fonts at 9, 10 and 12 point (together) in
+the Roman face. The typeface is designed to match the CM Roman
+face. The \MF\ source is not included.
+
+\subsubsection{Contact}
+
+Send a note to Dean Guenther at {\tt guenther@wsuvm1} on Bitnet, or
+write to:\\ {\sl \TeX T1\/} Distribution,\\
+ Computing Service Center,\\
+ Washington State University,\\
+ Pullman, WA 99164--1220, USA.
+
+\subsection{Other Developments}
+
+Georgia Tobin (q.\,v.) has an IPA font, created in old \MF79.
+
+A bitmap IPA font, {\tt ph10}, was created by Jean Pierre Paillet for
+use with \TeX\ for typesetting the {\em Canadian Journal of Linguistics\/}.
+This font is described, with a printout of the character grid, by
+Christina Thiele in
+\begin{description}
+\item `\TeX, Linguistics, and Journal Production' in {\em \TeX\ Users Group\/}
+{\em Eighth\/} {\em Annual Meeting: Conference Proceedings\/}, edited by Dean Guenther
+(Providence: TUG, 1988), 5--26.
+\end{description}
+{\tt ph10} is now superseded by the Washington font.
+
+According to a note from G.~Toal in UK\TeX\ 1988, issue 2, Tibor
+Tscheke's company, St\"{u}rtze AG, also has an IPA font for sale.
+Toal does not state whether this font was created with \MF, but the
+implication is that it is usable with \TeX. Contact:\\
+ Tibor Tscheke, \\
+ Head, Computer Science Department,\\
+ Universit\"{a}tsdruckerei,\\
+ H.~St\"{u}rtze AG,\\
+ Beethovenstra$\beta$e 5, \\
+ D--8700 Wurzburg, \\
+ West Germany.
+
+Kris Holmes and Chuck Bigelow also report that they have a bitmap IPA
+font. See {\bf Lucida}.
+
+%\paragraph{Date of information} June 7, 1988.
+
+\subsection{Ridgeway}
+
+A phonetic alphabet has been developed by Thomas Ridgeway for a large
+subrange of American Indian languages. The first active projects
+using this are in Salish and Navajo. This font is presently being
+tested and will be available from the Humanities and Arts Computing
+Center at the University of Washington in early fall 1988.
+
+\subsubsection{Contact}
+
+See under {\bf Tamil} above.
+
+
+\section{Elvish}
+
+Elvish, or more properly, Tengwar, is the script used by the elves of
+Middle Earth. It was described by J.~R.~R.~Tolkien.
+
+\subsection{Urban}
+
+%\paragraph{Date of information} February 3, 1988.
+
+On 4 Dec 1986 ({\em sic\/}) Mike Urban released the \MF\ code for the Tengwar
+script through the Usenet newsgroup {\tt comp.text}.
+
+\subsubsection{The Font}
+
+Mike said the following:
+\begin{quotation}
+[Here are the] \MF\ sources for a digitized version of the Tengwar
+(Elvish script) created by J.~R.~R.~Tolkien. They have only been
+tested on a 300dpi laser printer. No guarantee of the quality of
+either the code or the output is offered. I'm not particularly
+satisfied with the quality of the code (my first non-trivial attempt
+to use \MF), but the results look OK to me.
+\end{quotation}
+
+\subsubsection{Contact}
+
+Michael Urban,\\
+ TRW Inc., R2/2009 \\
+ One Space Park,\\
+ Redondo Beach, CA 90278, USA.\\
+ Phone: (213) 812-0632\\
+ Net: {\tt urban@spp2.UUCP}
+
+
+\subsection{Other Developments}
+
+See also the Elvish bitmap fonts available from the {\bf Austin Code Works}.
+
+
+\section{Georgia Tobin}
+
+Georgia Tobin is well known to readers of {\em TUGboat\/} as the editor of,
+and chief contributor to, the `Font Forum' section of the journal.
+She has been working with \MF\ since 1982, and between 1982 and 1987
+she created several complete families of fonts for use with \TeX.
+(Georgia's husband Rick works with her on the fonts.) Because much of
+her earlier work was done using \MF79, which is now superseded, only
+the bitmaps of these early fonts are available but not the \MF\ source
+code.
+The bitmap fonts are mostly at 300dpi, and are optimized for
+write-black imaging machines (i.e., Apple, Canon, HP, and certain
+other laser printers). The fonts are available at a wide range of
+sizes ranging from 5 to 72 points (some of less common fonts are
+available in a narrower range of sizes, say from 5 to 36 point). One
+particular subset of these fonts, marketed by Personal \TeX\ Inc.\ as
+a package called MF Medley, consists of the Chel fonts at 5, 7, 10 and
+12 point sizes, with Copperplate and Schoolbook at 36 and 48 point,
+and Black Letter at 36 point. The MF Medley is available at 180, 240
+and 300dpi, with some fonts available at 118dpi too, and costs \$100.
+
+An important point to notice is that the Roman, Chel and Schoolbook
+families described below include math symbol and extensible fonts,
+like Knuth's CM, so that these fonts can be used for the full range of
+mathematical and technical typesetting as defined in the {\tt PLAIN}
+format and \LaTeX.
+
+Georgia's newer work on Schoolbook, Hebrew, ALA and Special Effects
+typefaces, described below, is all done in \MF84, the current and
+stabilized version of \MF, and is therefore much more flexible. Fonts
+of these faces can be generated at any reasonable resolution, and for
+any marking engine with a defined {\tt mode}. One hopes that Georgia
+will find some way of making her \MF\ source code available to bona
+fide users of her newer typefaces, without of course jeopardizing her
+livelihood.
+
+\subsection{MF Chel Family}
+
+The Chel (`Computer Helvetica') family of sans-serif fonts was
+initially
+created by Thom Hickey in a Tandem TAL translation of \MF79 (later
+recoded into
+Apollo Pascal using the MAP preprocessor). He began work on the font
+in the
+winter of 1980, and continued to work on the font until
+1982.\footnote{Reference to Hickey's work on Chel, with an
+illustration of the MF code for the letters `B' and `b', is made in
+Knuth's `Lessons Learned from Metafont' (1985), 37--38.} Chel was
+later completed and extensively reworked by Georgia Tobin. In its
+finished form, Chel has been described as `lighter and more compact'
+than the Computer Modern sans-serif ({\tt CMSS}) which was designed by
+Richard Southall and is included in all CM distributions. Chel
+comprises fifteen fonts including Chel Book, Slant, Medium Bold,
+Slanted Medium Bold, Bold, Slanted Bold, Extra Bold, Slanted Extra
+Bold, Math Symbols, Bold Math Symbols, Math Italic, Bold Math Italic,
+Math Extensible, Elite, Bold Elite, Pica and Bold Pica.
+
+\subsection{MF Roman Family}
+
+This family comprises more than nineteen Times Roman style seriffed
+fonts, including Roman Text, Slanted Text, Italic, Unslanted Italic,
+Medium Bold, Medium Bold Italic, Bold, Bold Italic, Extra Bold, Extra
+Bold Italic, Titling (Small Caps), Slanted Titling, Math Symbol, Bold
+Math Symbols, Math Italic, Bold Math Italic, Math Extensible, Elite
+and Pica. The last two fonts are 12~cpi and 10~cpi typewriter style
+fonts respectively, and include slanted and emboldened versions.
+
+\subsection{MF Slavic Family}
+
+The Slavic Family of fonts includes all the fonts necessary for
+sophisticated typesetting in Russian. The family includes
+Chel-compatible and Roman-compatible versions of Cyrillic in Book,
+Slant, Bold and Bold Slant versions, and also an Italic version of the
+Roman-compatible face. There are further `additional' fonts
+corresponding to each of these categories which contain extra accents
+and characters used in typesetting other Slavic languages.
+
+\subsection{MF Decorative Family}
+
+Also offered is a decorative package of fonts which includes six
+typefaces, including Black Letter, a Copperplate Script, Hodge Podge
+(including assorted dingbats, pharmacy and planetary symbols, a turtle
+and a frog), an Outline Helvetica (upper case), and a Slanted Outline
+Helvetica (also upper case), and an Uncial Majuscule which emulates a
+medieval manuscript script.
+
+\subsection{Century Schoolbook}
+
+Georgia is close to finalizing a first release version of a Century
+Schoolbook typeface. This is the first fruits of her work with the
+new \MF84. Her goal has been to create a complete Century Schoolbook
+style typeface that is clean and legible from very low resolutions
+(about 72dpi is the lowest so far) to very high, and in point sizes
+from 5 to 96 or so.
+
+\subsection{MF ALA}
+
+Another project has been the creation of \MF\ fonts which include the
+special character set defined as a standard by the American Library
+Association (ALA) and used by the Library of Congress and other bodies
+influential in the library automation world, such as OCLC. This set
+of characters and accents was designed to make possible the
+representation, if necessary in a standard Roman transliteration, of
+virtually all the world's languages. The characters include items
+like upper and lower case thorn, Polish dark {\em el\/} (with a cross bar),
+eth, and several other unusual signs and accents. There is even a
+{\em candrabindu\/} for Sanskritists! Georgia did this work for the Library
+of Congress. The font is available in Text, Bold, Italic, and Bold
+Italic.
+The ALA fonts contain 256 character positions, and therefore require a
+robust DVI driver program such as the members of Nelson Beebe's DVI
+driver family or the latest release of the Arbortext drivers.
+
+\subsection{Hebrew}
+
+Georgia is developing a Hebrew typeface, which is still at an
+experimental stage. At the present time it consists of 27 characters,
+with more calligraphic molding of the strokes than is shown in
+Goldberg's font. However, Georgia has not developed any macros or
+preprocessors for inputting Hebrew text in quantities, as Goldberg
+has. It would be advantageous if Georgia and Goldberg were to
+standardize on a common font layout, so that any macro\slash input
+system would be able to access either of their fonts.
+
+\subsection{Special Effects}
+
+Georgia published `The ABC's of Special Effects' in {\em TUGboat\/} {\bf 9} (1988),
+15--18, in which are demonstrated several fascinating typographical
+effects that are relatively simple to produce with clever use of
+\MF84\ macros. The article includes the \MF\ code illustrating how
+the effects were produced.
+
+\subsubsection{Terms of Availability}
+
+The Chel, Roman, Slavic, Decorative and Century Schoolbook font
+families are available on a commercial basis from the following
+sources:\\
+ASCII Corporation,\\
+Sumitomo Minami Aoyama Bldg.,\\
+ 5--11--5 Minami Aoyama,\\
+ Minato-ku,\\
+ Tokyo 107, Japan.\\[1.5ex]
+Docusoft Publishing Technologies, \\
+ Suite 300,\\
+ 1120 Hamilton Street,\\
+ Vancouver, B.~C.~VV6B 2S2, \\
+ Canada.\\[1.5ex]
+Interbase,\\
+ Dantes Plads 1,\\
+ DK--1556 Copenhagen V,\\
+ Denmark.\\[1.5ex]
+Personal \TeX, Inc.,\\
+ 12 Madrona Avenue,\\
+ Mill Valley, CA 94941,\\
+ USA.\\[1.5ex]
+\TeX pert Systems Ltd.,\\
+ 5 Northernhay Square,\\
+ Exeter EX4 3ES,\\
+ Devon, UK.
+
+Georgia has some fine catalogues illustrating the Roman, Chel and
+Decorative families: send a cheque for \$6 (\$15 outside USA or
+Canada) to:\\
+ Georgia Tobin,\\
+ 1888 Barnard Drive,\\
+ Powell,\\
+ Ohio 43065.\\
+ Phone: (614) 764--9863.
+
+
+\section{Blackboard Bold}
+
+\subsection{Robert Messer}
+
+Robert Messer published an article `Blackboard Bold' in {\em TUGboat\/} {\bf 9}
+(1988), 19--20, in which he generalized a method used by Knuth in {\em The\/}
+{\em \TeX book\/} to produce such characters. This is a series of Plain \TeX\
+macros which jiggle the characters of CM around, using small kerns and
+the capital I and small rules, to produce a `poor person's blackboard
+bold'.
+
+\subsection{Other Developments}
+
+See also {\bf Custom fonts \& Pandora}, and the {\bf AMSfonts Package} package.
+
+
+\section{APL}
+
+The APL programming language requires many unusual symbol characters,
+which often baffle normal typesetting and word processing systems.
+
+\subsection{Hohti and Kanerva}
+
+Aarno Hohti and Okko Kanerva of the University of Helsinki have
+developed an APL font for use with \TeX. They have `raided' the CM
+character set to this end, so the characters should be similar in
+weight and style with CM.
+
+The font is described in the article `Generating an APL Font' in
+{\em TUGboat\/} {\bf 8} (1987), 275--278.
+
+\subsubsection{Terms of Availability}
+
+The authors can be contacted at:\\
+ University of Helsinki,\\
+ Department of Mathematics,\\
+ Hallituskatu 15,\\
+ SF--00100 Helsinki,\\
+ Finland.
+I assume that the fonts are being freely distributed, since the \MF\
+code for them is available for anonymous FTP as file {\tt CMAPL10}
+from {\tt score.stanford.edu}, in directory \verb|<TEX.TUGBOAT>|.
+
+
+\section{AMSfonts Package}
+
+The American Mathematical Society (AMS) has developed several fonts of
+symbols and alphabets intended for use in mathematical notation.
+
+\subsection{The Fonts}
+
+Three alphabets, collectively known as Euler, were designed by Hermann
+Zapf and implemented in \MF\ at Stanford as part of the \TeX\ project.
+They come in both medium and bold weights, and include Fraktur, script
+and an upright cursive alphabet, which was intended to minimize
+problems with the placement of accents and indices. The Euler fonts
+are considered proprietary, and sources
+are available only under lease.
+
+Two fonts of symbols, including a Blackboard Bold alphabet, are also
+available. Details of these fonts, including character grids, were
+published in {\em TUGboat\/} {\bf 6}(3), 124 ff. These fonts are still rendered in
+\MF79, which is totally incompatible with the current \MF, so
+distribution of the sources is pointless; arrangements are being made
+for their re-implementation in new \MF, but the schedule is uncertain.
+
+\subsection{Terms of Availability}
+
+Together with Cyrillic (see under {\bf Cyrillic}) fonts, this collection is
+called AMSFonts. A set of {\tt TFM} and 300{\tt GF} files ({\tt
+magstep0} only) is available:
+\begin{itemize}
+\item by anonymous FTP from the directory \verb|<TEX.AMSfonts>| at
+{\tt score.stanford.edu};
+\item as part of the standard distribution from Maria Code;
+\item as part of other major \TeX\ distributions.
+\end{itemize}
+The AMSFonts are available from the AMS in a full range of
+magnifications and in additional resolutions on IBM PC-compatible and
+Macintosh diskettes and on mag tape in VAX/VMS format. For
+information, contact:\\
+AMS \TeX\ Library,\\
+ American Mathematical Society,\\
+ P.~O.~Box 6248,\\
+ Providence, RI 02940, USA.\\
+ Phone: (401) 272-9500 or (800) 556-7774\\
+ Internet: {\tt sse@math.AMS.com}\\[1.5ex]
+Contact for technical inquiries:\\
+ Barbara Beeton,\\
+ (same address)\\
+ Phone: (401) 272-9500\\
+ Internet: {\tt bnb@seed.AMS.com} or\\
+ {\tt bnb@xx.lcs.MIT.edu}
+
+
+\section{Custom Fonts \& Pandora}
+
+\subsection{Custom Fonts}
+
+If you are desperate for a \TeX\ font that does not yet exist, why not
+commission a \MF\ programmer to create it?
+
+Neenie N.~Billawala advertises her services as a \MF\ consultant in
+{\em TUGboat\/}. She is responsible for creating the fine calligraphic
+capitals that are part of the Computer Modern typeface family (in the
+{\tt CMSY} fonts).
+
+\subsection{Pandora}
+
+Neenie, a designer, has also created a new typeface called Pandora,
+which is part of a larger research project concerning the possibility
+of breaking the elements of typeface design down into general reusable
+components such as serifs (and terminal endings), bowls, circular
+shapes, arms and so on. Pandora is the result of setting the
+parameters for these components to one particular set of values, but
+many others could be chosen. In this sense, Pandora explores further
+the `parametrization' which is at the heart of Knuth's endeavor with
+\MF. Neenie has nearly finished writing a Stanford Computer Science
+Report about this, called {\em Meta-Marks: Preliminary Studies for a\/}
+{\em Pandora's Box of shapes\/} (to appear). Knuth describes this study as
+`lavishly illustrated studies in parameter variation, leading to the
+design of a new typeface called Pandora'.\footnote{{\em Computer Modern\/}
+{\em Typefaces\/} (Reading etc., 1986), xiii.}
+
+The Pandora typeface is intended to be a `bread and butter' text face
+and has been generated in seriffed, sans-serif and fixed width
+versions. The character set of Pandora coincides with {\tt CMR} and
+{\tt CMTT}, etc., and thus it does not include the math symbol
+characters and extensibles.
+
+\subsubsection{Terms of Availability}
+
+Neenie hopes, in the longer run, to donate Pandora to the \TeX\
+community, perhaps submitting it for inclusion in the standard
+distributions.
+
+\subsection{Blackboard Bold \& Outline}
+Neenie is also working on a Blackboard Bold, to be compatible with
+Times Roman, for the AMS, and an outline font.
+
+\subsubsection{Contact}
+
+Neenie Billawala,\\
+ 841 Stendhal Lane,\\
+ Cupertino, CA 95104, USA.\\
+ Phone: (408) 253-4833\\
+ Uucp: {\tt (ihnp4, seismo, decwrl, \\
+ ucbvax, \ldots\ )!sun!metamarks!nb}
+
+
+\section{Bitstream Font Family}
+
+%\paragraph{Date of information} March 10, 1988
+
+\subsection{The Fonts}
+
+In my view, one of the most exciting developments in the area of Roman
+alphabet typeface availability for \TeX\ has been the recent
+announcement by Personal \TeX\ Inc., of the PTI Font Interface Package
+(FIP). This is an MS DOS program that converts the outline typefaces
+of the Bitstream typeface library into {\tt PXL} (and then {\tt PK})
+fonts, with associated {\tt TFM} files, for use with \TeX\ in a manner
+analogous to the use of the use of the Computer Modern fonts.
+
+Since the Bitstream typeface outline files for any given font contain
+more than the 128 characters usual in a \TeX\ font, the extra
+Bitstream characters can be
+generated in a second, complement font. The Bitstream fonts generated
+by the FIP contain the same characters as {\tt CMR10}. However,
+equivalents of the math italic, math symbol and extensible fonts of
+the CM family are not provided, so the Bitstream fonts are for use in
+typesetting predominantly textual matter. (One could, of course, mix
+the fonts, using Bitstream for the text and CM for the mathematics.)
+
+The method of producing the font bitmaps is exactly the same, in
+principle, as using \MF, except that one has no access to the
+underlying character descriptions. The FIP reads the typeface outline
+data and generates bitmap fonts at any desired point size between 6
+and 72 points and above, and at any resolution, from below 100dpi for
+IBM PC screens, to over 1000dpi for typesetters.
+
+The Bitstream typeface library advertised by Personal \TeX\ at present
+includes the following typefaces, each consisting of a regular, an
+italic, a bold and a bold italic face:
+Baskerville,
+Bitstream Charter,
+Bitstream Cooper Light,
+Century Schoolbook,
+Courier,
+Dutch (i.e., Times Roman),
+Futura Book,
+Futura Light,
+Futura Medium,
+Goudy Old Style,
+ITC Avant Garde Gothic,
+ITC Bookman Light,
+ITC Galliard,
+ITC Garamond Condensed,
+ITC Garamond,
+ITC Korinna,
+ITC Souvenir Light,
+Letter Gothic,
+News Gothic,
+Prestige,
+Serifa,
+Swiss (i.e., Helvetica),
+Swiss Condensed,
+Swiss Light,
+Zapf Calligraphic (i.e., Palatino),
+Zapf Humanist (i.e., Optima),
+and a selection of Headline faces including
+Bitstream Cloister Black,
+Broadway,
+Cooper Black, and
+University Roman.
+
+New Fontware outline typefaces are regularly released by Bitstream:
+their catalogue currently has 40 faces.
+
+Users of operating systems other than MS DOS can presumably use the
+Bitstream {\tt PXL} or {\tt PK} fonts (with {\tt TFM}s) once generated
+on a PC/AT, just by uploading them with, say, Kermit. Some discussion
+of this possibility has just appeared in \TeX hax (30 June 1988, issue
+60). Peter Flynn reports having done exactly the above (fonts
+generated on a PC and Kermitted up to a VAX) with technical success
+but aesthetic failure: apparently the Bitstream fonts don't look nice
+on a LN03. Because he says that his Bitstream fonts only contain the
+ASCII characters 33--126, it seems to me that he cannot be using the
+FIP to generate his {\tt PK} and {\tt TFM} files, but some other
+utility ({\tt HP2TEX}?). In the same \TeX hax issue, Joachim Schrod
+has a technical note about the format of Bitstream {\tt PK} and {\tt
+PXL} fonts as revealed by {\tt PKtype}: apparently they are faulty,
+and may not be correctly printed by all {\tt DVI} driver programs.
+
+\subsection{Quality}
+
+The creation of the font bitmaps is done by the FIP using whatBitstream calls `smart outlines'. Typographic rules are stored with
+the typeface outlines and are applied at the time of bitmap
+generation, using artificial intelligence algorithms (originally
+implemented on Symbolics 3600 Lisp workstations) to tailor significant
+features of the font to its point size, and the resolution and marking
+characteristics of the printing device. Some typographically
+significant features that are so treated are the stem weight,
+x-height, cap height, side bearings, and baseline alignment. So a 6
+point Bitstream font is not a mere linear reduction of some larger
+design size, just as {\tt CMR6} is not simply a small {\tt CMR10}.
+This is very significant for the high quality of the fonts at small or
+large sizes, and goes some of the way towards meeting the argument
+made by Knuth in {\em The \TeX book\/} (p.16), against scaling fonts much
+beyond their design size.
+
+Optional software switches set when running the FIP permit the
+adjustment of accents and letter spacing. The newest release of the
+Fontware software also includes the choice of producing bitmaps
+appropriate to write-white as well as write-black marking engines. In
+the former case, the software will add a half-pixel layer all the way
+around a character to compensate for the erosion that occurs on white
+writers.
+
+A recent discussion of fonts in {\em PC Magazine\/} (March 15, 1988, issue
+{\bf 7}(5), p.\,238) noted that:
+\begin{quotation}
+Bitstream fonts are the same ones you get in already-generated form
+from H[ewlett] P[ackard], are widely (though not exclusively) used in
+the printing industry, and are used in our Tegra galley-generating
+machine.
+\end{quotation}
+
+A useful article comparing Bitstream fonts with Adobe PostScript fonts
+was published in the magazine {\em Publish!\/} (March 1988, issue {\bf 3}(3), pp.46
+ff.). It included valuable illustrations of both manufacturers' fonts
+at several different resolutions.
+
+I myself have only experimented with the Dutch and Swiss fonts at
+10pt, and then only on a $640\times400$ pixel screen, and at 240dpi on
+a 9-pin matrix printer. On both these devices the Bitstream fonts
+appear {\sl much} superior to the nearest CM equivalents, ({\tt CMR10}
+and {\tt CMSS10}). The characters are somewhat broader, with
+relatively rounder bowls and shorter ascenders, and give a more even,
+regular appearance across the page. They make the CM fonts look very
+uneven by comparison (and I am a great fan of CM). I suspect that the
+CM fonts would compare more favorably at higher resolutions, since
+they were not designed for such poor output devices.
+
+The Bitstream Font Interface Package offers \TeX\ users (without
+access to
+PostScript printers) access for the first time to a proper typeface
+catalogue, and a highly professional one at that.
+
+\subsection{Other Developments}
+
+Although Bitstream has released 40 Fontware outline typefaces, it
+actually has a library of over 1000 digital typefaces waiting in the
+wings. This collection includes traditional designs, original
+designs, pi-fonts, and non-Latin fonts such as Arabic, Cyrillic,
+Greek, Gujarati, Hebrew, Laotian, and Tai Dan. However, all these
+exist in plain digital outline format only, which means that the
+outlines have not had the AI scaling optimization rules added to them,
+and are thus not `smart outlines' such as can be used with the
+Fontware Installation packages. They are are thus not at present
+marketed widely.
+
+Intelligent font scaling for Kanji fonts (Nippon Information Science
+Ltd.~Iwata Gothic, with other faces to follow) was announced in March
+1988, and is offered to OEMs.
+
+\subsection{Terms of Availability}
+
+The Fontware Installation Kit costs \$195, and normally comes with the
+Swiss font family (one can make a special request to have the Dutch
+family instead).
+
+\subsection{Contacts}
+Personal \TeX\ Inc.,\\
+ 12 Madrona Avenue, \\
+ Mill Valley, CA 94941.\\
+ Phone: 415 388-8853. \\
+ Telex: 51060 10672 PCTEX.\\
+ Fax: 415 388-8865. \\[1.5ex]
+Bitstream,\\
+ Athenaeum House,\\
+ 215 First Street,\\
+ Cambridge, MA 02142.\\
+ Phone: 617 497-622.2\\
+ Telex: 467237.\\
+ Fax: 617 868-4632.
+
+
+\section{Times Roman in \protect\MF} % use a big logo font if
+% you've got one.
+%\paragraph{Date of information} March 10, 1988, from \TeX hax 1988,
+%issue 22.
+
+\subsection{Kemmish}
+
+\subsubsection{The Font}
+The creator of the font, Ian Kemmish, writes:
+\begin{quotation}
+I have a Times font in \MF\ which I have been tinkering with over the
+past six or seven months. It is modelled on Monotype Times New Roman
+(visually---no calipers in sight!) The standard of rasterization is
+about comparable to a LaserWriter, but the typography is of necessity
+a lot more amateurish. The regular font is largely OK, the italic is
+a few weeks behind and probably needs some tweaking. There is a
+rather lumpy semibold which needs parameter tweaking. I suspect a
+genuine bold needs a new set of minuscule routines. I also have a
+typewriter font generated from it, and am working on a Nebiolo
+Eurostyle sans-serif font. (I needed something easy after the Times!
+I want to do Helvetica sometime soon.)
+\end{quotation}
+
+\subsubsection{Terms of Availability}
+
+Ian Kemmish writes:
+\begin{quotation}
+I'd be happy to distribute what I have, though I suspect my employers
+would want to charge something for it. Ideally, I'd like to send out
+some {\tt GF} files first to people who are interested in test-driving
+them and can make constructive comments about how to improve them.
+The \MF\ code is still in a state of flux. I'd hate to distribute it
+and have a lot of unco-ordinated changes being made to it all!
+\end{quotation}
+
+\subsubsection{Contact}
+
+Ian Kemmish can be contacted at: \\
+ Whitechapel Workstations, \\
+ 75 Whitechapel Road, \\
+ London E1 1DU, England.\\
+ Phone: (+44) 01 377 8680 \\
+ Telex: (UK) 885300 WCW G \\
+ Fax: (+44) 01 247 4589 \\
+ Uucp: {\tt ian@wcw.co.uk}\\
+ OldUucp: {\tt \ldots !mcvax!ukc!wcwvax!ian}
+
+\subsection{Other Developments}
+
+See also the MF Roman Family by {\bf Georgia Tobin}, and the Dutch typeface
+by {\bf Bitstream}.
+
+
+\section{Lucida}
+
+Lucida is the name of one of the typefaces designed by Kris Holmes and
+Chuck Bigelow. Its main design aim is that it be legible and
+beautiful at low as well as high resolutions, and it is probably the
+first original typeface family produced for digital printers and
+displays.\footnote{Another font with some similar design goals is
+Matthew Carter's Bitstream Charter.} By low resolution, Holmes and
+Bigelow mean laser printers and computer screens. The font has been
+discussed in the following publications:
+\begin{description}
+\item Jonathan A.~Epstein, `Best Font Forward', {\em Digital Review\/} (July
+1986), 82--87.
+\item C.~Bigelow and K.~Holmes, `The Design of Lucida: an Integrated
+Family of Types for Electronic Literacy', in {\em Text Processing and\/}
+{\em Document Manipulation\/} edited by J.~C.~van Vliet (Cambridge, 1986),
+1--17.
+\item `Alumna Designs First LaserWriter Typeface', {\em Harvard Extension\/}
+{\em Newsletter\/} {\bf 8}(2) (Spring 1988).
+\end{description}
+The second of these articles is itself printed in the Lucida typeface.
+It goes into detail about the design concepts of Lucida, with
+illustrations.
+
+\subsection{The Fonts}
+
+The Lucida family includes the following eight fonts: Roman, Italic,
+Bold, and Bold Italic, in both seriffed and sans-serif styles. Lucida
+has been called a `super family' because of the wide range of
+characters and fonts it provides, including compatibility with the
+full CM character set. Unusual features of Lucida fonts include the
+fact that the italic sans-serif is a true cursive style, rather than a
+slanted Roman, and that there are alternate sets of capitals, one
+heavier in weight, for English and French typographers, and one
+lighter, for Germanic texts which use extensive capitalization, and
+therefore need de-emphasized capitals.
+
+The screen `versions' of Lucida are at such low resolution
+(75--100dpi) that they cannot be regarded as straight reproductions of
+their higher resolution counterparts. They are therefore called
+Pellucida, to suggest that the designs are related to Lucida, but
+optimized for `pel' based screen displays.
+
+\subsubsection{Adobe}
+
+Chuck Bigelow informed me in April 1988 that Adobe Systems is dealing
+with the release of several Lucida typefaces for use with \TeX. Dan
+Mills, Manager of Typography at Adobe informed me later in the same
+month that:
+\begin{quotation}
+Knowing people would want these fonts for use with \TeX\ (because of
+the Math versions, \ldots), we purposely extended our normal character
+set for these fonts (by about 16 characters) to cover the `\TeX\ text'
+set (Figure 1 in Appendix F of {\em The \TeX book\/}). What I mean is, thesefonts have a union of our standard character set and the \TeX\ text
+set.
+\end{quotation}
+
+The following faces have already been released by Adobe as
+downloadable PostScript fonts on both Mac and PC disks:
+Lucida Roman (seriffed),
+Lucida Italic,
+Lucida Bold,
+Lucida Bold Italic,
+Lucida Sans Roman (sans-serif),
+Lucida Sans Italic,
+Lucida Sans Bold, and
+Lucida Sans Bold Italic.
+
+The following will be released soon:
+Lucida \TeX\ Math Italic,
+Lucida \TeX\ Math Symbol,
+Lucida \TeX\ Math Extension, and
+Lucida Sans Typewriter.
+Dan notes that the Math fonts have the same character sets as shown in
+appendix F of {\em The \TeX book\/}. The Lucida Sans Typewriter has another
+union of Adobe's standard set, this time with the \TeX\ text
+typewriter set, shown in figure 3 in the same appendix.
+
+Bigelow suggested that for dates of release and information on {\tt
+TFM} files, etc., one should contact Adobe. Once again, Dan Mills was
+most helpful. He said:
+\begin{quotation}
+As for {\tt TFM}'s, we've been getting a lot of help from Barry Smith
+of Kellerman \& Smith \ldots\ to produce these. We aren't finished.
+If you are a \TeX tures user, they will certainly be willing to help
+you out. If not, we plan to make these metrics available to the
+general \TeX\ community `somehow' in the near future. Exactly how they
+will be distributed remains to be decided.
+\end{quotation}
+
+\subsubsection{Imagen}
+
+Chuck Bigelow also noted that the Imagen Corporation currently offers
+various Lucida typefaces, and an upgrade to the full \TeX\ character
+set will be released in July 1988. These will include the
+Lucida seriffed family, the
+Lucida Sans family, and the
+Lucida Sans Typewriter family. Imagen will produce the \TeX\ Math
+fonts if there is demand from their users. Imagen Lucida will be
+available in outline format for their UltraScript (PostScript clone)
+and DDL language printers, and for their imPRESS printers. The Imagen
+fonts should be metrically compatible with the Adobe fonts. They are
+made from exactly the same outline data.
+
+\subsubsection{Compugraphic}
+
+Chuck informs me (Fri Jun 17) that Compugraphic Corporation has
+licensed the Lucida seriffed family (roman, italic, bold, bold italic)
+and the three basic \TeX\ math fonts (math italic, math symbol, math
+extension) for their 8600 and 9600 typesetters, and perhaps the 8400
+as well. Contact Cynthia Marsh or Norbert Florendo at CG for estimate
+of availability, price, etc. Compugraphic Corporation, Type Division,
+Wilmington, MA.
+
+(This appears to raise the possibility of Lucida being available for
+the Compugraphic typesetters before CM, although Compugraphic are in
+principle committed to providing CM too (for a price).
+
+\subsubsection{Other Developments}
+
+A maker of inexpensive personal computers and printers will announce
+Lucida availability very shortly. The fonts will be metrically
+compatible with Adobe and Imagen.
+
+Chuck and Kris are also working on outline versions of several of the
+additional fonts shown in Knuth's Volume E of {\em Computers and\/}
+{\em Typesetting\/}, and fonts analogous to the Euler family, including
+Bold Greek,
+Bold Script,
+Bold Symbol font,
+Small Capitals, as well as a
+Chancery,
+lower-case Script,
+Fraktur,
+Hebrew, and others.
+Light and Demibold versions of both seriffed and sans-serif families
+are also in progress, as well as the `Bright' versions used in
+Scientific American. However, these must await a distributor like
+Adobe or Imagen to reach the market.
+
+Chuck also reports that in their studio, Bigelow \& Holmes, he and
+Kris have produced bitmap fonts in the \TeX\ character set (as well as
+PostScript character set) in {\tt PXL} format for the Lucida seriffed
+and Lucida Sans families in the following point sizes, at 300dpi: 6,
+8, 10, 12, 14, 18, 24, and the same sizes, excepting 6 point, for 75
+dpi and 100 dpi screens. Currently there is no distributor for these.
+These are hand-tuned bitmaps that are slightly different for each
+size, and therefore have their own (simple) {\tt TFM} files that are
+not fully compatible with those for the Adobe PostScript outlines.
+However, they feel that the quality of the hand-tuned fonts is usually
+higher than that of the algorithmically produced bitmaps from
+outlines. They haven't finished bitmap versions of the math fonts or
+the typewriter fonts yet, but they do have an International PhoneticAlphabet and some other oddities in bitmap.
+
+\subsection{Contacts}
+
+Chuck Bigelow can be reached at the Department of Computer Science at
+Stanford:\\
+ Phone: (415) 723 3827\\
+ Arpa: {\tt cab@sail.stanford.edu}, \\
+ or at his San Francisco studio, Bigelow \& Holmes:\\
+ Phone: (415) 326-8973.\\[1.5ex]
+Dan Mills can be reached at:\\
+ Adobe Systems Inc.,\\
+ 1585 Charleston Road, P.~O.~Box 7900,\\
+ Mountain View, CA 94039-7900, USA.\\
+ Phone: (415) 962-2100\\
+ Net: {\tt adobe!mills@decwrl}), (and possibly\\
+ {\tt mills@ucbvax.berkeley.edu})
+
+
+\section{Icelandic}
+
+%\paragraph{Date of information} March 10, 1988, from \TeX hax 1988,
+%issue 22.
+
+\subsection{Pind}
+
+\subsubsection{The Font}
+
+On March 10, 1988, Jorgen Pind reported in \TeX hax 1988, issue 22,
+that he is running an unmodified \TeX\ with new fonts and formats
+(including hyphenation) which cater for Icelandic.
+
+\subsubsection{Contact}
+
+Jorgen Pind, \\
+ Institute of Lexicography, \\
+ University of Iceland,\\
+ Reykjavik 101, Iceland.\\
+ Internet: {\tt jorgen@lexis.hi.is}\\
+ Uucp: {\tt \ldots mcvax!hafro!rhi!lexis!jorgen}
+
+
+\section{OCR--A}
+
+%\paragraph{Date of information} Information given in \TeX hax 1987,
+%issue \#106.
+
+\subsection{Lillqvist}
+
+In \TeX hax 1987, issue 106, information was given about an OCR--A
+font coded in \MF84 by Tor Lillqvist, VTT/ATK (Technical Research
+Centre of Finland, Computing Services).
+
+\subsubsection{The Font}
+
+Lillqvist's OCR--A is based on ISO Recommendation R1073, 1st ed., May
+1969 (which he thinks is probably obsolete by now).
+
+\subsubsection{Terms of Availability}
+
+The font is distributed free of charge. On 1 June 1987, Brandon
+S.~Allbery ({\tt allbery@ncoast.UUCP}) and Michael Lichter posted the
+\MF\ sources for the OCR--A on Usenet, in {\tt comp.sources.misc}.
+
+\subsubsection{Contact}
+
+Tor Lillqvist,\\
+ VTT/ATK,\\
+ Lehtisaarentie 2,\\
+ SF--00340 Helsinki, Finland.\\
+ Net: {\tt tml@fingate.bitnet}, or\\
+ {\tt tml@santra.UUCP}, or \\
+ {\tt mcvax!santra!tml}.
+
+
+\section{Miscellaneous}
+
+\subsection{Austin Code Works}
+
+The Austin Code Works has a large collection of bitmap fonts that work
+with \TeX, and which were originally created at SAIL (Stanford
+Artificial Intelligence Lab) in the late 60s or early 70s (I think).
+Because these fonts are not coded in up-to-date \MF, what you get is
+what you get, i.e., you cannot change the size or resolution of the
+fonts. I believe they are all (or most) 200dpi fonts. Bear in mind
+that although you might get, say, a Hebrew font, there are no
+accompanying macros to implement it at the keyboard level.
+
+\subsubsection{The Fonts}
+
+The `KST Fonts by Les Earnest' are described thus in the ACW handout:
+\begin{quotation}
+Originally developed for the Xerox XGP printer, the 137 KST fonts
+include Hebrew, Greek, Old English, Old German, Cyrillic, hand[sign
+alphabet], and Tengwar alphabets in addition to the Roman alphabet in
+a large number of eclectic styles. Specify \TeX\ or bitmap format.
+Both come with an extraction and display program.
+\end{quotation}
+The fonts include such essentials as single character fonts for the
+Stanford and MIT logos (separate fonts for each, naturally), two viewsof Snoopy, two views of Starship Enterprise, three fonts of chess
+pieces, several sans-serif fonts, and what looks as if it might be a
+very tiny Arabic font.
+
+\subsubsection{Terms of Availability}
+
+The collection of fonts costs \$30.
+
+\subsubsection{Contact}
+
+The Austin Code Works,\\
+ 11100 Leafwood Lane,\\
+ Austin, Texas 78750-3409, USA.\\
+ Phone: (512) 258-0785\\
+ BBS: (512) 258-8831\\
+ FidoNet: 1:382/12\\
+ Net: {\tt acw!info@uunet.uu.net}
+
+\subsection{{\tt SPRITE.STY}}
+
+If you use \LaTeX, and you only need one or two extra characters, an
+ingenious and very easy way to generate them has been devised by
+Martin Costabel. It is a \LaTeX\ style called {\tt SPRITE}, and the
+code and documentation were published on 14 November 1987 in issue 1.8
+of \TeX Mag, an online \TeX\ magazine put out by Don Hosek ({\tt
+dhosek@hmcvax.Bitnet}). Here is an extract from Martin's
+documentation:
+\begin{quotation}
+{\tt SPRITE.STY} is a \LaTeX\ macro that allows you to define in a
+quick and dirty way your own symbols. You just have to define the
+character as a dot pattern on your screen and enclose it by
+\verb|\sprite| and \verb|\endsprite| commands. Of course, I know,
+\TeX\ is awfully professional and this primitive technique will not
+provide results as good as a \MF--designed character or even one drawn
+using device-dependent \verb|\special| commands, but if you just need
+one special character or some cute little symbol and you don't have
+the time\slash brains\slash Macintosh\slash superuser-privilege\slash
+money-for-AMS-fonts\slash or whatever-is-necessary for a professional
+solution, this might produce acceptable results.
+\end{quotation}
+
+Using {\tt SPRITE.STY} one `draws' the character to be defined as a
+pattern of characters on a grid. Figure \ref{fig1} shows how {\em schwa\/} is
+done.
+\begin{figure}[htb]
+\begin{center}
+\mbox{}\hrulefill\mbox{}
+\begin{verbatim}
+\def\schwa{\FormOfSchwa\kern 1 pt}
+ % Only necessary if \kern... is wanted
+\sprite{\FormOfSchwa}(16,24)[0.4 em, 1 ex]
+ % Resolution ca. 200x340 dpi.
+:.......BBBBBBBBBB....... |
+:....BBBB........BBBB.... |
+:..BBB.............BBBB.. |
+:.BB.................BBB. |
+:.B...................BBB |
+:.....................BBB |
+:.....................BBB |
+:.....................BBB |
+:BBBBBBBBBBBBBBBBBBBBBBBB |
+:BBB..................BBB |
+:BBB..................BBB |
+:BBB.................BBB. |
+:.BBB...............BBB.. |
+:..BBBB...........BBBB... |
+:....BBBBB.....BBBBB..... |
+:.......BBBBBBBB......... |
+\endsprite
+\end{verbatim}
+\caption{\label{fig1}{\tt SPRITE.STY} commands for {\em schwa\/}.}
+\mbox{}\hrulefill\mbox{}
+\end{center}
+\end{figure}
+To use this character in your \LaTeX\ document, all you have to do is
+use the command \verb|\schwa|. This method uses a lot of \TeX's
+memory, and is only suitable for characters which are used rarely, say
+a few times on a page.
+
+\subsubsection{Contact}
+
+Martin Costabel.\\
+ Net: {\tt xbr1da29@ddathd21.bitnet}
+
+\subsection{HP2TEX (HP Font Conversion)}
+
+%\paragraph{Date of information} March 11, 1988.
+
+\subsubsection{The Program}
+
+In February 1988, the uuencoded {\tt ARC} file {\tt HP2TEX} appeared
+on Usenet, in {\tt comp.text}. It included the Turbo Pascal 3.0
+source code and a compiled DOS version of {\tt HP2TEX}, a program to
+read a Hewlett Packard soft font and generate two files useful to
+\TeX\ users, a {\tt PL} and a {\tt PXL} file.
+
+Since the HP soft fonts are bitmap fonts generated from the Bitstream
+outline typefaces (see the {\bf Bitstream} section), this is another way to
+produce the latter family of fonts. However, the {\tt TFM} file
+produced by {\tt HP2TEX} does not contain the information required tomake ligatures, etc.\ (see below), so in practice, if real quality is
+sought, it would be better to buy the FIP from Personal \TeX\ Inc.
+
+\subsubsection{Usage}
+
+The {\tt HP2TEX} program prompts the user for the names of the font
+files for input and output, and also for the original design size of
+the HP font, and its magnification (so that a 12pt HP font can make a
+12pt {\tt PXL} font, or a 10pt {\tt PXL} font magnified
+\verb|\magstep1|). Names can be supplied on the command line, and
+will be given appropriate extensions if necessary. The output is a
+{\tt PXL} font with its associated property list ({\tt PL}) file. The
+{\tt PL} file can be converted to a {\tt TFM} file (with or without
+editing: see below) by the \TeX ware program {\tt PLtoTF} (compiled
+DOS version available on the PC\TeX\ Bulletin board: (415) 388-1708).
+The {\tt PXL} file can be left as it is, or converted to a smaller
+{\tt PK} file by {\tt PXtoPK} (also on the same BBS).
+
+The {\tt PL} file generated by this program contains several
+parameters that determine the appearance of the \TeX\ output. These
+parameters control the inter-word glue, the space after a period, the
+size of a quad and em space, and the parameters determining accent
+placement. The `correct' values for these parameters are NOT
+contained in the HP soft fonts. They are estimated by {\tt HP2TEX},
+and might not be very good estimates. If your output is visually bad,
+read about {\tt fontdimen} parameters in the back of {\em The \TeX book\/} (or
+{\em The \MF{}book\/}) and adjust their values in the {\tt PL} file. Then
+generate a new {\tt TFM} file. The authors have not attempted to deal
+with kerns, although you could add those to the {\tt PL} file as well.
+Ligatures require the same action, assuming the ligature glyph is in
+the font at all.
+
+The authors note that certain fonts generated by GLYPHIX appear to
+convert with a bad underscore character that is far too low. This is
+in fact how the underscore is encoded in the font, not an artifact of
+the conversion.
+
+\subsubsection{Terms of Availability}
+
+{\tt HP2TEX} was written by David Strip, with help from Dimitri Vulis.
+The program is copyrighted, and in keeping with the spirit of the
+\TeX\ community, you are granted permission to copy and redistribute
+it so long as you provide the source and the {\tt README} file along
+with any executable. In addition, you may not charge any fee in excess
+of the actual cost of the media and reasonable labor charges. This
+charge may not exceed \$3.00 per disk plus shipping costs.
+
+{\tt HP2TEX} is available on {\tt SIMTEL20} (FTP or Listserve access)
+and GENIE, as well as some BBSs.
+
+\subsubsection{Contact}
+
+David Strip,\\
+ 431 Camino de la Sierra NE,\\
+ Albuquerque, NM 87123, USA.\\
+ Arpa: {\tt drstrip@sandia-2.arpa}\\
+ Uucp: {\tt \ldots(ucbvax, cmu!rice, ihnp4!lanl, \\
+ gatech)!unmvax!intvax!drstrip}\\[1.5ex]
+Dimitri L.~Vulis,\\
+ 529 W.~111 Street, \#61\\
+ New York, NY 10025-1943, USA.\\
+ Bitnet: {\tt dlv@cunyvms1}
+
+\subsection{Bar Codes}
+
+Issue 94 of \TeX hax 1987 carried the following note from Dimitri
+Vulis:
+\begin{quotation}
+I was amazed to find out that business people pay enormous money for
+the ability to produce bar codes. This ought to be {\sl trivial} with
+\TeX. So, I got hold of a public domain BASIC program that supposedly
+does that and lifted the codes and put them into \MF\ (it was {\sl
+easy}). Caveat(s): I have never tested these codes with an OCR. The
+BASIC program said it used `3 of 9' encoding. I presume it's not the
+same as UPC. The sizes may be off---I took them from the BASIC
+program that used HP LJ's 100dpi graphics mode.
+
+Remarks:
+\begin{itemize}
+\item White space is a displayable character.
+\item There are 9 significant strips, bwbwbwbwb; 3 of them are wide.
+\item The \verb|white_naro| at the end of each code is the inter-code
+spacing.
+\end{itemize}
+The original BASIC program was written by `Bill Wood Mil., WI' and
+later re-written by `Bill Baines, Enfield, CT.'
+\end{quotation}
+Dimitri notes that he has not tested the bar codes.
+
+\subsubsection{Terms of Availability}
+
+The \MF\ code for the bar codes is available for anonymous FTP from
+{\tt score.stanford.edu} as file \verb|<TEX.TEXHAX>VULIS.TXH|. A copy
+has also been forwarded to \TeX -L for BITNETers.
+
+\subsubsection{Contact}
+
+For Vulis's address see under {\bf HP2TEX}.
+
+\subsection{Old English}
+\subsubsection{Henderson}
+Doug Henderson has implemented \MF\ on the PC/AT family of personal
+computers, and is also responsible for generating the high resolution
+bitmaps of several of the non-standard fonts illustrated in recent
+issues of {\em TUGboat\/}, such as the APL and Greek fonts.
+
+On Tuesday May 3, 1988, Doug wrote to me with several useful
+corrections to the present article, and included the following
+information:
+\begin{quotation}
+I have recently created a few characters for an associate at the
+International Christian University by the name of William Schipper.
+He requested that the Old English characters thorn (upper/lower case)
+and eth (upper/lower case) be created for him. As he was referred to
+me by Knuth, I decided to take this challenge and create the
+characters. Mainly, they are variations of characters found in
+Computer Modern already, with some polishing up.
+
+This will probably be the first in a series of ad-hoc characters I
+create for various folks in need, and I will keep them in a sort-of
+miscellaneous font category. For now, they are compatible with {\tt
+CMR10}.
+\end{quotation}
+
+Doug is willing to distribute the Old English characters free of
+charge. He says that the final versions should be done in time for
+this year's TUG conference in Montr\'{e}al. Contact Doug at:\\
+ Division of Library Automation,\\
+ University of California, Berkeley,\\
+ 186 University Hall,\\
+ Berkeley, CA 94720, USA.\\
+ Bitnet: {\tt dlatex@ucbcmsa}\\
+ Arpa: {\tt dlatex\%ucbcmsa.cc@berkeley}
+
+\subsubsection{Curran}
+
+Charles Curran of the Oxford University Computing Service notes that
+he is `generating odd squiggles for a user's medieval English', but he
+feels that the quality isn't adequate for wider dissemination at
+present. Contact Charles at:\\
+ OUCS,\\
+ 13 Banbury Road,\\
+ Oxford, OX2 6NN, England.\\
+ Phone: (UK) 0865 56721\\
+ Net: {\tt charles@vax.oxford.ac.uk}
+
+
+\subsubsection{Bradfield}
+%\paragraph{Date of Information} June 15, 1988, Christina Thiele
+
+In a note to \TeX hax 1987, issue 73 (sent on Fri, 04 Sep 1987),
+Julian Bradfield reported that he has preliminary versions of the
+letters eth, thorn and yogh for Computer Modern. He said:
+\begin{quotation}
+They are rather hastily cobbled together from bits of real CM letters,
+so are not very robust at present; in particular my yogh is not yet
+very
+happy on lowres devices, though I hope to fix that soon. They look OK
+(to me!) in roman, italic, bold and sans-serif at 300 dpi, which is
+the highest resolution available to me.
+\end{quotation}
+If you want to use these characters, mail Julian at:\\
+ c/o Christ's College, \\
+ Cambridge, CB2 3BU, England.\\
+ Janet: {\tt jcb7@uk.ac.cam.phx}\\
+ Earn/Bitnet: {\tt jcb7@phx.cam.ac.uk}\\
+
+\subsubsection{Ridgeway and Barnett}
+%\paragraph{Date of information} June 7, 1988, Pierre MacKay
+
+A font to supplement the basic Latin alphabet of Computer Modern with
+Old English characters will be released in Autumn of this year by the
+University of Washington Humanities and Arts Computing Center.
+Macros for direct input and translators from various Personal
+Computer editor files will accompany the release.
+
+For the contact address, see under {\bf Tamil} above.
+
+\subsection{Vietnamese}
+
+A note from Trung Dung at the end of March 1988 signalled his
+intention of using \MF\ to create a Vietnamese font. This uses a
+Roman character set, with a wide range of diacritical marks. Trung
+hopes to finish some time this summer. He can be contacted at {\tt
+trung@umb.edu}.
+
+
+\section{The PostScript Question}
+
+This article does not deal with the availability of PostScript fonts,
+because it would double its length to do so, and because the author
+has never used a PS device, and really wouldn't know what he was
+talking about. Suffice it to say that instead of sending a bitmap to
+the printer, a PostScript output file sends the printer instructions
+on how to construct character bitmaps at the time of printing. These
+PostScript bitmaps are created in a manner analogous to running \MF,
+in that the characters are encoded in a high level language, which
+gives the outline, filling or stroke routines for creating glyphs.
+Like \TeX\ {\tt TFM} files, PostScript fonts have their own fontmetric files, called {\tt AFM} files. A utility program called {\tt
+AFtoTFM} exists to convert {\tt AFM} files to {\tt TFM} ones (a copy
+compiled and ready to run under DOS is available on the Personal \TeX\
+BBS). Since all the font information \TeX\ needs to create a {\tt
+DVI} file is in the {\tt TFM} file, \TeX\ can thus create {\tt DVI}
+files ready to be printed using PostScript fonts. All that is needed
+is a {\tt DVI} driver that knows how to call for a PostScript font in
+the right way, and such drivers are available. Thus, with a bit of
+tinkering, it is perfectly feasible to use PostScript fonts in a \TeX\
+document, and there is a large and growing catalogue of such fonts.
+Adobe themselves have a catalogue of fonts which they market directly,
+which currently includes 230 individual fonts (several for most
+typefaces). There are also several other companies and individuals
+producing PostScript fonts in various styles and for a wide range of
+languages, using such font creation tools as Fontographer on the Mac,
+or Publisher's Type Foundry on the PC.
+
+\end{document}
+
+
diff --git a/info/digests/texhax/txh/wujastyk2.txh b/info/digests/texhax/txh/wujastyk2.txh
new file mode 100644
index 0000000000..bbb75ae365
--- /dev/null
+++ b/info/digests/texhax/txh/wujastyk2.txh
@@ -0,0 +1,554 @@
+Subject: follow up to FONTMEMO
+Message-Id: <20 OCT 1988 14:46:29 UCGADKW@UK.AC.UCL.EUCLID>
+
+For your sins, you are on my mailing list to receive news about
+TeX fonts. Let me know if you want to be taken off! The
+following article will, I hope, appear in the next TUGboat.
+
+
+Character code reference:
+Upper case letters: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+Lower case letters: abcdefghijklmnopqrstuvwxyz
+Digits: 0123456789
+Square, curly, angle braces, parentheses: [] {} <> ()
+Backslash, slash, vertical bar: \ / |
+Punctuation: . ? ! , : ;
+Underscore, hyphen, equals sign: _ - =
+Quotes--right left double: ' ` "
+"at", "number" "dollar", "percent", "and": @ # $ % &
+"hat", "star", "plus", "tilde": ^ * + ~
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% cut here %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% File FOLLOW1.TEX, in LaTeX format. October 20, 1988.
+\documentstyle[ltugbot,tb21wuja]{article}
+\title{Further Faces}
+\author{Dominik Wujastyk}
+\date{October 20, 1988}
+\begin{document}
+\maketitle
+\tableofcontents
+
+Since `The Many Faces of \TeX' appeared in issue {\bf 9.2} of
+{\it TUGboat\/},\footnote{`The Many Faces of \TeX: a Survey of Digital
+\METAfont s', {\it TUGboat\/} {\bf 9.2} (1988), 131--151.} information about
+\METAfont s has continued to flow in, thankfully in somewhat
+diminished quantities. Since I wrote the last article I have
+moved from the USA to England, and although all the network
+services are available here too (at a price), in practice Janet
+is not as open a medium as the Internet, and I feel it is more
+likely now that I might miss news about fonts, especially if it
+appears in UseNet, to which I currently have no access. I
+particularly miss the astonishing power of the American brand of
+FTP. However, the vast \TeX\ archive at Aston, maintained by
+Peter Abbott, is more comprehensive than any other I know of, and
+NIFTP and mail server access to this archive greatly compensates
+for the sense of network isolation. All the same, if you know of
+any \METAfont s that I have not mentioned, I would be glad of the
+news.
+
+For new subscribers to {\it TUGboat\/}, issue {\bf 9.2} contained a survey of
+the existing fonts known to be available for use with \TeX,
+including non-roman scripts, other styles, and much besides.
+That issue also included \MF\ code and examples for a new punk
+\METAfont\ called just {\tt PUNK}, by Don Knuth.\footnote{`A Punk
+Meta-font', {\it TUGboat\/} {\bf 9.2} (1988), 152--168.} Perhaps the most
+extraordinary part of that article is Don's description of how he
+coded the font, extremely rapidly, and with no reference at all
+to drawings for the letters from V to Z, producing the \MF\ code
+as fast as he could type! This demonstrates a completely new
+paradigm of typeface design and creation, which many graphic
+designers will find alien, but which evidently works for some
+people, at least for smallish projects such as the punk typeface.
+
+People interested in \MF\ should be aware that in addition to
+past issues of {\it TUGboat\/}, \TeX hax and UK\TeX, Don Hosek's network
+magazine \TeX MaG has regularly included information about fonts,
+and is required reading for \MF ers. Volume 2, issue 5, in
+particular, was dedicated to non-English \TeX, and discussed
+Icelandic, German, French, ancient Irish, and the problems of
+foreign language hyphenation. Earlier issue of \TeX Mag have
+also contained technical descriptions of \TeX\ font file formats,
+etc. For information on subscriptions or back issues, contact Don
+Hosek, network address: {\tt DHosek@HMCVAX.Bitnet}.
+
+Once again, I am beholden to those who provided the information I
+have merely marshalled below.
+
+
+\section{Music}
+UK\TeX\ 1988, issues 28 and 29, carried an exchange of
+information recently, concerning the use of \TeX\ to typeset
+music. This very challenging application has been receiving some
+attention, and the work to date was announced in the Music
+Research Digest. Thence it found its way to UK\TeX. Phillip
+T.~Conrad provided summaries of the work of Dunne and
+J\"{u}rgensen, that of Schofer and Steinbach, and of his own.
+
+\subsection{Dunne and J\"{u}rgensen}
+Dunne and J\"{u}rgensen conducted research at the University of
+Western Ontario; they defined the concept of i-marks and p-marks.
+I-marks are invariant marks, the kind of marks that can be put
+into a font and typeset easily with \TeX. P-marks are
+parameterized marks whose shape and size varies according to
+certain parameters. The only p-marks \TeX\ is capable of
+typesetting are the horizontal and vertical rules. Dunne and
+J\"{u}rgensen use Postscript to augment the capability of \TeX\
+with a special version of {\tt dvi2ps}.
+
+Shane Dunne wrote to Sebastian Rahtz in August 1988, about his
+work on music typesetting, and Sebastian reproduced his letter in
+UK\TeX, issue 28. Shane said the following:
+\begin{quotation}
+ I was working on music printing per se about a year ago, and
+ developed a rudimentary music-setting prototype based on \TeX\
+ and PostScript. This system knows nothing of the rules of
+ music formatting; the user describes the desired graphic result
+ directly to \TeX, using its glue-setting capabilities to handle
+ various problems of spacing. These days I have broadened my
+ research focus to encompass all types of ``specialized
+ notations''---those which use a fixed repertoire of symbolic
+ marks---including music and music--like notations, logic
+ diagrams, schematic representations of all kinds (e.g., of
+ automata), flow diagrams, etc. I think the existing
+ ``typesetting'' paradigm can be extended to ``marksetting'',
+ where a ``mark'' is any kind of symbol, not necessarily of
+ fixed form like a text character, but possibly dependent on one
+ or more parameters (e.g., 2 endpoints for a line segment). I
+ am trying to develop a design for a general-purpose marksetting
+ system, which can be used as a software basis for any number of
+ specialized formatting programs, i.e., a different front-end
+ program for each class of notation.
+
+ I am doing this research towards a Master's thesis in Computer
+ Science, which I hope to complete before the end of December.
+ In the meantime there is one technical report which discusses
+ my earlier work on music-setting, including the prototype, and
+ contains some early ideas about general mark-
+ setting.\footnote{University of Western Ontario Technical
+ Report 171.} \ldots\
+
+ My approach was simpler [than that of Schofer and Steinbach]; I
+ used PostScript's powerful graphic primitives to define
+ parametrized procedures to create things like beams and slurs.
+ Schofer and Steinbach's fonts simply include huge numbers of
+ different beam and slur characters, at different slants, etc.,
+ to handle a reasonable set of cases. The results look very
+ good.
+\end{quotation}
+Dunne has been somewhat overwhelmed by responses to this report
+on his work, which was in fact not really intended for general
+distribution. He followed up with a note which appeared in
+UK\TeX\ 1988, issue 29, to the effect that he had received a
+number of e-mail requests for more information from around the
+world. While pleased at the level of interest in his research,
+he explained that, just at the moment, he is not in a good
+position to reply to these queries:
+\begin{quotation}
+My problem is that right now, I am at a critical stage of writing
+my Master's thesis on this topic, and I simply cannot afford the
+time to reply to all the letters I am receiving. Also, while I
+would love to send everyone a copy of my recent report, that will
+take time and money I don't have. I'm going to try and convince
+my University to take care of it.
+
+On a more positive note, my plans for the near future include
+finishing my thesis by this December, preparing a paper based on
+it for one of the computing journals (I'll announce which one
+when I know), and preparing a distribution version of my
+mark-setting prototype. (The prototype cannot be distributed as
+is, because it's written for an experimental programming system
+that only existed here, and is now obsolete. It won't take much
+effort to turn it into straight C code, though.)
+
+So while I appreciate the interest in my work, I just wanted to
+let the \ldots\ readers know that I'll be a bit of a hermit for
+the next few months, and that right now, I don't really have
+anything in the way of software to distribute.
+\end{quotation}
+
+\subsubsection{Contact (or not!)}
+Shane Dunne, \\
+Dept.~of Computer Science, \\
+University of Western Ontario, \\
+London, Ontario, N6A 5B7\\
+CANADA\\
+Net: {\tt shane@uwocsd.UWO.CA,\\
+shane@UWOVAX.Bitnet}\\
+UseNet from US: {\tt ...!\{ihnp4!decvax|seismo\}!\\
+\{watmath|utzoo\}!julian!uwocsd!shane}\\
+UseNet from Europe: {\tt ...!mcvax!seismo\\
+!watmath!julian!uwocsd!shane}
+
+\subsection{Schofer and Steinbach}
+There is a thesis written by Angelika Schofer and Andrea
+Steinbach at the Institut f\"{u}r Angewandte Mathematik at the
+Rheinische Friedrich-Wilhelms-Universit\"{a}t at Bonn, entitled
+{\em Automatisierter Notensatz mit \TeX}.
+
+Schofer and Steinbach operated from the assumption that a font of
+beams and slurs is in fact feasible; they appear to have
+generated just such a font, and they use plain \TeX\ alone.
+Their system appears to `understand' some form of
+music-description language, and to apply music-setting rules
+automatically. The music is printed with \TeX\ by means of the
+special fonts.
+
+\subsubsection{Availability}
+A copy of their work (in German) may be obtained for 25DM by
+writing to the Institut at:\\
+Wegler Stra\ss e 6, \\
+5300 Bonn, \\
+Federal Republic of Germany.
+
+\subsection{Conrad}
+Phillip T. Conrad noted that he is currently (August 1988)
+finishing a Master's thesis, at West Virginia University in
+Morgantown WV, which presents a prototype system for typesetting
+music notation with \TeX. He noted that:
+\begin{quotation}
+ It would seem that the central obstacle to musical typesetting
+ with \TeX\ is the production of slurs (ties, phrase marks) and
+ slanted beams. In John Gourlay's cover story in the May 1986
+ cover story of {\em Communications of the ACM}, he submits that
+ it is a fair assumption that no two beams or slurs are
+ precisely identical, so it would not be feasible to produce a
+ font of all the possible slurs or beams. I have operated from
+ this premise, as have Dunne and J\"{u}rgensen. \ldots\
+
+ My own approach builds on the previous work at the Ohio State
+ University of Gourlay et al.\ announced in the the {\em CACM}
+ article mentioned above. I use the \TeX tyl program of John
+ Renner (OSU Tech Report OSU-CISRC-4/87-TR9) rather than
+ Postscript to draw the beams and slurs. In theory this
+ provides device independence; in practice, the following
+ restrictions apply:
+
+ 1) The target system must support \MF\ for generation of the
+ vector fonts necessary to \TeX tyl,
+
+ 2) Three Pascal programs and one C program must be ported to
+ the target system; at this time, the programs are written for
+ only BSD Unix 4.3.
+\end{quotation}
+
+\subsubsection{Availability}
+
+For copies of Conrad's thesis please contact him at the following
+address:\\
+Phillip T. Conrad,\\
+401--K E. 3rd Street,\\
+Wilmington DE 19801-3964,\\
+U. S. A.\\
+Phone: (302)-652-3938\\
+Internet: {\tt conrad@a.cs.wvu.wvnet.edu}\\
+(This electronic mail address will be valid only through
+the end of September 1988.)
+
+%---------------------------------------------------------------
+
+\section{Hershey Fonts}
+Just as I had begun wondering about the Hershey fonts, Jim
+Seidman asked about them in \TeX hax 1988, issue 70.
+
+\subsection{Guthery}
+Dean Guenther ({\tt Guenther\%WSUVM1.Bitnet}) answered in issue
+73 that Scott Guthery, (Phone: 512-258-0785) has the Hershey
+fonts with {\tt TFM}s for a nominal fee in the region of \$20 or
+\$30.
+
+\subsection{Kesner}
+A few weeks later, \TeX hax 1988, issue 90, carried a letter from
+Oliver Kesner (9 October 1988), also in answer to Seidman's
+query, describing his own work converting Hershey fonts for use
+with \TeX. I reproduce what he said:
+\begin{quotation}
+Hershey fonts for the IBM PC are available from SoftCraft, Inc.,
+and from Austin Code Works. The SoftCraft set consists of four
+separate databases:
+\begin{itemize}
+\item {\tt HERSHEY.CHR}: 1594 characters,
+\item {\tt ORIENT.CHR}: 758 characters,
+\item {\tt PERSIAN.CHR}: 135 characters,
+\item {\tt HEBREW.CHR}: 49 characters.
+\end{itemize}
+The {\tt HERSHEY.CHR} database includes, besides several Roman
+typefaces, Greek, Russian, German Fraktur, and a variety of
+graphic symbols; the {\tt ORIENT.CHR} database has Hiragana,
+Katakana, and 623 Kanji characters.
+
+The format of the SoftCraft Hershey databases is given in their
+{\em Font Editing: EFONT/CFONT User's Manual} on p.\,A5--2. Using
+this description, I wrote \ldots\ [a] Turbo Pascal 4.0 program to
+generate \MF\ source code from the Hershey plotter
+directives. \ldots
+
+The characters in the Austin Code Works Hershey database are
+numbered 1--4326, with gaps, for a total of 1,377 different
+alphabetic and graphic characters. The format is described in
+Norman M. Wolcott and Joseph Hilsenrath, {\em A Contribution to
+Computer Typesetting Techniques: Tables of Coordinates for Hershey's
+Repertory of Occidental Type Fonts and Graphic Symbols}, U.S.
+Department of Commerce, National Bureau of Standards, April 1976.
+\end{quotation}
+Oliver has provided the Turbo Pascal 4.0 source code of
+\begin{description}
+\item[{\tt HERSHEY.PAS:}] a program that generates \MF\ source code
+from a Hershey character database in SoftCraft format, and
+\item[{\tt ACWtoSC.PAS:}] a program that converts the Hershey font
+tables distributed by The Austin Code Works to the format expected
+by the Cfont
+program of SoftCraft, Inc. I.e., it converts the ACW Hershey database
+to SoftCraft format, from which {\tt HERSHEY.PAS} can generate \MF.
+\end{description}
+He also provides an example files, {\tt ORIENT.LOG} (the output of
+{\tt HERSHEY.PAS}) and {\tt ORIENT.MF}, which contain a couple of
+Japanese Hershey characters, and a set of font parameters respectively.
+I ran these through \MF, and
+was able to print the characters without a hitch.
+
+\subsubsection{Terms of Availability}
+The above information was forwarded to \TeX hax by Oliver's son,
+Jeff Kesner, who has an e-mail address and is happy to act as
+postman. Contact him at:\\
+{\tt jok\%gpu.utcs.toronto.edu@RELAY.CS.NET} .
+
+The Pascal source code (about 14k) is available by anonymous FTP
+from {\tt Score.Stanford.edu} (and from the Aston archive) as file
+{\tt Kesner.txh} in thedirectory \verb|<tex.texhax>|.
+
+%---------------------------------------------------------------
+
+\section{Armenian}
+\subsection{Karagueuzian}
+Emma Pease also informed me that there is a family of Armenian
+fonts (created with old \MF) ``wandering around CSLI''. Dikran
+Karagueuzian designed and created these fonts in 1983, modelling
+them on Knuth's old CMR fonts. This means that they look good in
+bilingual typesetting with CMR. In fact, there is also an
+Armenian \TeX\ to go with these fonts. Its hyphenating
+algorithm, designed by John Hobby and Dikran Karagueuzian, is
+functional but, according to Dikran, not perfect, so that the
+user may have to fiddle with the typeset material at the end.
+
+\subsubsection{Contact}
+The Armenian family of fonts, as well as the Armenian \TeX, is
+available to anyone who wishes to use them. Contact Dikran
+Karagueuzian ({\tt dikran@csli.stanford.edu}).
+
+\section{Logic Diagrams}
+UK\TeX\ 1988, issue 30, included a letter from David Osborne
+({\tt cczdao@uk.ac.nott.clan}) mentioning a font called {\tt
+milstd.mf} created by Rick Simpson for drawing electrical
+symbols. He included the \MF\ source code for the font, and in
+the following issue of UK\TeX, a small set of \TeX\ macros were
+published, for making the logical symbols easier to use within
+plain \TeX\ or \LaTeX. The font consists of the following 25
+symbols: slanting line at 45-degree angle for marking busses in
+logic diagrams; AND, NAND, OR, NOR gates, facing to the right,
+down, left and up; buffer and inverter, each facing to the right,
+down, left and up.
+
+%---------------------------------------------------------------
+
+\section{Tamil}
+\subsection{Arthanari}
+There has been no communication from Mr.~Arthanari, and it looks
+very much as though the Ridgeway--Schiffman font holds the
+greatest promise of a usable Tamil font in the near future.
+
+\section{Telugu}
+The latest news from Mukkavilli Lakshmankumar and his wife
+Lakshmi about Telugu\TeX\ is as follows:
+\begin{quotation}
+ We have decided on the grid framework for the font. We also
+ have thought about about different global variables that could
+ be used to control various features of the font. We have
+ decided on a set of primitive curves. These are like
+ subroutines that can be used by different letters. Some of
+ these are coded in \MF. Only control points are determined.
+ We are yet to determine the stroke thickness and pen angles at
+ the control points. Since we are not imitating any font, it
+ takes a lot of time trying to ensure that various curves are
+ correct. Our approach is to make a rough sketch and then
+ determine the control points. Then we iterate by changing
+ control points until the curve is satisfactory. But the most
+ important thing to keep in mind is that all the curves must be
+ consistent and be able to blend harmoniously. We essentially
+ have the framework for Telugu font ready. But a lot of coding
+ remains. In our spare time we will work on it. Some issues
+ still remain unresolved. We are not sure what we should do to
+ support transliteration of Sanskrit in Telugu. That means
+ adding a lot of subscripts, superscripts. \ldots\
+
+ Our file structure is basically like that in CMR. We have
+ parameter, base driver, codes and program (right now empty)
+ files.
+\end{quotation}
+
+%---------------------------------------------------------------
+
+\section{J\TeX}
+Emma Pease ({\tt emma@csli.stanford.edu}) mailed me on July 5
+1988 with a correction about the availability of J\TeX: a
+Tops-20 version of J\TeX\ no longer exists on Turing since the
+old Turing machine itself no longer exists.
+
+%---------------------------------------------------------------
+
+\section{Greek}
+
+\subsection{Hamilton Kelly}
+First of all, I apologize heartily for getting Brian's name
+wrong. The correct surname is `Hamilton Kelly', not just `Kelly'
+(it's been that way since 1638!). I, of all people, should
+understand about unusual names!
+
+My report about Brian's work on Greek \MF\ characters was written
+at second hand, and he was astonished (and I hope pleased) when
+he came across a description of his Greek \MF\ work in {\it TUGboat\/}.
+This has spurred him into polishing up what he has done, and
+resubmitting it to the \TeX\ archive at Aston. Explaining the
+genesis of his work, Brian says:
+\begin{quotation}
+I wanted access to a Greek font to type my homework, since I am
+currently learning Modern Greek at an evening class (for general
+interest, and for holidays). What I did was to take the
+character definitions already used in the maths italic for the
+lower-case Greek letters, along with the upper-case ones, and the
+normal {\tt ROMANU} which make up the Greek upper-case and put
+them into a new driver file; I then \MF ed this with various
+parameter files such that they now had spacing defined, etc., for
+use as a normal textual font.
+\end{quotation}
+Brian completed this work before hearing of Silvio Levy's work at
+Princeton, but continues to use his own Greek since it does not
+require a {\tt DVI} output program which can read fonts of 256
+characters.\footnote{Bill Kaster of Personal \TeX\ Inc., has
+recently produced a version (1.00t) of their Hewlett Packard
+LaserJet driver, {\tt PTI LASER/HP}, which copes beautifully with
+Silvio's large font. I understand from Bill that their Apple
+LaserWriter driver, {\tt PTI LASER/PS}, already has this
+capability.}
+
+Brian has now written a small macro package which eases
+considerably the selection of the Greek fonts; this is for use
+under \LaTeX, and makes use of the \verb|\@addfontinfo| macro to
+define the font changing commands such that they scale
+automatically with \LaTeX's size-changing commands. He has also
+written a short paper, describing what he has generated, and his
+future directions. He has recently been refining the character
+programs, to make some of the letters more textual in appearance
+(for example, the alpha was very wide; fine for maths, but not in
+text).
+
+\subsubsection{Terms of Availability}
+Brian has sent both the above mentioned files to the Aston
+archive, together with the revised font files, where all the
+material will be freely available. An announcement giving
+details will have appeared in UK\TeX\ by the time you read this.
+
+%---------------------------------------------------------------
+
+\section{Perso-Arabic}
+\subsection{Goldberg}
+
+In early September Jacques Goldberg noted that there has been a
+lot of progress with the Arabic font. He hoped to have it out by
+the end of September, all being well. The font consists of:
+\begin{enumerate}
+\item A complete font of 29 characters each at 2 or 4 glyphs
+(position dependent, isolated, first, middle, last in word).
+
+\item A preprocessor with customizable mapping of the basic 29
+chars to a--z, A--Z areas of an ASCII keyboard, that will work
+out an intermediary file such that unmodified \TeX\ plus a few
+macros does indeed correctly compose bidirectional texts. The
+preprocessor reassigns the correct glyph from the isolated form
+glyph depending on the position in word.
+\end{enumerate}
+
+All this will continue to be made available free to the academic
+community.
+
+No vowel marking scheduled at this time, but Jacques says he
+could do it if requested. It would be implemented just like the
+accents in normal \TeX.
+
+\section{Georgia Tobin}
+\subsection{Century Schoolbook: Liber}
+In {\it TUGboat\/} {\bf 9.2}, Georgia gave more information about the process
+of designing the Century Schoolbook typeface she has been working
+on.\footnote{`Designing for Low-Res Devices', {\it TUGboat\/} {\bf 9.2} (1988),
+126--128.} The face is now christened Liber, and the article was
+printed in the new face, at a resolution of 300dpi.
+
+\section{Icelandic}
+\subsection{Pind}
+In the `Many Faces' article, I failed to mention that Jorgen Pind
+had written a full account of his work on Icelandic \TeX\ which
+appeared in Don Hosek's \TeX Mag, volume 2, issue 5.
+
+%---------------------------------------------------------------
+
+\section{Miscellaneous}
+%---------------------------------------------------------------
+
+\subsection{Hosek Pica}
+Don Hosek (of ``Output Devices'' and \TeX mag fame) has created a
+CM Pica, using the \MF\ code of the typewriter style font, {\tt
+CMTT}, of Computer Modern as his point of departure. CM Pica is
+more or less a 10cpi version of {\tt CMTT} with heightened
+ascenders and x-height, similar to the Xerox1200 PICA font in
+appearance.
+
+CM Pica is specially designed as a sop to University authorities,
+some publishers' editors and the like, who insist on having a
+typescript manuscript marked up in the traditional manner, i.e.,
+with a squiggly line under bold characters, and underlining under
+characters which would be italicized in print.
+
+To achieve this, Don created `bold' and `italic' fonts ({\tt
+CMPICAB.MF, CMPICATI.MF}) in which each character includes an
+under-squiggle, or underline respectively. Don also modified the
+{\tt ligtable} commands controlling begin and end quotes and also
+hyphens, so that {\tt ``} and {\tt ''} both become \verb|"|,
+while {\tt `} and {\tt '} both become {\tt \char'15} (the single
+straight quote symbol at code '015 in {\tt CMTT}). Similarly, on
+output, `\verb|--|' becomes `\verb|-|' and `\verb|---|' becomes
+`\verb|--|'.
+
+The upshot is that one can code up a document in normal \TeX\
+fashion and then, by setting the fonts to be Hosek's Pica, it
+will print out looking as though it had been typed, with `italic'
+text underlined and `bold' text under-squiggled, etc. Merely
+reset the fonts to {\tt CMR} (or whatever) and it will be
+properly typeset with all the variety of fonts and refinement of
+punctuation of which \TeX\ is capable.
+
+\subsection{Non-standard sizes of CM}
+John Sauter reported in {\it TUGboat\/} 7.3 (1986), 151--152, that he has
+re-parameterized CM so that any of the existing Computer Modern
+family may be created with any design size. For example, most of
+us, when requiring an 11pt CMR will use {\tt CMR10} at
+\verb|\magstep| half. Apparently this is not satisfactory to the
+most discerning, and Sauter's algorithms permit one to generate a
+true {\tt CMR11} face. They go further, of course, and permit
+the generation of any of the CM faces in any (reasonable) point
+size. This is done by algorithms that interpolate or extrapolate
+from the values used by Knuth in the \MF\ parameter files for CM.
+If a standard value, such as 10pt, is chosen, then Sauter's
+algorithms will produce CM fonts identical to the standard ones.
+The {\tt TFM} files for all sizes match exactly.
+
+Don Hosek's \TeX MaG, volume 2, number 4 gives further details of
+Sauter's work, and notes that some of the fonts may start looking
+bad at larger sizes, lacking inter-character space, and so on.
+Don has prepared a version of Sauter's work tailored for use on a
+PC, which is available from him. See the \TeX MaG article for
+details.
+
+\end{document}
+
+
+
+