
clist ist mit \cs_if_exist_use:c
oder 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:c
cs
clist
NSchritte, 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:nn
und so \prg_replicate:nn
dokumentiert, 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 x
Erweiterung auf verwenden \clist_if_exist:cT
und dann dieWertder clist
Erweiterung 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 o
Variante 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}