
                            ===============

                            M D W T O O L S

                            ===============


--- Licence note ---

mdwtools package release note
Copyright (c) 1996 Mark Wooding, except doafter, which is Copyright (c) 1996
Peter Schmitt and Mark Wooding.

These programs are free software; you can redistribute them and/or modify
them under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

These programs are distributed in the hope that they will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with these programs; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


--- What it's all about ---

This is a bunch of LaTeX 2e packages which have made my life as a LaTeX user
easier, so I thought I'd share them.  I'm mainly an ARM assembler hacker
(which explains why my TeX code looks so horrible), although I have been
known to write documentation for programs.  This may explain the sort of
things these packages do, and where I'm coming from.


--- Licencing ---

The packages are made available under the GNU General Public Licence (not the
usual LaTeX agreement).  A copy of this licence is supplied in the file
COPYING.  You should read this document if you haven't read it already, even
if it's just for educational value.  I'm not actually sure how good a thing
the GNU GPL actually is, so I'm sort of testing the water.  The idea that
this is how all software should be distributed still fills me with a certain
amount of trepidation.


--- What's in the box ---

You should have received the following files in whatever sort of archive
thing this suite came in:

  README	-- You've got this file for sure, because it's this one
  COPYING	-- A textual version of the GNU General Public Licence
  at.dtx	-- Documentation and code for `at.sty' package
  cmtt.dtx	-- Documentation and code for `cmtt.sty'package and
		   associated files
  doafter.dtx	-- Documentation and code for `doafter.sty' package; the
		   code is also used in `syntax.sty' and `mdwtab.sty'
  mdwlist.dtx	-- Documentation and code for `mdwlist.sty' package
  mdwmath.dtx	-- Documentation and code for `mdwmath.sty' package
  mdwtab.dtx	-- Documentation and code for `mdwtab.sty' and `mathenv.sty'
		   packages
  footnote.dtx  -- Documentation and code for `footnote.sty' package; the
		   code is used in `mdwtab.sty'
  sverb.dtx	-- Documentation and code for `sverb.stx' package
  syntax.dtx	-- Documentation and code for `syntax.dtx' package
  mdwtools.ins	-- Installation script for all the packages
  gpl.tex	-- LaTeX version of the GNU General Public Licence
  mdwtools.tex	-- Definitions for typesetting the documentation

If you're missing any of these files, complain at whoever gave the rest of
them to you, and get them quickly.  However, if you're lucky, you may have
received some other files:

  at.sty	-- Unpacked `at.sty' package
  cmtt.sty	-- Unpacked `cmtt.sty' package
  mTTenc.def	-- Unpacked encoding definition file for `cmtt.sty'
  mTTcmtt.fd	-- Unpacked font definition file for `cmtt.sty'
  doafter.sty	-- Unpacked `doafter.sty' package for LaTeX
  doafter.tex	-- Unpacked `doafter.tex' package for Plain TeX
  mathenv.sty	-- Unpacked `mathenv.sty' package
  mdwlist.sty	-- Unpacked `mdwlist.sty' package
  mdwmath.sty	-- Unpacked `mdwmath.sty' package
  mdwtab.sty	-- Unpacked `mdwtab.sty' package
  footnote.sty  -- Unpackad `savenot.dty' package
  sverb.sty	-- Unpacked `sverb.sty' package
  syntax.sty	-- Unpacked `syntax.sty' package

  at.dvi	-- Typeset documentation for `at.sty'
  cmtt.dvi	-- Typeset documentation for `cmtt.sty' and co.
  doafter.dvi	-- Typeset documentation for `doafter.sty'
  mdwlist.dtx	-- Typeset documentation for `mdwlist.sty'
  mdwmath.dvi	-- Typeset documentation for `mdwmath.sty'
  mdwtab.dvi	-- Typeset documentation for `mdwtab.sty' and `mathenv.sty'
  footnote.dvi	-- Typeset documentation for `footnote.sty'
  sverb.dvi	-- Typeset documentation for `sverb.sty'
  syntax.dvi	-- Typeset documentation for `syntax.sty'

If you've already got these, then great, because you don't have to generate
them.  If you haven't, it's not a big deal.  You might also have a bunch of
files with extensions like `.log', `.aux', `.tmp', `.ilg' and so on.  These
files are really not at all interesting, and you might as well get rid of
them now.


--- What the packages do ---

Before we can get anywhere, you need to know what the packages do, roughly
speaking.  Here's a quick rundown:

at.sty		-- Allows you to use `@' as a sort of `command-introducing'
		   character, a bit like `\' is already.  This gives you
		   a lot more short command names which you can assign to
		   common constructions.  For example, you can set up
		   @/<text>/ as a command to put <text> in italics.

cmtt.sty	-- Provides an `mTT' encoding for the Computer Modern
		   Typewriter font, which solves lots of messy problems.

