Мне нужно расширить переменную, \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}