# Bibliography in two columns, section title in one

I'm using the following to span the bibliography to two columns:

\begin{multicols}{2}
\bibliographystyle{abbrv}
\bibliography{mybib}
\end{multicols}


Yet, the section title ("References" in the article document style) also appear as part of the two columns, while I want it to span the whole page. How can I do something equivalent to the following code, but still using BibTeX?

\section*{References}
\begin{multicols}{2}
\thebibliography{..}
\end{multicols}


Thanks.

-

Building upon Gonzalo's answer, I suggest to use the etoolbox package to selectively change the definitions of \thebibliography and \endthebibliography. Add the following to your preamble:

\usepackage{multicol}
\usepackage{etoolbox}
\patchcmd{\thebibliography}{\section*{\refname}}
{\begin{multicols}{2}[\section*{\refname}]}{}{}
\patchcmd{\endthebibliography}{\endlist}{\endlist\end{multicols}}{}{}


EDIT: How does it work? The \patchcmd command needs five arguments, but you may ignore (as I did) the two last ones, which generate patching success/error messages. Argument no. 1 is the command to be "patched" (selectively changed), argument no. 2 is the part of the command definition that should be replaced, argument no. 3 is the replacement. (Because thebibliography is an environment, I had to patch the two commands that define it.)

-
Patching using \section*{\refname} has the problem that the solution does not work for report or book classes. You can use \list as the search pattern and replace it with {\list\begin{multicols}{2}}. –  Guido Oct 17 '12 at 10:32
@Guido True, but I prefer to use multicols optional second argument because I've had some trouble with regard to spacing if I start multicols after sectioning commands. –  lockstep Oct 17 '12 at 10:38

You can redefine the thebibliography environment to use two columns and use the optional argument of multicols to place the title; add the following lines to the preamble of your document:

\usepackage{multicol}

\makeatletter
\renewenvironment{thebibliography}[1]
{\begin{multicols}{2}[\section*{\refname}]%
\@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}%
\list{\@biblabel{\@arabic\c@enumiv}}%
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\@openbib@code
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
\sloppy
\clubpenalty4000
\@clubpenalty \clubpenalty
\widowpenalty4000%
\sfcode\.\@m}
{\def\@noitemerr
{\@latex@warning{Empty thebibliography' environment}}%
\endlist\end{multicols}}
\makeatother


Now in the body of your document, simply use

\bibliographystyle{abbrv}
\bibliography{mybib}

-
Works great.. but it is unfortunate to need to redefine everything. I like the solution of lockstep for its brevity (although I am not sure I yet understand how it works) –  Ran G. Jun 14 '11 at 22:36
@Ran G. my solution doesn't redefine everything; it only changes two lines in the original definition of the thebibliography environment; lockstep's solution does exactly what I did, but with the help of a package. The idea in both cases is to make two replacements in the original definition: 1) Instead of \section*{\refname} use \begin{multicols}{2}[\section*{\refname}] and 2) Instead of \endlist use \endlist\end{multicols}. –  Gonzalo Medina Jun 14 '11 at 22:42
thanks for the explanations. Since I don't really understand the internals I try to avoid low-level hacks (that is, anything that begins with \makeatletter, etc :) –  Ran G. Jun 14 '11 at 22:52
How do you with your method change the name from References to e.g. Bibliography ? –  chwi Oct 17 '12 at 10:27