\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
tl 변수의 값 에 액세스하고 싶지만 일반 설정 V
과 범위 내에서 콜론이 다르다는 점도 주의해야 합니다 \ExplSyntaxOn
.
에 저장된 것을 콜론에서 분할하려는 경우 \l_pmbc_bounds_tl
올바른 방법은 다음과 같습니다.
\seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl
중괄호는언제나인수 유형이 N
or V
및 that 이면 생략됩니다.모든변수는 이름에 범위( 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}