On Tue, 8 Oct 2019, Rudolf Bahr wrote:
On Sun, Oct 06, 2019 at 10:44:12PM +0200, Wolfgang Schuster wrote:
While it is true that you're free to choose the name for the keys there are two keys with a special meaning, these two keys are "reset" and "set". The value of the "reset" key is used before the values in \setvariables are stored while "set" is used after the values are stored.
Hello Wolfgang,
thank you very much for your detailed answer and your two examples!
Concerning the two keys with a special meaning, "reset" and "set", remains a question to me. For what are they good? Does "reset" clear a data area, namespace perhaps, before new data are stored there? If they are keys, what is there value or are they commands?
Let's start with a simple example: \setvariables [dummy] [ set={AAA}, reset={BBB}, ] \starttext Hello World! \setvariables[dummy][key=value] \stoptext When the \setvariables[dummy][key=value] is called, it first executes the value of `reset` key. So the output of the above is ``` Hello World! BBBAAA ``` Now suppose you want to do some calculations based on the value of passed key. Let's take a variation of the original question, and define a macro where we can say \setvariables[exam][points=5] \setvariables[exam][points=10] and we can a macro \totalpoints to show the number of points. (There are probably better ways to do this than setvariables ...) Here is one way to define it: \def\totalpoints{0} \setvariables [exam] [ points=0, % This is important. set={\edef\totalpoints{\the\numexpr(\totalpoints + \getvariable{exam}{points})\relax}}, ] \starttext \setvariables[exam][points=5] \setvariables[exam][points=10] The exam has \totalpoints\ points. \stoptext So, everytime \setvariables is call, the value of the `set` key is executed. If I set the value of the `set` key to code that updates the value of `\totalpoints` macro, then I get the desired behavior. Writing macros as value of a key can be cumbersome to read. So, we can use setups: \def\totalpoints{0} \startsetups updatepoints \edef\totalpoints{\the\numexpr(\totalpoints + \getvariable{exam}{points})\relax} \stopsetups \setvariables [exam] [ points=0, set=\directsetup{updatepoints}, ] \starttext \setvariables[exam][points=5] \setvariables[exam][points=10] The exam has \totalpoints\ points. \stoptext That's it. Aditya