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

tl 변수의 값 에 액세스하고 싶지만 일반 설정 V과 범위 내에서 콜론이 다르다는 점도 주의해야 합니다 \ExplSyntaxOn.

에 저장된 것을 콜론에서 분할하려는 경우 \l_pmbc_bounds_tl올바른 방법은 다음과 같습니다.

\seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl

중괄호는언제나인수 유형이 Nor 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}

관련 정보