Thank you very much Hans for your clear and detailed reply! 
I can confirm that this resolves my issue - and I really like the flexibility that this syntax provides!

Best regards,
Florent

Le dim. 11 août 2024 à 12:18, Hans Hagen via ntg-context <ntg-context@ntg.nl> a écrit :
On 8/11/2024 11:24 AM, Florent Michel wrote:
> Hi,
>
> I am trying to reproduce the behaviour of the tcolorbox LaTeX package,
> more specifically breakable boxes (as illustrated here:
> https://tex.stackexchange.com/a/676607/123770
> <https://tex.stackexchange.com/a/676607/123770>). It works nicely out of
> the box (pun intended) using `\definetextbackground` and drawing the
> frame with MetaPost, using counters to keep track of whether the current
> text is at the top, middle, or bottom of the box. However, I'm having
> issues when one box ends and another starts on the same page (see more
> details below). From what I understand, the issue is that counters seem
> to be updated on a page-wide basis, so each MPgraphic ‘sees’ the values
> of counters at the end of the current page, which may not be right if
> another box modifies them. Would anyone know how to resolve this?
>
> Based on two answer on TeX StackExchange
> (https://tex.stackexchange.com/a/486124/123770
> <https://tex.stackexchange.com/a/486124/123770> ,
> https://tex.stackexchange.com/questions/377234/context-frame-problems/377261#377261 <https://tex.stackexchange.com/questions/377234/context-frame-problems/377261#377261>), the following code works well if there is no more than one box per page:
>
> ```

You're missing a feature:

this is the original trick:

if     multilocs[i] == 1 :  % begin
elseif multilocs[i] == 2 :  % between
elseif multilocs[i] == 3 :  % end
fi ;

and in lmtx we have

if      multikind[i] = "single" :
elseif  multikind[i] = "first"  :
elseif  multikind[i] = "middle" :
elseif  multikind[i] = "last"   :

Also:

      path p;
       p := ( llcorner multipars[i]
              -- lrcorner multipars[i]
              -- urcorner multipars[i]
              -- ulcorner multipars[i]
              -- cycle )
              enlarged (EmWidth,EmWidth) ;
       fill p withcolor boxfillcolor ;

can be

fill multipars[i] enlarged (EmWidth,EmWidth) ...

Hans


-----------------------------------------------------------------
                                           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 / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive  : https://github.com/contextgarden/context
wiki     : https://wiki.contextgarden.net
___________________________________________________________________________________