llave adicional cuando se usa \csname en \clist_set:No

llave adicional cuando se usa \csname en \clist_set:No

clist no está configurado correctamente con \cs_if_exist_use:co \csname ... \endcsname, parece que hay llaves adicionales. Si uso \clist_set:Nx, ocurre un error.

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

Respuesta1

En primer lugar, debe usarse con a , no con (funciona porque su implementación es similar, pero no puedes confiar en eso). Además, a menos que se documente que una función se expande completamente en\cs_if_exist_use:ccsclistnortepasos, no tienes garantía de que se expandirá ennortepasos, y si lo hace, puede cambiar eventualmente (por ejemplo, \char_generate:nny \prg_replicate:nnestán documentados para expandirse en dos pasos, por lo que puede confiar en eso).

Para obtener lo que desea, puede usar una xexpansión \clist_if_exist:cTy luego proteger elvalorde la clistexpansión 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}

Respuesta2

La ovariante hará unsolteropaso de expansión. Necesitas mucho más para llegar al clist.

Si desea utilizar nombres simbólicos para las listas, hágalo de una manera más adecuada. No debes contar con \def\zzz{a,b,c}ser un expl3clista “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}

ingrese la descripción de la imagen aquí

información relacionada