我使用以下内容将参考书目分为两列:
\begin{multicols}{2}
\bibliographystyle{abbrv}
\bibliography{mybib}
\end{multicols}
但是,章节标题("References"
在文章文档样式中)也出现在两列中,而我希望它横跨整个页面。我怎样才能做与以下代码等效的事情,但仍使用 BibTeX?
\section*{References}
\begin{multicols}{2}
\thebibliography{..}
\end{multicols}
谢谢。
答案1
根据 Gonzalo 的回答,我建议使用etoolbox
\thebibliography
包选择性地更改和的定义\endthebibliography
。将以下内容添加到您的序言中:
\usepackage{multicol}
\usepackage{etoolbox}
\patchcmd{\thebibliography}{\section*{\refname}}
{\begin{multicols}{2}[\section*{\refname}]}{}{}
\patchcmd{\endthebibliography}{\endlist}{\endlist\end{multicols}}{}{}
编辑:它是如何工作的?该\patchcmd
命令需要五个参数,但您可以忽略(就像我一样)最后两个参数,它们会生成修补成功/错误消息。参数 1 是要“修补”(选择性更改)的命令,参数 2 是应该替换的命令定义部分,参数 3 是替换部分。(因为thebibliography
是一个环境,所以我必须修补定义它的两个命令。)
答案2
您可以重新定义thebibliography
环境以使用两列并使用可选参数来multicols
放置标题;将以下几行添加到文档的序言中:
\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
现在,在文档正文中,只需使用
\bibliographystyle{abbrv}
\bibliography{mybib}
答案3
如果您正在使用natbib
,解决此问题的最简单方法是使用bibpreamble
和bibpostamble
:
\usepackage{multicol}
\renewcommand{\bibpreamble}{\begin{multicols}{2}}
\renewcommand{\bibpostamble}{\end{multicols}}
这样,只有参考文献放在两列中,标题被省略。然而,它保留了参考书目的标题chapter
。要更改这种情况,您可以使用例如bibsection
:
\usepackage{natbib}
\renewcommand\bibsection{\section{\bibname}}
答案4
我发现在两列中有引用的最简单的解决方案是使用\twocolumn
如下命令:
\twocolumn
\bibliography{report}
\onecolumn