[texhax] A macro programming question

Vafa Khalighi vafaklg at gmail.com
Mon Sep 12 08:49:03 CEST 2011


Thanks but that does not work and TeX complains abou missing \endR or \endL.

On Mon, Sep 12, 2011 at 4:37 PM, Paul Isambert <zappathustra at free.fr> wrote:

>
> Le 12/09/2011 08:05, Vafa Khalighi a écrit :
> > > I am trying to figure out how I can make longtable typeset RTL tabulars
> but
> I
> started with something much simpler to understand what I should do. The
> bigtabular package is defined as:
> > >
> > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> > > \newskip\Tabularleftskip  \Tabularleftskip\@flushglue
> > > \newskip\Tabularrightskip \Tabularrightskip\@flushglue
> > > \newbox\Tabularbox
> > > \newcount\Tabularcount
> > > \newcount\Tabularcolumns
> > > \def\@Tabclassz{\global\advance\Tabularcount\@ne\@tabclassz}
> > > \let\@latexclassiii\@classiii
> > > \def\@Tabclassiii{\global\advance\Tabularcount\@ne\@latexclassiii}
> > > \def\@Tabularcr{{\ifnum0=`}\fi\@ifstar{\@xTabularcr}{\@xTabularcr}}
> > > \def\@xTabularcr{\@ifnextchar[{\@argTabularcr}{\ifnum0=`{\fi}\cr
> > >   \noalign{\pagebreak[1]}}}
> > >
> > > \def\@argTabularcr[#1]{\ifnum0=`{\fi}\ifdim #1>\z@
> > >    \unskip\@xargarraycr{#1}\else \@yargarraycr{#1}\fi
> > >  \noalign{\pagebreak[1]}}
> > > \let\@latexhline\hline
> > > \let\@latextabarray\@tabarray
> > > \def\@tabarray{\let\hline\@latexhline\@latextabarray}
> > > \def\Tabularhline{\multispan{\Tabularcolumns}{\unskip\leaders\hrule
> > >     height\arrayrulewidth\hfill}\cr
> > >   \noalign{\vskip-\arrayrulewidth\pagebreak[2]}%
> > >   \multispan{\Tabularcolumns}{\unskip\leaders\hrule
> > >     height\arrayrulewidth\hfill}\cr}
> > >
> > > \def\Tabular#1{\trivlist\item[]\noindent
> > >   \setbox\Tabularbox\vbox\bgroup
> > >     \let\@acol\@tabacol
> > >     \let\@classz\@Tabclassz
> > >     \let\@classiii\@Tabclassiii
> > >     \let\@classiv\@tabclassiv
> > >     \let\\\@Tabularcr
> > >     \setbox\@arstrutbox=\hbox{\vrule
> > >         height\arraystretch \ht\strutbox
> > >         depth\arraystretch  \dp\strutbox
> > >         width\z@}%
> > >     \global\Tabularcount\z@
> > >     \@mkpream{#1}%
> > >     \Tabularcolumns\Tabularcount
> > >     \let\hline\Tabularhline
> > >     \let\@classiii\@latexclassiii
> > >     \tabskip\Tabularleftskip
> > >     \edef\@preamble{\halign to\linewidth\bgroup
> > >       \tabskip\z@ \@arstrut \@preamble
> > >       \tabskip\Tabularrightskip \cr}%
> > >     \let\@starpbox\@@startpbox
> > >     \let\@endpbox\@@endpbox
> > >     \let\@sharp##\let\protect\relax
> > >     \lineskip\z@\baselineskip\z@
> > >     \@preamble}
> > >
> > > \def\endTabular{\crcr\egroup\egroup\unvbox\Tabularbox\endtrivlist}
> > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> > >
> > > To make it typeset tabular right to left, I thought of changing
> \Tabular and
> \endTabular as follow:
> > >
> > > \def\Tabular#1{\trivlist\item[]\noindent
> > >   \setbox\Tabularbox\vbox\bgroup
> > >     \let\@acol\@tabacol
> > >     \let\@classz\@Tabclassz
> > >     \let\@classiii\@Tabclassiii
> > >     \let\@classiv\@tabclassiv
> > >     \let\\\@Tabularcr
> > >     \setbox\@arstrutbox=\hbox{\vrule
> > >         height\arraystretch \ht\strutbox
> > >         depth\arraystretch  \dp\strutbox
> > >         width\z@}%
> > >     \global\Tabularcount\z@
> > >     \@mkpream{#1}%
> > >     \Tabularcolumns\Tabularcount
> > >     \let\hline\Tabularhline
> > >     \let\@classiii\@latexclassiii
> > >     \tabskip\Tabularleftskip
> > >     \edef\@preamble{\halign to\linewidth\bgroup
> > >       \tabskip\z@ \@arstrut \@preamble
> > >       \tabskip\Tabularrightskip \cr}%
> > >     \let\@starpbox\@@startpbox
> > >     \let\@endpbox\@@endpbox
> > >     \let\@sharp##\let\protect\relax
> > >     \lineskip\z@\baselineskip\z@
> > >    \hbox\bgroup\beginR\vbox\bgroup \@preamble}
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% This is my first change
> > >
> > >
>
> \def\endTabular{\crcr\egroup\egroup\endR\egroup\egroup\unvbox\Tabularbox\endtrivlist}
> > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> > >
> > > but it no longer works (tabular appears on one page and no pagebreak
> happens).
> What should I do to fix this?
>
>
> When \Tabularbox is unboxed, it normally releases the horizontal boxes
> making up
> the lines of the tabular; in your case, it releases the first hbox you've
> added,
> in which the lines of the tabular are still taken as a whole (hence no
> possibility to break).
>
> I don't know much about RTL typesetting, but to me the solution is simply
> to add
> \beginR just after
>
>    \setbox\Tabularbox\vbox\bgroup
>
> and \endR between the two \egroup's in the original \endTabular.
>
> Best,
> Paul
> _______________________________________________
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://tug.org/pipermail/texhax/attachments/20110912/b5d8326b/attachment-0001.html>


More information about the texhax mailing list