2

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},
  Addison Wesley, Massachusetts,
  2nd edition,
  1994.

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

\bibitem{bar}
  Mr. Bar,
  \emph{\LaTeX: a document preparation system},
  Addison Wesley, Massachusetts,
  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
2

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},
  Addison Wesley, Massachusetts,
  2nd edition,
  1994.

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

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

\end{thebibliography}

\end{document}

minimal working example screenshot

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},
gg  Addison Wesley, Massachusetts,
  2nd edition,
  1994.

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

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

\end{thebibliography}

\end{document}

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

  • Thanks for this extensive answer. Both approaches work well. – Dohn Joe Aug 18 '15 at 16:43
  • Nice answer, I was just coming back to say the same thing, but you've done it perfectly. – Alan Munn Aug 18 '15 at 18:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.