The Early history of MetaPost

The user's manual describes Version 0.50, and Drawing Graphs with MetaPost describes what is new in Version 0.60.

Changes to the MetaPost Language Between Versions 0.50 and 0.60

  1. New operator readfrom <filename> and new command
    write <string expression> to <filename> do file I/O. There is a special string EOF that readfrom and write understand as end-of-file.
  2. New iteration type for p within <picture expression>: <loop text> endfor
    iterates through the interior components of the picture. An "interior component" is a single pen stroke, filled outline, or piece of typeset text. A part of the picture enclosed in a clipping or setbounds path also counts as an interior component. If the whole picture is enclosed in such a path, the for...within iteration looks inside. Note that apicture generated by btex...etex is enclosed in a setbounds path.
  3. The length operator now applies to pictures. It returns the number of interior components.
  4. New boolean operators stroked, filled, textual, clipped, bounded test the first component of a picture. A picture enclosed in a clipping or setbounds path counts as a single component.
  5. Part extraction operators now work for pictures. Standard operators redpart, greenpart, bluepart apply to the color of the first component and xpart, ypart, xxpart, xypart, yxpart, yypart extract parts of the tranformation that has been applied to a text component. If "textual p" is false, the transform components are all zero; if "clipped p" or "bounded p" is true, the color parts are all zero. Additional operators fontpart, textpart, pathpart, penpart, dashpart extract other information from the first component of a picture. They all return null values when the first component has the wrong type.
  6. The construction "dashed nullpicture" is now a no-op. It used to be an error.
  7. The clip and setbounds statements used to ignore operations on empty pictures. Now they do not.
  8. Structuring comments in the PostScript output are now based on EPSF-3.0 as described in the 2nd Edition of the PostScript Reference Manual. When prologues is 0, some structuring comments are included but the output is not flagged a "conforming document". Previous versions of MetaPost behaved similarly but used slightly different structuring comments.
  9. When warningcheck is 0, numeric tokens and results from the hex and oct operators can be as large as 32767.99998. The old limit of about 4096 applies only when warningcheck is positive.
  10. Various optimizations should make the output a little more compact.
  11. For PostScript engines that obey the scan-conversion rules documented in the 2nd edition PostScript Language Reference Manual, hrules and vrules in btex...etex blocks should now come out to exactly the right number of pixels. The change affects all pen strokes drawn in MetaPost It is implemented via PostScript's dtransform and idtransform operators.
  12. A bug involving setbounds and MetaPost's corner operators has been fixed.
  13. Degenerate elliptical pens no longer cause PostScript to divide by zero.
  14. Fixed a very obscure bug involving readstring and end-of-file.
  15. String compaction statistics are now printed correctly when the job terminates with tracingstats positive.

Changes to the MetaPost Language Between Versions 0.60 and 0.63

  1. plain.mp has been fixed so that the x**y works properly when x<0 and y is a negative integer.
  2. Programs mptotex.c and mptotr.c which extract btex...etex material have been fixed so they work properly with input files that do not end with a newline character.
  3. Program dmp.c which handles troff output from btex...etex blocks has been modified to avoid outputting any non-ASCII characters that the C function isprint() accepts.
  4. Program dmp.c no longer gets troff graphics specials confused with text. This seldom matters because btex..etex blocks are unlikely to contain troff graphics.
  5. Pictures containing clipped subpictures could come out with some colors in the subpicture wrong.
  6. Colors in PostSript output were not being restricted to the standard 0...1 range.
  7. Transforming a path or a pen should no longer generate extraneous overflow errors in certain unusual situations.
  8. Drawing with a degenerate 2-vertex polygonal pen such as penrazor should no longer cause an infinite loop in certain unusual situations.
  9. There were some bugs in the mfplain macros. (These macros are designed to similate plain METAFONT.) The drawing and filling macros now apply currenttransform to the path but not the pen rather than vice versa. The predefined modes now set o_correction to 1.0.
  10. For security reasons, mp can no longer read or write files whose names begin with "."

Changes Subsequent to Version 0.63

  1. plain.mp now defines a new internal dotlabeldiam.
  2. When prologues is negative, the output files use full precision for coordinates in %%BoundingBox comments.

MetaPost Timeline

Aug 23, 1989
Preliminary paper A METAFONT-like System with PostScript Output, presented at the TeX User's Group Meeting.
Jan 19, 1990
Work begins in ernest on mp, the MetaPost interpreter.
Feb 21, 1990
mp compiles for the first time.
March 6, 1990
MetaPost support added to dvips.
March 15, 1990
Initial version of dvitomp completed.
March 24 1990
First preliminary version installed locally at Bell Labs.
April 18, 1990
MetaPost support in dvips redone for TeX 3.0
May 1, 1990
"Virtual fonts" added to dvitomp.
Early May 1990
Initial inquiries about how to get permission to make MetaPost available outside of AT&T.
Aug. 28, 1990
Added troff support (version 0.15).
Jan. 10, 1991
First outside distribution of the MetaPost system. Only a limited number of academic institutions are elligable, and they must sign non-disclosure agreements.
April 30, 1991
Preliminary version of the MetaPost user's manual is completed.
March 25, 1992
MetaPost becomes available to any academic institution that signs a non-disclosure agreement.
April 4, 1992
Updated User's Manual published as CSTR 162.
Apr 24, 1992
Version 0.50 released. (First version to be distributed widely).
Sep 14, 1992
An Introduction to MetaPost appears in the Proceedings of EuroTeX '92.
Oct 21, 1992
The MetaPost system runs on MS-DOS for the first time.
July 19, 1993
Finished the graph-drawing package and published the documentation for it as CSTR 164.
Dec 21, 1994
MetaPost becomes public.