This file belongs to the MFTOEPS package. ----------------------------------------------------------------------------- OVERVIEW The package MFTOEPS belongs to the public domain. You are entitled to do with the files of which it consists whatever you wish. If you alter a file, however, please remove the line containing the comment `This file belongs to the MFTOEPS package.' in order to avoid a mess. The kernel of this little package is the METAFONT program MFTOEPS.MF written by Bogus\l{}aw Jackowski, Piotr Pianowski and Marek Ry\'cko. The aim of the program is to produce EPS (encapsulated PostScript) files readable by CorelDRAW!(R), Adobe Illustrator(TM) and Fontographer(R). The user of the package is supposed to be familiar a bit with METAFONT and PostScript. Donald E. Knuth's ``The METAFONTbook'' and Adobe's ``PostScript Language Reference Manual'' (both by Addison-Wesley Publishing Company, Inc.) should be consulted in the case of doubts. There is a bunch of simple examples in the subdirectory M2ESAMP. The directory ../PROGS contains DOS batch files and other programs which, possibly after some adjustments, can be used to generate EPS files. Roughly, the machinery works as follows: the resulting PostScript code is written by METAFONT to a LOG file; the LOG file is then processed either by AWK or by TeX (see the PROGS subdirectory) in order to extract the PostScript code. The idea seems straightforward; however, even a partial conciliation of the worlds of CorelDRAW! and Adobe Illustrator was not so much straightforward. ----------------------------------------------------------------------------- In addition to the main MFTOEPS package, there are two ``bonus'' packages in directories ../EPSTOMF and ../ROEX. EPSTOMF converts ``canonical'' EPS files, i.e., files conforming the structure of the files generated by the MFTOEPS package, into the METAFONT lingo; ROEX is a set of METAFONT macros accomplishing the task of removing overlaps and expanding strokes (for details see there). ----------------------------------------------------------------------------- INTERFACE SYNOPSIS Conventions: In the following we shall use words `number,' `pair,' `string,' and `path' as an abbreviation for `numeric expression,' `pair expression,' `string expression,' and `path expression,' respectively. The signs `less' and `greater,' used for marking parameters of macros, are ``meta-characters,'' i.e., they do not belong to the METAFONT code. There are fifteen interface macros defined in the MFTOEPS.MF file: eps_mode_setup write_preamble write_postamble set_BB find_BB reset_BB fill_C draw_C clip_C fix_line_width fix_line_join fix_line_cap fix_line_miter_limit fix_fill_cmyk fix_draw_cmyk COMMAND eps_mode_setup USAGE eps_mode_setup ; REMARKS This command should be used instead of the usual |mode_setup| command. The forms |EPS_mode_setup| and |EPS_mode_setup 1| are equivalent. One of them (preferably the former one) should be used for normal processing. Invoking |EPS_mode_setup 0| is meant primariliy for testing purposes and is supposed to be used by experienced programmers who know what they are doing. There are two predefined constants in MFTOEPS.MF to be used in this context, namely, |no_export_level=0| and |compatibility_level=1|. It is advisable to use the names of the constants rather than bare numbers. COMMAND write_preamble USAGE write_preamble ; REMARKS This command initialises the process of writing of the PostScript code. The string expression is the name (without extension) of the resulting EPS file; the extension is always |.EPS|. METAFONT is switched to the |batchmode| in order to avoid slowing down the process by writing mess(ages) to the terminal. The inspection of the log file is thus highly recommended. COMMAND write_postamble USAGE write_postamble; REMARKS This command ends writing of the PostScript code, switches METAFONT back to the |errorstopmode|, and performs neccessary ``last minute'' actions (see below). COMMANDS set_BB find_BB reset_BB USAGE set_BB ; find_BB ; reset_BB; REMARKS Commands |set_BB| or |find_BB| should be invoked prior to invoking |write_preamble|. |set_BB| sets the coordinates of the corners of the bounding box of a graphic object; it is useful when the bounding box of a graphic object is known in advance or if it is required to force an artificial bounding box. |find_BB| computes the respective bounding box for a list of paths; if several |find_BB| statements are used, the common bounding box is calculated for all paths that appeared in the arguments. The result is stored in the variables |xl_crd|, |yl_crd|, |xh_crd|, and |yh_crd|. There are two functions, |llxy| and |urxy|, returning pairs |(xl_crd,yl_crd)| and |(xh_crd,yh_crd)|, respectively. The last command, |reset_BB|, makes |xl_crd|, |yl_crd|, |xh_crd|, and |yh_crd| undefined (the initial situation); |reset_BB| is performed by the |write_postamble| macro, which is convenient in the case of generating several several EPS files in a single METAFONT run. COMMANDS fill_C draw_C USAGE fill_C ; draw_C ; REMARKS These commands are to be used instead of the usual METAFONT |fill| and |draw| ones. They cause that a list of paths followed by the PostScript operation |eofill| (|fill_C|) or |stroke| (|draw_C|) is translated to a PostScript code. The list of paths constitutes a single curve in the sense of PostScript. COMMAND clip_C USAGE clip_C ; REMARKS The macro |clip_C| with a non-empty parameter works similarly to the |fill_C| command, except that the |eoclip| operator is issued instead of |eofill|. This causes an appropriate change of the current clipping area. According to PostScript's principles, the resulting area is a set product of the current clipping area and the area specified in the argument of the |eoclip| command. The empty parameter marks the end of the scope of the most recent |clip_C| command with a non-empty parameter. In other words, nested |clip_C| commands form a ``stack'' structure. If needed, the appropriate number of parameterless |clip_C| commands is issued by the |write_postamble| macro, thus the user needs not to care about it. WARNING: files produced with the use of |clip_C| are interpreted properly by Adobe Illustrator (provided paths directions are defined properly) but not by CorelDRAW! (ver. 3.0). COMMANDS fix_line_width fix_line_join fix_line_cap fix_miter_limit fix_dash USAGE fix_line_width ; fix_line_join ; fix_line_cap ; fix_miter_limit ; fix_dash () ; REMARKS These command are to be used in connection with the |draw_C| command. |fix_line_width| fixes the thickness of the outline. The other three commands correspond to PostScript operations |setlinejoin|, |setlinecap|, |setmiterlimit|, and |setdash| (see ``PostScript Language Reference Journal'' for details). All commands should be used after |write_preamble|, as |write_preamble| sets the default thickness (0.4pt), default line join (0), default line cap (0), default miter limit (10), and a solid line as a default for stroking (|fix_dash () 0|). COMMANDS fix_fill_cmyk fix_draw_cmyk USAGE fix_fill_cmyk ; fix_draw_cmyk ; REMARKS These commands define the colours of the interiors of graphic objects (|fix_fill_cmyk|) and colours of outlines (|fix_draw_cmyk|) using cyan-magenta-yellow-black model (basic model). They should be used after |write_preamble| (because |write_preamble| defines the black colour as a default for both macros) and prior to invoking the corresponding |fill_C| and |draw_C| commands, respectively. There are also (just in case) macros |fix_fill_rgb| and |fix_draw_rgb| using red-green-blue model; the argument to both macros is a triple of numbers. (The user can control the process of conversion from RGB to CMYK by the redefinition of macros |under_color_removal| and |black_generation|.) The numbers forming the arguments of the macros are supposed to belong to the interval [0..1]. ADDITIONAL FUNCTIONS pos_turn neg_turn USAGE pos_turn neg_turn REMARKS Each function returns the path passed as the argument, except that the orientation of the path is changed, if necessary: |pos_turn| returns paths oriented anti-clockwise, |neg_turn|---oriented clockwise. This may be usefull for creation pictures which are to be processed further by Adobe Illustrator, because this program is sensitive to the orientation of paths. CONTROL VARIABLES yeseps yesEPS YESEPS REMARKS No EPS file will be generated unless one variable among |yeseps| or |yesEPS| or |YESEPS| is assigned a definite value. It is advisable to set this variable in a command line (see M2E.BAT and M2E-ALT.BAT in the PROGS directory). In fact, using |yeseps| is reccomended. Aliases |yesEPS| and |YESEPS| were introduced for ``historical'' reasons. CONTROL VARIABLE testing REMARKS If the variable |testing| is assigned a definite value, the whole PostScript code is flushed to the terminal, thus slowing down significantly the process of generation of an EPS file (cf. the description of the |write_preamble| command). ----------------------------------------------------------------------------- ENCOURAGEMENT The inspection of the source code of the MFTOEPS.MF program may reveal a few more useful macros. ----------------------------------------------------------------------------- END OF THE 0MFTOEPS.DOC FILE