# Cite like [1-2] instead of [1, 2]

I'm using natbib package with compress option, which works well in the case [1-3]. However, I hope that [1,2] could also be compressed as [1-2].

-
– Werner Dec 14 '12 at 6:59
@Werner I tried natbib and cite, but they can't handle this situation. – Haocheng Dec 14 '12 at 7:25
@Werner Doesn't help as all standard 'compress' routines treat two numbers differently from three or more. – Joseph Wright Dec 14 '12 at 8:47

The built-in mechanism in natbib does not make range for two numbers. To do that, we have to patch the code:

\begin{filecontents}{\jobname.bib}
@article{demo1,
title   = {Some things {I} did},
author  = {Other, A. N.},
journal = {J. Irrep. Res.},
year    = {2012},
pages   = {x-y}
}

@article{demo2,
title   = {Cool!},
author  = {Nobacon, D.},
journal = {Ann. Improb. Res.},
year    = {2012},
pages   = {a-b}
}
\end{filecontents}
\documentclass{article}
\usepackage[numbers,sort&compress]{natbib}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\NAT@citexnum}
{%
\ifx\NAT@last@yr\relax
\def@NAT@last@yr{\@citea}%
\else
\def@NAT@last@yr{--\NAT@penalty}%
\fi
}
{%
\def@NAT@last@yr{--\NAT@penalty}%
}
{}{\FAIL}
\makeatother
\bibliographystyle{unsrtnat}
\begin{document}
\cite{demo1,demo2}
\bibliography{\jobname}
\end{document}


All I'm doing there is taking out the test which seems to generate the comma (using \@citea): natbib is very careful not to use too many macros and registers, but that makes the code a bit tricky to read!

-
 Note that a different solution would be needed for the cite package (another patch) or for biblatex. – Joseph Wright♦ Dec 14 '12 at 8:46 It works, thanks a lot. – Haocheng Dec 14 '12 at 9:52