biblatex宏包使用后端bibtex和biber的区别
两个后端的输出差异
biblatex 有两种后端可以使用,分别是bibtex和biber。
两者的作用本质上是相同的,都是通过文献引用信息和bib文件处理出biblatex需要的数据,这些数据符合biblatex宏包定义的格式,保存在bbl文件中。一篇文献的典型格式为:
bibtex后端生成的:
\entry{Yi2013--}{book}{}
\name{author}{4}{}{%
{{hash=YSH}{%
family={Yi},
familyi={Y\bibinitperiod},
given={S\bibnamedelima H},
giveni={S\bibinitperiod\bibinitdelim H\bibinitperiod},
}}%
{{hash=ZYX}{%
family={Zhao},
familyi={Z\bibinitperiod},
given={Y\bibnamedelima X},
giveni={Y\bibinitperiod\bibinitdelim X\bibinitperiod},
}}%
{{hash=HL}{%
family={He},
familyi={H\bibinitperiod},
given={L},
giveni={L},
}}%
{{hash=ZML}{%
family={Zhang},
familyi={Z\bibinitperiod},
given={M\bibnamedelima L},
giveni={M\bibinitperiod\bibinitdelim L\bibinitperiod},
}}%
}
\list{publisher}{1}{%
{National Defense Industry Press}%
}
\strng{namehash}{YSH+1}
\strng{fullhash}{YSHZYXHLZML1}
\field{labelnamesource}{author}
\field{labeltitlesource}{title}
\field{labelyear}{2013}
\field{labeldatesource}{year}
\field{title}{Supersonic and hypersonic nozzle design}
\list{location}{1}{%
{BeiJing}%
}
\field{year}{2013}
\endentry
biber后端生成的:
\entry{Yi2013--}{book}{}
\name{author}{4}{}{%
{{uniquename=0,uniquepart=base,hash=30d1228d0571fa5d05eecaca3b7b5b21}{%
family={Yi},
familyi={Y\bibinitperiod},
given={S\bibnamedelima H},
giveni={S\bibinitperiod\bibinitdelim H\bibinitperiod},
givenun=0}}%
{{uniquename=0,uniquepart=base,hash=c7453b16a8928705077f2d6040ce623d}{%
family={Zhao},
familyi={Z\bibinitperiod},
given={Y\bibnamedelima X},
giveni={Y\bibinitperiod\bibinitdelim X\bibinitperiod},
givenun=0}}%
{{uniquename=0,uniquepart=base,hash=972234bc6cedbf8c53e9cdde1d02f16a}{%
family={He},
familyi={H\bibinitperiod},
given={L},
giveni={L\bibinitperiod},
givenun=0}}%
{{uniquename=0,uniquepart=base,hash=21145600045e45ca2f7db5c316e4b905}{%
family={Zhang},
familyi={Z\bibinitperiod},
given={M\bibnamedelima L},
giveni={M\bibinitperiod\bibinitdelim L\bibinitperiod},
givenun=0}}%
}
\list{language}{1}{%
{english}%
}
\list{location}{1}{%
{BeiJing}%
}
\list{publisher}{1}{%
{National Defense Industry Press}%
}
\strng{namehash}{c2c256e4a2b6e92ca488592d166b5177}
\strng{fullhash}{45269d2c791d5ef5a4149112f63f35ae}
\strng{bibnamehash}{c5aa3c5e799e6393445433a9d58e3a5c}
\strng{authorbibnamehash}{c5aa3c5e799e6393445433a9d58e3a5c}
\strng{authornamehash}{c2c256e4a2b6e92ca488592d166b5177}
\strng{authorfullhash}{45269d2c791d5ef5a4149112f63f35ae}
\field{sortinit}{e}
\field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
\field{extradatescope}{labelyear}
\field{labeldatesource}{}
\field{labelnamesource}{author}
\field{labeltitlesource}{title}
\field{title}{Supersonic and hypersonic nozzle design}
\field{year}{2013}
\field{dateera}{ce}
\endentry
可以看到两者的基本信息是一致的,只是biber后端多了一些附加的输出。
利用这些附加输出可以实现一些附加的设置和功能。但只要基本信息存在那么就足以生成和格式化文献引用标注和文献表。
从这里我们也可以知道,其实对于biblatex宏包来说,核心是需要利用一个后端程序产生满足biblatex格式要求的文献信息库
即bbl文件,无论这个后端用的什么程序,用bibtex也好,用biber也好,也其它程序也要,只要输出的格式满足要求即可。
两个后端的输入差异
对于biber程序来说,其所需的信息,都由biblatex输出保存到bcf文件中,因此biber程序只需要读取bcf文件和bib文件就能根据其中的信息生成bbl文件。
对于bibtex程序来说,传统latex的参考文献生成方法,通过aux文件中的信息获取bst样式文件和bib文件信息,以及参考文献引用信息,进而根据bst样式生成对应的输出,这个输出通常是一个thebibliography
环境。
对于biblatex宏包,其基本方式是类似的,biblatex宏包将bst样式文件和bib文件信息,以及文献引用信息写入aux文件中,然后bibtex获取这些信息进行处理,但我们知道biblatex需要的bbl文件中的格式不是一个thebibliography
环境,而是其需要的格式,因此对应的bst样式文件是特殊的,就是用来生成这一格式。
然而当biblatex设置选项时需要产生对应的格式,但bibtex无法简单接收这样的选项设置信息,
由于bst样式是固定的,那么biblatex设置选项的信息只能通过bib文件进行传递,用户的bib文件不能修改,于是biblatex另外写了一个
\jobname-blx.bib
文件用于向bibtex和bst文件传递信息。
于是我们可以看到在aux文件中,还有一个额外的bib文件信息\jobname-blx.bib
。
总结
两者的异同可以用下表总结:
后端 | bibtex | biber |
---|---|---|
输入的辅助文件 | aux文件 | bcf文件 |
辅助文件给出内容 | bst文件名,bib文件名,选项控制bib文件名,文献引用信息 | 文献引用信息,bib文件名,选项设置信息 |
输出文件 | bbl文件 | bbl文件 |
输出文件给出内容 | biblatex自定义格式文献信息 | biblatex自定义格式文献信息 |
两个后端的主要差别在于,由于bibtex程序处理bst文件的特殊性,无法从tex源代码直接传递信息给bst文件,需要多生成了一个保存控制信息的bib文件,待bst中的函数读取利用。这种思路提供了tex控制bst样式输出格式的可能,尽管其格式的选择可能会比较有限,因为bib文件只能提供格式选项,而这些格式必须是bst已经预备好了的,bst能够预设的格式总是有限的。然而这的确为bst样式作者及利用基于bibtex的传统方法的宏包作者提供了一条利用tex设置参考文献格式的可行路子。