<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% boites.sty
% (c) 1998-1999 Vincent Zoonekynd &lt;zoonek@math.jussieu.fr&gt;
% Distributed under the GNU Public Licence
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Mars 1999 : Il y a certaines lignes Ã&nbsp; ne pas numÃ©roter (par
%%             exemple, celles qui ne contiennent que des espaces
%%             verticaux avant ou aprÃ¨s une Ã©numÃ©ration).
%% Mars 1999 : commentaires
%%
%% Modifiations par VZ, Juillet 1998
%%
%% Il y a quelques bugs, en particulier des traits qui sont trop
%% longs, trop courts, trop Ã©pais ou trop fins. Si Quelqu'un sait Ã&nbsp;
%% quoi c'est dÃ», qu'il me le dise.
%%
%% Il ne devrait plus y avoir de problÃ¨me Ã&nbsp; cause d'un environement de
%% type liste (itemize, enumerate, etc.) Ã&nbsp; l'intÃ©rieur des boites.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% D'aprÃ¨s :
% eclbkbox.sty by Hideki Isozaki, 1992
% Date: May  28, 1993

\ProvidesFile{boites.sty}
\ProvidesPackage{boites}[2013/11/21 v1.1 Colored, framed and breakable across pages boxes]

\newbox\bk@bxb
\newbox\bk@bxa
\newif\if@bkcont 
\newif\ifbkcount
\newcount\bk@lcnt

\def\breakboxskip{2pt}
\def\breakboxparindent{1.8em}

%% ParamÃ¨tres modifiables
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\bkvz@before@breakbox{\ifhmode\par\fi\vskip\breakboxskip\relax}

% Ce que l'on met Ã&nbsp; gauche du texte, par exemple, une ligne verticale
% pour faire un cadre, ou une ligne qui ondule.
\def\bkvz@left{\vrule \@width\fboxrule\hskip\fboxsep}

% De mÃªme, ce que l'on met Ã&nbsp; droite,
\def\bkvz@right{\hskip\fboxsep\vrule \@width\fboxrule}

% en haut
\def\bkvz@top{\hrule\@height\fboxrule}

% ou en bas
\def\bkvz@bottom{\hrule\@height\fboxrule}

% Si vous modifiez l'une de ces macros, il ne faut pas oublier de
% modifier aussi la suivante, qui change la valeur de \linewidth en
% lui retirant la largeur de tout ce que l'on vient de mettre sur le
% cÃ´tÃ©. 
\def\bkvz@set@linewidth{%
  \advance\linewidth -2\fboxrule
  \advance\linewidth -2\fboxsep
}

%% FIN DES PARAMÃˆTRES MODIFIABLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Le dÃ©but de l'environement
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\breakbox{%
    % On n'est pas nÃ©cessairement en mode vertical.
    % C'est \bkvz@before@breakbox qui s'en occupe (ou non).
  \bkvz@before@breakbox
    % on met tout dans une \vbox (\bk@bxb)
  \setbox\bk@bxb\vbox\bgroup
    % Ã€ l'intÃ©rieur de cette \vbox, on change la valeur de \hsize (et
    % aussi \linewidth).
  \bkvz@set@linewidth
  \hsize\linewidth
    % je ne sais pas ce que fait la commande \@parboxrestore.
  \@parboxrestore
    % On indente Ã©ventuellement, si l'utilisateur le dÃ©sire. 
  \parindent\breakboxparindent\relax
}

%% On coupe la boite
%%%%%%%%%%%%%%%%%%%%%%
% \@tempdimb: amount of vertical skip 
% between the first line (\bk@bxa) and the rest (\bk@bxb)
\def\bk@split{%
    % On calcule la hauteur totale (hauteur + profondeur) de la boite.
  \@tempdimb\ht\bk@bxb % height of original box
  \advance\@tempdimb\dp\bk@bxb 
    % On coupe, Ã&nbsp; l'aide de la commande \vsplit... to 0pt
    % Le morceau du haut se retrouve dans \bk@bxa, 
    % celui du bas dans \bk@bxb.
  \setbox\bk@bxa\vsplit\bk@bxb to\z@ % split it
    % L'un des problÃ¨mes, c'est que la premiÃ¨re boite a une hauteur vide. 
    % On peut lui redonner sa hauteur initiale grace Ã&nbsp; \vbox{\unvbox...}
  \setbox\bk@bxa\vbox{\unvbox\bk@bxa}% recover height &amp; depth of \bk@bxa
    % L'autre problÃ¨me, c'est que l'on a perdu l'espace (interligne) entre
    % nos deux boites. Pour le rÃ©cupÃ©rer, on ajoute la hauteur de ces deux
    % boites, et on fait la diffÃ©rence avec la hauteur initiale.
  \setbox\@tempboxa\vbox{\copy\bk@bxa\copy\bk@bxb}% naive concatenation
  \advance\@tempdimb-\ht\@tempboxa 
  \advance\@tempdimb-\dp\@tempboxa
    % DÃ©sormais, \@tempdimb contient l'espace entre les deux boites, que
    % l'on utilisera avec \bk@addskipdp.
}% gap between two boxes
 
%% Rajouter \fboxsep Ã&nbsp; la premiÃ¨re ligne
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \@tempdima: height of the first line (\bk@bxa) + fboxsep
\def\bk@addfsepht{%
  \setbox\bk@bxa\vbox{\vskip\fboxsep\box\bk@bxa}%
}

