On Thu, 12 Oct 2006, Hans Hagen wrote:
Fredrik Sjunnesson wrote:
Hello,
Is there a smart way to create a commalist?
I want to get the equivalent of
\setparameter[namespace][listname={item1,item2,item3}]
but be able to append one item at the time, like
\append{namepace}{listname}{item1} \append{namepace}{listname}{item2} \append{namepace}{listname}{item3}
I have tired this:
\def\append#1#2#3{ \fullexpandoneargafter\doifemptyelse{\getvariable{#1}{#2}} {\edef\tmp{#3}} {\edef\tmp{\getvariable{#1}{#2},#3}} \setvariables[#1][#2={\tmp}]}
but it only works for one list. Apparently \tmp is not expanded so when an item is appended to one list all other lists are affected. I have tried \expanded but got the message stack full.
Any help would be greatly appreciated.
\def\appendtovaluelist#1#2% {\ifcsname#1\endcsname \expandafter\ifx\csname#1\endcsname\empty \expandafter\def\csname#1\endcsname{#2}% \else \expandafter\def\csname#1\expandafter \expandafter\expandafter\endcsname \expandafter\expandafter\expandafter{\csname#1\endcsname,#2}% \fi \else \expandafter\def\csname#1\endcsname{#2}% \fi}
% saves an argument:
\def\appendtovaluelist#1% {\ifcsname#1\endcsname \expandafter\ifx\csname#1\endcsname\empty \expandafter\noappendtovaluelist \csname#1\expandafter\expandafter\expandafter\endcsname \else \expandafter\doappendtovaluelist \csname#1\expandafter\expandafter\expandafter\endcsname \fi \else \expandafter\noappendtovaluelist\csname#1\expandafter\endcsname \fi}
\def\doappendtovaluelist#1#2{\expandafter\def\expandafter#1\expandafter{#1,#2}} \def\noappendtovaluelist#1#2{\def#1{#2}}
\appendtovaluelist{mylist}{aap} \appendtovaluelist{mylist}{noot} \appendtovaluelist{mylist}{mies}
\showvalue{mylist}
What is the difference between a commalist and a valuelist :-) \def\secondlist{} \appendtocommalist{aap} {\secondlist} \appendtocommalist{noot} {\secondlist} \appendtocommalist{mies} {\secondlist} \showvalue{secondlist} Aditya