Closed Geo123abc closed 5 months ago
首先非常感谢你提出如此详实的建议与方案!
extra
字段或其他位置保存“上次打开时间”,我认为没必要单独保存这个信息。目前open recent
功能是从文库所有条目的记录中统计出的,这基本能满足新功能的需求。展示列
与实体列
是什么属性actions-tags
插件,也没有让用户手动修改的必要感谢回复,
展示列
与实体列
这两个概念是我自定义的,如你所说,我对Zotero提供的API不太了解,我只是有一个大概的框架。
展示列
就是类似zotero style 的 remark
列、zotero translate 的titleTranslation
列、abstractTranslation
列,他们的数据是存储在extra
字段下面的一个关键词中,如果渲染到zotero主界面中,需要插件从extra
字段中分离出相关内容;实体列
是类似 zotero 信息面板中的DOI
、URL
等原生字段的列,这些列和extra
字段完全无关;对于使用乙B方案添加新列
的功能我很期待,我目前能想到的是可能需要注意这几个参数:
extra
字段下面的子字段,比如remark
、titleTranslation
、abstractTranslation
,不能有空格。至于和其他插件的联动,等乙B做出来之后,我试一下我的方案是否可行,如果可行,到时候我再分享出来。
期待!
built-in column
与custom column
extra
字段新建列是用户自己触发的,当新建列的时候,需要用户自己填入一组相关信息,初步是下面三个参数:
显示的内容来源,比如
extra-titleTranslation
,那么这一列就是显示extra字段下titleTranslation:
对应的内容;如果填入zotero自有的字段,比如,title
、year
、language
、firstCreator
等。(当然这种情况一般是没有意义的,但是今天看到了这个内容,所以也许对有些用户是有用的)
至于算法实现,那就是我的盲区了,可能可以从 zotero translate 源代码中查找titleTranslation
列、abstractTranslation
列的实现方法,照猫画虎。
使用 zotero-actions-tags 解决,参考如下:
Event: Main Window Load Operation: Script
const registeredDataKey = await Zotero.ItemTreeManager.registerColumns({
dataKey: 'openedTime',
label: 'Opened Time',
pluginID: 'zoterotag@euclpts.com',
dataProvider: (item, dataKey) => {
return Zotero.PDFTranslate.data.ztoolkit.ExtraField.getExtraField(item, 'titleTranslation');
},
});
重启zotero生效
感谢 @volatile-static
历史记录功能,或者,自定义列?
模仿浏览器的 history 或者新建列,做一个更好的 open recent
方案甲,类似 chartero 的 library overview 界面:
打开PDF 的时候,查询历史记录中是否有这个条目,
点击open recent,打开一个类似 谷歌浏览器history 的 tab 界面
方案乙,自定义一个新的列到zotero主界面:
类似 zotero 条目自有的 Date Added、Modified可以排序,但是这两个参数是条目信息添加、更改的时间,而不是打开条目的时间,但是模仿这个功能,我们可以尝试着改造zotero的列:
使用zotero添加新列的API,插件提供添加新列的功能,比如添加一列“上次打开时间”,这个自定义列有两种方案:
方案B:一个类似zotero style 的
remark
列、titleTranslation:
列、abstractTranslation:
列的方案(推荐这种方案,即使以后离开zotero到其它软件,也方便,滑稽.jpg):extra
字段,形式是xxxx:内容
remark
列进行排序等操作。应该是插件读取extra
字段的remark:内容
,然后进行显示,只要设置好“新建列名”和“extra
字段的xxxx:
”的对应关系即可渲染;星标
、上次打开时间
、被引次数
......技术参考:
Zotero.PDFTranslate.data.ztoolkit.ExtraField.setExtraField(item, "abstractTranslation", abstractResult);
当打开条目时,添加当前时间到列“上次打开时间”,方案有两种:
zotero-actions-tags 脚本添加或者修改时间到列
上次打开时间
推荐方案乙的方案B,原因:
1+1>2
具体需要的插件功能
举一个具体的例子
插件新建一个zotero的列,名字是
usermark
,属性是展示列
,然后指定这一列关联extra
下面的abstractTranslation:
。usermark
这一列就会显示extra
下面的abstractTranslation:
对应的内容,两种修改方案;extra
中对应的内容修改列;remark
功能,既可以通过直接修改extra
中对应的内容修改列,也可以通过修改右侧条目信息栏的usermark
字段进行修改。这种需要自定义列在条目信息栏中也占据一个位置,可能会导致信息栏太长了。userclass
,属性是实体列
,这种列是直接存储内容的,不太推荐使用这种;这种必须需要自定义列在条目信息栏中也占据一个位置,提供修改的入口,会导致信息栏太长。展示列
比较简单,不会对条目产生实质改变,但是删除自定义实体列
会删除这一列中的内容,需要谨慎。综上,按照简单原则,只添加
展示列
功能即可,用户通过手动直接修改extra
中对应的内容修改列。应用场景:
userJournalAbbr
可以定义更多的、用户理解的期刊缩写,减少对zotero主面板的空间占用。比如美国国家科学院院刊
,全称Proceedings of the National Academy of Sciences of the United States of America
,“Journal Abbr”一般记为Proc. Natl. Acad. Sci.
,但是我们人的记忆一般称为PNAS
。