2010-01-18 3 views
5

Рассмотрим следующую простую реализацию списка в латексе:Реализация набора в LaTeX?

\newcommand{\[email protected]@list}[2]{% 
    \ifx#2\@empty% 
    \xdef#2{#1}% 
    \else% 
    \xdef#2{#2,#1}% 
    \fi% 
}% 

Интересно, если есть простой способ реализовать набор (список не повторяющихся элементов)?

ответ

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). –

+0

Это нормально для ваших нужд, я предполагаю, но сломаюсь с любым хрупким содержимым в вашем списке. Реализация в l3clist является надежной. –

0

Попробуйте взглянуть на модуль l3clist в пакете expl3. Он предоставляет базовый программный интерфейс для разделенных запятыми списков.


Теперь, когда я вернулся на реальной машине, вот пример:

 
\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

Да есть CLIST в expl3. Этот пакет по-прежнему довольно нестабилен, поэтому я предпочел бы иметь реализацию, которая не зависит от нее. Кроме того, я не понимаю, как работает l3clist. –

+0

Нет, это не неустойчиво: команда заявила, что на статью CT3 можно ссылаться. Он работает точно так же, как это делает любое другое программирование TeX, просто с большим вниманием, которое продумано очень тщательно, и читайте «из коробки». –

Смежные вопросы