# How to prevent line break within a (multiple) citation

I sometimes cite two or three references. When the citation is at the end of the line, latex inserts a line break. How can I prevent this from happening?

I already tried what was suggested here

Note: I use the package natbib, if I do not use cite[nobreak] instead of natbib, I get the desired result. However, I would like to continue using natbib, if possible.

Here is a MWE (if the citation does not get broken at your machine insert random gibberish of various length):

\documentclass{article}

\usepackage[numbers,sort]{natbib}
\makeatletter
\renewcommand*{\NAT@spacechar}{~}
\makeatother

\begin{document}

A really really really really really really really really long sentence, foo \cite{lamport94,foo,bar}.

\begin{thebibliography}{9}

\bibitem{lamport94}
Leslie Lamport,
\emph{\LaTeX: a document preparation system},
2nd edition,
1994.

\bibitem{foo}
Mr. Foo,
\emph{\LaTeX: a document preparation system},
2nd edition,
1994.

\bibitem{bar}
Mr. Bar,
\emph{\LaTeX: a document preparation system},
2nd edition,
1994.

\end{thebibliography}

\end{document}

• You could put the whole \cite command in an \mbox. – Alan Munn Aug 18 '15 at 2:10
• I would prefer a solution that involves editing only the preamble. wccounts 503 occurances of \cite in my document's sources. – Dohn Joe Aug 18 '15 at 6:25

Both approaches described here are taken from Stefan Kottwitz's answer to Non-breaking space in \citet using natbib?.

# The \mbox approach

You can redefine \cite to be wrapped in a \mbox with

\let\oldcite\cite
\renewcommand{\cite}[1]{\mbox{\oldcite{#1}}}


Or, even better, do so with the letltxmacro package (See When to use \LetLtxMacro?)

\usepackage{letltxmacro}
\LetLtxMacro{\oldcite}{\cite}
\renewcommand{\cite}[1]{\mbox{\oldcite{#1}}}


## MWE

\documentclass{article}

\usepackage[numbers,sort]{natbib}

\usepackage{letltxmacro}
\LetLtxMacro{\oldcite}{\cite}
\renewcommand{\cite}[1]{\mbox{\oldcite{#1}}}

\begin{document}

A really really really really really really really really long sentence, foo \cite{lamport94,foo,bar}.

A shorter sentence, foo \cite{lamport94,foo,bar}.

\begin{thebibliography}{9}

\bibitem{lamport94}
Leslie Lamport,
\emph{\LaTeX: a document preparation system},
2nd edition,
1994.

\bibitem{foo}
Mr. Foo,
\emph{\LaTeX: a document preparation system},
2nd edition,
1994.

\bibitem{bar}
Mr. Bar,
\emph{\LaTeX: a document preparation system},
2nd edition,
1994.

\end{thebibliography}

\end{document}


# The \NAT@spacechar approach

Instead of redefining \NAT@spacechar to an unbreakable space, we should increase the penalty in the \NAT@separator macro (which is defined as \penalty\@m, a lower penalty than the one applied with \nolinebreak [\@M]). So we should redefine \NAT@separator to

\renewcommand{\NAT@separator}{\NAT@sep\nolinebreak}


## MWE

\documentclass{article}

\usepackage[numbers,sort]{natbib}

\makeatletter
\renewcommand{\NAT@separator}{\NAT@sep\nolinebreak}
\makeatother

\begin{document}

A really really really really really really really really long sentence, foo \cite{lamport94,foo,bar}.

A shorter sentence, foo \cite{lamport94,foo,bar}.

\begin{thebibliography}{9}

\bibitem{lamport94}
Leslie Lamport,
\emph{\LaTeX: a document preparation system},
2nd edition,
1994.

\bibitem{foo}
Mr. Foo,
\emph{\LaTeX: a document preparation system},
2nd edition,
1994.

\bibitem{bar}
Mr. Bar,
\emph{\LaTeX: a document preparation system},

The output is the same as in the \mbox approach.