doafter.sty	-- Provides a TeX programmer's utility
		     \doafter <token> <group>
		   which does the <token> after the group is complete,
		   including any \aftergroup things.  The code was originally
		   written by Peter Schmitt in answer to a `challenge' I made
		   on comp.text.tex;I tweaked it a bit to make it work
		   slightly better.  doafter.tex is a plain TeX version of
		   the same macro.

mathenv.sty	-- Contains a collection of mathematical environments with
		   a theme of aligning things in columns.  There's a
		   rewritten version of `eqnarray' which is much more
		   powerful than the old one, and it gets the spacing right.
		   This package requires `mdwtab.sty' in order to work.  It
		   is extracted from `mdwtab.dtx'.  In general, the AmS
		   things to a better job, although it seems that the mathenv
		   matrix and script handling environments give prettier
		   results than the AmS equivalents (at least to my eyes).

mdwlist.sty	-- Various list related environments.  There's a more
		   versatile `description' environment, and some stuff for
		   making `compacted' lists (with no extra space between
		   items).

mdwmath.sty	-- Contains a few trivial definitions for mathematical
		   things.  The main thing is that the \sqrt command for
		   doing square roots has been improved -- there's a \sqrt*
		   command which stops the line being drawn over the formula
		   being square-rooted, and the positioning of the root
		   index (the optional argument) has been improved.

mdwtab.sty	-- A complete ground-up rewrite of LaTeX's `tabular' and
		   `array' environments.  Has lots of advantages over
		   the standard version, and over the version in `array.sty'.
		   It works correctly with all the table-related packages in
		   the Tools bundle (longtable, delarray, hhline, tabularx
		   and dcolumn).  This package includes most of the code
		   from `doafter.sty' and `footnote.sty' (it doesn't load
		   the packages -- it has its own copies built-in, although
		   you won't waste memory if you do load these packages).
		   To generate `mdwtab.sty', you require `mdwtab.dtx',
		   `doafter.dtx' and `footnote.dtx'; the last two provide
		   the shared code.

footnote.sty	-- Provides commands for saving executing footnotes; the
		   author has noticed several packages which attempt to
		   enable footnotes in tables, all of which eat an extra
		   token list register.  This is an attempt to offer shared
		   code to do the job, saving space and effort.  It also
		   provides a `footnote' environment which allows verbatim
		   text.

sverb.sty	-- A bunch of macros for doing verbatim things.  Required
		   for typesetting all the documentation for the other
		   packages.

syntax.sty	-- A load of commands for describing syntax.  There's an
		   environment for typesetting BNF grammars.  But best of
		   all, there's a load of commands and environments for
		   drawing syntax diagrams.  Required for typesetting all
		   the documentation for the other packages.  If you're
		   extracting syntax.sty from syntax.dtx, you also need
		   doafter.dtx.

With the exception of the dependencies listed above, the packages will all
work independently of each other.  If you want to typeset the documentation,
you'll need `sverb.sty' and `syntax.sty'.  Typesetting the documentation
isn't essential, although it will probably help if you can see what the
various commands actually do.


--- Extracting the packages ---

If you don't have the various .sty files already, you'll need to extract them
from the .dtx files.  This requires docstrip.tex, which should be part of
your base LaTeX 2e distribution.  If you have docstrip vsersion 2.3d, which
is available with the December 1995 release of LaTeX, things will go rather
faster.  If your LaTeX release is much older than this, you should upgrade,
because the packages need a fairly new LaTeX anyway.  (I could do something
about this, but I won't, because I want to encourage everyone to upgrade.)

If everything's set up correctly, all you should need to do is say

  tex mdwtools.ins

or

  latex mdwtools.ins

or whatever incantation is necessary to run TeX or LaTeX on the supplied
`mdwtools.ins' file on your system.

TeX will grind away at the files for a bit, and then say `Done' at you. (This
could take a while, so be patient.)  You will then have a mdwtools.log file,
which you can throw away, and a collection of sparkly new .sty files, which
you should put somewhere where TeX can find them easily.


--- Typesetting the documentation ---

If you want to typeset the documentation for a package, you'll need the
`mdwtools.tex' file provided, and the `syntax.sty' and `sverb.sty' packages.
You'll also need the `.dtx' file for the package you want documentation on,
and any packages it generated.

For example, if you want documentation on `mathenv.sty', you need:

  mdwtools.tex	-- Shared defintions for all the documentation files
  syntax.sty	-- Syntax typesetting commands
  sverb.sty	-- Verbatim text handling commands
  mathenv.sty	-- So the documentation can use it to demonstrate its
		   features
  mdwtab.sty	-- Required by `mathenv.sty'
  mdwtab.dtx	-- The documentation file from which `mathenv.sty' was
		   extracted, and therefore the file which contains the
		   documentation you want to read

Make sure you've got all the files, and then run LaTeX on the .dtx file you
want to read.

TeX will start hammering away for a very short while, and then stop and ask
you whether you want to build the indexing files.  Generating index files
takes a lot longer (I'd guess that it doubled the amount of time taken to
typeset the `.dtx' file) so I don't recommend it unless:

  * you've got a very fast processor, or
  * you're very interested in how the package works internally, or
  * you just like everything to be complete, or
  * you're a masochist.

