On Sat, 30 Dec 2006, Hans Hagen wrote: > Aditya Mahajan wrote: > > On Sat, 30 Dec 2006, Peter M???nster wrote: > > > > > >> On Sat, 30 Dec 2006, Aditya Mahajan wrote: > >> > >> > >>> % Now the rest of the magic to take care of the two pass run > >>> % Basically this says that rerun if \nofPoints != > >>> % \countervalue{Points}. In the next run we set \nofPoints to the > >>> % previous value of \countervalue{Points} (the \checkPoints macro in > >>> % the beginning), so things should be stable after two runs. > >>> \savetwopassdata {Points} {\nofPoints} {\countervalue{Points}} > >>> > >> Hello Aditya, > >> > >> with the following example, I get always 2 runs: > >> > >> \definetwopasslist{test} > >> \starttext > >> bla > >> \savetwopassdata{test}{1}{2} > >> \stoptext > >> > >> Is this normal or a bug? > >> > > > > Hmm... I would have guessed that you will keep on getting infinite > > runs, but apparently texexec decides that two are enough. I need to > > look deeper to see if this is the intended behaviour. I would call it > > a bug, since there can be cases which need more than two runs to > > converge. > > > > > how about > > \savecurrentvalue\SomeVar{someval}
I was just copying the way it is done with other macros \lastpage, etc. I will look at \savecurrentvalue also. However, something seems to be wrong in tex.rb Change def processfile .... while ! stoprunning && (texruns < nofruns) && ok do .... end ... end to def processfile .... while ! stoprunning && (texruns < nofruns) && ok do .... report("stoprunning #{stoprunning}") report("texruns=#{texruns}, nofruns=#{nofruns}") report("ok=#{ok}") report("while=#{! stoprunning && (texruns < nofruns) && ok}") end ... end so that we can see what takes us out of the while loop. Take Petar's test file and run it through texexec. I get TeXExec | stoprunning true TeXExec | texruns=2, nofruns=8 TeXExec | ok=counter.tex TeXExec | while=counter.tex Notice that ok=\jobname. Shouldn't ok be a boolean. And the condition for while is a string rather than a boolean. I am not too sure on what ruby does for non boolean conditionals, but the present implementation can break (under some crazy conditions, maybe). How about if in def runtexutil(...) there is a return ok in the end, for example begin logger = Logger.new('TeXUtil') if tu = TeXUtil::Converter.new(logger) and tu.loaded(fname) then ok = tu.processed && tu.saved && tu.finalized end rescue Kpse.runscript('texutil',fname,options) else return ok #<--------- added. end Back to Peter's question, I gave a wrong explaination earlier. texexec just checks if the tui file has changed. If the file did not change from the last run, then it stops processing. So with \savetwopassdata{test}{1}{2} you will get two runs the first time you process the file, and a single run if you reprocess the file. By default, the maximum number of runs that you can have is 8, but you can change this by passing --runs= to texexec Aditya _______________________________________________ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context