2

LaTeX apparently has registers for 13 tab stops.

A workaround that was published in about 2009 suggested

\makeatletter
\countdef\@maxtab=30
\makeatother

This steps on registers beyond the 13 allocated within LaTeX for tab stops. It worked for a while, but now it doesn't, so I guess the registers it now steps on are more important than the ones used now.

Can the number of registers for tab stops be increased in some other way?

I have a document that needs 15 tab stops. It used to work but as of texlive/2022 it doesn't.

texlive/2022 is what's distributed with Debian 10. I haven't tried downloading a newer texlive from ctan (is there one?) and I'm not ready to upgrade to Debian 12.

David Carlisle
  • 757,742

1 Answers1

2

that was never close to safe it tramples on internal registers used by tabbing, tabular, array, ...

I've used latex for over 30 years but never found a use for tabbing but if you want to extend it, just copy the original code, but with more. That loses the currently allocated ones, but as there are 32 thousand dimen registers now, that's not the issue it was.

\makeatletter
\chardef\@firsttab=\the\allocationnumber
%13 
\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
\newdimen\@gtempa
%26
\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
\newdimen\@gtempa
%39 
\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
\newdimen\@gtempa
% .....
\chardef\@maxtab=\the\allocationnumber
\dimen\@firsttab=0pt
\makeatletter

actually you need to check they are contiguous, so all less than 256 or all greater.

An alternative scheme, assuming you never allocate 2000 dimen would be to use the register in that range

\makeatletter
\chardef\@firsttab=2000
\chardef\@maxtab=2040 % or however many you need.
\dimen\@firsttab=0pt
\makeatletter
David Carlisle
  • 757,742