Even so, there's no point writing indexing information the first time you
run LaTeX on a file, because the table of contents hasn't been created yet,
and when you LaTeX the file the second time, all the references will change.

If you want the index files anyway, type `y' when you're asked.  Otherwise,
type 'n'.  You know you want to type `n' really...

If you want to do the job properly, you need to run LaTeX a second time
to read in the contents table.  /This/ is the correct time to turn on
indexing, if you really want it.

If you did build the index files, you should now sort the index by saying

  makeindex -s gind.ist <name>.idx

where <name> is the same as the name of the `.dtx' file.  The `gind.ist' file
should have come with LaTeX.  Having done this, you should run the `.dtx'
file though LaTeX one final time, to insert the formatted index.

You can now print or preview the generated `.dvi' file using whatever tools
you usually use for such things.


--- What changed? ---

Here's a list of what changed in the various releases.

Version		Changes

1.00		* First general releases of everything.


1.01		* Fixed typos in various bits of documentation.

		* (mdwtab.sty) Added enhanced \cline command.  Added
		  hhline.sty to list of supported table-related packages.
		  (I guess it always worked -- I just forgot about it.)
		  Made some of the section titles a little sillier ;-)

		* (mathenv.sty) Added some new random environments, mainly
		  because I saw some more interesting examples in /The/
		  /TeXbook/ and had an idea...  Now support nesting of
		  various environments, albeit rather imperfectly.

		* (at.sty) Made @-commands really properly robust.  Fixed
		  some lies in the documentation.  Removed some truly insane
		  bits of old code here too.  Made package sort of
		  cooperate with amsmath's use of @-commands -- suggestions
		  for improvement welcomed.

		* (mdwtools.tex) Fixed /really/ stupid mistake in which made
		  typesetting the documentation about fifty times slower
		  than it should have been (bashes self on head several
		  times).  Changed the structure here a bit too, to handle
		  document classes as well as packages.  Made TeX much
		  quieter while it's typesetting the documentation.

		* (sverb.sty) Fixed duff paragraph formatting in listing
		  environment and \verbinput command (due to the `wrong
		  sort' of grouping).  (My excuse for missing this one is
		  that my standard document class sets \parskip=0pt.)

		* (mdwtools.ins) Fixed this in line with the documentation
		  which hints that it should work with older docstrips.
		  It's a bit hacky but it works.


1.02		* (gpl.tex) Fixed some bugs which made typesetting go wrong
		  in larger documents.  Restructured preamble so that it
		  can be typeset on its own.  Put in eplicit item numbers
		  in the enumerate environments, for more obvious conformance
		  to the original.

		* (mdwtab.sty) Lots of changes here, many suggested by
		  David Carlisle (so oodles of thanks to him for taking
		  an interest in my humble hackings).  Fixed bugs, including
		  one which put entirely incorrect interline spacing in
		  `p' type columns.  Redone the handling of [t] and [b]
		  tables with top and bottom rules, and removed the
		  `\rulefudge' parameter which is no longer necessary.
		  Miscellaneous other changes.

		* (mdwtab.dtx) Tidied up some nastinesses in the
		  documentation, and removed the `\over' commands from the
		  maths demos, to keep certain people happy.  Floated a few
		  more of the demonstrations to make page breaking better.
		  There's a danger that some of the demos are drifting too
		  far away from their text, but it's not too bad yet.

		* (syntax.sty) Used \doafter here to fix some colour handling
		  problems.

		* (syntax.sty) Tidied up the `grammar' environment quite a
		  bit (it now uses `\item', rather than trying to emulate it
		  internally), and fixed some vicious bugs in it and some
		  other code.

		* (doafter.sty etc.) A new addition, to make the various
		  packages handle colour properly.  Mainly written by
		  Peter Scmitt, actually, I just fiddled with it a little.
		  Then Peter gave me a better version, and I've tried to
		  upgrade this one.

		* (footnote.sty) A new addition, to offer some shared things
		  for handling footnotes.  It also enables footnotes in
		  parboxes, which used to be difficult, and provides a
		  `footnote' environment which allows verbatim text.

		* (mdwlist.sty} A new addition, providing miscellanous
		  list-related macros.  It's a sort of mixed bag of things
		  I've had lying around various document preambles, combined
		  with some ideas from the Companion.

		* (at.sty) Rewritten command name parser to be much nicer.
		  Added support for digits within @-command names (subject
		  to being enabled by an option).  This is in response to
		  requests in comp.text.tex for digits in command names.

		* (mathenv.sty) Totally overhauled the matrix spacing rules.
		  Added `script' environment.  Improved numbering things,
		  with `\eqnumber'.  

		* (mdwtools.tex) Some minor changes here to fix some buglets.
		  Played with some more float parameters, to discourage
		  float pages a bit more.  Then revamped completely, turned
		  into a docced program (although it isn't docstripped),
		  rewritten title generation, and made much more
		  customisable.


1.02a		* (mdwtab.sty) Added support for table beautification in
		  longtable.  Documented how to do this.


1.03		* (mdwtab.sty) Completely redone the paragraph-cell handling:
		  list environments now work properly inside tables (without
		  funny extra space appearing at the top and bottom).  Also
		  fixed a bug in the newline handling, which ignored negative
		  interrow space in the \\ command.

		* (syntax.sty) Changed the underscore handling, and some
		  other bits, to fit in rather better with LaTeX's output
		  encoding system.  It's nastier and hackier inside, but it
		  works better with things like the DC fonts.  Also stopped
		  re-lowercasing of `~' from escaping and messing everything
		  up for everyone.  Improved underscore appearance by
		  lowering it some more.

		* (syntax.sty) Replaced some `2's with `\tw@'s.  Added a
		  comment about dvips's inaccurate positioning of rules.

		* (sverb.sty) Made non-* environments build end text from
		  the name of the current environment, rather than having it
		  hardcoded.  Also stopped `unignore' environments being
		  a group.

		* (sverb.dtx) Removed some porkies from the documentation.

		* (mdwtab.sty) Fixed some miscellaneous typos.  Removed
		  `\rulefudge' from the table of tweakables, because it
		  was withdrawn in release 1.02.

		* (cmtt.dtx) New package, for handling the `cmtt' font
		  better.  It introduces a special encoding for the font,
		  and provides a command which allows you to use all the
		  characters without the disadvantages of verbatim text.

		* (other changes) Improved distribution building and
		  testing stuff which you can't see because I'm not
		  releasing it.


1.04		* (syntax.sty) Provided some new commands for playing with
		  interword spacing in `tt' fonts.

		* (doafter.dtx and footnote.dtx) Added some docstrip guards
		  around the meta-comments, so that the charactertable and
		  the GPL header aren't put into other packages.
		  Unfortunately the version of docstrip which understands
		  this hasn't been released yet...

		* RCSified everything, so I can find old revisions, and I'm
		  less likely to destroy everything.

		* (footnote.dtx) Added a check for AMS environments doing
		  measuring passes, to avoid duplicated footnotes.  (Spotted
		  by Roberto Bagnara.)


