2010-01-18 70 views

回答

1

这似乎工作:

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

添加一个好的旧“\ @expandtwoargs \ @removeelement”:一个可怕的语法,没有明显的理由需要三个参数(我找不到一个地方使用它,而不是从列表中删除重复项-named)。 – 2010-01-19 13:11:31

+0

这对您的需求很好,我猜测,但会破坏列表中的任何脆弱内容。在l3clist中的实现是健壮的。 – 2010-01-28 23:56:22

0

试着看看expl3包中的l3clist模块。它为逗号分隔的列表提供了一个基本的编程接口。现在


我回来了一个真正的机器上,这里有一个例子:

 
\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

是存在expl3一个一个CLIST。这个包仍然很不稳定,所以我宁愿有一个不依赖于它的实现。另外,我不明白l3clist是如何工作的。 – 2010-01-19 08:49:48

+0

不,不稳定:团队已经表示可以依靠CTAN上的爆炸物。它的工作方式与其他任何TeX编程完全相同,只是通过非常仔细的思考和“开箱即用”阅读了大量支持内容。 – 2010-01-19 13:10:14