[Tex/LaTex] How to prevent line break in citation with an argument

citingline-breaking

If I cite a bibliography item with an additional argument, for example \cite[p.~6]{bib_item}, it can happen that there is a line break before the automatically inserted argument, such as:

text text text [4,

p. 6]

or

text text text [5, pp. 11-

13]

Is there a way to prevent this?

Best Answer

Assuming you're not using any packages redefining \cite & friends, here's a solution. (Andrey Vihrov's comments about \mboxes and \sloppy still apply.)

\documentclass[11pt]{article}

\makeatletter
% \def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}% OLD
\def\@cite#1#2{[{#1\if@tempswa ,~#2\fi}]}% NEW
\makeatother

\begin{document}

Some text that is just long enough to create an unwanted line break \cite[p.~99]{test}.

\begin{thebibliography}{9}
\bibitem{test} A bibitem.
\end{thebibliography}

\end{document}

EDIT: Replaced \penalty\@m\ with ~ in the definition of \@cite.