X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2FREADME;h=bcea8964b22c97a8198089fe0537b236c9f4b312;hb=926115ff42def8bc1ce767029e4f03c8072994ba;hp=f6878bc0f081d43577a8c0772194d713823ea645;hpb=e85b008ae96fef8fc0c15529e8a172584d5d08fd;p=lilypond.git diff --git a/mf/README b/mf/README index f6878bc0f0..bcea8964b2 100644 --- a/mf/README +++ b/mf/README @@ -1,44 +1,182 @@ -This is from the package MusixTeX, version T.59 or T.64 (Taupin -version.) -The documentation states: +LilyPond's Feta and Parmesan fonts +================================== - \begin{center} +[The name `feta' is based on a non-translatable Dutch pun (`font-en-tja'). + Given that it is the name of a cheese type, the font for old music symbols + is called `parmesan', and the OpenType font that merges these two fonts is + called `emmentaler'.] - Although one of the authors contested that point once the - common work had begun, \musixtex{} may be freely copied, - duplicated and used. However, since it is intended to be a - \ital{freeware} you are not allowed to sell it, and the fee - you may ask for distributing it must be limited to - maintenance, support and duplication costs. You may take parts - of it to include in other packages, but no packages called - \musixtex{} may be distributed under this name if different - from the original distribution (except obvious bug corrections - or text font adaptations for specific implementations). +This is a font of music symbols. All MetaFont sources are original. Most +of the documentation is in comments in the MetaFont code. - \musixtex{} may be included in further commercial packages, - provided that no fee is charged for \musixtex{} itself. +Non-square pixels are not supported; with other words, the horizontal and +vertical resolution of the output device must be the same. - \end{center} +Conversion from MetaFont to PostScript +-------------------------------------- -A part (the fonts) are included in this package, which is not called -\musixtex, so this not a copyright infringement. +The MetaFont code gets directly converted to PostScript Type 1 font with a +tool called `mf2pt1', which in turn calls `FontForge' to postprocess the +output (mainly to remove outline overlaps and to add hints). +The recommended calling sequence of mf2pt1 is -MusixTeX is copyright 19?? by: + mf2pt1 --rounding=0.0001 - Daniel Taupin, +You need mf2pt1 version 2.1 or newer. - Laboratoire de Physique des Solides (associ\'e au CNRS), - b\^atiment 510, Centre Universitaire, F-91405 ORSAY Cedex - +Here some guidelines to assure a clean conversion. - Ross Mitchell +. Never use `---'. Replace it with `--' together with explicit path + directions (if necessary). - CSIRO Division of Atmospheric Research, Private Bag No.1, - Mordialloc, Victoria 3195, Australia +. Don't use self-intersecting outlines in general since they can confuse + mf2pt1's algorithm to get the orientation of a closed path. Note that + MetaPost's implementation of the `turningnumber' primitive (which would + immediately give the orientation of a path) is severely broken before + version 1.0 of MetaPost, thus some hand-made code in mf2pt1.mp is used + to work around this bug. - Andreas Egler +. If outlines intersect, avoid grazing intersections. In case two outlines + intersect in an explicitly defined point, include this point in both + intersecting paths to avoid problems due to rounding errors. - (Ruhr--Uni--Bochum) Ursulastr. 32 D-44793 Bochum +. Don't use `draw' with a polygonal pen but for straight lines (consisting + of exactly two points). In most cases it is quite easy to emulate `draw' + with an explicit definition of the outline or with `penstroke'. + +. Don't apply transformations after calling `fill' -- for example, don't + mirror `currentpicture'. Instead, transform the path and call `fill' + afterwards. This ensures that mf2pt1 gets the correct outline directions, + which is a necessary prerequisite for FontForge's algorithm to remove + overlaps. + + +Glyph name rules +---------------- + +. Most glyph names have the form ., where is defined + with the `fet_begingroup' command, and is given with + `fet_beginchar' (within a `fet_begingroup' block). Example: + `clefs.vaticana.fa'. + +. Sometimes it would be sensible to use negative numbers in glyph names. + However, the `-' character shouldn't be used in a glyph name. Replace it + with `M'. For example, write `rests.M3mensural' instead of + `rests.-3mensural'. + +. Glyphs that exist in both an `up' and `down' version should start the + part with either `u' or `d', respectively. Example: `flags.d3', + `flags.u3'. Glyphs that are neutral w.r.t. the direction, and where + members of the glyph group exist that have `up' and `down' versions, + should start with an `s'. Example: `noteheads.s0re'. + + +Design rules +------------ + +. Always use smooth curve transitions. Since this is difficult to see in + MetaFont proof sheets (which don't show the tangents) I recommend to call + mf2pt1 like this + + FONTFORGE=foo mf2pt1 ... + + (`foo' should be a non-existent program; this avoids the default + postprocessing). Then call FontForge to inspect the outlines. + +. Use rounded corners. + + +Hints for stem attachment +------------------------- + +. Stem attachment of glyphs is controlled by two special variables called + `charwx' and `charwy'. Stems can be regarded as (very oblonged) + rectangles with slightly rounded corners. For stems pointing upwards the + lower right corner of this rectangle is attached to the glyph at position + (charwx, charwy). For stems pointing downwards it works analogously but + with the upper left corner, where the position of the attachment point is + additionally reflected horizontally about the center of the glyph -- this + ensures that in most cases `charwx' and `charwy' can be set to the same + values for up and down stems even though these are attached at the + right/left end of the note, respectively. To make this more precise, the + upper left corner of a down stem is attached at position + + (charwd/2 - charwx, charwy) , + + where `charwd' is an internal MetaFont variable representing the glyph + width as specified by the `set_char_box' command. + +. In case different stem attachments for upward and downward pointing stems + are needed, two separate glyphs must be defined in the MetaFont file; of + course, this also applies if two entirely different shapes are needed. + These have the same name but are prefixed by `u' and `d', respectively + (for `up' and `down', obviously). In each of these glyphs the variables + `charwx' and `charwy' must be set accordingly. If, on the other hand, the + attachment point is the `same' for both directions (with the + abovementioned horizontal reflection taken into account), then the prefix + `s' (for `symmetric') should be used. See the existing files for + examples. The numbers in the glyph names refer to the duration of the + note; e.g., `s0cross' in feta-noteheads.mf defines the notehead for a + whole cross-shaped note (similarly, `s1cross' and `s2cross' are for half + and quarter notes, respectively). + + +Proofing +-------- + +The proofing tool for MetaFont to inspect its output is `gftodvi', +converting a font in MetaFont's native GF font format to a DVI document, +which can then be viewed with DVI viewers like `xdvi'. The `gftodvi' +program needs two special fonts, `gray' and `black'. Assuming that you are +using TeXLive, say + + mktextfm gray + mktextfm black + +on the command line to generate the needed metric files (from its source +files), which are then stored within your local TEXMF tree. + +Here is a shell script that you can use to produce two DVI files, +`foo.proof.dvi' and `foo.ljfour.dvi', showing the glyphs of font `foo.mf' in +proofing mode and a 600dpi rasterization for a LaserJet IV printer. + + #!/bin/sh + mf "\mode:=proof; input $1" + gftodvi $1.2602gf && mv $1.dvi $1.proof.dvi + + mf "\mode:=ljfour; input $1" + echo "grayfont black + " | gftodvi $1.600gf/ \ + && mv $1.dvi $1.ljfour.dvi + +Assuming that you name this script `makefeta.sh', you can call it with e.g. + + sh makefeta.sh feta23 + +The main importance of the proofing DVI output is to show points marked in +the MetaFont source code with the macros `penlabels' and `labels'. In most +cases, those points are used for constructing the shapes only and are thus +not present in the output after the conversion with mf2pt1. + + +Rasterization +------------- + +Finally, some rules to assure that rasterization at low resolutions +(produced directly with MetaFont) gives good results. Today, this is a +minor issue, but in some cases it might show design flaws. + +. Use `define_whole_pixels' and friends where appropriate. + +. Use `hround' and `vround' consistently. A lot of auxiliary macros are + defined in feta-macros.mf. + +. If a path element is duplicated or shifted, use an integer value for the + offset. + +. Add `eps' for mirrored paths to assure correct MetaFont rasterization. + See the comment and the variables at the end of `feta-params.mf' for + details how vertical symmetry should be achieved.