%%%%%%%%%1%%%%%%%%%2%%%%%%%%%3%%%%%%%%%4%%%%%%%%%5%%%%%%%%%6 % Bundled source file for the NEEDSPACE package %--------1---------2---------3---------4---------5---------6 % Please see the accompanying README for author, % license, documentation and installation information %%%%%%%%%1%%%%%%%%%2%%%%%%%%%3%%%%%%%%%4%%%%%%%%%5%%%%%%%%%6 %%%%%%%%%%%%%%%%%%%% %% PACKAGE SOURCE %% %%%%%%%%%%%%%%%%%%%% \RequirePackage{filecontents} \begin{filecontents*}{needspace.sty} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{needspace}[2010/09/12 v1.3d reserve vertical space] \newcommand{\needspace}[1]{% \begingroup \setlength{\dimen@}{#1}% \vskip\z@\@plus\dimen@ \penalty -100\vskip\z@\@plus -\dimen@ \vskip\dimen@ \penalty 9999% \vskip -\dimen@ \vskip\z@skip % hide the previous |\vskip| from |\addvspace| \endgroup } \newcommand{\Needspace}{\@ifstar{\@sneedsp@}{\@needsp@}} \newcommand{\@sneedsp@}[1]{\par \penalty-100\begingroup \setlength{\dimen@}{#1}% \dimen@ii\pagegoal \advance\dimen@ii-\pagetotal \ifdim \dimen@>\dimen@ii \break \fi\endgroup} \newcommand{\@needsp@}[1]{\par \penalty-100\begingroup \setlength{\dimen@}{#1}% \dimen@ii\pagegoal \advance\dimen@ii-\pagetotal \ifdim \dimen@>\dimen@ii \ifdim \dimen@ii>\z@ \vfil \fi \break \fi\endgroup} \end{filecontents*} %%%%%%%%%1%%%%%%%%%2%%%%%%%%%3%%%%%%%%%4%%%%%%%%%5 % Conditionally compile the documentation & generate the .ins file: \providecommand\documentationCompile{Y} \makeatletter \if\documentationCompile N \expandafter\@@end \fi \begin{filecontents*}{needspace.ins} %&latex \def\documentationCompile{N} \input needspace.tex \csname@@end\endcsname \end{filecontents*} %%%%%%%%%%%%%%%%%%% %% DOCUMENTATION %% %%%%%%%%%%%%%%%%%%% \documentclass{ltxdoc} \usepackage[it,medium]{titlesec} \usepackage[T1]{fontenc} \usepackage{microtype} \usepackage{lmodern} \usepackage[sc,osf]{mathpazo} \linespread{1.1} \frenchspacing \usepackage{fancyvrb} \usepackage[svgnames]{xcolor} \usepackage[colorlinks,linktocpage]{hyperref} \DeclareRobustCommand\pkg{\textsf} \usepackage{needspace} \GetFileInfo{needspace.sty} \begin{document} \title{The \pkg{needspace} package} \author{% Author: Peter Wilson, Herries Press\\ Maintainer: Will Robertson\\ \texttt{will dot robertson at latex-project dot org}% } \date{\fileversion \qquad \filedate} \maketitle \section{Documentation} This packages two commands, \cs{needspace} and \cs{Needspace}, for reserving space to keep a certain amount of material from being split over a page break. If there is not enough space, a \verb|\newpage| is automatically inserted. The \cs{needspace}\meta{length} macro reserves an \emph{approximate} amount of space \meta{length} for the material following to be kept on the same page. The accuracy of its calculations depend on what penalties are in effect, but is efficient and normally adequate. A short page will be ragged bottom even if \cs{flushbottom} is in effect. \cs{Needspace}\marg{length} is less efficient but reserves the requested space \meta{length} exactly. It should only be used between paragraphs. Short pages that are produced by \cs{Needspace} will be ragged bottom but short pages produced by \cs{Needspace*}\marg{length} will be flush bottom if \cs{flushbottom} is in effect. \section{Examples} Here, we request that we need next five lines on a single page/column: \begin{verbatim} ... previous text. \needspace{5\baselineskip} The next five lines ... \end{verbatim} \newpage \noindent In this case, the space is reserved more accurately: \begin{verbatim} ... previous text. \Needspace*{4\baselineskip} The major principles are: \begin{itemize} \item ... \end{verbatim} \section*{Licence and copyright} This work may be modified and/or distributed under the terms and conditions of the \LaTeX\ Project Public License\footnote{\url{http://www.latex-project.org/lppl.txt}}, version~1.3c or later (your choice). The current maintainer of this work is Will Robertson. \bigskip \noindent Copyright Peter Wilson, 1996--2003 \\ Copyright Will Robertson, 2010, 2013 \clearpage \parindent=0pt \section{Implementation} \VerbatimInput{needspace.sty} \end{document}