3

(Note: I wasn't sure if this fell under the same question as reduce bibliography to one line with dots and reference numbers. I attempted an edit which was rejected due to changing the question too much, so I'm asking this as a new question instead.)

I'm trying to put my references on one line, using code from Mico:

\usepackage[numbers]{natbib}
\renewenvironment{thebibliography}[1]{%
    \section*{\refname}
    \let\par\relax\let\newblock\relax
    \inparaenum[{[}1{]}]}{\endinparaenum}

However, this produces extra spaces between some entries:

enter image description here

Note the extra space between the end of entry 2 and the beginning of entry 3.

Adding the following code fixes the extra space, but makes all in-text citations show up as question marks:

\renewcommand{\bibitem}[2][]{\item}

In addition, removing the numbers option from \usepackage{natbib} gets rid of the extra space as well, but I'd like to avoid using author-year citations.

Does anyone know how to get rid of the extra space while using the numbers option, without breaking in-text citations?

MWE:

\documentclass{article}

\usepackage[numbers]{natbib} % Removing numbers option fixes extra space
\usepackage{paralist}

\begin{filecontents}{bib.bib}
    @article{test1,
        Author = {Test Test},
        Year = {0000},
        Title = {Some title},
        Journal = {Some journal},
        Volume = {0},
        Pages = {0}
    }
    @article{test2,
        Author = {Test2 Test2},
        Year = {0001},
        Title = {Some other title},
        Journal = {Some other journal},
        Volume = {1},
        Pages = {1}
    }
    @article{test3,
        Author = {Test3 Test3},
        Year = {0002},
        Title = {Yet another title},
        Journal = {Yet another journal},
        Volume = {2},
        Pages = {2}
    }
\end{filecontents}

% Redefine the bibliography to go on one line
\renewenvironment{thebibliography}[1]{%
    \section*{\refname}%
    \let\par\relax\let\newblock\relax
    \inparaenum[{[}1{]}]}{\endinparaenum}

% Uncommenting the following makes the extra space go away but breaks in-text citations   
%\renewcommand{\bibitem}[2][]{\item}

\begin{document}
    \citet{test1,test2,test3}
    \bibliography{bib}{}
    \bibliographystyle{plainnat}
\end{document} 
  • I've since figured out that this has to do with the \hfil in the \item command in \@lbibitem. Unfortunately, trying to redefine \@lbibitem in the document's preamble results in me getting an error about the paragraph ending before \NAT@bare is complete. I'm not sure if there are any terrible consequences to redefining \hfil to \hskip 0pt plus 0fil minus 0pt, or if there's a way to avoid the \NAT@bare error to allowing for removing it from \@lbibitem directly. – Jigsaw May 17 '18 at 0:43
1

As your comment says you want to remove the \hfil in the \item statement in the \@lbibitem macro. Concretely it appears as

   \item[\hfil\NAT@anchor{#2}{\NAT@num}]%

in natbib.sty. You can use etoolbox to do the replacement for you as follows:

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@lbibitem}{\item[\hfil}{\item[}{}{}
\makeatother

once natbib is loaded. Note the use of \makeatletter...\maketother around this code, because of the presence of the @ in the macro name, cf. \makeatletter explained

Sample output

\begin{filecontents}{bib.bib}
    @article{test1,
        Author = {Test Test},
        Year = {0000},
        Title = {Some title},
        Journal = {Some journal},
        Volume = {0},
        Pages = {0}
    }
    @article{test2,
        Author = {Test2 Test2},
        Year = {0001},
        Title = {Some other title},
        Journal = {Some other journal},
        Volume = {1},
        Pages = {1}
    }
    @article{test3,
        Author = {Test3 Test3},
        Year = {0002},
        Title = {Yet another title},
        Journal = {Yet another journal},
        Volume = {2},
        Pages = {2}
    }
\end{filecontents}
\documentclass{article}

\usepackage[numbers]{natbib}
\usepackage{paralist}
\usepackage{etoolbox}


% Redefine the bibliography to go on one line
\renewenvironment{thebibliography}[1]{%
    \section*{\refname}%
    \let\par\relax\let\newblock\relax
    \inparaenum[{[}1{]}]}{\endinparaenum}

\makeatletter
\patchcmd{\@lbibitem}{\item[\hfil}{\item[}{}{}
\makeatother

\begin{document}

\citet{test1,test2,test3}

\bibliography{bib}
\bibliographystyle{plainnat}

\end{document}

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.