%20werden%20einige%20interne%20Inhalte%20am%20Ende%20des%20Dokuments%20angezeigt.png)
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.
\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 b
Argument, 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 expl3
nicht wirklich mit dem Problem zusammenhängt).
Einfacheres expl3
Nichtbeispiel
\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}