On 1/21/2017 10:13 PM, Sergey Slyusarev wrote:
>
> see below

It's a single tex run so you can do:

\starttext

\newbox\MyMpBox \setbox\MyMpBox\hbox{foo}

\startMPcode
    draw textext("\copy\MyMpBox") ;
\stopMPcode

\startMPcode
    draw textext("\copy\MyMpBox") rotated 45;
\stopMPcode

\stoptext

On Tue, Jan 17, 2017 at 11:35 AM, Hans Hagen <pra...@wxs.nl
<mailto:pra...@wxs.nl>> wrote:

    On 1/16/2017 8:31 PM, Sergey Slyusarev wrote:

            the (subtle) difference between the two [*MPinclusions and
            */MPinitializations/] is not a bug but a feature


        If I understood correctly, *MPinitializations affects everything
        and can't be assigned to a specific instance (or can it?),
        in some cases (like mine) this difference is not so subtle.

        Look at the following example (not so minimal):

        \startMPinitializations

        picture p;

        p := image(

        draw fullsquare scaled 1cm;

        draw textext("1");

        );

        \stopMPinitializations

        \startMPinitializations

        picture s;

        s := image(

        draw (fullsquare rotated 45) scaled 1cm;

        draw textext("2");

        );

        \stopMPinitializations

        \defineMPinstance[foo][initializations=yes]

        \startMPcode{foo}

        picture q;

        q := image(

        draw fullcircle scaled 1cm;

        draw textext("3");

        );

        draw q;

        \stopMPcode

        \startMPcode{foo}

        draw p;

        draw q shifted (2cm, 0);

        draw s shifted (4cm, 0);

        \stopMPcode

        \defineMPinstance[bar][initializations=yes]

        \startMPcode{bar}

        picture r;

        r := image(

        draw fullcircle scaled 1cm;

        draw textext("4");

        );

        draw r;

        \stopMPcode

        \startMPcode{bar}

        draw p;

        draw r shifted (2cm, 0);

        draw s shifted (4cm, 0);

        \stopMPcode


        First, it shows why *MPinitializations can't replace
        *MPinclusions for
        me (it affects all instances),

        and second, it silently produces produces some really unexpected
        results:

        It looks like it should produce (by line)

        A circle with "3" inside (yes)

        A square with "1" inside (yes); A circle with "3" inside again (no,
        instead it produces circle with "2" inside); A rhombus with "2"
        inside
        (no, instead it produces a rhombus with "1")

        and so on.

        (tested on http://live.contextgarden.net/)

        In fact, I failed to declare picture variable inside with text
        inside
        one *MPcode environment and pass it to another safely

        (text either disappears or changes to other text, and this time
        ConTeXt
        returns no error), that surely is a bug?


    no, it's the way it works ... but keep in mind that textexts are
    something bound to a specific code snippet so you can bets do
    something like this:

    \starttext

    \defineMPinstance[foo][definitions=yes]
    \defineMPinstance[bar][definitions=yes]

    \startMPdefinitions{foo}
        vardef p =
            image(
                draw fullsquare scaled 1cm;
                draw textext("1");
            )
        enddef ;
    \stopMPdefinitions

    \startMPdefinitions{bar}
        vardef p =
            image(
                draw (fullsquare rotated 45) scaled 1cm;
                draw textext("2");
            )
        enddef;
    \stopMPdefinitions

    \startMPcode{foo}
        draw p;
        draw image(
            draw fullcircle scaled 1cm;
            draw textext("3");
        );
        draw p;
    \stopMPcode

    \startMPcode{bar}
        draw p;
        draw image(
            draw fullcircle scaled 1cm;
            draw textext("4");
        );
    \stopMPcode

    \stoptext



    -----------------------------------------------------------------
                                              Hans Hagen | PRAGMA ADE
                  Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
           tel: 038 477 53 69 | www.pragma-ade.nl
    <http://www.pragma-ade.nl> | www.pragma-pod.nl
    <http://www.pragma-pod.nl>
    -----------------------------------------------------------------


Thank you, Hans!
I thought of this solution too (
http://tex.stackexchange.com/questions/347908/metapost-text-labels-inside-mpinclusions/348066#348066
<http://tex.stackexchange.com/questions/347908/metapost-text-labels-inside-mpinclusions/348066#348066>
), but in my particular case it didn't work, because the code inside
vardef is only executed when macro is called (while image(...) is
processed immediately). It would help if the macro could be called
within *MPdefinitions, like this:

\starttext
\startMPdefinitions
picture tmp;
vardef p =
image(
draw fullcircle scaled 5cm;
draw textext("test");
)
enddef;
tmp := image(draw p;);
\stopMPdefinitions
\startMPcode
draw p;
\stopMPcode
\stoptext

but that predictably generates the same error ("! Equation cannot be
performed (color=vacuous).").

Anyway, I solved my problem somehow (by running the code inside
*reusableMPgraphic and reusing it for the first time inside \setbox that
is never shown
https://github.com/jemmybutton/byrne-euclid/commit/8c05cc96405f0ee33e6901a7fa66b2dffcda45ad#diff-6a58985423a46a2bb439cfdf26904e5fL30
, at the cost of being unable to modify the image).
Now I see that the fact that it's almost impossible to use images with
text inside, outside of their environment of origin is not a bug, but a
natural limitation of the system, and the first message should have been
not about "bug", but more about something like "feature request". Sorry
for being hasty.

Sergey.


--

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
       tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to