如何在biblatex的\printbibliography中显示bib文件与bibkey
问题:在biblatex参考文献中同时显示bibkey与对应.bib文件名
希望使用\printbibliography输出参考文献时,每个条目末尾同时显示该条目的bibkey和它所在的.bib文件名,期望格式如下:
[1] J. Doe, ``An interesting article," Journal of Interesting Stuff, vol. 42, no. 3,
pp. 123–456, 2020. [doe2020 @ file1.bib]
当前已实现bibkey的显示,以下是现有最小工作示例(MWE):
现有LaTeX代码
\documentclass[12pt]{article} \usepackage[a4paper,margin=2.05cm]{geometry} \usepackage[backend=biber, maxbibnames=99, style=ieee, sorting=ynt, defernumbers=true ]{biblatex} \usepackage{doi} \usepackage{hyperref} % 显示每条目的bibkey \DeclareFieldFormat{bibkey}{\path{[#1]}} \renewbibmacro{finentry}{\printfield[bibkey]{entrykey}\finentry} \addbibresource{file1.bib} \addbibresource{file2.bib} \begin{document} \nocite{*} \printbibliography \end{document}
对应.bib文件内容
file1.bib
@article{smith2020, author = {John Smith}, title = {A Great Paper}, journal = {Journal of Important Things}, year = {2020}, volume = {1}, pages = {1--10}, sourcefile = {mybibfile.bib} } @article{doe2020, author = {John Doe}, title = {An Interesting Article}, journal = {Journal of Interesting Stuff}, year = {2020}, volume = {42}, number = {3}, pages = {123-456}, }
file2.bib
@article{source1:entry1, author = {Author One}, title = {Title One}, journal = {Journal One}, year = {2020}, } @article{source2:entry1, author = {Author Two}, title = {Title Two}, journal = {Journal Two}, year = {2021}, }
解决方案
Biber会自动为每个参考文献条目记录其来源的.bib文件名,存储在datafield字段中,无需手动在bib条目里添加额外字段。只需修改finentry宏,同时输出entrykey(bibkey)和datafield(文件名)即可。
修改后的LaTeX代码中,替换原有显示bibkey的宏定义部分,改为:
% 同时显示bibkey与来源.bib文件名 \DeclareFieldFormat{bibkeywithfile}{\path{[#1 @ #2]}} \renewbibmacro{finentry}{ \printtext[bibkeywithfile]{\printfield{entrykey}\space @\space \printfield{datafield}} \finentry }
完整修改后的LaTeX代码
\documentclass[12pt]{article} \usepackage[a4paper,margin=2.05cm]{geometry} \usepackage[backend=biber, maxbibnames=99, style=ieee, sorting=ynt, defernumbers=true ]{biblatex} \usepackage{doi} \usepackage{hyperref} % 同时显示bibkey与来源.bib文件名 \DeclareFieldFormat{bibkeywithfile}{\path{[#1 @ #2]}} \renewbibmacro{finentry}{ \printtext[bibkeywithfile]{\printfield{entrykey}\space @\space \printfield{datafield}} \finentry } \addbibresource{file1.bib} \addbibresource{file2.bib} \begin{document} \nocite{*} \printbibliography \end{document}
编译后,每个参考文献条目末尾会按照期望格式显示[bibkey @ filename.bib],例如[doe2020 @ file1.bib]。
内容的提问来源于stack exchange,提问作者ASarkar
相关产品推荐
相关产品推荐

