Werner Hennrich schrieb am 22.01.2021 um 09:48:
Hello everyone,
I'm using ConTeXt (ver: 2020.09.20 23:02 LMTX) and have to have conditional page headers based on specific content criteria. To achive this I'd like to get some global variables in TeX, change their values several times throughout the document and have my macro for the header read them and act accordingly (like skip the header at all, change a color, etc).
As a basis for this I established the following pattern in an iolated test case:
\def\setHeaderVar[#1]{ \doassign[header][myvar=#1] \message{setHEADER: '#1'} } \def\getHeaderVar{\headermyvar} \setupheadertexts[\setups{page:header}] \startsetups page:header HEADER: myvar=\getHeaderVar \stopsetups \starttext \setHeaderVar[initval] page: 1 \page \setHeaderVar[aaaaa] page: 2 \page \setHeaderVar[bbbbb] page: 3 \page \setHeaderVar[cccc] page: 4 \page \setHeaderVar[] page: 5 \stoptext
This works as expected and the header-macro prints the updated value. But when I put the same pattern in my big environment-file, I can see the variable being updated with different values (console), but the header always puts out just the variable's initial value - so the variable is read but it's updates aren't picked up by the header macro. Peeking into console, log & tuc didn't raise any idea yet as to what is going wrong...
Any idea what is happening and how I can fix this?
I guess you set the value in a local group and at the end of the group your setting is forgotten, a simple change you can make is to replace \doassign with \getgparameters which makes global settings. A alternative to your current approach is to use the variables mechanism to set and access values (you still have to ensure all values you set are global). \setupheadertexts[\getvariable{header}{text}] \starttext \setgvariables[header][text=First page] Page 1 \page \setgvariables[header][text=Last page] Page 2 \stoptext Wolfgang