转载:http://space.uibe.edu.cn/u1/ryang/latex-bib.html
概述
LaTeX 对参考文献的处理包含三个紧密相连的部分。
- 建立与维护文献数据库。
- 文中引用。
- 将文中引用与文献数据库建立联系,于文档末尾(或适当位置)生成所引文 献的列表。
-
建立与维护文献数据库
-
在 LaTeX 中,文献数据库文件为
.bib
文件,通常 放在主文档所在目录或 LaTeX 搜索路径下(由 BIBINPUTS 变量决定)。数据库 的条目依文献的不同类型划分,常用的如article
,book
,InProceedings
等。 数据库字段的组织形式如下:
@Book{Mas-Colell-Whinston-Green_1995,
author = {Mas-Colell, Andreu and Whinston, Michael D. and
Green, Jerry R.},
title = {Microeconomic Theory},
publisher = {Oxford University Press},
year = 1995,
address = {New York}
}
-
文中引用
-
缺省情况下,LaTeX 可以使用
/cite
命令进行文献引用。不过, 这里推荐使用natbib
宏包,该宏包提供下列常用引用命令:引用命令 显示效果 /citet{Mas-Colell-Whinston-Green_1995}
Mas-Colell, Whinston and Green (1995) /citep{Mas-Colell-Whinston-Green_1995}
(Mas-Colell, Whinston and Green 1995)
生成所引文献列表
-
LaTeX 使用
BibTeX
程序自动从前面建立的bib
文件中将 所引文献的信息提取出来,按照一定规则生成bbl
文件,LaTeX 则将bbl
文件 插入到/bibliography
命令处,从而生成所引文献列表。至于所引文献列表的排 版风格则由bst
文件决定。
上述后两个过程可以由下面的命令行实现:
latex yourfile
bibtex yourfile
latex yourfile
latex yourfile
因此,对中文参考文献的处理也同样涉及到上述三个部分。中文参考文献处理的 特殊要求决定了要对上述三个部分加以适当调整和修改。
中文参考文献的处理(作者年代式)
对 bib
文件的修改
为了能够分别处理中英文参考文献的不同风格,需要在 bib
文件中所有中文参 考文献条目中增加一个字段 lang
, 指定该字段值为 {chinese}
即可。如
@Book{Pindyck-Rubinfeld.cn_2000,
author = {平狄克 and 鲁宾费尔德},
title = {微观经济学},
publisher = {中国人民大学出版社},
year = 2000,
address = {北京},
edition = 4,
lang = {chinese}
}
文献引用宏包 natbib
导言区设置
/usepackage[sort&compress,longnamesfirst]{natbib}
/bibpunct[, ]{(}{)}{;}{a}{}{,}
/addtolength{/bibsep}{-0.5 em} % 缩小参考文献间的垂直间距
/setlength{/bibhang}{2em}
/newcommand{/bibfont}{/normalfont}%文献列表的字体
%/renewcommand/bibnumfmt[1]{#1} %去掉文末文献列表的[](数字或上标模式)
%/newcommand{/bibnumfont}[1]{/textit{#1}}
%文献列表中的姓氏字体设置,需要与适当的 bst 文件配合使用
/newcommand{/bibnamefont}[1]{{/bf/hei #1}}
%文献列表中的名字字体设置,需要与适当的 bst 文件配合使用
/newcommand{/bibfnamefont}[1]{{/bf/hei #1}}
处理中文问题
natbib
宏包缺省情况下会将中文忽略,得到的结果是所有中文都消失了。为了 解决这一问题,可以在导言区加上下面的代码:
%% 下面的代码来自 fixCJK.tex by Werner Lemberg <wl@gnu.org>,使得natbib 可
%% 以处理中文。注意如果使用了此文件,运行 fixbbl 时加上 -cjk 选项,以便生
%% 成可阅读的中文 bbl 文件,详情请访问 hooklee 主页,http://www.hooklee.com/。
/AtBeginDocument{%
/if@filesw
/immediate/write/@mainaux{%
/string/begin{CJK}{GBK}{song}}%
/immediate/write/@mainaux{%
/string/makeatletter}%
/fi}
/AtEndDocument{%
/if@filesw
/immediate/write/@mainaux{%
/string/end{CJK}}%
/fi}
% Enable Chinese in preamble (code from beamer)
/makeatletter
/def/beamer@activecjk{
% Activate all >128 characters.
/count@=127
/@whilenum/count@<255 /do{%
/advance/count@ by 1
/lccode`/~=/count@
/catcode/count@=/active
/lowercase{/def~{/kern1ex}}
}
}
/beamer@activecjk
/makeatother
也可以直接使用 hooklee 编写的 fixbbl
工具,具体用法请参考 hooklee 主页 。
文献引用风格文件 bst
对中英文文献采用不同的风格是处理中英文参考文献的关键。这里采用薛瑞尼 维 护的 thuthesis
的处理方法,即在 bib
文件中为中文参考文献增加 lang
字段 ,通过这一字段区分中英文文献。依照这一思路,读者可以调整和修改 natbib
自带的 plain.bst
, unsrt.bst
等风格文件。下面是一个小小的例子:
FUNCTION {bbl.and}
{ lang empty$
{"and"}
{"和"}
if$
}
这样修改可以告诉 BibTeX
在生成 bbl
文件时,中文文献多个作者之间的 and
改用中文“和”。
下面是经过初步修改的 bst
文件,未经充分测试,供参考。
- authordatenat.bst v0.1 2006-11-06 20:11
辅助处理程序
-
中文文献的排序问题
- 经过上述三步修改工作,基本上应该可以正常处理中文 参考文献了,但是有可能还会出现排序问题,即中文参考文献未按作者姓氏拼音 顺序排序。这一功能可以借助 hooklee 开发的 fixbbl 工具实现。Win 版本的 fixbbl 可以直接到 hooklee 主页下载使用。下面是可以在 Linux 系统下使用 的 fixbbl 程序(或者从 hooklee 主页下载源码,自己编译)。
- fixbbl.tgz v0.3 by hooklee
中文参考文献的处理(数字上标式)
以下是导言区的相关代码。注意:如果同时使用了 hyperref 宏包,需要在 natbib 和 hyperref 两个宏包之后使用 hypernat 宏包,以解决数字上标的连 写问题。
/usepackage[numbers,sort&compress]{natbib}
/renewcommand{/citet}[1]{/textsuperscript{/cite{#1}}}
/renewcommand{/citep}[1]{/textsuperscript{/cite{#1}}}
/addtolength{/bibsep}{-0.5 em} % 缩小参考文献间的垂直间距
/setlength{/bibhang}{2em}
%/newcommand{/bibnumfont}[1]{/textit{#1}}
/newcommand{/bibfont}{/normalfont}% 不宜使用中文字号,因为中文字号定义中包含了多余的行距
%/renewcommand/bibnumfmt[1]{#1} %去掉文末文献列表的[](数字或上标模式)
文中文献的引用方式:
命令 | 适用情况 |
---|---|
citet | 上标形式 |
citep | 上标形式(同上) |
cite | 正文形式 |
对中文的处理,与作者年代式相同。
关于文中文献条目问题
应用的领域
- 各章保持自己的参考文献列表;
- 在文中直接列出文献条目,如用于表格下方的资料来源。
- 所有引用到的参考文献不以文末文献列表的形式出现,而是在每页脚注中出 现。
使用 natbib 所带的 bibentry 宏包
该宏包提供 /bibentry
命令,用于在正文中插入对应的参考文献条目。主要用 法有两种:
-
不再出现参考文献列表
-
此时需要在使用
/bibentry
命令之前声明参考文献数 据库文件,形式为/nobibliography{bibfile}
。注意:文献条目最末尾的标点 符号会自动去掉,以便作者在其后添加其他文字。
仍然出现参考文献列表
-
此时需要将上面的数据库文件声明命令改为
/nobibliography*
,然后在文末使用通常的/bibliography{bibfile}
命令声明 数据库文件,两者需要使用同一个数据库文件,最好只有一个。这样的话,文档 中就可以混合使用/bibentry
和/citet
等命令了。
使用 chapterbib 和 natbib 宏包
使用这两个宏包可以实现每章内容末尾出现自己的参考文献列表。但需要注意以 下几点:
- natbib 在使用时需要加上 sectionbib 选项,并在其后载入 chapterbib 宏 包。
- 每章内容均需要放在单独 tex 文档中,使用
/include
命令组合到主文档中 。 - 编译时需要使用 bibtex 分别对每章加以处理,即 bibtex file1, bibtex file2 等。
其他步骤与通常编译 LaTeX 文档相同。
使用 footbib 宏包
使用该宏包可以将引用到的参考文献条目直接放到引用所在页的脚注中,并且如 果前后所引文献相同,该宏包还可以自动加上 ibid。