我正在寻求建议。
我正在尝试寻找“最佳”(:>) 程序来管理我的 bibtex 库,该程序可以让我创建子组并以我的方式格式化引用键,例如ref:[author][year][a-z]
;egref:
后跟作者,后跟年份,后跟字母 a、b、c(如果有键重复)。
首先是 JabRef。它应该还可以,但我在 CentOS 上工作,不幸的是 JabRef 在这个系统上运行不佳。
我尝试了 KBibTeX,它很好,但有点太简单了。格式化引用键没问题,但它不能处理重复项。我不得不将标题的首字母添加到键中:(ref:authorYearFLOT
标题的首字母)。如果标题很长,那么键也会很长。另一个问题是没有组和子组管理。
Zetero 具有群组管理、云同步功能,但必须手动将参考书目导出到 bibtex 文件。它还具有不方便的引用键格式“author_year_firstwordoftitle”。它以某种方式处理重复项,但这不是我想要的方式。我更喜欢在我的关键引用中使用“ref:”前缀。
Mendeley 有处理 BibTeX 的选项,通过将单独的文件夹同步到单独的 *.bib 文件中,这很好。如果缺少引用键,它会使用“AuthorYear[abc...]”格式提供它,但有时它会给出其他内容,例如“Author:VMM1998475:word1:word2”。我找不到如何编辑引用键应遵循的样式。
Mendeley 有没有可以处理自定义引用的插件?
谢谢您的任何建议。
编辑。尽管 Mendeley 可以将参考文献(在我的情况下是文件夹)与 bibtex 文件同步,但我仍然不知道它们究竟何时同步。由于我找到了 Zotero 的解决方法(请参阅我的答案),我将切换到此程序。目前,参考文献必须手动导出,但至少我可以控制它!
答案1
您可以使用 Zotero 完成所有这些操作更好的 BibTeX插件 - 预发布版本很稳定,只是功能不完整。但您描述的内容已经准备就绪,不需要手动编辑翻译器文件,因为 Zotero 更新这些文件时可能会重置这些文件。
答案2
好的。我希望我的解决方法能够成为答案。
我稍微研究了一下 Zotero,发现我们可以提供自己的翻译器。它们是用 JavaScript 编写的,我对此了解不多。因为我无法制作自己的导出翻译器,所以我更改了现有的翻译器:BibTeX,作者:Simon Kornblith、Richard Karnesky 和 Emiliano heyns,当我输入这段代码时,版本为 2.1.9。
在BiBteX.js
处理导出到 的过程中*.bib
,有以下一行:
var citeKeyFormat = "%a_%t_%y";
这是引用关键字的占位符,格式如下smith_firstword_2017
。我将其改为以下代码:
var citeKeyFormat = "ref:%a%y";
将 citationkey 导出为类似的东西ref:smith2017
。
有一个函数buildCiteKey (item,citekeys)
可以检查重复项,并在引用键中添加后缀,如-1
、-2
等。结果如下:
smith_firstword_2017
smith_firstword_2017-1
smith_firstword_2017-2
...
我也不喜欢它。我决定将原始脚本生成的数字转换为字母序列,例如a, b, ..., z, aa, ab, ... az
等。我找到了一个可以帮我完成这个的代码这里(请注意,由于注释行,墨水下的代码会产生错误 -#
应更改为//
):
function convertToNumberingScheme(number) {
var baseChar = ("a").charCodeAt(0);
letters = "";
do {
number -= 1;
letters = String.fromCharCode(baseChar + (number % 26)) + letters;
number = (number / 26) >> 0;
} while(number > 0);
return letters;
}
我在 JSON 序列之后(脚本的最顶部)插入了该函数,并更改了以下行:
citekey = basekey + "-" + i;
进入
citekey = basekey + convertToNumberingScheme(i);
现在,脚本根据我的格式生成引用密钥:
smith2017
smith2017a
smith2017b
...
smith2017aa
希望这个答案可以帮助其他人制作自己的格式。我猜有些人更喜欢保留标题的第一个字。我认为需要%t
在变量中保留占位符:citeKeyFormat
。