得到Bibtex字符串后,可以直接调用Zotero函数直接解析的

功能建议 · 356 次浏览
ttChen 创建于 2024-01-14 22:28

如题


shandianchengzi 2024-01-15 00:08 :

落泪,我写完才知道,但是现在还没找到具体是哪个函数所以暂时没改,俺去找找,谢谢你的建议!

shandianchengzi 2024-01-15 01:45 :

难办诶,我用了一下translator里的Bibtex,那个必须导入保存新条目,没办法做到只解析不导入,解析代码如下:


var translate = new Zotero.Translate.Import();

      translate.setString(bibtexContent);

      translate.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4");

      let newItems = await translate.translate();

      let parsedBibtexItem = newItems[0];

shandianchengzi 最后更新于 2024-01-15 15:09
shandianchengzi 2024-01-15 02:45 :

并且自动导入的条目在导入后文库的位置还无法修改了,会报错“Error: Cannot change libraryID after object is already loaded”。


为了兼容群组文库文献的更新,由于自动Import的条目无法在Import前更新 library,因此我暂时删除Bibtex Translator自己建的item、新建一个item来解决问题。为了保证数据的安全性,我还是延续了之前的风格,只删了自动Import的条目,原有的item能不删尽量啥也没删。

parsedBibtexItem.eraseTx();

代码已更新。

shandianchengzi 最后更新于 2024-01-15 15:10
ttChen 回复 shandianchengzi 2024-01-15 09:15 :
  1. 兼容群组文库文献,通过获取当前活动当状态的LibraryID​是可以做到的,如let libID = Zotero.getActiveZoteroPane().getSelectedLibraryID();

  1. 是否保存,可以通过translate.setHandler("itemDone",function(translation,item){...})​来控制的
shandianchengzi 回复 ttChen 2024-01-15 14:31 :

我查了相关dev文档,官方也说setHandler能控制,并且我参考了其他人写的setHandler(使用Zotero翻译器获取作者归属-腾讯云开发者社区-腾讯云 (tencent.com)),但是我实际使用的时候,即使已经直接return 了也不生效,仍然会保存,而且标题也没有被修改。我猜测是BibTex翻译器内已经调用了item.complete(),但是我不清楚怎么关掉它:

      // 通过 Translator 'BibTex' 解析 BibTeX 内容
      var translate = new Zotero.Translate.Import();
      translate.setString(bibtexContent);
      translate.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4");
      // 解析完成后不做处理,从而不保存条目(failed)
      translate.setHandler("itemDone", function(translation,item){
        if(false)item.complete();
        item.title="test";
      });
      let newItems = await translate.translate();
      let parsedBibtexItem = newItems[0];
shandianchengzi 最后更新于 2024-01-15 15:06
shandianchengzi 回复 ttChen 2024-01-15 14:46 :

我翻阅了现在的大部分的Zotero的Quicker插件,对于translator import的,都是靠item.deleted=true;解决的。包括典型的你的“文献更新(DOI)”。我用eraseTx()的话不会放到回收站里。但是不管哪种方式都无法阻止新建文件诶。
我现在随便加入了一个Zotero中文群组准备问一问,如果大佬您有群组也可以拉我一下 :)(感谢)

shandianchengzi 最后更新于 2024-01-15 15:11
回复内容
shandianchengzi 2024-01-19 18:38
#1

如果暂时没有更好的解决方案的话,本贴就Archive了?

ttChen 回复 shandianchengzi 2024-01-22 08:23 :

在出差,回来研究研究




回复主贴