ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Sergey Slyusarev <cph.lmy@gmail.com>
To: Hans Hagen <pragma@wxs.nl>
Cc: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: Bug: \textext inside \*MPinclusions causes error
Date: Sun, 22 Jan 2017 00:13:00 +0300	[thread overview]
Message-ID: <CAHUe7fCnndYST4c-MCmwfSLyC-9ApkRiKgKtf0OJJzr2ikpp-g@mail.gmail.com> (raw)
In-Reply-To: <5ff6c190-3493-e46a-2fa9-909cb1abb3c8@wxs.nl>


[-- Attachment #1.1: Type: text/plain, Size: 4930 bytes --]

On Tue, Jan 17, 2017 at 11:35 AM, Hans Hagen <pragma@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 | 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 ),
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.

[-- Attachment #1.2: Type: text/html, Size: 7159 bytes --]

[-- Attachment #2: Type: text/plain, Size: 492 bytes --]

___________________________________________________________________________________
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	other threads:[~2017-01-21 21:13 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-16 19:31 Sergey Slyusarev
2017-01-17  8:35 ` Hans Hagen
2017-01-21 21:13   ` Sergey Slyusarev [this message]
2017-01-22 12:23     ` Hans Hagen
2017-02-13 22:36       ` Sergey Slyusarev
2017-02-14 12:13         ` Hans Hagen
  -- strict thread matches above, loose matches on Subject: below --
2017-01-12 11:23 Sergey Slyusarev
2017-01-15 17:55 ` Hans Hagen
2017-01-11 22:08 Sergey Slyusarev
2017-01-12  9:06 ` Hans Hagen
2017-01-12 16:53   ` Alan Braslau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAHUe7fCnndYST4c-MCmwfSLyC-9ApkRiKgKtf0OJJzr2ikpp-g@mail.gmail.com \
    --to=cph.lmy@gmail.com \
    --cc=ntg-context@ntg.nl \
    --cc=pragma@wxs.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).