请问,能否把笔记中的(view)字样替换为(author,year)

功能建议 · 831 次浏览
wenbocn 创建于 2023-01-23 11:32

如题,能否把view替换为论文的作者和年份,谢谢!

wenbocn 最后更新于 2023/1/23

ttChen 2023-01-25 07:57 :

可以啊,但这样涉及到文献格式问题,可能每人要求都不一样。

回复内容
wenbocn 2023-01-25 08:11
#1

感觉(Butchosa.​ 2019)这样的超链接形式比(View)更好呢,能够对选摘的内容进行区分,也不会占用过多空间。

如果您觉得不合适的话,能否提供一下作者和年份的类似于 ${annotation.annotationComment}的JavaScript代码,我自己添加一下?谢谢!

ttChen 回复 wenbocn 2023-01-25 11:14 :


var item = Zotero.getActiveZoteroPane().getSelectedItems()[0]

item.firstCreator + " " + Zotero.Date.strToDate(item.getField("date")).year

这段代码可以实现,但是会涉及到很多问题。如中文等英文et al. 的处理方式,一个作者、二个作者和多个作者的处理方式,还有(author+year)中间标点符号的处理方式等等。不同期刊,格式要求都不一样,而且弄复杂了,会拉慢整个动作的启动速度。另外,英文只用显示LastName,而中文一般显示全称。实际zotero一般采用CSL专门处理整个问题。

ttChen 最后更新于 2023-01-25 11:44
wenbocn 2023-01-25 11:04
#2

如果在zotero的PDF页面,没有选择标注时,能用该动作以(Butchosa.​ 2019)形式,返回PDF或条目的链接,那就更好了

ttChen 2023-01-25 12:34
#3

把上面的情况都考虑了,写了函数,直接用就可以了。注意item是指条目,不是批注item,也不是pdf的item。可以用let item=annotation.parentItem.parentItem;获取。

function getInTextCitation(item,joinSeparator = "与",eta = "等") {
    let Creators = item._creators;
    let isChinese = /[\u4e00-\u9fa5]+/.test(item.firstCreator);
    let result = "";
    if (isChinese) {
        if (Creators.length == 1) {
            result = Creators[0].lastName + Creators[0].firstName;
        } else if (Creators.length == 2) {
            result = Creators[0].lastName + Creators[0].firstName + joinSeparator + Creators[1].lastName + Creators[1].firstName;
        } else {
            result = Creators[0].lastName + Creators[0].firstName + eta;
        }
    } else {
        result = item.firstCreator;
    }
    return result+", " + Zotero.Date.strToDate(item.getField("date")).year;
}

wenbocn 回复 ttChen 2023-01-25 13:22 :

非常感谢!!

请问没有选中注释时,能够返回PDF或PDF条目的链接吗?

wenbocn 2023-01-25 15:51
#4

感谢作者,根据你提供的代码修改了JavaScript部分,实现了①zotero条目页面使用该动作可以复制条目链接,②PDF页面,未选择标注时可以复制条目链接,③选择标注内容,可以复制标注链接。以下是代码,请参考,随意选用。(本文小白,几乎无编程经验,若有问题请询问本动作作者大神)

var annotationID="";

var pdfitem=""

var myitem=""

if(Zotero_Tabs._selectedID!= 'zotero-pane'){

pdfitem = Zotero.Items.get(Zotero.Reader.getByTabID(Zotero_Tabs._selectedID).itemID)

myitem=Zotero.Items.get(pdfitem.parentItemID);

var div=Zotero.Reader.getByTabID(Zotero_Tabs._selectedID)._iframeWindow.document.querySelector('#annotations>div.annotation.selected');

if(!div){

return '<a href=zotero://select/items/_'+myitem.getField("key")+'>'+myitem.getCreators()[0].lastName+','+myitem.getField('date').substring(0,4)+'</a>';

}

annotationID=div.getAttribute("data-sidebar-annotation-id");

if(!annotationID){

return '<a href=zotero://select/items/_'+myitem.getField("key")+'>'+myitem.getCreators()[0].lastName+','+myitem.getField('date').substring(0,4)+'</a>';

}

} else {

myitem=Zotero.getActiveZoteroPane().getSelectedItems()[0];

return '<a href=zotero://select/items/_'+myitem.getField("key")+'>'+myitem.getCreators()[0].lastName+','+myitem.getField('date').substring(0,4)+'</a>';

}


var annotation=Zotero.Items.getByLibraryAndKey(Zotero.Libraries.userLibraryID,annotationID.replace("annotation-",""));

if(annotation.annotationType=="highlight"){

let page=JSON.parse(annotation.annotationPosition).pageIndex+1;

return `${annotation.annotationText}<br/>--✏️注释:${annotation.annotationComment} (<a href="zotero://open-pdf/library/items/${annotation.parentItem.key}?page=${page}&annotation=${annotation.key}">${annotation.parentItem.parentItem.getCreators()[0].lastName},${annotation.parentItem.parentItem.getField('date').substring(0,4)}</a>)`;


} else if(annotation.annotationType=="image"){

let page=JSON.parse(annotation.annotationPosition).pageIndex+1;

let Comment=annotation.annotationComment;

return `<img src="${Zotero.Annotations.getCacheImagePath(annotation)}"></img><br/>--✏️注释:${Comment} (<a href="zotero://open-pdf/library/items/${annotation.parentItem.key}?page=${page}&annotation=${annotation.key}">${annotation.parentItem.parentItem.getCreators()[0].lastName},${annotation.parentItem.parentItem.getField('date').substring(0,4)}</a>)`;

}

Evil_Becky 回复 wenbocn 2023-01-25 23:45 :

你好,我也想实现你说的[未选择标注时可以复制条目链接]功能,想问问这些代码具体是加在原动作js代码的哪一部分呀(本人小白)?提前感谢~

wenbocn 回复 Evil_Becky 2023-01-26 08:25 :

替换全部的js代码

wenbocn 回复 Evil_Becky 2023-01-26 08:45 :

特殊格式的日期可能会截取的不正确,如果需要可以使用原作者的Zotero.Date.strToDate(item.getField("date")).year替换日期代码部分

ttChen 回复 wenbocn 2023-01-26 23:38 :

代码自定义的非常棒,不过上面的代码有几处漏洞可能需要解决:(1)很多PDF文档没有父条目,这种情况会导致代码失败;(2)获取文献日期代码会出错,特别是中文文献;(3)表情符号✏️会导致一些笔记系统行距不一致;(4)有些笔记系统外面要加上<div>,把内容弄成一个整体,否则虚拟网页粘贴会导致显示不完整。

对了,新更新版本已把你上次提的“印象笔记图片不显示的问题解决了。

ttChen 最后更新于 2023-01-26 23:40
wenbocn 回复 ttChen 2023-01-27 08:31 :

赞!大神就是牛!谢谢

Evil_Becky 回复 wenbocn 2023-02-02 23:18 :

好的,已经看到动作更新啦~ 感谢po主和原作者~

回复主贴