\ifx\endBlock\undefined
\def\BL@CK{\begingroup%
\def\endBL@CK{\egroup\endgroup}%
\vbox\bgroup}%
\long\def\Block{\begingroup%
\def\endBlock{\unskip\egroup\endgroup}%
\pagebreak[2]\vspace*{\parskip}\vbox\bgroup\par\noindent\ignorespaces}
\long\def\IBlock{\begingroup%
\def\endIBlock{\unskip\egroup\endgroup}%
\pagebreak[2]\vspace*{\parskip}\vbox\bgroup\par\ignorespaces}
%\newdimen\@@dimenA
% reservation verticale
%\def\need#1{{\ifhmode\unskip\par\fi
%%  \@@dimenA=\pagegoal
%  \@@dimenA=\textheight
%  \advance\@@dimenA by -\pagetotal
%  \ifdim\pagetotal>\z@
%    \ifdim\@@dimenA>\z@
%      \ifdim\@@dimenA<#1%
%        \vfill\eject\typeout{WARNING- EJECT BY NEED}
%      \fi
%    \fi
%  \fi}
%}
\def\need#1{\ifhmode\unskip\par\fi \penalty-100 \begingroup % preserve \dimen@, \dimen@i
   \ifdim\prevdepth>\maxdepth \dimen@i\maxdepth \else \dimen@i\prevdepth\fi
   \kern-\dimen@i
   \dimen@\pagegoal \advance\dimen@-\pagetotal % space left
   \ifdim #1>\dimen@
        \vfill\eject\typeout{WARNING- EJECT BY NEED}
   \fi
   \kern\dimen@i
   \endgroup}
\def\lneed#1{\need{#1\baselineskip}}
% \begin{BL@CK} ... \end{BL@CK} delimite un bloc qui restera, si possible, sur une seule page.
\long\def\TBlock{\begingroup%
\def\endTBlock{\unskip\egroup\endgroup}%
\pagebreak[2]\vspace*{\parskip}\vtop\bgroup\par\noindent\ignorespaces}
\else
\typeout{block.sty already loaded}
\fi
\endinput

\def\need#1{\par \penalty-100 \begingroup % preserve \dimen@, \dimen@i
   \ifdim\prevdepth>\maxdepth \dimen@i\maxdepth \else \dimen@i\prevdepth\fi
   \kern-\dimen@i
   \dimen@\pagegoal \advance\dimen@-\pagetotal % space left
   \ifdim #1>\dimen@ \vfil \eject \fi 
   \kern\dimen@i
   \endgroup}
