Expandindo uma variável l3 para dividi-la

Expandindo uma variável l3 para dividi-la

Preciso expandir a variável \pmbc_bounds_tlpara dividi-la. Eu tentei brincar exp_argssem sucesso. Qual versão exp_argsdevo 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 Vvalor da variável tl, mas também deve tomar cuidado para que os dois pontos sejam diferentes no escopo do \ExplSyntaxOnque 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 Nou Ve quetodovariável deve anunciar seu escopo ( lou gou c) em seu nome: \pmbc_bounds_tlé um nome inválido.

Toda função que tem nem sua assinatura pode ter uma variante com Vreplacement n, neste caso utilizamos \seq_set_split:Nnnmas 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}

informação relacionada