Preciso expandir a variável \pmbc_bounds_tl
para dividi-la. Eu tentei brincar exp_args
sem sucesso. Qual versão exp_args
devo 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}
Responder1
Você deseja acessar o V
valor da variável tl, mas também deve tomar cuidado para que os dois pontos sejam diferentes no escopo do \ExplSyntaxOn
que na configuração normal.
Se você deseja dividir nos dois pontos algo armazenado em \l_pmbc_bounds_tl
, então o método correto é
\seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl
Observe que os colchetes devemsempreser omitido quando o tipo de argumento for N
ou V
e quetodovariável deve anunciar seu escopo ( l
ou g
ou c
) em seu nome: \pmbc_bounds_tl
é um nome inválido.
Toda função que tem n
em sua assinatura pode ter uma variante com V
replacement n
, neste caso utilizamos \seq_set_split:Nnn
mas na variante \seq_set_split:NVV
.
Esta variante é predefinida, mas nem sempre é o caso. Se acontecer que o LaTeX se recusa a definir uma variante, é melhor usar o método padrão de execução
\cs_generate_variant:Nn
em vez de tentar alguma \exp_args:...
função: o código ganhará clareza e o desempenho não será prejudicado de forma significativa.
Pensar em termos de expansão macro não é a abordagem correcta nesta situação, porque é antes “acessar o valor” e o facto de isto ser implementado internamente com expansão macro não deve ser uma preocupação.
Responder2
Graças aos dois primeiros comentários, a solução é dada acima.
\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}