1.05		* (mdwtab.dtx) Fixed stupid bug in paragraph cells which
		  left 1000pt high table rows.  (Spotted by Rowland.)

		* (mdwtab.dtx) Fixed horizontal spacing problems with
		  empty paragraph cells.

		* (mdwlist.dtx) Allowed compact lists and resumed lists
		  to pass arguments on to the underlying environments.


--- Future plans ---

doafter.sty	Add Peter Schmitt's testing for implicit/explicit braces,
		as a package or docstrip option.  (This extra testing is
		a significant chunk of code, and I don't think it's worth
		burdening the standard version with it.  Peter agrees with
		me.)

mathenv.sty	Do postprocessing on display maths environments to position
		the equations and equation numbers properly, so they don't
		overlap (like the AMS environments do, although more
		robustly).  Once this is done, I think I'll have a reasonable
		case for saying that this provides an alternative to the
		AMS environments, although quite what the advantage is I
		don't know: mdwtab.sty isn't exactly small.

		Work is currently `in progress' on this one.

mdwtab.sty	Consider doing postprocessing on tables (yuk) in a blkarray
		sort of way.

footnote.sty	Merge with Robin Fairbairn's package of the same name.  Allow
		different rules for continued notes (suggested by Donald
		Arseneau, after a news article by Jonathan Wand).

New packages	I'm currently working on a little something for typesetting
		poetry properly (centring poems horizontally based on the
		longest line, etc.), handling footnotes properly, doing
		line numbering etc.  If anyone has any wishes for this,
		little things a tyro like me ought to know, or knows that
		it's already done better than I could manage, then let me
		know.


--- Contacting the author ---

The author can be reached by email at mdw@excessus.demon.co.uk.  This is his
personal dial-up account, paid for privately, so don't expect replies after
five minutes or anything like that.

If you do have any comments regarding the code, its documentation, or
anything else to do with these packages, don't leave me guessing -- let me
know.  While I won't guarantee to do anything about your comments, chances
are that I'll right any wrongs and rescue any damsels in distress (oh, no,
wrong spiel).


-----------------------------------------------------------------------------
