Chamar um ambiente usando token contcats (expl3) faz com que alguns conteúdos internos apareçam no final do documento

Chamar um ambiente usando token contcats (expl3) faz com que alguns conteúdos internos apareçam no final do documento

Preciso aplicar dinamicamente um ambiente (ou possivelmente uma série de ambientes aninhados) em algum texto usando comandos expl3 (latex3). No entanto, o ambiente se comporta de maneira diferente quando concatena uma série de tokens relacionados ao ambiente usando expl3, em comparação com quando eu o uso normalmente incorporando o texto. Usando expl3, qualquer conteúdo dentro do ambiente que venha depois do conteúdo do corpo passado (ou seja +b), aparece no final do documento, em vez de aparecer próximo ao conteúdo do corpo passado.

Qual é o problema?

O MWE abaixo mostra o problema. Resultado do MWE

\documentclass{minimal}

\RequirePackage{expl3}

\ExplSyntaxOn

\NewDocumentEnvironment{myenv}{ +b}{
        \tl_set:Nn \l_myenv_body_tl {#1}

    <myenv~begins>~\use:n  \l_myenv_body_tl
    <This~should~appear~before~myenv~ending.>
}{ <myenv~ends~here.>}
 
\ExplSyntaxOff



\begin{document}

    First line.
    
    \vspace \medskipamount

    % An environment by normal approach
    \begin{myenv}
        Some text for the regular body.
    \end{myenv}

    \vspace \medskipamount  

    Second line.

    \vspace \medskipamount
    
    % An environment created using Expl3
    \ExplSyntaxOn

    \tl_set:Nn \l_body_tl {Some~text~for~the~body.}
    \tl_set:Nn \l_beginings_tl {\begin{myenv} }
    \tl_set:Nn \l_endings_tl {\end{myenv}}
    \tl_set:Nn \l_total_tl {}   
    
    \tl_put_right:Nn \l_total_tl {\l_beginings_tl} 
    \tl_put_right:Nn \l_total_tl {\l_body_tl} 
    \tl_put_right:Nn \l_total_tl {\l_endings_tl} 

    \use:n {\l_total_tl}    
 
    \ExplSyntaxOff


    \vspace \medskipamount
    
    Third line.
    
    
\end{document}

Responder1

você está usando um bargumento para que precise ver um literal \end{myenv}que não pode ser escondido atrás de uma macro (você veria o mesmo se usasse \def\foo{\end{myenv}}o fato que usou expl3não está realmente relacionado ao problema.

Não expl3exemplo mais simples

\documentclass{article}
\usepackage[T1]{fontenc}


\NewDocumentEnvironment{myenv}{ +b}{
    <myenv~begins>
        #1
    <This~should~appear~before~myenv~ending.>
}{ <myenv~ends~here.>}
 

\def\fooA{\begin{myenv}}
\def\fooB{\end{myenv}}



\begin{document}

    First line.

    \begin{myenv}
      abc
    \end{myenv}

    Second line.

\fooA
  xyz
\fooB

    Third line.

\end{document}

insira a descrição da imagem aqui

informação relacionada