2010-01-18 110 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