# Line break in theorem header

I am using ntheorem to define my own environments like this

\theoremindent=0cm
\theorembodyfont{\upshape}
\theoremstyle{break}
\newtheorem{problem}{Problem}

\begin{problem}[Very very very very very very very very very very very very long name]
foo
\end{problem}


The problem is that the name is too long to fit in one line, but no line break is invoked.

How can I change this? I found How can I get a line break in a theorem headline? but the answers are not for the package ntheorem.

-

Using amsthm would avoid yourself this kind of problem, so unless there's a feature of ntheorem you really need, I would suggest the switch.

Otherwise, you can modify the break style of ntheorem to allow line breaks, but this new style will not work the same way in some situations (but should be similar enough for it not to be bothering):

\documentclass{article}

\usepackage{ntheorem}
\usepackage{etoolbox}% for command patching

\usepackage{lipsum}% for dummy text

\makeatletter
\let\nobreakitem\item
\let\@nobreakitem\@item
\patchcmd{\nobreakitem}{\@item}{\@nobreakitem}{}{}
\patchcmd{\nobreakitem}{\@item}{\@nobreakitem}{}{}
\patchcmd{\@nobreakitem}{\@itempenalty}{\@M}{}{}
\patchcmd{\@xthm}{\ignorespaces}{\nobreak\ignorespaces}{}{}
\patchcmd{\@ythm}{\ignorespaces}{\nobreak\ignorespaces}{}{}

\renewtheoremstyle{break}%
##1\ ##2\theorem@separator}\hskip\labelsep\relax\nobreakitem}%
##1\ ##2\ (##3)\theorem@separator}\hskip\labelsep\relax\nobreakitem}
\makeatother

\theoremindent=0cm
\theorembodyfont{\upshape}
\theoremstyle{break}
\newtheorem{problem}{Problem}

\begin{document}

\begin{problem}[Very very very very very very very very very very very very long name]
\lipsum[1]
\end{problem}

\begin{problem}
\lipsum[1]
\end{problem}

\begin{problem}
\begin{enumerate}
\item Foo
\item Bar
\end{enumerate}
\end{problem}

\vspace{4cm}

\begin{problem}
\lipsum[1]
\end{problem}

\end{document}


-
Unfortunately I am also using it followed by a list. There is no way to avoid this ugly space? –  Jana Oct 30 '12 at 13:36
@Jana: there is a method, but it's a bit more complicated. I've updated my answer to include it. –  Philippe Goutet Oct 30 '12 at 16:41