MetaPost for MS-DOS Updated Sept 3, 1996 1. INTRODUCTION 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. 2. INSTALLATION 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. MPLIB=C:\METAPOST 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 configuration file! You can have more than one filename, separated by ';' e.g. SET MPCONFIG=C:\METAPOST\MP.CFG;MP.CFG 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 (optional) MPTEX The command to call TeX if it is different from just "tex" EMXOPT -X may be necessary depending on your XMS usage. Defaults: TEXFONTS .;c:/emtex/tfm! MFINPUTS .;c:/emtex/mf/macros! MPINPUTS .;c:/metapost! MPEDITOR emacs %s TEXVFONTS c:/emtex/vf! MPLIB c:/metapost MPXCOMMAND see 4. below MPTEX tex MPCONFIG none. 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 MAKEMPX.BAT file. 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 exit codes. 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. 5. FILENAMES 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. 6. NOTES 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 email: piet@cs.ruu.nl http://www.cs.ruu.nl/people/piet