%% fichier 'columns.tex' %% ces macros servent à écrire un texte sur plusieurs colonnes, sans %% franchissement de page. Elles sont extraites de Lachand-Robert, %% pp 382-384. On trouve les mêmes dans le TeXbook p 147. %% probleme (11-02-98)~: la coupur n'a pas l'air de tenir compte de la %% profondeur (depth) de la boite a couer, d'ou les problemes de %% derniere colonne plus grande que les deux premieres. \catcode`\@=11 \newdimen \gouttiere \gouttiere = 10pt \newskip \bottomskip \bottomskip = 0pt \def \columns{% \par \line \bgroup %% commence une ligne \def \raggedbottom{% \global \bottomskip 0pt plus 1fil \relax} \dimen@i = \baselineskip \advance \dimen@i by -\splittopskip \afterassignment \c@lumns \count@=} %% recupere le nb de colonnes dans \count@ \def \c@lumns{% \advance \hsize by \gouttiere %% les 3 lignes ci-contre calculent \divide \hsize by \count@ %% la largeur des futures colonnes et \advance \hsize by -\gouttiere %% la stocke dans \hsize \boxmaxdepth = \z@ %% annulle \boxmaxdepth et \splitmaxdepth \splitmaxdepth = \z@ \setbox0 = \vbox \bgroup %% commence une boite verticale pour stocker \prevdepth = \dimen@i} %% le texte argument \def \endcolumns{% \egroup %% ferme la boite verticale \vbadness = 10000 %% empeche les messages d'erreur \dimen@ = \ht0 %% hauteur du texte argument \divide \dimen@ by \count@ %% hauteur (ideale) du texte coupe \loop \balancec@lumns %% on essaye \ifdim \dimen@i > \dimen@ %% jusqu'a ce que la derniere colonne \advance \dimen@ by \jot %% soit la plus courte, ce qui donne (dans \repeat %% \dimen@), la " bonne " hauteur de coupe \loop %% On lance alors la coupe \setbox1 = \vsplit0 to \dimen@ \vtop{% \unvbox1 \vskip \bottomskip \hrule height \z@ depth \z@ width \hsize}% \hss \advance \count@ by -1 \ifnum \count@ > 1 \repeat \vtop{% %% on sort la derniere colonne \unvbox0 \vskip \bottomskip \hrule height \z@ depth \z@ width \hsize}% \egroup} %% ferme la ligne horizontale \def \balancec@lumns{{% %% calcule la hauteur de la derniere \setbox2 = \copy0 %% colonne si on coupe a la hauteur \dimen@ \loop \setbox1 = \vsplit2 to \dimen@ \advance \count@ by -1 \ifnum \count@ > 1 \repeat \global \dimen@i = \ht2 }} %% stocke dans \dimen@i la hauteur calculee \catcode`\@=12