19

When adding citations in the body of a document I'm used to write

... in some interesting paper~\cite{interesting}.

So that (if I'm using numbered references) the word “paper” and the citation number stick together and do not accidentally end up in two different lines.

It seems, however, that the \citet command from natbib (which should produce something like “Authors [4]”), does not use a ~ between the names of the authors and the citation number so that, on a few rare occasions, I end up with something like

                                                  ... Authors
[4].

Which is annoying. Is there an easy way to make natbib use a non-breaking space there?

12

Looks like \NAT@spacechar needs to be redefined:

\documentclass{article}

\usepackage[numbers]{natbib}

\makeatletter
% \def\NAT@spacechar{\ }% OLD
\def\NAT@spacechar{~}% NEW
\makeatother

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{a01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
\end{filecontents}

\begin{document}

Let's test if author and citation number end up in different lines: \citet{a01}.

\bibliographystyle{plainnat}
\bibliography{\jobname}

\end{document}
  • Thanks! It does the trick. I wonder why this isn't the default behavior of natbib or, at least, there is an option to more easily set this. – Juan A. Navarro Oct 25 '10 at 15:49
  • 1
    I guess the default behavior was chosen with author-year-citations in mind, where allowing a line break between author and year is acceptable. – lockstep Oct 25 '10 at 15:58
  • 2
    Hey! I realize this is an almost 4 year old question, but I just tried to solve exactly the same line-breaking \citet{} problem, and trying your suggestion did not make any difference. (I inserted the re-definition in the document preamble). Do you have any idea why that might be, or what I might try? – penelope Jun 24 '14 at 12:48
6

Since \NAT@spacechar is used, this redefinition prevents such breaks:

\makeatletter
\renewcommand*{\NAT@spacechar}{~}
\makeatother

This could affect also places where a break could be desired. Thus, an easy way for your rare occasions would be to use just \mbox around the citation:

... in the paper \mbox{\citet{interesting}}.
  • 1
    Also thanks for the suggestion. However note that the \mbox wont always produce the desired result if the author name contains several words (or there are several authors), as there is nothing wrong with breaking the line between those names. – Juan A. Navarro Oct 25 '10 at 15:52
  • Stefans suggestion will also prevent hyphenation of author names. – lockstep Oct 25 '10 at 15:55
  • @Juan @lockstep: that's right! It's just intended to fix the line breaking for such occasions like in the question, where the author isn't hyphenated. Of course, such adjustment should be done at last, when the final version is being produced. This local correction avoids the global effect of changing \NAT@spacechar to be unbreakable. – Stefan Kottwitz Oct 25 '10 at 16:37
2

lockstep and Stefan Kottwitz suggest redefining \NAT@spacechar. That may have worked at one time, but I find that it no longer works now, seven years later, using natbib 2010/09/13 8.31b (PWD, AO) from TeXLive 2016. A comment from @penelope also mentions that this approach was no longer working as of mid-2014.

The following strategy does work for me as of now. Add the following to your document preamble somewhere after \usepackage{natbib}:

\bibpunct{\nolinebreak{}[}{]}{,}{n}{}{,}

The key piece of this is the \nolinebreak{}[, which discourages LaTeX from breaking a line before the [ that starts a group of bracketed citation numbers. The remaining arguments to \bibpunct merely replicate the standard punctuation for bracketed, numbered citations.

Note that the {} immediately after \nolinebreak is not really an empty argument to \nolinebreak. Rather, it simply prevents \nolinebreak from mistaking the following [ for the start of an optional argument. That being said, \nolinebreak does accept an optional argument that determines how strongly a break should be discouraged. So you could instead use something like \bibpunct{\nolinebreak[0][}{]}{,}{n}{}{,} to make the no-break directive merely a mild request, all the way up to \bibpunct{\nolinebreak[4][}{]}{,}{n}{}{,} for a strict demand. The latter is equivalent to the default treatment you get if you use the \bibpunct{\nolinebreak{}[}{]}{,}{n}{}{,} form I suggested initially.

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.