[texhax] variable number of columns in a longtable [re-post for thread id]
Uwe Lueck
uwe.lueck at web.de
Fri May 9 20:01:10 CEST 2008
-----Ursprüngliche Nachricht-----
Von: Michael Barr <barr at math.mcgill.ca>
Gesendet: 09.05.08 15:35:54
An: SDittmar at eureca.de
CC: texhax at tug.org
Betreff: [texhax] Your texhax question
I am not entirely certain what you are trying to do, but I would like to
offer the following code from my diagram making macros:
\def\node#1(#2,#3)[#4]{%
\expandafter\gdef\csname x@#1\endcsname{#2}%
\expandafter\gdef\csname y@#1\endcsname{#3}%
\expandafter\gdef\csname ob@#1\endcsname{#4}%
\ignorespaces}%
What this code does is to take something like
\node a(30,40)[A]
and define three macros whose definitions are equivalent to
\gdef\x at a{30}
\gdef\y at a{40}
\gdef\ob at a{A}
There are several things to note. First, \newcommand will not work. Of
course, if I used it as
\node {a}{30}{40}{A}
it would, but I don't much like all those braces (and most parts of the
diagram macros cannot be coded using \newcommand either. I use \gdef
because this appears inside another macro; I don't think there is a
\newcommand equivalent. Finally, the node names don't have to be letters
only. I could (and regularly do) use things like
\node 3c(30,40)[A]
since the form
\expandafter \csname ??? \endcsname {definition}
allows any string of characters as a control sequence name. Of course,
when calling these macros, the same thing has to be done. These macros
are used in the following form:
\morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/%
<\xfinish,\yfinish>[\csname ob@#3\endcsname`\csname ob@#4\endcsname;#5]%
}%
An earlier implementation of this used two counters for each node. This
one uses just two counters, since the numerical values are stored as
macros, not counters and just two temporary counters are used for a whole
diagram. This is important since tex puts a severe restriction on the
number of counters (256, of which several dozen are used by latex alone)
while the number of macros is effectively unlimited (my tex implementation
reports that there are 10000 + 50000, which I don't understand, but 5000
is what I typically use).
I hope this helps.
Michael Barr
_______________________________________________
TeX FAQ: http://www.tex.ac.uk/faq
Mailing list archives: http://tug.org/pipermail/texhax/
More links: http://tug.org/begin.html
Automated subscription management: http://tug.org/mailman/listinfo/texhax
Human mailing list managers: postmaster at tug.org
More information about the texhax
mailing list