Ich muss die Variable erweitern, um sie aufzuteilen. Ich habe erfolglos \pmbc_bounds_tl
damit herumgespielt . Welche Version von soll ich verwenden?exp_args
exp_args
\documentclass{article}
\ExplSyntaxOn
\tl_new:N \pmbc_bounds_tl
\NewDocumentEnvironment{foo}{b}{
\seq_set_split:Nnn \l_tmpa_seq { ; } { #1 }
% \seq_show:N \l_tmpa_seq
\seq_pop_left:NNTF \l_tmpa_seq \pmbc_bounds_tl { } {
BOUNDS ~ PB !
}
% \tl_show:N \pmbc_bounds_tl
% WHICH VERSION TO USE?
\seq_set_split:Nnn \l_tmpb_seq { : } { \pmbc_bounds_tl }
\seq_show:N \l_tmpb_seq
}{}
\ExplSyntaxOff
\begin{document}
TEST.
\begin{foo}
a = b : c ;
d = e : f
\end{foo}
\end{document}
Antwort1
Sie möchten auf den V
Wert der tl-Variable zugreifen, müssen dabei aber darauf achten, dass der Doppelpunkt im Gültigkeitsbereich anders gesetzt ist \ExplSyntaxOn
als in der Normaleinstellung.
Wenn Sie etwas, das in gespeichert ist, am Doppelpunkt trennen möchten \l_pmbc_bounds_tl
, dann ist die richtige Methode
\seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl
Beachten Sie, dass Klammernstetsweggelassen werden, wenn der Argumenttyp N
oder ist V
undjedenDie Variable sollte ihren Gültigkeitsbereich ( l
oder g
oder c
) in ihrem Namen bekannt geben: \pmbc_bounds_tl
ist ein ungültiger Name.
Jede Funktion, die n
in ihrer Signatur hat, kann eine Variante mit V
Ersetzen haben n
, in diesem Fall verwenden wir \seq_set_split:Nnn
aber in der Variante \seq_set_split:NVV
.
Diese Variante ist vordefiniert, aber das ist nicht immer der Fall. Wenn sich herausstellt, dass LaTeX sich weigert, eine Variante zu definieren, ist es besser, die Standardmethode zu verwenden, um
\cs_generate_variant:Nn
anstatt es mit irgendeiner \exp_args:...
Funktion zu versuchen: Der Code wird übersichtlicher und die Leistung wird nicht wesentlich beeinträchtigt.
In dieser Situation ist das Denken in Begriffen der Makroerweiterung nicht der richtige Ansatz, da es eher darum geht, „auf den Wert zuzugreifen“, und die Tatsache, dass dies intern mit der Makroerweiterung implementiert wird, sollte kein Problem darstellen.
Antwort2
Dank der ersten beiden Kommentare ist die Lösung oben angegeben.
\documentclass{article}
\ExplSyntaxOn
\tl_new:N \l_pmbc_bounds_tl
\NewDocumentEnvironment{foo}{b}{
\seq_set_split:Nnn \l_tmpa_seq { ; } { #1 }
% \seq_show:N \l_tmpa_seq
\seq_pop_left:NNTF \l_tmpa_seq \l_pmbc_bounds_tl { } {
BOUNDS ~ PB !
}
% \tl_show:N \l_pmbc_bounds_tl
\seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl
\seq_show:N \l_tmpb_seq
}{}
\ExplSyntaxOff
\begin{document}
TEST.
\begin{foo}
a = b : c ;
d = e : f
\end{foo}
\end{document}