Erweitern einer L3-Variable, um sie aufzuteilen

Erweitern einer L3-Variable, um sie aufzuteilen

Ich muss die Variable erweitern, um sie aufzuteilen. Ich habe erfolglos \pmbc_bounds_tldamit herumgespielt . Welche Version von soll ich verwenden?exp_argsexp_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 VWert der tl-Variable zugreifen, müssen dabei aber darauf achten, dass der Doppelpunkt im Gültigkeitsbereich anders gesetzt ist \ExplSyntaxOnals 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 Noder ist VundjedenDie Variable sollte ihren Gültigkeitsbereich ( loder goder c) in ihrem Namen bekannt geben: \pmbc_bounds_tlist ein ungültiger Name.

Jede Funktion, die nin ihrer Signatur hat, kann eine Variante mit VErsetzen haben n, in diesem Fall verwenden wir \seq_set_split:Nnnaber 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}

verwandte Informationen