AllanChain / zotero-arxiv-workflow

Helper for managing arXiv papers in Zotero
GNU Affero General Public License v3.0
79 stars 1 forks source link
arxiv zotero zotero-plugin

arXiv Workflow for Zotero

GitHub release Using Zotero Plugin Template total downloads

This Zotero plugin addresses the pain when you store papers from arXiv and want to update your Zotero entry when they are published.

[!Warning] This plugin is in alpha stage and only suports Zotero 7!

I strongly recommend you to check the results manually after operations.

✨ Features

🤔 Why?

Easier workflow with arXiv paper!

🪐 How?

This plugin focusing on the following workflow:

The main logic of the merging process is demonstrated by the following plot:

Before:                                     After:
====================                        ====================
ItemID A (preprint)                         ItemID B
--------------------                        --------------------
Metadata A:                                 Metadata A:
Date added (A)                              Date added (B)
URL (A)                                     URL (A)
...                                         ...
--------------------               \        --------------------
PDF attachment a*         ----------\       PDF attachment a*
...                       ----------/       PDF attachment b
====================               /        Web Link attachment
ItemID B (published)                        ...
--------------------                        ====================
Metadata B
Date added (B)                              * means prefered PDF
URL (B)
...
--------------------
PDF attachment b*
...
====================

📸 Screenshots

Merge arXiv Prefer PDF
Screenshot of merge arXiv Screenshot of prefer PDF

🔧 Installation

Download zotero-arxiv-workflow.xpi from the release page. Firefox users need to right-click on the link and use "Save link as" instead of direct downloading it. After downloading, click "Tools" > "Plugins" in Zotero menu and drag the downloaded file into the dialog.

🎈 Explanation of each feature

Features can be disabled from the plugin settings, but this will not affect the JavaScript API.

🪢 Merge arXiv paper and the published one

The main logic of merging items is described above. A few points to emphasis:

JavaScript API ```typescript async Zotero.arXivWorkflow.merge( preprintItem: Zotero.Item, publishedItem: Zotero.Item, suppressWarn = false, ) ``` This function assumes that the first argument is an arXiv version and the second is the published one. Currently, no checks will be performed to ensure this. The function caller is responsible to make sure the `type` of items is correct. If `suppressWarn` is `true`, no confirmation dialog will popup if the title of two items are different.

🗃️ Prefer to open a specific PDF

Maybe you have merged some items manually before. Or maybe you just want to change the default PDF to open. Either case, you will find the "Prefer PDF" feature useful. To use this feature, select (and only select) the PDF you want to open by default, right click, and select "Prefer this PDF".

Under the hood, this plugin does something "dirty". That is because Zotero does not have the functionality of setting the default PDF to open. It determines the PDF to open by checking and sorting by: - The attachment is a PDF - The URL field of the PDF matches the URL of the parent item - `dateAdded` of the PDF Or in SQL: ```sql ORDER BY contentType='application/pdf' DESC, url=? DESC, dateAdded ASC ``` Therefore, to make Zotero perfer a specific PDF, this plugin 1. sets URL field of the PDF attachment the same as that of parent item 2. sets the `dateAdded` field to be the oldest among all PDFs of parent item
JavaScript API ```typescript async Zotero.arXivWorkflow.preferPDF( selectedAttachment: Zotero.Item ) ``` This function assumes that the argument is a PDF attachment. Currently, no checks will be performed to ensure this. The function caller is responsible to perform the checks.

📄 Search for updated version of an arXiv paper

If you have a preprint item for the arXiv paper, and you want to find if it has been published on journals or updated on arXiv, and then update the information, you can right click on the preprint item and select "Update arXiv paper". This will search:

  1. Published versions by trying:
    1. arXiv for the "Related DOI" field, which may be updated if the paper got published
    2. Semantic Scholar API
  2. If no published version found, the plugin will search arXiv for updated versions

[!Note]

It is not trivial to correctly find the published version. If it fails, you'd better add the journal article item manually and use the merge feature this plugin provides.

If a published version is found, a new item will be created automatically and the published PDF will be downloaded. If you do not have access to the journal PDFs, you can disable downloading PDF from settings, and just update the metadata. After that, the preprint item and the newly created journal item will be merged with the same logic as mentioned earlier.

JavaScript API ```typescript async Zotero.arXivWorkflow.arXivUpdate( preprintItem: Zotero.Item ) ``` This function assumes that the argument is an arXiv item, and no checks will be performed to ensure this. The function caller is responsible to perform the checks.

🌐 Download latest PDF

[!Tip]

This feature requires journal subscription.

Say you have an arXiv paper PDF and import it into Zotero. Zotero finds that it has been published and uses the information from the published version. A few days later you might want to download the published version because it might be different from the arXiv one. With original Zotero, you have to open the journal URL, download the PDF, and add it as an attachment. With this plugin, it is as easy as right click and select "Download latest PDF".

JavaScript API ```typescript async Zotero.arXivWorkflow.updatePDF( journalItem: Zotero.Item ) ``` This function assumes that the argument is an journal item, and no checks will be performed to ensure this. The function caller is responsible to perform the checks. Under the hood, this just calls `Zotero.Attachments.addAvailablePDF` and limits the download source to DOI only.

💻 Development

This repo is created from the Zotero plugin template, please follow the quick start guide.

The following resources are also helpful: