Expandiendo una variable l3 para dividirla

Expandiendo una variable l3 para dividirla

Necesito expandir la variable \pmbc_bounds_tlpara dividirla. Intenté jugar exp_argssin éxito. ¿Qué versión exp_argsdebo usar?

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

Respuesta1

Desea acceder al Vvalor de la variable tl, pero también debe tener cuidado de que los dos puntos sean diferentes en el alcance \ExplSyntaxOnque en la configuración normal.

Si desea dividir en los dos puntos algo almacenado en \l_pmbc_bounds_tl, entonces el método correcto es

\seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl

Tenga en cuenta que los frenillos debensiemprese omitirá cuando el tipo de argumento sea No Vy quecadaLa variable debe anunciar su alcance ( lo go c) en su nombre: \pmbc_bounds_tles un nombre no válido.

Toda función que tenga nen su firma puede tener una variante con Vreemplazo n, en este caso usamos \seq_set_split:Nnnpero en la variante \seq_set_split:NVV.

Esta variante está predefinida, pero no siempre es así. Si resulta que LaTeX se resiste a que una variante no esté definida, es mejor utilizar el método estándar para realizarla.

\cs_generate_variant:Nn

en lugar de intentarlo con alguna \exp_args:...función: el código ganará en claridad y el rendimiento no se verá obstaculizado de manera significativa.

Pensar en términos de expansión macro no es el enfoque correcto en esta situación, porque se trata más bien de “acceder al valor” y el hecho de que esto se implemente internamente con la expansión macro no debería ser una preocupación.

Respuesta2

Gracias a los dos primeros comentarios, la solución se da arriba.

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

información relacionada