[NTG-context] Code Called Twice?

Philipp Gesang Philipp.Gesang at alumni.uni-heidelberg.de
Sat Oct 12 02:09:01 CEST 2013


···<date: 2013-10-11, Friday>···<from: Hans Hagen>···

> On 10/11/2013 1:00 PM, Philipp Gesang wrote:
> > ···<date: 2013-10-10, Thursday>···<from: Thangalin>···
> >
> >>
> >> I noticed something unexpected with the following code:
> >>
> >> \enabletrackers[metapost.showlog]
> >>
> >> \startuseMPgraphic{heading:ThemeTitleStyle}
> >>    show "HEADING:THEMETITLESTYLE";
> >>    show \MPstring{heading:title};
> >>
> >>    draw textext( \MPstring{heading:title} ) rotated 5
> >>      withcolor blue;
> >> \stopuseMPgraphic
> >>
> >> \defineframed[ThemeTitleStyle][
> >>    background=\useMPgraphic{ThemeTitleStyle},
> >> ]
> >>
> >> \def\processword#1{%
> >>    \setMPtext{heading:title}{#1}%
> >>    \useMPgraphic{heading:ThemeTitleStyle}
> >> }
> >>
> >> \define[1]\ThemeChapterTitle{\applytosplitstringword\processword{#1}}
> >> \setuphead[chapter][deeptextcommand={\ThemeChapterTitle}]
> >>
> >> \starttext
> >>    \startchapter[title=Why Is heading:ThemeTitleStyle Called Twice?]
> >>    \input knuth
> >>    \stopchapter
> >> \stoptext
> >>
> >> It appears as though heading:ThemeTitleStyle is being called twice:
> >>
> >> metapost        > info:
> >>>> "HEADING:THEMETITLESTYLE"
> >>>> "Why"
> >> metapost        > info:
> >>>> "HEADING:THEMETITLESTYLE"
> >>>> "Why"
> >>
> >> I am trying to produce a random number that is not equal to the
> >> previous random number. However, if the code is called twice, then I'd
> >> have to add code to ignore one of the calls.
> >>
> >> Any ideas why the code seems to be called twice and what can be done
> >> to ensure that it is only called once?
> >
> > Don’t use text ;-) That’s a known issue: as soon as your Metapost
> > code contains text, it will be processed twice. E.g.:
> >
> >
> >    \starttext
> >      \setMPtext{heading:title}{foo}
> >      \startMPcode
> >        show "This gets printed twice.";
> >        draw textext( \MPstring{heading:title} );
> >      \stopMPcode
> >    \stoptext
> >
> > Same for labels, {b,e}tex. See also this thread:
> >
> >    http://www.ntg.nl/pipermail/ntg-context/2011/056047.html
> 
> you can check for it:
> 
> \enabletrackers[metapost.showlog]
> 
> and in the mp code:
> 
> message(if mfun_first_run : "first run" else : "final run" fi) ;
> message(if mfun_trial_run : "trial run" else : "final run" fi) ;
> 
> Hans

That’s handy! I added a section on dealing with multi-pass to the
“gotchas” page:

    http://wiki.contextgarden.net/Unexpected_behavior#Multipass

There is a subsection about MP at the end.

Btw. the behavior of mfun_trial_run is not very intuitive. I’d
expect it to work like \iftrialtypesetting, but in a single-pass
context it evaluates to true:

    \enabletrackers[metapost.showlog]

    \starttext
      \startMPcode
        if mfun_trial_run :
          show "This should be printed during the trial pass.";
        else :
          show "This should be printed during the final pass.";
        fi;
        fill unitcircle scaled 1cm withcolor blue;
        %label (btex Some label text etex, (0,0));
      \stopMPcode
    \stoptext

Uncommenting the label yields two passes, as expected.

Best regards,
Philipp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://www.ntg.nl/pipermail/ntg-context/attachments/20131012/87349375/attachment.pgp>


More information about the ntg-context mailing list