%% cette macro n'est pas utilisÃ©e
\def\bk@addskipht{%
  \setbox\bk@bxa\vbox{\vskip\@tempdimb\box\bk@bxa}%
}

%% Rajouter \fboxsep Ã&nbsp; la derniÃ¨re ligne
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \@tempdima: depth of the first line (\bk@bxa) + fboxsep
\def\bk@addfsepdp{%
  \@tempdima\dp\bk@bxa
  \advance\@tempdima\fboxsep
  \dp\bk@bxa\@tempdima
}

%% Rajouter l'espace qui a Ã©tÃ© perdu par \vsplit... to 0pt
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \@tempdima: depth of the first line (\bk@bxa) + vertical skip
\def\bk@addskipdp{%
  \@tempdima\dp\bk@bxa
  \advance\@tempdima\@tempdimb
  \dp\bk@bxa\@tempdima
}

%% On ne compte pas toutes les lignes, mais uniquement celles qui en
%% sont vraiment. J'ai pris comme critÃ¨re une largeur supÃ©rieure Ã&nbsp;
%% 1mm.  La mÃªme distance se retrouve un peu plus loin, dans
%% \bk@line. 
\def\bkvz@countlines{%
  \ifdim\wd\bk@bxa&gt;1mm
    \advance\bk@lcnt\@ne
  \fi
}

%% Afficher la ligne que l'on vient de couper
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\bk@line{%
  \hbox to \linewidth{%
    \ifdim\wd\bk@bxa&gt;1mm
      \ifbkcount\smash{\llap{\the\bk@lcnt\ }}\fi
    \fi
    \bkvz@left
    \box\bk@bxa
      % Il arrive que la boite ne soit pas aussi large que la ligne
      % (par exemple, espace avant une Ã©numÃ©ration)
    \hfil
    \bkvz@right
  }%
}

%% La fin de l'environement
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\endbreakbox{%
    % On ferme la \vbox (\bk@bxb)
  \egroup
  %\ifhmode\par\fi
  {%
    \noindent
      % On remet le compteur de lignes Ã&nbsp; un.
    \bk@lcnt 0%
      % Le boolÃ©en que nous allons utiliser dans la boucle plus loin.
    \@bkconttrue
      % Comme on va empiler des boites, on met certains ressorts Ã&nbsp; zÃ©ro,
      % pour Ã©viter les espaces verticaux non dÃ©sirÃ©s.
    \splittopskip\z@ % glue inserted at the top of a box resulting from a \vsplit
    \baselineskip\z@
    \lineskiplimit\z@
    \lineskip\z@
    \vfuzz\maxdimen
      % On coupe la boite
    \bk@split
      % On ajoute un peu d'espace vertical (\fboxsep) au dessus
    \bk@addfsepht
      % On ajoute en dessous l'espace qui avait Ã©tÃ© perdu par la commande
      % \vsplit.
    \bk@addskipdp
      % De deux choses l'une,
    \ifvoid\bk@bxb
        % Soit, il n'y a qu'une ligne
      \def\bk@fstln{%
          % On rajoute un peu d'espace (\fboxsep) en dessous.
        \bk@addfsepdp
          % On construit la boite : le haut, le milieu (qui contient la gauche
          % et la droite) et le bas.
        \bkvz@countlines
        \vbox{\bk@singleline}%
      }%
      % Soit, il y en a plusieurs.
    \else
      \def\bk@fstln{%
          % On met le haut
        \bkvz@countlines
        \vbox{\bk@firstline}%
          % ??? (Si on l'enlÃ¨ve, Ã§a ne marche plus.)
        \hfil
          % On commence Ã&nbsp; compter les lignes
        %\advance\bk@lcnt\@ne %%%%%%%%%%%%%%%%%%%% Voir \bkvz@countlines
          % DÃ©but de la boucle
        \loop
            % On coupe ce qui reste de la boite.
          \bk@split
            % On rajoute l'espace vertical qui a Ã©tÃ© perdu.
          \bk@addskipdp
            % Ã‰ventuellement, on augmente le numÃ©ro de la ligne
          \bkvz@countlines
            % ???
          \leavevmode
            % S'il s'agit de la derniÃ¨re ligne
          \ifvoid\bk@bxb
              % On met le boolÃ©en indiquant que la boucle doit se poursuivre Ã&nbsp; FAUX.
            \@bkcontfalse
              % On met un peu d'espace vertical (\fboxsep)
            \bk@addfsepdp
              % En envoie la derniÃ¨re ligne.
              % POURQUOI \vtop ??? Pour que l'Ã©ventuel numÃ©ro de ligne soit Ã&nbsp; la
              % bonne hauteur.
            \vtop{\bk@lastline}%
          \else               % 2,...,(n-1)
            \bk@middleline
          \fi
          \hfil
          %\advance\bk@lcnt\@ne %%%%%%%%%%%%%%%% Voir \bkvz@countlines
          \if@bkcont\repeat
      }%
    \fi
    \leavevmode\bk@fstln\par
  }%
  \vskip\breakboxskip\relax
}

\bkcountfalse

\def\bk@singleline{%
  \bkvz@top
  \bk@line
  \bkvz@bottom
}

\def\bk@firstline{%
  \bkvz@top
  \bk@line
}

\def\bk@middleline{%
  \bk@line
}

\def\bk@lastline{%
  \bk@line
  \bkvz@bottom
}
</pre></body></html>