[NTG-context] \doassign variable - updates not picked up

Wolfgang Schuster wolfgang.schuster.lists at gmail.com
Fri Jan 22 23:46:56 CET 2021


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



More information about the ntg-context mailing list