将引用键转换为小写

将引用键转换为小写

我想将大型 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

相关内容