Llamar a un entorno mediante token contcats (expl3) hace que algunos contenidos internos aparezcan al final del documento.

Llamar a un entorno mediante token contcats (expl3) hace que algunos contenidos internos aparezcan al final del documento.

Necesito aplicar dinámicamente un entorno (o posiblemente una serie de entornos anidados) en algún texto usando comandos expl3 (latex3). Sin embargo, el entorno se comporta de manera diferente cuando concateno una serie de tokens relacionados con el entorno usando expl3, en comparación con cuando lo uso normalmente incrustando el texto. Al usar expl3, cualquier contenido dentro del entorno que venga después del contenido del cuerpo pasado (es decir +b), aparece al final del documento, en lugar de aparecer junto al contenido del cuerpo pasado.

¿Cuál es el problema?

El MWE a continuación muestra el problema. Resultado de 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}

Respuesta1

está utilizando un bargumento, por lo que necesita ver un literal; \end{myenv}no puede ocultarse detrás de una macro (vería lo mismo si usara \def\foo{\end{myenv}}un hecho que expl3no está realmente relacionado con el problema).

No expl3ejemplo más simple

\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}

ingrese la descripción de la imagen aquí

información relacionada