diff options
Diffstat (limited to 'info/digests/texhax/txh')
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} + + + + |