[metapost] problem with drawoptions and fake Euro symbol

Hartmut Henkel hartmut_henkel at gmx.de
Wed Nov 14 01:58:55 CET 2007

On Tue, 13 Nov 2007, Stephan Hennig wrote:

> I'm trying to use Euro symbols in MetaPost source code that is
> generated by gnuplot's mp terminal.  The code makes heavy use of the
> drawoptions macro and this seems to interfere with fonts.
> The eurofont package provides access to three different fonts that
> actually provide (fake) Euro symbols, namely adobeeurofonts, marvosym
> and eurosym.  With package options adobeeurofonts and marvosym
> horizontal rules in fake Euro symbols depend on MetaPost's drawoptions
> settings and can come out too heavy or too light, depending on pen
> width.  This looks very bad (see attached file) and I wouldn't expect
> drawoptions and (virtual) fonts to interfere.
> I can think of two causes for the problem:
> (i)  The fonts have a bug in the fake symbols.  The strange thing
> about this is, that two different implementations suffer from the same
> bug, then.  Only package eurosym seems to use a more robust solution
> for fake Euro symbols.
> (ii)  There is a problem with MetaPost's font handling.
> What do people think?

> verbatimtex
> \documentclass{article}
> \usepackage[T1]{fontenc}
> \usepackage{lmodern}
> \usepackage[adobeeurofonts]{eurofont}% fails
> % \usepackage[marvosym]{eurofont}% fails
> % \usepackage[eurosym,gen]{eurofont}% works
> \begin{document}
> etex
> prologues:=3;
> beginfig(1);
>   label(btex 1000\euro etex, origin);
>   drawoptions(withpen pencircle scaled 2);
>   label(btex 1000\euro etex, (50,0));
> endfig;
> end

What happens is that label() expands into a draw macro (see plain.mp)
which in turn triggers the inclusion of drawoptions _op_ at the end. And
these drawoptions are not applied to line drawing only, they are
effective for picture drawing also (!), e. g. in

picture a;
a=image(draw fullcircle scaled 10mm);
draw a dashed evenly.

the fullcircle is drawn in dashed mode.

To get rid of this effect on label one could temporarly define label
with the lower level addto primitive like

def label = addto currentpicture also thelabel enddef;

in which case no _op_ stuff is used. Then the \euro is drawn correctly.

Maybe drawoptions/_op_ should be activated only for drawing paths, but
not for drawing pictures?

Regards, Hartmut

More information about the metapost mailing list