# Unbreakable block

I want to do something like the following in TeX:

\begin{nobreak}

Text here will not split over pages, it will remain
as one continuous chunk. If there isn't enough room
for it on the current page a pagebreak will happen
before it and the whole chunk will start on the next
page.

\end{nobreak}


Is this possible?

See Preventing page breaks between lines in the UK TeX FAQ. Basically, you may use one of the following:

• the samepage environment;
• a \parbox or a minipage;
• the \needspace command of the package of the same name.

You may also need "to accept that not everything can be accomplished totally automatically".

• Fair enough. I would have thought this was a desirable thing to have, especially for bullet lists etc. Oh well, thanks for your help. Oct 23, 2010 at 22:00
• @lockstep what controls the spacing prior to samepage environment, I am getting more vertical whitespace, is this normal? Jun 7, 2013 at 5:58
• Is there something equivalent to samepage but prevents column breaks in a two-column doc? (I want some chunk to stay in a single column). Sep 4, 2015 at 12:56
• \nopagebreak worked for me.™ May 31, 2016 at 2:55

A \vbox (or \vtop) will never be broken across pages:

\vbox{%
Text here will not split over pages, it will remain
as one continuous chunk. If there isn't enough room
for it on the current page a pagebreak will happen
before it and the whole chunk will start on the next
page.}


(unless you \setbox it, and later \unvbox it)

You can also use packages to create and format the environment via options:

• Using my adjustbox package here would be overkill. A normal minipage usually does it. Of course if you want to add frames or other modifications it is the way to go. Oct 6, 2011 at 19:53
• @MartinScharrer: Of course it's only useful for modifactions. Oct 7, 2011 at 9:45

\minipage works well when used in conjunction with the line width. To prevent overfull hbox's you need to use:

\noindent\begin{minipage}{\linewidth}
content on same page
\end{minipage}


The key is \linewidth. \linewidth is equivalent to the text width (\textwidth) when not in a list. When in a list, \linewidth accounts for the indentation of the list. One other item that may or may not be so obvious is you should have a blank line before the minipage block. If you don't the minipage block will become part of the text it's attached to and cause the overfull hbox. Example:

content 1

\noindent\begin{minipage}{\linewidth}
content on same page
\end{minipage}

content 2


In How make sure two elements stay on the same page? the suggestion was to use \textwidth but that doesn't work when in a list.