\clist_set에서 \csname을 사용할 때 추가 중괄호:아니요

\clist_set에서 \csname을 사용할 때 추가 중괄호:아니요

\cs_if_exist_use:cclist가 또는 으로 적절하게 설정되지 않은 \csname ... \endcsname경우 추가 중괄호가 있는 것 같습니다. 을 사용하면 \clist_set:Nx오류가 발생합니다.

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\expandafter\def\csname test-1\endcsname{a,$\alpha\dotsb$,b}
\ExplSyntaxOn
\clist_new:N \l_test_clist
\NewDocumentCommand {\test} {}
  {
    \clist_set:No \l_test_clist {\cs_if_exist_use:c {test-1}}
    \clist_use:Nn \l_test_clist {*}
  }
\ExplSyntaxOff

\begin{document}
\test
\end{document}

답변1

먼저 는 a 가 아니라 a와 함께 사용해야 합니다 (구현이 비슷하기 때문에 작동하지만 이에 의존할 수는 없습니다). 또한 기능이 완전히 확장되도록 문서화되지 않는 한\cs_if_exist_use:ccsclistN단계적으로 확장할 것이라는 보장은 없습니다.N단계를 거치며, 그렇다면 결국에는 변경될 수 있습니다(예를 들어 두 단계로 확장하도록 문서화되어 \char_generate:nn있으므로 \prg_replicate:nn이를 신뢰할 수 있습니다).

원하는 것을 얻으려면 확장을 사용한 x다음 \clist_if_exist:cT보호할 수 있습니다.다음을 clist사용하여 확장하는 것 \exp_not:v:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\expandafter\def\csname test-1\endcsname{a,$\alpha\dotsb$,b}
\ExplSyntaxOn
\clist_new:N \l_test_clist
\NewDocumentCommand {\test} {}
  {
    \clist_set:Nx \l_test_clist
      {
        \clist_if_exist:cT {test-1}
          { \exp_not:v { test-1 } }
      }
    \clist_use:Nn \l_test_clist {*}
  }
\ExplSyntaxOff

\begin{document}
\test
\end{document}

답변2

변형 o은 다음을 수행합니다.하나의확장 단계. Clist에 도달하려면 훨씬 더 많은 것이 필요합니다.

clist에 기호 이름을 사용하려면 보다 적절한 방법으로 사용하세요. 당신은 \def\zzz{a,b,c}"진짜" clist가 될 것이라고 기 대해서는 안됩니다 expl3.

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\defineclist}{mm}
 {
  \clist_clear_new:c { l__zhiyuanlck_#1_clist }
  \clist_set:cn { l__zhiyuanlck_#1_clist } { #2 }
 }

\NewDocumentCommand {\test} {m}
 {
  \clist_if_exist:cTF { l__zhiyuanlck_#1_clist }
   {
    \clist_use:cn { l__zhiyuanlck_#1_clist } {*}
   }
   {OOPS}
 }

\ExplSyntaxOff

\defineclist{test-1}{a,$\alpha\dotsb$,b}

\begin{document}

\test{test-1}

\test{test-2}

\end{document}

여기에 이미지 설명을 입력하세요

관련 정보