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