Hi,
On Mo, 2015-08-03 at 12:04 +0100, David Carlisle wrote:
> On 03/08/2015 11:47, Benjamin Berg wrote:
> > I am having trouble to understand what the difference between
> > \addtocounter and \int_gincr:N is. When used inside a tabularx
> > environment, the \int_* functions do not work correctly, but the normal
> > LaTeX counters do.
> >
> > Maybe the idea of even using counters in a tabularx environment like
> > this is totally wrong[1], but it feels to me like the two commands
> > should behave in the same way. So either I am not grasping some
> > concepts (feel free to just point me to an explanation) or there might
> > even be a small bug.
> >
> > So, the attached document will print two tables. For each cell the
> > output of "\int_use:N \g_test_int,~\thetestcount" is displayed. The
> > counter is behaving as I expect while the \g_test_int has different
> > values inside tabularx.
> >
> >
> > tabularx:
> > 3, 1 4, 2 1, 3 2, 4
> > 3, 1 4, 2
> >
> > and tabular:
> > 1, 1 2, 2 3, 3 4, 4
> > 1, 1 2, 2
> >
> > It looks like this has to do with the fact that in the second row there
> > are empty cells. But it still baffles me, that the latex counters
> > behave correctly, while latex 3 integers do not.
> >
> > Regards,
> > Benjamin
> >
> > [1] It is very likely that I will drop the tabularx anyways.
> >
>
>
> tabularx typesets its body multiple times with trial settings to find
> the right widths. So in general any command that is doing anything with
> global side effects like incrementing a counter will increment multiple
> times.
>
> You would see the same with plain tex syntax \newcounter\foo.... if you use
> \global\advance\foo 1
> inside tabularx.
>
> latex counters have a reset mechanism (designed for use with restoring
> counters after \include, mostly) tabularx uses this to restore all
> counters at the start of every trial setting.
>
> \hfuzz is \maxdimen in trials so you can avoid incremengting counters
> during trials with
>
> \ifdim\hfuzz<\maxdimen
> ...
>
> but sometimes your code needs to increment and then restore, which is a
> bit more work.
Ah, now that makes a lot of sense, thanks for explaining! :)
I guess I was under the impression that tabularx required multiple
latex calls, instead of doing multiple trail runs during one latex run.
And I had no idea there was code to reset the global scope to some
extend.
Best solution for me will be to replace the tabularx use with a normal
tabular or even a tabbing environment.
Benjamin
|