TeXhax Digest Thursday, October 18, 1990 Volume 90 : Issue 66 Moderators: Tiina Modisett and Pierre MacKay %%% The TeXhax digest is brought to you as a service of the TeX Users Group %%% %%% in cooperation with the UnixTeX distribution service at the %%% %%% University of Washington %%% Today's Topics: TeX syntax Updates to WEB sources of TeX, MF, etc; VMS changes files for these. ----------------------------------------------------------------------------- Date: Mon, 08 Oct 90 14:36:14 EST From: "Michael Barr, Math Dept, McGill University" Subject: TeX syntax Keywords: TeX, syntax The enclosed is a modified version of a letter that I sent to Frank Mittelbach as a response to his article in the most recent Tugboat. His reply suggested that I submit it as a letter to Tugboat, but that would require that find my documentation for using Canada Post. I thought I would try it out on TeXhax first. The proximate cause of my writing this is that I have just spent an unpleasant four hours hours tracking down a missing number bug in some macros I am writing that turned out to be a number that had got inadvertently enclosed in a pair of braces. This illustrates some of the problems with TeX syntax. Sometimes braces are necessary; mostly they are neutral (an extra pair doesn't hurt anything) and sometimes they are forbidden. Error messages are often not at all helpful since the error is reported long after it happens. Also, they often don't give enough of the context, especially when similar code appears several times in a macro. Finally, I discovered that \tracingmacros would be a LOT more useful if the level of tracing could be set. In fact, the simplest would be that setting \tracingmacros=n simply reported exactly n levels of threading. As it is, there is simply too much reported, especially when using LaTeX, as I am. The letter follows: I read your extremely interesting article in the most recent Tugboat and I would like to make some comments. I realize that your concerns are more global and mine are more local; nonetheless if there is going to be a new, incompatible version of TeX (and I think that your arguments for that are compelling) there are certain issues that are perhaps relatively minor in the greater scheme of things, but are important for my particular applications. Here for my particular concerns. The most important thing I do is to set commutative diagrams. To this end I have written a package of diagram macros which was originally based on the LaTeX picture mode. The trouble is that to use the \picture mode, you have to give the size of the picture beforehand. The reasons appear to be because of the lack of support in Tex for a picture box in which items can be placed ad lib while the size of the box is automatically computed. In order to get around this I reimplemented the picture mode with code that keeps a running track of the size of the box being created. I have actually done only a small part of it, the part that I need for my macros. Clearly it should all be done by a TeX primitive, probably a \pbox inside of which things can be placed as in the TeXbook's \point example, except that the box dimensions are kept. Here is a portion of my code: \newcount\wideness \newcount\leftwidth \newcount\rightwidth \newcount\highness \newcount\topheight \newcount\botheight \def\ratchet#1#2{\ifnum#1<#2 \global #1=#2 \fi} \def\putbox(#1,#2)#3{% \horsize{\wideness}{#3} \divide\wideness by 2 {\advance\wideness by #1 \ratchet{\rightwidth}{\wideness}} {\advance\wideness by -#1 \ratchet{\leftwidth}{\wideness}} \vertsize{\highness}{#3} \divide\highness by 2 {\advance\highness by #2 \ratchet{\topheight}{\highness}} {\advance\highness by -#2 \ratchet{\botheight}{\highness}} \put(#1,#2){\makebox(0,0){$#3$}}} \def\putlbox(#1,#2)#3{% \horsize{\wideness}{#3} {\advance\wideness by #1 \ratchet{\rightwidth}{\wideness}} {\ratchet{\leftwidth}{-#1}} \vertsize{\highness}{#3} \divide\highness by 2 {\advance\highness by #2 \ratchet{\topheight}{\highness}} {\advance\highness by -#2 \ratchet{\botheight}{\highness}} \put(#1,#2){\makebox(0,0)[l]{$#3$}}} \def\putrbox(#1,#2)#3{% \horsize{\wideness}{#3} {\ratchet{\rightwidth}{#1}} {\advance\wideness by -#1 \ratchet{\leftwidth}{\wideness}} \vertsize{\highness}{#3} \divide\highness by 2 {\advance\highness by #2 \ratchet{\topheight}{\highness}} {\advance\highness by -#2 \ratchet{\botheight}{\highness}} \put(#1,#2){\makebox(0,0)[r]{$#3$}}} The resultant code works well, but you should bring a book to have something to do while it is compiling. This is something that is begging to be done as a primitive operation. By the way, I think Lamport made a bad error in having coordinates that go from bottom to top. When I got my first computer, I was, as a mathematician, put off by the fact that the coordinate system in BASIC goes from top to bottom. Later I came to realize that for text this is the appropriate coordinate system. Lamport copied the mathematician's coordinate system without realizing that for textual elements it is simply inappropriate. He did other questionable things (redefining the accent primitives inside the tabbing environment, for one), but that seems to cause me the most trouble. There are various other things that I think ought to be TeX primitives. They are simply too important to leave to be implemented in TeX' macro language. For example, loops and tests should be primitive. Loops in particular do not always work reliably. There should be support for optional and variable numbers of parameters. The LaTeX \@ifnextchar macro ought to be made a primitive. I still don't understand how it works. More generally, nearly all of the dirty tricks ought to be made into clean tricks. Much of the code and discussion is simply incomprehensible. I guess I can summarize a lot of what I have said by saying that TeX macros ought to be more transparent. It ought to be possible to do simply anything that is simple to describe, instead of having to fool TeX into doing it. One thing that I personally would welcome is a primitive for making diagonal rules. The would probably necessitate changing the output drivers. For example, I am currently implementing dashed arrrows in my commutative diagrams. For horizontal and vertical arrows, this is not too bad. For diagonal arrows, I am stymied by the fact that the smallest size diagonal lines in the LaTeX line fonts are rather large, much larger than desirable. It could be done with sprites or Bezier splines, but that would take an incredible amount of memory. This could be done with the more recent large memory models, but is still inelegant. Another capability that would make life easier, but would require a change in the device drivers is to allow opaque boxes that could be placed on top of other boxes. I could be wrong, but I have the impression that some laser printers allow one to directly describe such opaque elements. LaTeX requires that you use a special macro to redefine things, as does AMSTeX. TeX allows redefinitions freely. None takes the obviously best approach of allowing redefinitions, but reporting them as warnings. This is a simple change that would be easy to implement and cause no significant incompatibility. Incidentally, I found your hanging punctuation rather odd looking. That is never done in North America and, although I could no doubt get used to it, it certainly didn't seem to me to be a mark of fine typesetting. Which proves something about the need to stay flexible, no dougt. Michael Barr ------------------------------------------------------------------------ Date: Wed, 3 OCT 90 17:49:31 BST From: TEX@rmcs.cranfield.ac.uk Subject: Updates to WEB sources of TeX, MF, etc; VMS changes files for these. Keywords: Aston archive I have installed the following new and changed files in the Aston TeX archive. They are available for NIFTP, using the account PUBLIC, password PUBLIC, on Uk.Ac.Aston.TeX. Files, which are all ASCII, may also be retrieved using the TeXserver; send a message to , with the first non-blank line of your message reading "FILES", and the names of the wanted files themselves on successive lines of the message. The TeXserver supports wildcards, so you could fetch: [TEX-ARCHIVE.TEX.V3.VMS]*.* etc. NOTE: The version of METAFONT for VMS [PD V2.1c] in this listing has a bug which will cause an access violation unless one has a supported graphics device; even specifying /NODISPLAY doesn't prevent the error. The MF.CH file in the Aston Archive ([TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]MF.CH) has now been corrected, and is now at [VMS PD V2.1d] instead of the stated V2.1c. (Error history for Computer Modern font family) [TEX-ARCHIVE.DIGESTS.UPDATES]CM85.BUG 81 24-SEP-1990 15:34 (Reverse-time ordered listing of entire Labrea archive at 1300BST on 24-Sep) [TEX-ARCHIVE.DIGESTS.UPDATES]LABREA-RT.900924-1200Z 501 24-SEP-1990 16:05 (Ditto, but in alphabetical order) [TEX-ARCHIVE.DIGESTS.UPDATES]LABREA.900924-1200Z 501 24-SEP-1990 15:48 (Error history of METAFONT) [TEX-ARCHIVE.DIGESTS.UPDATES]MF84.BUG 160 24-SEP-1990 15:38 (Error history of TeX) [TEX-ARCHIVE.DIGESTS.UPDATES]TEX82.BUG 598 24-SEP-1990 15:46 (Source of The \MF book: this is copyright, and may not be TeX'ed) [TEX-ARCHIVE.METAFONT.DOC]MFBOOK.TEX 1891 24-SEP-1990 14:11 (Canonical WEB source of METAFONT V2.7) [TEX-ARCHIVE.METAFONT.MFDIR.V2]MF.WEB 1856 24-SEP-1990 14:03 (Files for performing the TRAP test on \MF\ V2.7) [TEX-ARCHIVE.METAFONT.MFDIR.V2.TRAP]TRAP.FOT 4 24-SEP-1990 15:10 [TEX-ARCHIVE.METAFONT.MFDIR.V2.TRAP]TRAP.LOG 250 24-SEP-1990 15:10 [TEX-ARCHIVE.METAFONT.MFDIR.V2.TRAP]TRAP.MF 24 24-SEP-1990 15:17 [TEX-ARCHIVE.METAFONT.MFDIR.V2.TRAP]TRAP.PL 22 24-SEP-1990 15:18 [TEX-ARCHIVE.METAFONT.MFDIR.V2.TRAP]TRAP.TYP 10 24-SEP-1990 15:18 [TEX-ARCHIVE.METAFONT.MFDIR.V2.TRAP]TRAPIN.LOG 10 24-SEP-1990 15:19 (Description of the TRAP test) [TEX-ARCHIVE.METAFONT.MFDIR.V2.TRAP]TRAPMAN.TEX 37 24-SEP-1990 15:19 (Files for building \MF\ V2.7 under VAX/VMS...) (Command file to compile & link \MF\ itself) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]COMPILE_MF.COM 1 3-SEP-1990 10:49 (MMS Description files for automating the building of \MF, GFware, etc) (Available in two versions, for those that use logical names of the ) (form TEX$INPUTS and TEX_INPUTS, respectively) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]DESCRIP.MMS$MF 54 28-SEP-1990 17:59 [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]DESCRIP.MMS_MF 54 28-SEP-1990 18:01 (File used by \MF\ at run-time to locate graphics library appropriate ) (to the graphics output device: not needed if you use the DESCRIP.MMS ) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]GLIB_INDEX.DAT 2 3-SEP-1990 10:50 (Graphics library to support the GraphOn Model 140 terminal) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]GO140.CH 0 3-SEP-1990 10:50 [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]GO140.WEB 35 3-SEP-1990 10:50 (Linker options file required when linking \MF\ and the libraries for ) (the graphics output device: not needed if you use the DESCRIP.MMS ) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]GRLIB.OPT 1 3-SEP-1990 10:52 (mode_defs in use at RMCS [and many more besides]) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]LOCAL.MF 46 28-SEP-1990 18:20 (Command procedure to build a graphics library) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]MAKELIB.COM 1 3-SEP-1990 10:52 (Machine-code versions of some of \MF's inner loop routines; 30% speedup) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]MF-EXTRA.MAR 16 3-SEP-1990 10:52 (Change file [for WEBmerge] to make TRAPpable version of \MF) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]MF-TRAP.CH 13 25-SEP-1990 17:27 (Change file for \MF\ under VMS: use Pascal v4.0 or later) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]MF.CH 349 28-SEP-1990 18:15 (Command-definition files for the VMS verbs MF and INIMF; two versions) (for sites using TEX$INPUTS or TEX_INPUTS logicals) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]MF.CLD$ 21 26-SEP-1990 18:01 [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]MF.CLD_ 21 26-SEP-1990 18:01 (Graphics library to support Visual Technology's Model 550 terminal) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]VIS550.CH 0 28-SEP-1990 18:14 [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]VIS550.WEB 49 28-SEP-1990 18:14 (Description of this implementation) [TEX-ARCHIVE.METAFONT.MFDIR.V2.VMS]VMS_MF_NOTES.TXT 18 26-SEP-1990 18:54 (New version of macros for MFT setting of Computer Modern font programs) [TEX-ARCHIVE.METAFONT.TEXFILES]CMBASE.MFT 8 24-SEP-1990 12:15 (Updates and extensions to error history of TeX) [TEX-ARCHIVE.TEX.DOC]ERRATA.FIVE 87 24-SEP-1990 15:35 [TEX-ARCHIVE.TEX.DOC]ERRATA.TEX 29 24-SEP-1990 15:36 [TEX-ARCHIVE.TEX.DOC]ERRORLOG.TEX 246 24-SEP-1990 15:38 (Source of The \TeX book: this is copyright, and may not be TeX'ed) [TEX-ARCHIVE.TEX.DOC]TEXBOOK.TEX 2779 24-SEP-1990 12:32 (Updated Plain.TeX; required by TeX v3.1 when building formats) [TEX-ARCHIVE.TEX.V3]PLAIN.TEX 89 24-SEP-1990 12:15 (Canonical WEB source of TeX v3.1) [TEX-ARCHIVE.TEX.V3]TEX.WEB 2073 24-SEP-1990 12:29 (Files to perform the TRIP test on TeX v3.1) [TEX-ARCHIVE.TEX.V3.TRIP]TRIP.FOT 5 24-SEP-1990 13:45 [TEX-ARCHIVE.TEX.V3.TRIP]TRIP.LOG 378 24-SEP-1990 13:45 [TEX-ARCHIVE.TEX.V3.TRIP]TRIP.PL 36 24-SEP-1990 13:44 [TEX-ARCHIVE.TEX.V3.TRIP]TRIP.TEX 46 24-SEP-1990 13:57 [TEX-ARCHIVE.TEX.V3.TRIP]TRIP.TYP 39 24-SEP-1990 13:59 [TEX-ARCHIVE.TEX.V3.TRIP]TRIPIN.LOG 27 24-SEP-1990 14:01 (Description of the TRIP test) [TEX-ARCHIVE.TEX.V3.TRIP]TRIPMAN.TEX 39 24-SEP-1990 14:02 (Files for building TeX v3.1 under VAX/VMS...) (Command procedure to build [just] TeX itself) [TEX-ARCHIVE.TEX.V3.VMS]COMPILE_TEX.COM 1 3-SEP-1990 10:48 (MMS Description files for automating the building of TeX, WEBware, etc) (Available in two versions, for those that use logical names of the ) (form TEX$INPUTS and TEX_INPUTS, respectively) [TEX-ARCHIVE.TEX.V3.VMS]DESCRIP.MMS$TEX 61 26-SEP-1990 17:58 [TEX-ARCHIVE.TEX.V3.VMS]DESCRIP.MMS_TEX 61 26-SEP-1990 18:00 (Change file [for WEBmerge] to build a TRIPpable version of TeX v3.1) [TEX-ARCHIVE.TEX.V3.VMS]TEX-TRIP.CH 9 25-SEP-1990 17:38 (Change file for TeX v3.1 under VMS; use Pascal v4.0 or later) [TEX-ARCHIVE.TEX.V3.VMS]TEX.CH 333 28-SEP-1990 18:07 (Command-definition file for new DCL verbs TEX, LATEX, SLITEX, etc) [TEX-ARCHIVE.TEX.V3.VMS]TEX.CLD$ 34 26-SEP-1990 18:01 [TEX-ARCHIVE.TEX.V3.VMS]TEX.CLD_ 34 26-SEP-1990 18:02 (Description of this implementation of TeX) [TEX-ARCHIVE.TEX.V3.VMS]VMS_TEX_NOTES.TXT 13 26-SEP-1990 18:51 (Updated macros for use by WEAVE/TeX) [TEX-ARCHIVE.TEX.V3]WEBMAC.TEX 21 24-SEP-1990 12:16 (New version of DVItype [v3.4]...) [TEX-ARCHIVE.TOOLS.DVIWARE.NEW]DVITYPE.WEB 209 24-SEP-1990 18:19 (Change file for the above under VMS) [TEX-ARCHIVE.TOOLS.DVIWARE.NEW.VMS]DVITYPE.CH 28 25-SEP-1990 17:15 (New versions of GFtoDVI [v3.0] and GFtoPK [v2.3]) [TEX-ARCHIVE.TOOLS.FONTWARE.NEW]GFTODVI.WEB 377 24-SEP-1990 12:18 [TEX-ARCHIVE.TOOLS.FONTWARE.NEW]GFTOPK.WEB 187 24-SEP-1990 12:23 (New version of MFT [v2.0; no VMS changes for this yet] and its macros) [TEX-ARCHIVE.TOOLS.FONTWARE.NEW]MFT.WEB 152 24-SEP-1990 12:17 [TEX-ARCHIVE.TOOLS.FONTWARE.NEW]PLAIN.MFT 4 24-SEP-1990 12:15 (New versions of PLtoTF [v3.3] and TFtoPL [v3.1]) [TEX-ARCHIVE.TOOLS.FONTWARE.NEW]PLTOTF.WEB 197 24-SEP-1990 18:19 [TEX-ARCHIVE.TOOLS.FONTWARE.NEW]TFTOPL.WEB 122 24-SEP-1990 18:26 (New versions of VFtoVP and VPtoVF [both v1.2; no VMS changes for these yet]) [TEX-ARCHIVE.TOOLS.FONTWARE.NEW]VFTOVP.WEB 181 24-SEP-1990 18:27 [TEX-ARCHIVE.TOOLS.FONTWARE.NEW]VPTOVF.WEB 249 24-SEP-1990 18:31 (Change files for the above utilities) [TEX-ARCHIVE.TOOLS.FONTWARE.NEW.VMS]GFTODVI.CH 30 25-SEP-1990 17:25 [TEX-ARCHIVE.TOOLS.FONTWARE.NEW.VMS]GFTOPK.CH 26 25-SEP-1990 17:26 [TEX-ARCHIVE.TOOLS.FONTWARE.NEW.VMS]PLTOTF.CH 11 25-SEP-1990 17:15 [TEX-ARCHIVE.TOOLS.FONTWARE.NEW.VMS]TFTOPL.CH 12 25-SEP-1990 17:16 (Updated manual for using WEB) [TEX-ARCHIVE.WEB.DOC]WEBMAN.TEX 179 24-SEP-1990 15:29 (New versions of Tangle [v4.1] and Weave [v4.2]) [TEX-ARCHIVE.WEB.NEW]TANGLE.WEB 263 24-SEP-1990 15:19 [TEX-ARCHIVE.WEB.NEW]WEAVE.WEB 377 24-SEP-1990 15:20 (Changes for the above under VMS) [TEX-ARCHIVE.WEB.NEW.VMS]TANGLE.CH 26 25-SEP-1990 17:15 [TEX-ARCHIVE.WEB.NEW.VMS]WEAVE.CH 31 25-SEP-1990 17:16 Total of 73 files, 15760 blocks Any problems with access, or with using the VMS changes, please feel free to contact me. Brian {Hamilton Kelly} +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + JANET: tex@uk.ac.cranfield.rmcs + + BITNET: tex%uk.ac.cranfield.rmcs@ac.uk + + INTERNET: tex%uk.ac.cranfield.rmcs@nsfnet-relay.ac.uk + + UUCP: ...!mcvax!rmcs.cranfield.ac.uk!tex + + OR ...!ukc!rmcs.cranfield.ac.uk!tex + + Smail: School of Electrical Engineering & Science, Royal Military + + College of Science, Shrivenham, SWINDON SN6 8LA, U.K. + + Phone: Swindon (0793) 785252 (UK), +44-793-785252 (International) + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----------------------------------------------------------------------- %%% Further information about the TeXhax Digest, the TeX %%% Users Group, and the latest software versions is available %%% in every tenth issue of the TeXhax Digest. %%% %%% Concerning subscriptions, address changes, unsubscribing: %%% %%% BITNET: send a one-line mail message to LISTSERV@xxx %%% SUBSCRIBE TEX-L % to subscribe %%% or UNSUBSCRIBE TEX-L %%% %%% Internet: send a similar one line mail message to %%% TeXhax-request@cs.washington.edu %%% JANET users may choose to use %%% texhax-request@uk.ac.nsf %%% All submissions to: TeXhax@cs.washington.edu %%% %%% Back issues available for FTPing as: %%% machine: directory: filename: %%% JUNE.CS.WASHINGTON.EDU TeXhax/TeXhaxyy.nnn %%% yy = last two digits of current year %%% nnn = issue number %%% %%%\bye %%% End of TeXhax Digest ************************** -------