考虑乳胶下面直接实现列表:LaTeX中的集合实现?
\newcommand{\[email protected]@list}[2]{%
\ifx#2\@empty%
\xdef#2{#1}%
\else%
\xdef#2{#2,#1}%
\fi%
}%
我不知道是否有执行一套(名单没有重复的元素)的简单方法?
考虑乳胶下面直接实现列表:LaTeX中的集合实现?
\newcommand{\[email protected]@list}[2]{%
\ifx#2\@empty%
\xdef#2{#1}%
\else%
\xdef#2{#2,#1}%
\fi%
}%
我不知道是否有执行一套(名单没有重复的元素)的简单方法?
这似乎工作:
\newcommand{\[email protected]@set}[2]{%
\ifx#2\@empty%
\xdef#2{#1}%
\else%
\@expandtwoargs\@removeelement{#1}{#2}{#2}%
\xdef#2{#2,#1}%
\fi%
}%
试着看看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}
是存在expl3一个一个CLIST。这个包仍然很不稳定,所以我宁愿有一个不依赖于它的实现。另外,我不明白l3clist是如何工作的。 – 2010-01-19 08:49:48
不,不稳定:团队已经表示可以依靠CTAN上的爆炸物。它的工作方式与其他任何TeX编程完全相同,只是通过非常仔细的思考和“开箱即用”阅读了大量支持内容。 – 2010-01-19 13:10:14
添加一个好的旧“\ @expandtwoargs \ @removeelement”:一个可怕的语法,没有明显的理由需要三个参数(我找不到一个地方使用它,而不是从列表中删除重复项-named)。 – 2010-01-19 13:11:31
这对您的需求很好,我猜测,但会破坏列表中的任何脆弱内容。在l3clist中的实现是健壮的。 – 2010-01-28 23:56:22