之前用LaTeX写论文时,参考文献都是手动添加管理的,真是让人很抓狂。所以这次趁着假期,简单看了一下怎么使用BibTeX对参考文献进行管理,这里以IEEE的最新模板为例。
首先说明,我之前用的是MiKTeX和TeXnicCenter,用这两个组合,按照网上教程搞了半天,发现TeXnicCenter中如果选择BibTeX编译就会报错:“bibtex.exe: GUI framework cannot be initialized.” 实在不知道怎么回事,就将LaTeX安装包换成TeX Live(需要将之前安装的MikTex卸载)。说实话TeX Live也实在不智能,其ISO文件可以在CTEX的Mirror下载到:http://ftp.ctex.org/mirrors/CTAN/systems/texlive/Images/,但是郁闷的是把iso下载下来运行时,会报“perl.exe 已停止工作”,最后还是按照这里:http://www.tug.org/texlive/acquire-netinstall.html的在线安装包安装好的(其间也是断断续续弄了好几遍)。按照微博上大家的推荐,这次改用了Texmaker这个工具,发现安装很简单,可以自动识别大部分TeX Live的组件。
下面以IEEE的最新模板为例,说说怎么样生成符合其格式要求的参考文献:
在这个页面:http://www.ieee.org/conferences_events/conferences/publishing/templates.html下载Windows版本的两个压缩包。(其实这些模板最官方的版本还是在CTAN上,但是前面这个页面是压缩包,下载起来更方便些)
IEEEtranBST2.zip这个压缩包是和BibTeX相关的,具体我也不解释了,讲讲需要做的事情:将这个压缩包中的IEEEtran.bst和IEEEtranS.bst拷贝至下面的目录:
%TeX Live安装目录%\texmf-local\bibtex\bst (这里需要注意的是,TeX Live大部分文件都被推荐安装到如2012这样年份代表的目录下,但是texmf-local这个目录是一些和用户设置相关的内容,这样可以保证重装或完全升级TeX Live后保留所有的用户数据),第二个文件中的S表示参考文献按照作者名等排序(大部分情况不用,因为IEEE很多要求是无序参考文献,就是说按照参考文献在文中出现的顺序编号)
其次,将上面压缩包中的IEEEabrv.bib和IEEEfull.bib拷贝至下面的目录:
%TeX Live安装目录%\texmf-local\bibtex\bib。
我们以windows_latex_template.zip压缩包中的bare_conf.tex为例,在这个文件的\end{document} 之前添加这两条语句:
1 2 | \bibliographystyle{IEEEtran} \bibliography{IEEEabrv,IEEEexample} |
这里其实就告诉编译器,我们将用到IEEEabrv.bib和IEEEexample.bib这两个文件。前者我们已经设置好了。后者就拷贝到和bare_conf.tex在同一文件夹中。那么我们在正文中加入:
1 | \cite{IEEEexample:articleetal} |
其实就表示在上面两个文件中查找ID为IEEEexample:articleetal的BibTeX记录,我们看看这个记录在IEEEexample.bib中长什么样子:
1 2 3 4 5 6 7 8 9 10 | @article{IEEEexample:articleetal, author = "F. Delorme and others", title = "Butt-jointed {DBR} Laser With 15 {nm} Tunability Grown in Three {MOVPE} Steps", journal = "Electron. Lett.", volume = "31", number = "15", year = "1995", pages = "1244-1245" } |
其实具体含义一看便知,接下来我们需要对上面的tex文件编译。首先在Texmaker中选择XeLaTeX,编译生成aux文件(此时一般会报错,不用管),再用BibTeX编译一遍,生成bbl文件,再重新用XeLaTeX编译两遍,两次生成dvi文件(因为它第一遍需要解决参考文献的问题)。然后我们再用PDF查看,就可以看到在文中生成正确的参考文献引用了。
下面还有一个主要问题需要解决,如果同时引用好几篇,那么这是在文中是分开的,如[2], [3]这个样子,一种最简单的解决方式是在
1 | \documentclass[conference]{IEEEtran} |
的后面加入:
1 | \usepackage[numbers,sort&compress]{natbib} |
在引用时,需要把多篇引用写在同一个cite中,如:
1 | \cite{ZongweiGligor-335,WheeldonCounsell-331} |
这样就可以实现诸如[2, 3]这样的形式了。
最后一个需要解决的问题,怎样整理正确的BibTeX应用,很多教程中提到了JabRef,但是我安装之后发现很郁闷,我点击其Search——web search时,这个软件没有一点反应。我又试了试NoteExpress,EndNote等软件,都存在一些问题:用NoteExpress(2.7.1版本)导出的bib文件有问题,EndNote(X4版本)不能在线搜索IEEE数据库。所以又对比了一下通过IEEE、ACM和Google Scholar以及CiteULike导出的BibTeX文件,严格意义上来说,生成的BibTeX文件都不符合要求。例如,在刚才IEEEexample.bib文件中给出的会议论文的booktitle字段应该长这个样子:
1 2 | booktitle = "Proc. {IEEE} International Workshop on Microelectromechanical Systems ({MEMS}'97)" |
但是所有的自动生成BibTeX记录都不是缩写的Proc而是如Proceedings of the 20XX IEEE Symposium on,或者干脆没有Proc或Proceedings of。个人认为,其实并不一定要完全符合要求,对比了很多TOP的会议,很多论文的参考文献格式也是大致符合,只要保证在一篇文章中风格一致即可。整体来说,IEEE和Google Scholar生成的文件比较准确。如果实在要求严格,可以在最后出版时再手动调整。