
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:c
cs
clist
んステップを踏めば、それが拡大する保証はないんステップが実行され、実行された場合は、最終的に変更される可能性があります (たとえば、\char_generate:nn
と は\prg_replicate:nn
2 段階で拡張されると文書化されているため、これに依存できます)。
望むものを得るには、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 に到達するにはさらに多くのものが必要です。
\def\zzz{a,b,c}
clist にシンボリック名を使用する場合は、より適切な方法で使用してください。 「実際の」clist であることを期待しないでください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}