我想将大型 bibtex 文件中的所有引用键转换为小写。我尝试修改 bibdesk 中的“Downcase Titles”apple 脚本,但我甚至无法让原始脚本运行。当我选择参考文献并运行脚本时,它返回 apple 脚本错误“(null)”。我需要安装任何依赖项才能运行该脚本吗?
假设我可以让“小写标题”发挥作用,那么我是否只需用替换下面一行中的两个实例title
即可cite key
让其转换引用键?
set title of thePub to uncapitalize(title of thePub)
如果还有其他方法可以转换 .bib 文件中的引用键,那也可以,不一定非要使用 bibdesk,这只是一次性需求
答案1
如果sample.bib
是
@inproceedings{Zaaaa,
title = {zzzz}
booktitle = {Zzzz zzz }
author = {foo,bar and ggg}
date = {2000},
pages = {13--1},
}
@misc{ABC,
title = {zzzz}
booktitle = {Zzzz zzz }
author = {foo,bar and ggg}
date = {2000},
pages = {13--1},
}
@book{Zaabha,
title = {zzzz}
booktitle = {Zzzz zzz }
author = {foo,bar and ggg}
date = {2000},
pages = {13--1},
}
然后在命令行上对 sed 进行以下调用会产生:
$ sed -e 's/\(@[a-zA-Z]*{\)\([^,]*\),/\1\L\2,/' sample.bib
@inproceedings{zaaaa,
title = {zzzz}
booktitle = {Zzzz zzz }
author = {foo,bar and ggg}
date = {2000},
pages = {13--1},
}
@misc{abc,
title = {zzzz}
booktitle = {Zzzz zzz }
author = {foo,bar and ggg}
date = {2000},
pages = {13--1},
}
@book{zaabha,
title = {zzzz}
booktitle = {Zzzz zzz }
author = {foo,bar and ggg}
date = {2000},
pages = {13--1},
}
以上使用 Gnu Sed,您可能更喜欢使用 perl 来获得相同的输出
perl -pe 's/(@[a-zA-Z0-9:]*{)([^,]*),/$1\L$2,/' sample.bib
注意,以上内容只是改变了每个条目的主键,如果 bib 文件中有内部交叉引用,你也需要将它们小写以保持 bib 文件的一致性,例如
sed -e 's/(\scrossref = )(\{[A-Za-z0-9:]*\})/\1\L\2/' sample.bib