Necesito expandir la variable \pmbc_bounds_tl
para dividirla. Intenté jugar exp_args
sin éxito. ¿Qué versión exp_args
debo 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 V
valor de la variable tl, pero también debe tener cuidado de que los dos puntos sean diferentes en el alcance \ExplSyntaxOn
que 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 N
o V
y quecadaLa variable debe anunciar su alcance ( l
o g
o c
) en su nombre: \pmbc_bounds_tl
es un nombre no válido.
Toda función que tenga n
en su firma puede tener una variante con V
reemplazo n
, en este caso usamos \seq_set_split:Nnn
pero 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}