Расширение переменной l3 для ее разделения

Расширение переменной l3 для ее разделения

Мне нужно расширить переменную, \pmbc_bounds_tlчтобы разделить ее. Я пробовал играть с ней, но exp_argsбезуспешно. Какую версию exp_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}

решение1

Вам нужно получить доступ к Vзначению переменной tl, но вам также нужно позаботиться о том, чтобы область действия двоеточия отличалась \ExplSyntaxOnот области действия в обычных настройках.

Если вы хотите разделить по двоеточию что-то, хранящееся в \l_pmbc_bounds_tl, то правильный метод —

\seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl

Обратите внимание, что брекеты должнывсегдабыть опущено, когда тип аргумента - Nили Vи чтокаждыйпеременная должна объявить свою область действия ( lили gили c) в своем имени: \pmbc_bounds_tlэто недопустимое имя.

Каждая функция, имеющая nв своей сигнатуре, может иметь вариант с Vзаменой n, в этом случае мы используем \seq_set_split:Nnnно в варианте \seq_set_split:NVV.

Этот вариант предопределен, но это не всегда так. Если окажется, что LaTeX не хочет, чтобы вариант был определен, лучше использовать стандартный метод выполнения

\cs_generate_variant:Nn

вместо того, чтобы пытаться использовать какую-то \exp_args:...функцию: код станет более понятным, а производительность существенно не снизится.

В данной ситуации не следует думать о макрорасширении, поскольку это скорее «получение доступа к значению», а тот факт, что это внутренне реализовано с помощью макрорасширения, не должен вызывать беспокойства.

решение2

Благодаря первым двум комментариям, решение приведено выше.

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

Связанный контент