chave extra quando usar \csname em \clist_set:No

chave extra quando usar \csname em \clist_set:No

clist não está definido adequadamente com \cs_if_exist_use:cou \csname ... \endcsname, parece que há colchetes extras. Se eu usar \clist_set:Nx, ocorre erro.

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

Responder1

Em primeiro lugar, deve ser usado com a , não com a (funciona porque a implementação deles é semelhante, mas você não pode confiar nisso). Além disso, a menos que uma função esteja documentada para se expandir completamente em\cs_if_exist_use:ccsclistnetapas, você não tem garantia de que ele se expandirá emnetapas e, se isso acontecer, poderá mudar eventualmente (por exemplo, \char_generate:nne \prg_replicate:nnestá documentado para expansão em duas etapas, então você pode confiar nisso).

Para conseguir o que deseja, você pode usar uma xexpansão \clist_if_exist:cTe proteger ovalorda clistexpansão usando \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}

Responder2

A ovariante fará umsolteiroetapa de expansão. Você precisa de muito mais para chegar ao clist.

Se quiser usar nomes simbólicos para listas, faça-o de maneira mais adequada. Você não deve esperar \def\zzz{a,b,c}ser um expl3clister “real”.

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

insira a descrição da imagem aqui

informação relacionada