
clist 沒有用\cs_if_exist_use:c
or適當設置\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
首先,應該與 a 一起使用,而不是 a (它可以工作,因為它們的實作恰好相似,但你不能依賴它)。另外,除非一個函數被記錄為完全擴展\cs_if_exist_use:c
cs
clist
n步驟,你不能保證它會擴展n步驟,如果確實如此,它最終可能會改變(例如,\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 使用符號名稱,請以更正確的方式進行。你不應該指望\def\zzz{a,b,c}
成為一個「真正的」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}