2010-01-18 10 views

Odpowiedz

1

To wydaje się działać:

\newcommand{\[email protected]@set}[2]{% 
    \ifx#2\@empty% 
     \xdef#2{#1}% 
    \else% 
     \@expandtwoargs\@removeelement{#1}{#2}{#2}% 
     \xdef#2{#2,#1}% 
    \fi% 
}% 
+2

Dodaj, stare dobre "\ @expandtwoargs \ @removeelement": okropna składnia, bez wyraźnego powodu, dla którego potrzebujemy trzech argumentów (nie mogę znaleźć miejsca, w którym jest używane, a nie usuwać duplikatów z listy, która nie jest ponownie -o imieniu). –

+0

To jest w porządku dla twoich potrzeb, zgaduję, ale zepsuje się z delikatną zawartością twojej listy. Implementacja w L3clist jest solidna. –

0

Spróbuj rzucić okiem na moduł l3clist w pakiecie expl3. Zapewnia podstawowy interfejs programowania do list rozdzielanych przecinkami.


Teraz jestem z powrotem na prawdziwym komputerze, oto przykład:

 
\documentclass{article} 
\usepackage{expl3} 
\begin{document} 
\ExplSyntaxOn 
\clist_new:N \l_my_clist 
\clist_put_right:Nn \l_my_clist {hello} 
\clist_put_right:Nn \l_my_clist {\unknown} 
\clist_put_right:Nn \l_my_clist {hello} 
\clist_remove_duplicates:N \l_my_clist 
\clist_show:N \l_my_clist 
\ExplSyntaxOff 
\end{document} 
+0

Tak tam jest a a clist w expl3. Ten pakiet jest nadal dość niestabilny, więc wolałbym implementację, która nie jest od niego zależna. Ponadto nie rozumiem, jak działa l3clist. –

+0

Nie, nie jest niestabilny: zespół powiedział, że można polegać na materiałach expl3 na CTAN. Działa dokładnie tak samo, jak inne programy TeX-owe, tylko z dużą ilością materiałów pomocniczych przemyślanych bardzo dokładnie i przeczytanych "po wyjęciu z pudełka". –