2010-01-18 11 views

Antwort

1

Dies scheint zu funktionieren:

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

Fügen Sie hinzu, das gute alte "\ @expandtwoargs \ @removeelement": eine schreckliche Syntax, ohne ersichtlichen Grund, drei Argumente zu benötigen (Ich kann keinen Ort finden, an dem es benutzt wird, um Duplikate aus einer Liste zu entfernen, die nicht re ist -genannt). –

+0

Das ist gut für Ihre Bedürfnisse, ich schätze, aber wird mit jedem fragilen Inhalt in Ihrer Liste brechen. Die Implementierung in l3clist ist robust. –

0

Werfen Sie einen Blick auf das l3clist-Modul im expl3-Bundle. Es bietet eine grundlegende Programmierschnittstelle für kommagetrennte Listen.


Nun, da ich auf einer realen Maschine bin zurück, hier ist ein Beispiel:

 
\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

Ja, es ein ein clist in expl3 ist. Dieses Paket ist immer noch ziemlich instabil, daher würde ich eine Implementierung bevorzugen, die nicht davon abhängt. Außerdem verstehe ich nicht, wie l3clist funktioniert. –

+0

Nein, es ist nicht instabil: Das Team hat gesagt, dass man sich auf das expl3-Zeug auf CTAN verlassen kann. Es funktioniert genauso wie jede andere TeX-Programmierung, nur mit sehr viel durchdachtem Support-Material und "out of the box" gelesen. –