%20hace%20que%20algunos%20contenidos%20internos%20aparezcan%20al%20final%20del%20documento..png)
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.
\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 b
argumento, 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 expl3
no está realmente relacionado con el problema).
No expl3
ejemplo 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}