zusätzliche Klammer bei Verwendung von \csname in \clist_set:Nein

zusätzliche Klammer bei Verwendung von \csname in \clist_set:Nein

clist ist mit \cs_if_exist_use:coder nicht richtig eingestellt \csname ... \endcsname, es scheint, als wären zusätzliche Klammern vorhanden. Wenn ich verwende \clist_set:Nx, tritt ein Fehler auf.

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

Antwort1

Zunächst einmal sollte es mit a verwendet werden , nicht mit a (es funktioniert, weil ihre Implementierungen ähnlich sind, aber darauf kann man sich nicht verlassen). Wenn eine Funktion nicht vollständig in\cs_if_exist_use:ccsclistNSchritte, haben Sie keine Garantie, dass es sich ausdehnt inNSchritte, und wenn dies der Fall ist, kann es sich eventuell irgendwann ändern (beispielsweise sind \char_generate:nnund so \prg_replicate:nndokumentiert, dass sie in zwei Schritten erweitert werden, also können Sie sich darauf verlassen).

Um das gewünschte Ergebnis zu erzielen, können Sie eine xErweiterung auf verwenden \clist_if_exist:cTund dann dieWertder clistErweiterung durch Verwendung von \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}

Antwort2

Die oVariante wird eineeinzelErweiterungsschritt. Um an die Clist zu gelangen, braucht man viel mehr.

Wenn Sie symbolische Namen für Clists verwenden möchten, tun Sie dies auf eine korrektere Art und Weise. Sie sollten nicht damit rechnen, \def\zzz{a,b,c}ein „echter“ Clist zu sein 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}

Bildbeschreibung hier eingeben

verwandte Informationen