MetaPost for MS-DOS
Updated Sept 3, 1996
MetaPost is a programming language similar to Metafont. However it is
not used for making fonts, although to a certain extent it can be used
for that, but to generate Postscript figures. It shares with Metafont
most of the language features, like: the ability to solve linear
equations, a powerfull macro language, automatic calculation of Bezier
control points, and pen-like drawing commands. It also has macro
libraries for x-y graphing and box figure drawings. Metapost was
designed and implemented by John Hobby.
This is metapost 0.631 for MS-DOS. It is compiled from the web2c
sources, translated to C on a Unix workstation, with some manual
editing of the C files. Some empty files like .web and .p files have
been added with appropriate timestamps to make the makefile happy.
It has also been patched to accept 8-bit characters in TeX code.
This version is compiled with GCC (emx) and therefore will only run on a
80386 or higher. Moreover you must have EMX installed, and if you want to
run under MS-Windows, also RSX.
You can find the required files in the emtex distribution on CTAN
in the file emxrsx.zip.
1. copy MP.EXE from the MP directory to a place that is in
your PATH or add this directory to your PATH.
2. copy the directories MPLIB and MPINPUTS to your hard disk. You may
choose to copy these to the same directory, by default C:\METAPOST.
3. Set the following environment variables if you don't like the
defaults. The preferred way is to enter the variables in a
configuration file, and to set only the environment variable
MPCONFIG to the name of the configuration file, e.g.
SET MPCONFIG=C:\METAPOST\MP.CFG in your AUTOEXEC.BAT
The configuration file can contain the definitions without the
'SET' command, e.g.
If you don't specify MPCONFIG, or the file cannot be found,
Metapost will silently use the values drom the environment. If a
variable is defined both in the configuration file and in the
environment, the configuration file value will be used. In fact
the values in the configuration file will replace the existing
environment variables, even for variables not mentioned below. In
this way you can pass on other environment variables e.g. to TeX.
The configuration file is only read by MP, not by the auxiliary
programs, they will get the value passed on by MP through the
environment. There is no check on the contents of the
You can have more than one filename, separated by ';' e.g.
In this case all files will be read (if present), and values in
later files will override values from earlier files. This is
mainly meant to override values in local directories.
TEXFONTS * The location of the tfm files for TEX
TEXVFONTS * virtual font path for TeX
MFINPUTS * Metafont input path
MPINPUTS * Metapost input path (must contain the directory where
you copied MPINPUTS)
MPLIB The location of directory MPLIB
MPXCOMMAND The command makempx if you don't want the default
MPEDITOR An editor to be called when metapost finds an error
MPTEX The command to call TeX if it is different from just "tex"
EMXOPT -X may be necessary depending on your XMS usage.
MPEDITOR emacs %s
MPXCOMMAND see 4. below
The environment variables marked with * can have (recursive)
subdirectory searching by specifying ! or !! at the end of a name.
! means one level subdirectory searching, !! means recursive searching.
3. The MPEDITOR value can have %s for inserting the input filename, %d
for the line number and %l for the logfile. The filenames will have
'/' replaced by '\', unless the capitalized versions %S and %L are given.
4. If MPXCOMMAND is not set, an internal routine will be called which
essentially does the same as the MAKEMPX.BAT file supplied. If you
want to try something different you can set MPXCOMMAND to the desired
command, e.g. set MPXCOMMAND=MAKEMPX.BAT, or you can make your own
batch file by editing MAKEMPX.BAT.
The command is called with 2 parameters: the first parameter is
the input file name (the MP file), the second parameter is the
name of an MPX file that should be created by the command.
Metapost supposes that the MPXCOMMAND has successfully completed
if a new MPX file has been created (i.e. newer than the MP file). In
case of an error an incomplete MPX file should be deleted or renamed
(see MAKEMPX.BAT for an example).
The supplied command file and the internal routine do nothing if
there is already an MPX file that is newer than the MP file. If
this is not appropriate, delete the corresponding test for the
If you want to try this batch file under MS Windows you may get an
errormessage "Not enough environment space". To get rid of this
errormessage you may try a few things:
- set MPXCOMMAND=%COMSPEC% /e:1500 /c MAKEMPX.BAT The number 1500
may be increased if necessary. It must be about 100 larger than
your current environment size.
- You may set the environment variables from the start of
MAKEMPX.BAT to some reasonably large values, e.g. set
MPFILE=C;\DDDDDDDDD\XXXXXXXX.YYY so that enough space is present
when MAKEMPX.BAT starts.
If you use the internal routine, the environment variable MPTEX can be
set to the command to run TeX to a different value, e.g.
set MPTEX=tex386 /mt:20000 &plain
If you use the supplied MAKEMPX.BAT you must be careful to set
MPTEX=CALL TEX if your TeX command is a batch file!!
In case something goes wrong with the MPXCOMMAND processing, you can
prepend a '@' sign to the MPXCOMMAND (or give only @) to enable some
debugging. It will then print the command(s) that are given, and their
If you use 4DOS you may try makempx.btm as MPXCOMMAND.
On OS/2 either use the internal command or rename the MAKEMPX.BAT
file to MAKEMPX.CMD.
Most filenames can be given with '/' or '\' to separate directory names.
If the supplied MAKEMPX.BAT file is used as MPXCOMMAND, the
directories in MPLIB must be separated by '\' (unless you have a
command processor that allows '/' in filenames).
However, the filename that is given as parameter to the MP command
should not start with '\', as that signals MP that a command is given
rather than a filename. You can, however, call it as: MP \input \filename.
Depending on your memory management setup MP may run out of memory with the
standard setup. It appears that setting EMXOPT=-X corrects this. I don't
know much about this (and I don't wanna know), but maybe this can also be
done with emxbind on mp.exe.
There is no troff support.
There is no separate INIMP. Just call MP -I to get INIMP.
NOTE that this is an experimental setup. No guarantees. You can ask
questions, submit bug reports or just chat at the address below,
however. Good luck!!
Piet van Oostrum