Beim Aufrufen einer Umgebung mit dem Token contcats (expl3) werden einige interne Inhalte am Ende des Dokuments angezeigt

Beim Aufrufen einer Umgebung mit dem Token contcats (expl3) werden einige interne Inhalte am Ende des Dokuments angezeigt

Ich muss mithilfe von expl3-Befehlen (Latex3) dynamisch eine Umgebung (oder möglicherweise eine Reihe verschachtelter Umgebungen) auf einen Text anwenden. Die Umgebung verhält sich jedoch anders, wenn ich mithilfe von expl3 eine Reihe umgebungsbezogener Token verkette, als wenn ich sie normalerweise durch Einbetten des Textes verwende. Bei Verwendung von expl3 erscheint jeglicher Inhalt innerhalb der Umgebung, der nach dem übergebenen Textinhalt (also +b) kommt, am Ende des Dokuments, anstatt neben dem übergebenen Textinhalt zu erscheinen.

Was ist das Problem?

Das folgende MWE zeigt das Problem. Ergebnis von 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}

Antwort1

Sie verwenden ein bArgument, das also wörtlich zu sehen sein muss; \end{myenv}es kann nicht hinter einem Makro versteckt werden (Sie würden dasselbe sehen, wenn Sie \def\foo{\end{myenv}}die Tatsache verwenden würden, dass Sie es verwendet haben, die expl3nicht wirklich mit dem Problem zusammenhängt).

Einfacheres expl3Nichtbeispiel

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

Bildbeschreibung hier eingeben

verwandte Informationen