Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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.

share|improve this question
add comment

2 Answers 2

up vote 3 down vote accepted

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.)

share|improve this answer
    
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
add comment

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
            \advance\leftmargin\labelsep
            \@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}
share|improve this answer
    
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
3  
@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 ? –  Wilhelmsen Oct 17 '12 at 10:27
1  
@Wilhelmsen there are a number of questions in this site addressing this issue. Depends on whether you use babel or not. Without babel: \renewcommand\refname{The New Name}, with babel you need \addto\captions<language>{\renewcommand\refname{The New Name}}, where <language> is the main language declared. –  Gonzalo Medina Oct 17 '12 at 11:54
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.