дополнительная скобка при использовании \csname в \clist_set:Нет

дополнительная скобка при использовании \csname в \clist_set:Нет

clist не установлен должным образом с \cs_if_exist_use:cили \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

Во-первых, следует использовать с , а не с\cs_if_exist_use:ccsclist (это работает, потому что их реализация похожа, но на это нельзя полагаться). Также, если только функция не документирована для полного раскрытия вншагов, у вас нет гарантии, что он будет расширяться вншаги, и если это произойдет, то со временем это может измениться (например, \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.

Если вы хотите использовать символические имена для clists, делайте это более правильным образом. Вы не должны рассчитывать на то, \def\zzz{a,b,c}что будете «настоящим» expl3clists.

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

введите описание изображения здесь

Связанный контент