271 Matching Annotations
  1. Jan 2022
    1. I've not seen any doing sessions on Obsidian or Research Rabbit yet, but many (college/university) libraries have group sessions, usually at the outset of quarters/semesters, that walk through the functions in citation managers like Zotero, etc. This might be a useful way of offloading some of the teaching of the technology as well as helping to make it more commonplace across institutions.

    2. https://danallosso.substack.com/p/three-basic-elements-of-taking-notes

      Allosso outlines a bit about how he dovetails Research Rabbit (discovery), Obsidian (writing, linking), and Zotero (citations, reading).

    1. adamsmith October 15, 2018 Add Item by Identifier will work for any DOI registered in Crossref or a half-dozen other DOI registrars Really? I thought we currently "just" covered CrossRef, DataCite, and Airiti? - which does still mean it almost always works; that's probably 95%+ of active DOIs, but if there's code already that covers others, that'd be good to know as I was just going to put some work towards that. dstillman October 15, 2018 We also have DOI translators for EIDR and mEDRA.
      • DOI agencies
      • Zotero probes them, when search for a DOI
    1. HughP commented on Sep 26, 2018 • edited I feel a bit foolish, but yes there is a Preference Pane. I found it now. Note that Zotfile puts menu item in the Tools menu for the preference. This was where I was looking, and therefore didn't see it.
      • TOOLS MENU: doesnt appear
      • PLUGINS: dosnt exist Preferences button!!!
    1. Work{institution#/definitions/WorkInstitutionWorkInstitution{...}indexed*#/definitions/DateDate{...}posted#/definitions/DatePartsDateParts{...}publisher-locationstringupdate-to[...]standards-body[...]edition-numberstringgroup-title[...]reference-count*integer($int64)publisher*stringissuestringisbn-type[...]license[...]funder[...]content-domain*#/definitions/WorkDomainWorkDomain{...}chair[...]short-container-titlestringaccepted#/definitions/DatePartsDateParts{...}content-updated#/definitions/DatePartsDateParts{...}published-print#/definitions/DatePartsDateParts{...}abstractstringDOI*stringThe DOI identifier associated with the work type*stringcreated*#/definitions/DateDate{...}approved#/definitions/DatePartsDateParts{...}pagestringupdate-policystringsource*stringis-referenced-by-count*integer($int64)title*[...]prefix*stringvolumestringclinical-trial-number[...]author*[...]member*stringcontent-created#/definitions/DatePartsDateParts{...}published-online#/definitions/DatePartsDateParts{...}reference#/definitions/ReferenceReference{...}container-title[...]review#/definitions/WorkReviewWorkReview{...}original-title[...]languagestringlink[...]deposited*#/definitions/DateDate{...}score*integer($int64)degreestringsubtitle[...]translator[...]free-to-read#/definitions/WorkFreeToReadWorkFreeToRead{...}editor[...]component-numberstringshort-title[...]issued*#/definitions/DatePartsDateParts{...}ISBN[...]references-count*integer($int64)part-numberstringjournal-issue#/definitions/WorkJournalIssueWorkJournalIssue{...}alternative-id[...]URL*stringarchive[...]relation#/definitions/WorkRelationWorkRelation{...}ISSN[...]issn-type[...]subject[...]published-other#/definitions/DatePartsDateParts{...}published#/definitions/DatePartsDateParts{...}assertion[...]subtypestringarticle-numberstring}
      • SEE: FIELDS
      • COMPARE: with Zotero fields
    1. Tip 8 You can click the DOI and URL field labels to open the field link:
      • OK: click on Label
    2. Tip 5 You can convert the contents of the "Title" and "Publisher" fields to either sentence or title case by right-clicking the field and using the Transform Text menu.
      • CASE: Title or Sentence
    3. Tip 3 To see the number of items in the selected library or collection, click an item in the middle column and use the Select All shortcut:  Command + A on Mac OS X or Control + A on Windows and Linux  A count will appear in the right column:
      • SELECT ALL: "CTRL" + "a"
    4. "Control" key on Windows
    5. Tip 2 Press "Shift" and “+” (plus) on the keyboard within a collections list or items list to expand all attachments, and “-” (minus) to collapse them.
      • ME: ONLY with "+"/"-" keys, WITHOUT "Shift"
    1. Questions Still have questions? Check the following FAQ entries, or, if these don’t answer your question, use the Zotero forums: Can I use Zotero in one language and create bibliographies in another? DOI format in APA style Does Zotero support label/authorship trigraph styles, like [ddb98]? How can subsequent occurences of the same author replaced by a fixed term/symbol? How do I prevent title casing of non-English titles in bibliographies? How do I use rich text formatting, like italics and sub/superscript, in titles? How do you cite a secondary source in Zotero? How does Zotero parse things in the name fields? I need to use Chicago style. Which of the three versions that come with Zotero should I use? I'm the publisher/editor of a journal. What can I do to have Zotero support our style? Journal Abbreviations Missing Italics (or Italics-Only) in Word Bibliographies References appear in the wrong font in Word/LibreOffice Standard Citation Styles What are these DOIs doing in my bibliography? What is the official Harvard style? Why do some citations include first names or initials, and how can I prevent this from happening? Why don't titles show up in sentence case in bibliographies? Why isn't the first letter of a subtitle in uppercase in bibliographies?
      • LINKS to Zotero doc!
      • GOOD!
    2. You can also install CSL styles (with a “.csl” extension) from local files on your computer (e.g., styles that you edit yourself or that you download from another website). In the Zotero Style Manager, click the '+' button, then find the style file on your computer.
      • CSL styles
    1. Zotero currently uses the title, DOI, and ISBN fields to determine duplicates. If these fields match (or have no information entered), Zotero will also compare the years of publication and author/creator lists (if at least one author last name plus first initial matches) to determine duplicates.
      • Merge them
    1. Debug Output Logging: To help diagnose a problem, the Zotero developers may ask you to submit a Debug Log ID. This is different from an Error Report ID above. To submit a debug log, check “Enable Logging”, then complete the sequence of steps neeeded to produce your error. Then, click “Submit Debug Report” and post the Debug ID number to the Zotero forums. Try to avoid performing unrelated actions when making a debug log.
      • DEBUG ID in Forums
    2. Automatic File Importing: By default, the Zotero Connector will offer to import RIS, BibTeX, and Refer/BibIX bibliographic files when you open them in your browswer. You can disable this feature or manage the sites from which data is imported here.
      • ???
    3. Save to Zotero.org: When the Zotero desktop client is closed, the Zotero Connector will save directly to the zotero.org servers. These settings let you reauthorize your broswer to save to your zotero.org account or clear your account credentials. You can also control whether PDF attachments and web page snapshots are automatically saved when importing to zotero.org.
      • ZOTERO LIB
    1. the-solipsist commented on Mar 9, 2019 • edited Unfortunately, %g adds a ,, which doesn't work in those cases where there is not first name / surname (for instance, institutional authors). In those cases, %g ends up adding a comma in the end of the name. Additionally, %g provides a "Surname, Firstname" format, and there is no expression for "Firstname Surname", which some would prefer.
      • PROBLEM
    2. QingQYang commented on Aug 11, 2015 I have solved this problem by adding wildcard %g for author's full name as the style of Zotero's two fields display. Please check the pull request #193, thanks.
      • %g works!
    1. target
      • TARGET: for Search translators???
      • no sense
    2. Search translators: can look up and retrieve item metadata when supplied with a standard identifier, like a PubMed ID (PMID) or DOI.
      • OK, IMPORTANT:
      • "official" arXiv translator: espera campo { arXiv: }
    3. dataMode For import translators, this sets the form in which the input data is presented to the translator. If set to “rdf/xml”, Zotero will parse the input as XML and expose the data through the Zotero.RDF object. If “xml/dom”, Zotero will expose the data through the function Zotero.getXML().
      • IMPORTANT to import target: xml
    4. browserSupport A string containing one or more of the letters g, c, s, i, representing the connectors that the translator can be run in – Gecko (Firefox), Chrome, Safari, Internet Explorer, respectively. b indicates support for the Bookmarklet (zotero-dev thread) and v indicates support for the translation-server. For more information, see Connectors. Warning: Compatible with Zotero 2.1.9 and later only.
      • browserSupport : [2021-12] it seems obsolete (?)
    5. translatorType An integer specifying to which type(s) the translator belongs. The value is the sum of the values assigned to each type: import (1), export (2), web (4) and search (8). E.g. the value of translatorType is 2 for an export translator, and 13 for a search/web/import translator, because 13=8+4+1.
      • import + export = 1+2=3
      • MUST READ
      • metadata tags
      • functions
    1. open a specific profile from the command line with the -p flag (e.g., -p Work),

      -OK: shortcut

    2. To create an additional profile, start Zotero from the command line and pass the -P flag to open the Profile Manager:
      • OK, as in Firefox
      • zotero.exe -P
    1. acortinois April 16, 2021 Well, it looks like we all need multiple windows but this forum has been active for four years and nothing seems to have changed... :)
      • OK
    1. Old papers in archives where the archive name matches the primary subject classification (e.g. hep-th) do not have the square brackets with primary subject classification
      • OK, exception in zotero translator
    1. adamsmith 20 days ago DOI: in extra works for citations. We'll get a preprint item type and DOI added to all item types, but in the meantime that'll just work
      • WAINTING for this PREPRINT type
    2. dmilton 20 days ago The problem with using "Report" type for preprints is that it does not keep the doi -- only if it is imported as a journal article does the doi get saved. Please add doi to the "Report" fields -- I find myself having to change to type "Journal Article" to perserve the doi.
      • HERE!
      • THIS IS "THE" REASON to type=journal fro arxiv
      • Workaround: DOI: in Extra
    1. When I said "migrated automatically", I was referring to the item becoming Zotero Preprint items when that type is added in the future.
    2. bwiernik June 18, 2021 Zotero will get a Preprint type in an upcoming version. For now, the appropriate way to enter them is as a Report with this at the top of Extra:Type: articleThat will be migrated automatically to Preprint when the type is added.
      • HERE!
      • upcoming??? WHEN???
    3. stared June 18, 2021 This function is useful for numerous reasons. Primarily for listing preprints (e.g. arXiv, biorXiv) and PubMed codes.See "eprint" as officially listed in an arXiv instruction (https://arxiv.org/help/hypertex/bibstyles) and Getting DOI / arXiv links with BibTeX (https://www.math.cmu.edu/~gautam/sj/blog/20171114-bibtex-doi.html), as well as some older approaches e.g. mine for giving link to arXiv for Mendeley exports https://gist.github.com/stared/5473014.Yes, it is a pity that proprietary Mendeley owned by Elsevier provides better support for open archives.
      • SEE
    4. emilianoeheyns September 27, 2020 Since Better BibLaTeX is already omitting Zotero's Publication field for arXiv preprints, it should probably export as '@misc' or '@online', not '@article'. That is a good point. Could you open an issue for it on BBTs github tracker? Therefore, a BBT postscript should better not depend on Publication being empty or on the presence of an arXiv ID If BBT detected an arXiv entry in any way you, in the postscript item will have an attribute item.arXiv which looks like { id: <arXiv ID>, category: <arXiv category, if found> }
      • BBT
      • If BBT detected an arXiv entry in any way you, in the postscript item will have an attribute item.arXiv which looks like { id: <arXiv ID>, category: <arXiv category, if found> }
    5. adamsmith September 23, 2020 Here's the history on why we're importing arXiv preprints as journal articles:https://github.com/zotero/translators/issues/616If things has changed (e.g. if sites like ADS and INSPIRE are handling this differently now) we can change this on the import end of things, too, but it's really not so clear cut as to say it's wrong.
      • SEE
    6. emilianoeheyns September 23, 2020 The bibtex entry recommended by arXiv for example, asks for preprint items to be @misc Where do they ask this? If this is how arXiv items should appear generally, I could adjust BBT to change the entry type. Right now, BBT will add the eprint fields if you either: Set the Library Catalog to arXiv or arXiv.org and the Journal name to the arXiv ID Add arXiv: <arXiv ID> to the extra field on a line of its own
      • BBT:
      • example: journaltitle = {{arXiv}}, shortjournal = {{arXiv}-2005.14432v1 [quant-ph]}, eprinttype = {arxiv}, eprint = {2005.14432v1 [quant-ph]},
    7. adamsmith September 23, 2020 There will almost certainly be a Zotero preprint item type added the next time any item types are added. No ETA, but the hope is that this isn't too far off (i.e. months not years)
      • now: 2022-01: no field
    1. tdegeus November 2, 2021 +100 on this. It would be great though to simply have a field arxivid (that could be potentially activated on request). This would catch the case that the same article is on multiple preprint servers (which could happen I guess). dougwyu November 27, 2021 yes please add a preprint category. biologists use BioRXiv a lot!, and i have to hand-edit every downloaded article.
      • many request, but no response!
    1. dstillman October 11, 2018 edited October 11, 2018 I've added support for the former in the latest beta.zotero://select/library/collections/:collectionKeyzotero://select/groups/:groupID/collections/collectionKey
      • HOWTO use?
    1. emilianoeheyns
      • emilianoeheyns
      • BBT author
    2. adamsmith May 8, 2018 I don't think that's possible for technical reasons at this time because the citekey is generated & stored by the BetterBibTeX extension and not Zotero itself. It's likely going to be possible in the future. bwiernik May 8, 2018 Yes, the BBT developer had to disable citekey searching because it was interfering with other parts of Zotero. You can show the citekey as a column in the center pane and sort on that.
      • In 2018, and now? [2022-01]
    1. the collections pane supports find-as-you-type, so if you want to switch to a given library or collection you can press Cmd-Shift-L/Ctrl-Shift-L to highlight the collections pane and then start typing the name of the library or collection to select it. (If a library was collapsed and you wanted to get to a collection, you'd need to type the name of the library and then press right-arrow or + to expand collections (depending on how nested the one you were looking for was) and then type the collection name.)
      • CRTL + SHIFT + L
      • selects as typing

      • REQUEST: Filter PANE! (like Calibre or Qiqqa)

        • Filter for: author, Pub, year, tags, etc
    1. identifiers (one on each line). Once you've typed all the identifiers, press Shift+Enter/Return to import all the items at once. You can also paste a list of multiple identifiers (each on a separate line), then press Shift+Enter/Return to finish. Zotero uses the following databases for looking up item metadata: Library of Congress and WorldCat for ISBNs, CrossRef for DOIs, NCBI PubMed for PubMed IDs, and arXiv.org for arXiv IDs.
      • ZOTERO: add item (magic icon)
      • use Search-type translators?
        • YES!: Search translators MUST detect fields ID: {ISBN, DOI, arXiv, etc}
    1. doGet()/doPost() return raw text, which is useful for anything retrieving BibTeX/RIS/etc. It would be nice to be able to just do var ris = await request(url);.
      • ok
      • ZOTERO translators
    1. Try something like this (untested): var s=document.createElement('script'); s.type = "text/javascript"; s.src = "test.js"; document.body.appendChild(s); ShareShare a link to this answer Copy linkCC BY-SA 2.5 Follow Follow this answer to receive notifications answered Jul 5 '10 at 5:59 Dagg NabbitDagg Nabbit 70.9k1818 gold badges104104 silver badges139139 bronze badges 1 I modified it a bit: var s = w.document.createElement("script"); s.type = "text/javascript"; s.src = "test.js"; w.document.getElementsByTagName("HEAD")[0].appendChild(s); And it does appear to work properly in IE8 on Windows 7 (as well as other browsers). I still think IE has a bug that my original code doesn't work, but this should work as a work-around. – Jennifer Grucza Jul 6 '10 at 22:15
      • IT WORKED!
      • var w = window; var s = w.document.createElement("script"); s.type = "text/javascript"; s.src = "./file_to_include.js"; w.document.getElementsByTagName("HEAD")[0].appendChild(s);
    1. minosniu on Jan 28, 2019 | parent | prev | next [–] Second this. I use zotfile to relocate all my PDFs into a single folder, which is Dropbox-synced. This works like a breeze for 2000+ and mounting papers.
      • SEE
    2. dstillman on Jan 23, 2019 | root | parent | prev | next [–] > The lack of developers and thus slow pace of improvement [...] we are reliant on one or two volunteers to improve the productI'm not sure why you have that impression. Zotero has amazing, invaluable volunteers, but there's a paid, full-time dev team working on Zotero every day. In the last year, we've added:- Google Docs integration [1]- Unpaywall integration [2]- A new, greatly improved PDF recognition system [3]- Faster citing in large documents [3]- A much more powerful saving interface [4]- Mendeley import...- ZoteroBib, a free web service for generating bibliographies [5]- A barcode scanner for iOS [6]- Regular updates and bug fixes [7][1] https://www.zotero.org/blog/google-docs-integration/[2] https://www.zotero.org/blog/improved-pdf-retrieval-with-unpa...[3] https://www.zotero.org/blog/zotero-5-0-36/[4] https://twitter.com/zotero/status/991052142717886464[5] https://www.zotero.org/blog/introducing-zoterobib/[6] https://www.zotero.org/blog/scan-books-into-zotero-from-your...[7] https://www.zotero.org/support/changelog(Disclosure: Zotero developer)


    1. 1 Zotero comparison is with Zotero 2.1
      • cuidado!
      • vs Zotero 5 (?)
    1. I would be more than happy to add an importer into Qiqqa from Zotero. I guess the simplest route could be to augment the zotero bibtex output format to include any attached files (much like Mendeley does in the file={} field).
      • I'll do a custom export translator
      • SEE
    1. Automatic export To export a library, group or collection, right-click on it in the left Zotero pane and choose “Export Library…” or “Export Collection…”. With BBT’s export translators (e.g., “Better BibTeX”), checking the Keep updated option will register the export for automation. After you’ve completed the current export, any changes to the collection or library will trigger an automatic re-export to update the file. You can review/remove exports from the BBT preferences. While I’ve gone to some lengths to make sure performance is OK, don’t go overboard with the number of auto-exports you have going. Also, exporting only targeted selections over your whole library will get you better performance. You can set up separate exports for separate papers for example if you have set up a collection for each. Managing auto-exports After you’ve set up an auto-export using an Keep updated export, you can manage your auto-exports in the BBT preferences under the Automatic exports tab. There, you can remove auto-export, change settings on them, or remove them. You cannot add new auto-exports from here, that can only be done by initiating an export.
      • TIP: use with Qiqqa, keep qiqqa.bib updated from zotero
    1. dstillman April 22, 2020 Yes, CSL-JSON is specifically for citations and doesn't know anything about attachments. emilianoeheyns April 23, 2020 BBT JSON does know about attachments. It's mostly just a dump of the items as they're handed to translators with cleanup. I use it in my test framework, but when BBT is installed it's available as any other import/export format.
      • SEE
    1. jwright8 August 19, 2018 adamsmith, I added Zutilo to Zotero stand alone (I am not using Firefox). I was able to find the location of my attachments by right clicking on items > Zutilo > Show Attachment Paths. Now I need to do the batch change or follow dstillman's instructions: "set up a Linked Attachment Base Directory in the Advanced → Files and Folders pane of the Zotero preferences, move the directory, and then update the base directory."
      • TEST
    2. Have a look at the Zutilo add-on, which can show you the current path Zotero is looking and also batch-change those paths.https://github.com/willsALMANJ/Zutilo
      • SEE: Zutilo
    1. adamsmith May 19, 2013 So, the argument for the status quo is that the working paper on arxiv is a separate publication from the journal article it ends up published as. That's why it should be saved and - where it applies - cited differently. In other words, taking bibliographic data seriously, the DOI does _not_ apply to the arxiv paper and should not be saved with it. That's in line with what we do with other working paper repositories such as SSRN.
      • I THINK SO
      • DIFFERENT zotero items for
      • arxiv
        • different item for each version!!!
      • doi publisher
      • Each item with its PDF!!!
      • DIFFERENT Citations!!!
    2. aurimas May 19, 2013 Looks like that was an intentional decision to put arXiv identifier in the publication field
      • BAD IDEA!
      • I have changed "my" arxiv translator:
      • Publication: arXiv (generic, for order by Pub)
      • Abbrv: arXiv-id [class]

      • using Zotfile to rename PDF, using Abbrv

    1. karnesky commented on Sep 1, 2013 A few things to note here: arXiv does have preprints, but a lot of these are linked to journal articles & some people use it as a reprint server. If an arXiv record has a DOI, I would suggest (strongly) that it should be typed as a journal article. We may even just use the ADS link, which seems to have a great BibTeX-formatted record for most eprints (though I'm torn on doing that). NASA ADS and most others classify arXiv eprints as journal articles anyway. Zotero will import any of those as journal articles, so there might be a case to import all arXiv eprints as if they were journal articles
      • ok
    1. If/when we have a proper field for arXiv IDs in Zotero (which I believe has a very good chance of happening), we can handle this a lot more elegantly, of course, both on import and on export.
      • NOW: 2022-01-02, and counting...
    2. adamsmith November 17, 2013 The problem is that Zotero isn't just a bib(la)tex front-end and those field mappings don't make a huge amount of sense in Zotero - Archive and Loc. in Archive are at least somewhat plausible (Call number makes no sense),
      • ?
    3. However these fields are not filled automatically by zotero when importing from arxiv, instead a Report is created with all three fields (Archive, Loc. in Archive, Call number) empty
      • OK: doesnt work, because:
      • arxiv.js import doesnt fill these fields
      • ADS.js import, doesnt
    4. Further, by trial and error I found that setting the Journal article fields as follows: Archive: arxiv Loc. in Archive: 1234.1231 Call number: hep-ph results in zotero exporting a biblatex file containing: eprinttype = {arxiv}, eprint = {1234.1231}, eprintclass = {hep-ph},
      • TIP: SEE BibLATex.js translator:
      • if (item.archive == "arXiv" || item.archive == "arxiv") {
        writeField("eprinttype", "arxiv");
        writeField("eprint", item.archiveLocation);
        if (item.callNumber) { // assume call number is used for arxiv class
            writeField("eprintclass", item.callNumber);
    5. I don't see how we can support the bibtex extension fields (archivePrefix and primaryClass)
      • ZOTERO Devs: dont add custom fields
    6. I see that the field "Loc. in Arxive" is already exported as "eprint" when using BibLatex
      • IMPORTANT: BibLateX
      • In Zotero, only exists EXPORT translator, not import!
      • use BibTex translator: type=3=import+export
    1. Zotero.configure() and Zotero.displayOptions() replaced by configOptions and displayOptions Zotero.configure() and Zotero.displayOptions() no longer exist. Instead, translators should specify config and display options in the metadata block at the top of the translator, e.g. { "translatorID":"32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7", [...] "configOptions":{"dataMode":"rdf/xml"}, "displayOptions":{"exportNotes":true}, "lastUpdated":"2011-01-11 04:31:00" } "dataMode":"block" and "dataMode":"line" are deprecated It is no longer necessary to specify “dataMode”:“block” or “dataMode”:“line”. If Zotero.read() is passed a numeric value, it reads a specified number of bytes; otherwise, it reads a full line.
      • IMPORTANT: If Zotero.read() is passed a numeric value, it reads a specified number of bytes; otherwise, it reads a full line.
      • read() == una linea
    1. translator.setSearch(item) For search translators. Sets the skeleton item object the translator will use for its search. translator.setString(string) For import translators. Sets the string that the translator will import from. translator.setDocument(document) For web translators. Sets the document that the translator will use.
      • SEE
      • funciones para asignar PARAMETROS al tipo de translator reutilizado
    2. record.leader = "leader goes here"; record.addField(code, indicator, content);
    3. Calling a translator using ''getTranslators'' This code, based on the “COinS.js” code, calls getTranslators() to identify which search translators can make a complete item out of the basic template information already present. Note that translate() is called from within the event handler. Analogous logic could be used to get the right import translator for incoming metadata in an unknown format. var search = Zotero.loadTranslator("search"); search.setHandler("translators", function(obj, translators) { search.setTranslator(translators); search.translate(); }); search.setSearch(item); // look for translators for given item search.getTranslators();
      • general, depends on 'detectSearch'
      • BUT: if SEVERAL translators detected, WHICH translate?
    4. Calling a translator by UUID This is the most common way to use another translator– simply specify the translator type and the UUID of the desired translator. In this case, the RIS translator is being called. var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate();
      • especific, by UUID
    5. Calling other translators Web translators can call other translators to parse metadata provided in a standard format with the help of existing import translators, or to augment incomplete data with the help of search translators. There are several ways of invoking other translators.
    6. Batch Saving You will often need to make additional requests to fetch all the metadata needed, either to make multiple items, or to get additional information on a single item. The most common and reliable way to make such requests is with the utility functions Zotero.Utilities.doGet, Zotero.Utilities.doPost, and Zotero.Utilities.processDocuments. Zotero.Utilities.doGet(url, callback, onDone, charset) sends a GET request to the specified URL or to each in an array of URLs, and then calls function callback with three arguments: response string, response object, and the URL. This function is frequently used to fetch standard representations of items in formats like RIS and BibTeX. The function onDone is called when the input URLs have all been processed. The optional charset argument forces the response to be interpreted in the specified character set. Zotero.Utilities.doPost(url, postdata, callback, headers, charset) sends a POST request to the specified URL (not an array), with the POST string defined in postdata and headers set as defined in headers associative array (optional), and then calls function callback with two arguments: response string, and the response object. The optional charset argument forces the response to be interpreted in the specified character set. Zotero.Utilities.processDocuments(url, callback, onDone, charset) sends a GET request to the specified URL or to each in an array of URLs, and then calls the function callback with a single argument, the DOM document object. Note: The response objects passed to the callbacks above are described in detail in the MDC Documentation. Zotero.Utilities.processAsync(sets, callbacks, onDone) can be used from translators to make it easier to correctly chain sets of asynchronous callbacks, since many translators that require multiple callbacks do it incorrectly [text from commit message, r4262]
      • SEE: call "chain"
      • doGet() and processDocuments() admit [urls]
      • doPost() only admits "url"

      • processAsync(): NOT DOCUMENTED!

    7. for each item, an item ID and label should be stored in the object as a property/value pair.
      • EXAMPLE (arXiv):
      • items[row.id] = row.title;
      • where row: {
            title: title,
            id: id
    8. Passing the object to the Zotero.selectItems function will trigger the selection window, and the function passed as the second argument will receive an object with the selected items, as in this example: Zotero.selectItems(getSearchResults(doc, false), function (items) { if (!items) return; ZU.processDocuments(Object.keys(items), scrape); }); Here, Zotero.selectItems(..) is called with an anonymous function as the callback. As in many translators, the selected items are simply loaded into an array and passed off to a processing function that makes requests for each of them.
    9. Saving Multiple Items Some webpages, such as those showing search results or the index of a journal issue, list multiple items. For these pages, web translators can be written to a) allow the user to select one or more items and b) batch save the selected items to the user's Zotero library. Item Selection To present the user with a selection window that shows all the items that have been found on the webpage, a JavaScript object should be created. Then, for each item, an item ID and label should be stored in the object as a property/value pair. The item ID is used internally by the translator, and can be a URL, DOI, or any other identifier, whereas the label is shown to the user (this will usually be the item's title). Passing the object to the Zotero.selectItems function will trigger the selection window, and the function passed as the second argument will receive an object with the selected items, as in this example: Zotero.selectItems(getSearchResults(doc, false), function (items) { if (!items) return; ZU.processDocuments(Object.keys(items), scrape); }); Here, Zotero.selectItems(..) is called with an anonymous function as the callback. As in many translators, the selected items are simply loaded into an array and passed off to a processing function that makes requests for each of them. Batch Saving You will often need to make additional requests to fetch all the metadata needed, either to make multiple items, or to get additional information on a single item. The most common and reliable way to make such requests is with the utility functions Zotero.Utilities.doGet, Zotero.Utilities.doPost, and Zotero.Utilities.processDocuments. Zotero.Utilities.doGet(url, callback, onDone, charset) sends a GET request to the specified URL or to each in an array of URLs, and then calls function callback with three arguments: response string, response object, and the URL. This function is frequently used to fetch standard representations of items in formats like RIS and BibTeX. The function onDone is called when the input URLs have all been processed. The optional charset argument forces the response to be interpreted in the specified character set. Zotero.Utilities.doPost(url, postdata, callback, headers, charset) sends a POST request to the specified URL (not an array), with the POST string defined in postdata and headers set as defined in headers associative array (optional), and then calls function callback with two arguments: response string, and the response object. The optional charset argument forces the response to be interpreted in the specified character set. Zotero.Utilities.processDocuments(url, callback, onDone, charset) sends a GET request to the specified URL or to each in an array of URLs, and then calls the function callback with a single argument, the DOM document object. Note: The response objects passed to the callbacks above are described in detail in the MDC Documentation. Zotero.Utilities.processAsync(sets, callbacks, onDone) can be used from translators to make it easier to correctly chain sets of asynchronous callbacks, since many translators that require multiple callbacks do it incorrectly [text from commit message, r4262]
      • Item selection:
        • each item: only ID+Title; no permite mas: eg: "tipo"
    10. Notes Notes are saved similarly to attachments. The content of the note, which should consist of a string, should be stored in the note property of the item's notes property. E.g.: let bbCite = "Bluebook citation: " + bbCite + "."; newItem.notes.push({ note: bbCite });
      • WARNING: notes are stored as HTML code
      • use ZU.text2html
      • use
         + text + 
        , to avoid \n missing
    11. Zotero will automatically use proxied versions of attachment URLs returned from translators when the original page was proxied, which allows translators to construct and return attachment URLs without needing to know whether proxying is in use. However, some sites expect unproxied PDF URLs at all times, causing PDF downloads to potentially fail if requested via a proxy. If a PDF URL is extracted directly from the page, it's already a functioning link that's proxied or not as appropriate, and a translator should include proxy: false in the attachment metadata to indicate that further proxying should not be performed:
      • SEE
    12. In the very common case of saving the current page as an attachment, set document to the current document, so that Zotero doesn't have to make an additional request: newItem.attachments.push({ title: "Snapshot", document: doc });
      • TIP: Snapshots, save without call URL again
    1. scrape[edit] The scrape function is called to save a single item. It is the most interesting function to code in a translator. We first create a new item as returned by detectWeb and then store the metadata in the relevant fields of that item. Along with the metadata, attachments can be saved for an item. These attachments become available even when one is offline. In the function shown below, we make use of another translator called Embedded Metadata. We load this translator and it scrapes information from the meta tags of the web page, filling fields and reducing our work. We can always insert and update information of fields on top of what Embedded Metadata provided.function scrape(doc, url) { var translator = Zotero.loadTranslator('web'); // Embedded Metadata translator.setTranslator('951c027d-74ac-47d4-a107-9c3069ab7b48'); translator.setDocument(doc); translator.setHandler('itemDone', function (obj, item) { // Add data for fields that are not covered by Embedded Metadata item.section = "News"; // Add custom fields if required trans.addCustomFields({ 'twitter:description': 'abstractNote' }); item.complete(); }); translator.getTranslatorObject(function(trans) { // Adjust for multiple item types trans.itemType = "newspaperArticle"; trans.doWeb(doc, url); }); }
    2. Zotero.selectItems(getSearchResults(doc, false), function (items) { if (!items) { return true; } var articles = []; for (var i in items) { articles.push(i); } ZU.processDocuments(articles, scrape);
      • COMPARE with zotero.doc: link-annotation
      • code: annotation
      • evita paso intermedio, pasando las keys (DEBEN ser URLs): ZU.processDocuments(Object.keys(items), scrape);
    3. Generate test cases[edit] Once the code of a translator is prepared, it is recommended to create test cases. These test cases are run daily and help the community to figure out if a translator fails in future and needs any update or complete rewriting. We will generate test cases for MediaWiki translator through Scaffold. Open mediawiki in a new tab. Launch Scaffold and open the translator we have created. Open the "Testing" tab of Scaffold. We need to give a web page as input. For example, open citoid's page. Keeping this web page as the active tab, simply click on the "New Web" button. It will load the web page in the Input pane as a new unsaved test. Select the input entry and click the save button to have the output of test be saved as JSON data. Similarly lets create a test case for a search page. Open this link in a new tab as the active one and then click on "New Web". Once it is loaded, save it. You can see the saved test cases in the "Test" tab of Scaffold. For this search page, you can notice a JSON object as follows.var testCases = [ { "type": "web", "url": "https://www.mediawiki.org/w/index.php?search=Zotero+&title=Special:Search&go=Go&searchToken=2pwkmi9qkwlogcnknozyzpco1", "items": "multiple" } ]
      • SEE
    1. Generate testCases (with Scaffold).
    2. An overview of the currently installed translators, giving the option of running their tests, can be accessed by entering the following into the address bar: chrome://zotero/content/tools/testTranslators/testTranslators.html
      • URL NDF!
    3. In most cases, it is not necessary or desirable to write these tests by hand– they can and should be generated by the testing framework using Scaffold; see below.
      • HOWTO?
    1. htmlSpecialChars Function description https://www.zotero.org/trac/browser/extension/branches/1.0/chrome/content/zotero/xpcom/utilities.js#L153 Zotero.Utilities.prototype.htmlSpecialChars = function(str) @type String Escapes several predefined characters: & (ampersand) becomes &amp; “ (double quote) becomes &quot; ' (single quote) becomes &#039; < (less than) becomes &lt; > (greater than) becomes &gt; and <ZOTEROBREAK/> becomes <br/> <ZOTEROHELLIP> becomes &#8230;
      • HERE!
      • UTIL: htmlSpecialChars
    2. parseMarkup Function description https://www.zotero.org/trac/browser/extension/branches/1.0/chrome/content/zotero/xpcom/utilities.js#L206 Zotero.Utilities.prototype.parseMarkup = function(str) @return {Array} An array of objects with the following form: { type: 'text'|'link', text: “text content”, [ attributes: { key1: val [ , key2: val, …] } }</pre> Parses a text string for HTML/XUL markup and returns an array of parts. Currently only finds HTML links (<a> tags)
      • UTIL: parseMarkup
    1. Zotero.Translate/translators Added Zotero.Utilities.processAsync(sets, callbacks, onDone) – this can be used to make it easier to correctly chain sets of asynchronous callbacks
      • HOWTO? processAsync
    1. The functions Zotero.Utilities.HTTP.doGet and Zotero.Utilities.processDocuments run asynchronously. In order to allow them to complete before moving along, follow either function with Zotero.wait() and include Zotero.done() as the onDone in order to signal the translator that it has completed its asynchronous operations.
      • IMPORTANT:
      • BUT: wait() and done() EXAMPLES???
      • SEE: DEPRECATED annotation
    2. Don't forget to turn off debug logging
      • IDEA: if (BDG) Z.debug("log");
      • let DBG;
      • let DBG = "yes";
    3. use the debug log accessible through the Zotero preferences pane, under “advanced”.
      • ok
    1. zuphilip commented on Feb 2, 2018 • edited Here is a list of the most common used functions from Zotero.Utilities and Zotero: grep -E -o -h "(ZU|Zotero\.Utilities)\.[^\(]+\(" *.js | sort | uniq -c | sort -nr $ grep -E -o -h "(ZU|Zotero\.Utilities)\.[^\(]+\(" *.js | sort | uniq -c | sort -nr 1533 ZU.xpathText( 831 ZU.xpath( 382 ZU.trimInternal( 272 ZU.processDocuments( 201 ZU.cleanAuthor( 190 Zotero.Utilities.cleanAuthor( 155 Zotero.Utilities.processDocuments( 124 Zotero.Utilities.trimInternal( 98 ZU.doGet( 84 Zotero.Utilities.capitalizeTitle( 81 Zotero.Utilities.trim( 79 ZU.capitalizeTitle( 70 Zotero.Utilities.unescapeHTML( 53 Zotero.Utilities.HTTP.doGet( 47 ZU.strToISO( 30 ZU.unescapeHTML( 27 ZU.cleanISBN( 26 ZU.doPost( 24 ZU.trim( 24 ZU.cleanDOI( 24 Zotero.Utilities.superCleanString( 20 ZU.fieldIsValidForType( 17 Zotero.Utilities.cleanTags( 16 Zotero.Utilities.getItemArray( 14 ZU.cleanISSN( 14 Zotero.Utilities.doGet( 13 ZU.cleanTags( 13 Zotero.Utilities.xpathText( 13 Zotero.Utilities.xpath( 11 Zotero.Utilities.HTTP.doPost( 9 ZU.strToDate( 8 ZU.removeDiacritics( 7 ZU.lpad( 7 ZU.getItemArray( 6 ZU.HTTP.doGet( 6 Zotero.Utilities.strToDate( 5 ZU.superCleanString( 5 Zotero.Utilities.parseContextObject( 4 ZU.formatDate( 4 Zotero.Utilities.getVersion( 4 Zotero.Utilities.getCreatorsForType( 3 ZU.XRegExp( 3 ZU.parseContextObject( 3 ZU.itemTypeExists( 3 ZU.deepCopy( 2 ZU.XRegExp.replace( 2 ZU.quotemeta( 2 ZU.arrayDiff( 2 Zotero.Utilities.text2html( 2 Zotero.Utilities.strToISO( 2 Zotero.Utilities.lpad( 2 Zotero.Utilities.loadDocument( 2 Zotero.Utilities.itemTypeExists( 2 Zotero.Utilities.getLocalizedCreatorType( 2 Zotero.Utilities.createContextObject( 1 ZU.xpathText ( 1 ZU.itemToCSLJSON( 1 ZU.itemFromCSLJSON( 1 ZU.isEmpty( 1 ZU.getCreatorsForType( 1 ZU.doHead( 1 ZU.arrayUnique( 1 Zotero.Utilities.htmlSpecialChars( 1 Zotero.Utilities.getPageRange( 1 Zotero.Utilities.formatDate( 1 Zotero.Utilities.doPost( 1 Zotero.Utilities.composeDoc( grep -E -o -h "(Z|Zotero)\.[^\(\.]+\(" *.js | sort | uniq -c | sort -nr $ grep -E -o -h "(Z|Zotero)\.[^\(\.]+\(" *.js | sort | uniq -c | sort -nr 517 Z.debug( 426 Zotero.selectItems( 371 Zotero.debug( 351 Zotero.Item( 315 Zotero.loadTranslator( 117 Zotero.done( 99 Zotero.wait( 43 Zotero.write( 39 Zotero.read( 31 Z.selectItems( 21 Zotero.getOption( 17 Zotero.nextItem( 15 Z.monitorDOMChanges( 14 Z.Item( 13 Z.getHiddenPref( 7 Zotero.getXML( 5 Zotero.setCharacterSet( 5 Zotero.monitorDOMChanges( 5 Zotero.Collection( 3 Zotero.setProgress( 3 Zotero.nextCollection( 3 Zotero.getHiddenPref( 3 Z.loadTranslator( 2 Zotero.addOption( 2 Z.done( 1 Zotero.doGaleWeb( 1 Zotero.detectGaleWeb( 1 Z.write( 1 Z.wait( 1 Z.setProgress( 1 Z.read( 1 Z.nextItem( 1 Z.getXML( 1 Z.debug ( 1 Z._]*/( 1 Z. ( Thus, maybe we can concentrate on this and divide them into some groups, e.g. CSS path: text, attr xpath: ZU.xpath, ZU.xpathText call websites: ZU.doGet, ZU.processDocuments, ZU.doPost special cleaning functions: ZU.cleanAuthor, ZU.strToISO, ZU.cleanISBN, ZU.cleanDOI, ZU.cleanISSN clean text strings: ZU.trimInternal, ZU.capitalizeTitle, ZU.unescapeHTML, ZU.superCleanString, ZU.cleanTags, ZU.removeDiacritics debug: Z.debug specialized functions: Z.monitorDOMChanges, Z.selectItems, Z.loadTranslator, ...
      • VERY IMPORTANT: zotero "public" functions
    1. adamsmith September 8, 2017 OK -- your translators are coffeescript too, right? Or do you have a code snipet I could just copy over? emilianoeheyns September 8, 2017 They are at this moment; after the port I'm moving everything to ES6. Anyhow, BBT has externalised the bibtex parser to https://github.com/fiduswriter/biblatex-csl-converter (most of the work having been done by Johannes) for my import parsing, and it takes care of this in the parse phase. It's not as simple as copying a piece of the code, unfortunately.For the stock Zotero translators, wouldn't something like this do the trick? text.replace(/\n+/, function(match) { return match.length == 1 ? " " : "\n\n"; }) (or, if you want HTML) text.replace(/\n+/, function(match) { return match.length == 1 ? " " : "<p>"; }) (which is cheating because it's not valid HTML, but most HTML parsers will deal fairly well. <br><br> is less-cheaty)
      • TEST
  2. Dec 2021
    1. // necessary because hlib now uses fetch, which does not allow access to custom headers, // and zotero returns total-results in a custom header
      • !!!
    1. The URL of the search page must start with the same characters as the URL for the single entry pages. For example: http://mywebsite.com/search and http://mywebsite.com/article is good. http://search.mywebsite.com/ and http://mywebsite.com/article is bad.
      • is BAD for RegEx
    2. see

    1. Scaffold Download Scaffold Scaffold is what's known as a "Sandbox." Using a sandbox essentially means you can muck around with the code without worrying about really messing anything up, since all the important code is kept hidden. In this guide, all code will be written, tested and retested in Scaffold. The makers of Zotero created Scaffold specifically for writing translators. Once installed, launch Scaffold by navigating to the "Tools" menu in your Firefox window and select "Scaffold."
      • OBSOLETE!
      • Zotero 5.0:Scaffold is integrated
    1. Exporters Exporters also rely on a website providing certain information. In this case, we need a link that allows us to download a citation. For the most part, there are very few export formats. You may have come across them before, labeled as "MARC display" buttons, or a "RefWorks" button. These options are most common in library catalogues and on academic journal databases. This type of translator actually uses two translators, one embedded in the other. This can get quite complicated so we will not cover it in detail in this guide. However, if you do need to write one of these and need a few hints to get started, here are a few (rather technical) pointers. If you do not need to write an exporter please feel free to ignore this section. Use an XPath to grab the link URL of the citation download. Use HTTP get to download the page found at that URL. Call the translator for that type of citation (ie, MARC, Bibtex, etc) to interpret the citation. Save results into Zotero. If you are lost, check one of the many Library Catalogue translators by launching Scaffold and loading the translator code.
      • HERE!
      • "This type of translator actually uses two translators, one embedded in the other"
    2. Metadata Converters These translators take information that a Webmaster has voluntarily embedded in a webpage, known as metadata, and organizes it into the correct Zotero fields. You can think of metadata as invisible ink that only appears if you know how to find it. Obviously the catch here is that the Webmaster must have included this information in the first place. The practice of including metadata is becoming more common, especially in databases. In the past couple of years, how people display metadata has become more standardized. Because of this standardization, Zotero already supports most sites that have it. Some of the most commonly used metadata convensions are: Dublin Core Metadata Initiative unAPI COinS Embedded RDF If you are a website administrator and want your site to automatically be Zotero compliant, it is best to use one of these systems rather than writing a translator; they are standardized and reliable. Let me repeat that. If you are an administrator and can include standardized metadata, stop reading this guide and add the data! If you are not a website administrator, you might make this recommendation to the site in question.
      • "Let me repeat that."
    1. Using this idea, it is easy to include some javascript generated by a server-side process (eg. JSON object). var e = document.createElement("script"); e.src = 'http://myserver.com/servlet/getfeed?url=http://realhowto.blogspot.com'; e.type="text/javascript"; document.getElementsByTagName("head")[0].appendChild(e);
      • IDEA: probar con hlib
    1. mixer•last monthIt's a pity you didn't mention Zotero. It's such a great tool for many purposes. Also Calibre now supports highlighting in .djvu and .pdf files. It works well and covers all of my book/research papers related highlighting needs. Check it out!


    1. def format_converted_note(annotation): """Format an annotation so that it translates properly into Zotero note markup.""" annotated_text = extract_exact(annotation) annotation_text = annotation["text"] return """<p style="color: green; text-align: center;">{}</p> <br> <p>{}</p>""".format(annotated_text, annotation_text)

      formato para notas zotero (HTML)

    1. The userID for your Zotero API usage, available here. A developer API key for Zotero, you can make one here. Your Hypothesis username, which should just be the username you use to access the service. Your Hypothesis Developer API key, available here.

      necesita usuarios (zotero y hypothes.is) y API keys de cada uno

    2. This program scans through a Zotero library and checks each URL for Hypothesis annotations. If annotations are found it imports them into the Zotero library as note objects with their associated tags.


    1. Bibcure - keeps bibtex up to date and normalized, and allows you to download all papers inside your bibtex


    1. What’s interesting however, is that we can also pass an arbitrary string value (e.g. ”| ” ) to be used as an indentation:

      In Zotero translator: to create note (html), use JSON.stringify(,,"

      ); no indenta, pero respeta saltos de linea

    1. if (!item.notes) continue for (note of item.notes.filter(note => note.note.includes(Zotero.getHiddenPref('note-search.term')))) { Zotero.write(`<h1>${escapeHtml(item.citationKey)}</h1>\n`) Zotero.write(note.note)

      bucle para recorrer notas

    2. function escapeHtml(unsafe) { return unsafe .replace(/&/g, '&amp;') .replace(/</g, '&lt;') .replace(/>/g, '&gt;') .replace(/"/g, '&quot;') .replace(/'/g, '&#039;');}

      no existe en ZU, crear dentro del Translator

    1. dstillman June 29, 2020 Close Zotero, make a backup of zotero.sqlite in your Zotero data directory, temporarily disable auto-sync in the Sync pane of the preferences (if you're using syncing), and then run this from Tools → Developer → Run JavaScript:var s = new Zotero.Search();s.addCondition('note', 'contains', '&lt;i&gt;');var ids = await s.search();for (let id of ids) { let item = Zotero.Items.get(id); let note = item.getNote(); item.setNote(Zotero.Utilities.unescapeHTML(note)); await item.saveTx();}return ids.length + " item(s) updated";This will convert all notes that have a double-encoded <i>. If there are other notes, you could change it to check for '&lt;b&gt;' for <b> or similar.If you're happy with the results, you can re-enable auto-sync. jmgmbl June 29, 2020 This worked perfectly—thank you so much! I wished I'd asked years ago now.

      TRUCO: (PERO HACIENDO BACKUP): ejecutar JS que modifica

    1. DWL-SDCA: That's not the issue here. All notes in Zotero are HTML already, and copied HTML output (not HTML code) should be properly handled. Their concern is that report view isn't interpreting these particular notes as HTML when it displays them

      me lo "temia", una nota genera codigo HTML

    1. Zotero recommends storing titles in sentence case. Right-clicking on an item’s title, allows you to convert that title to sentence case.

      sentence case

    1. Zotero Item URI Say you want to send a friend a link to an item in your public Zotero library or in a group on zotero.org. Right now this is  a cumbersome process: Go online, search for the item, copy the link from the URL bar… With the “Item URI” Translator, you can simply drag and drop a link to the online version of the item. Setting this up takes three steps Download the file “Item URI.js” from here and place it in the directory “translators” in your Zotero data folder. Restart Firefox/Zotero In the Zotero Preferences go to the “Export” and set the Default Output Format to “Item URI” (this will be towards the bottom of the list) You can now take advantage of Zotero’s quick copy functionality and drag&drop links from the item in your client right into an email or a blogpost. You can also use the shortcut for “Copy Selected Items –  ctrl+alt+c on Linux/Windows, cmd+shift+c on Mac – to copy the URI to you clipboard. It will look something like this: http://zotero.org/users/76252/items/UUKSSZVK

      see translator: URI.js

    1. zotero translators development

    2. dstillman September 2, 2019 Does the target regexp pass in the Metadata pane after you load the URL in the Browser tab? The current version of Scaffold will run detectWeb even if the target doesn’t match, but the target needs to match for detectWeb to run in the Connector. (We’ve fixed that for the next version.)

      in 2021-12-25???

    1. adam3smith commented on May 6, 2018 @zuphilip theoretically "update translators" from the Connector should be all that's needed

      boton "update translators" en Options

    2. zotero translators development

    1. translator programming

    2. the callback function with Zotero.done() isn't actually necessary here anymore - it is a relic from Zotero before version 3. The above could be rewritten as ZU.processDocuments(URIs, scrape)


    1. Gabriel_p March 16, 2017 Thank you for taking the time to work on this @BBUCommander! Hopefully you can address the concerns raised at the pull request so it can be included as soon as possible.

      LAST COMMENT!!! WAITING... NOW: 2021-12-23 (;-D)

    2. BBUCommander March 16, 2017 edited March 16, 2017 I have created a work-in-progress pull request which implements my take on this: https://github.com/zotero/zotero/pull/1199Currently the displayed format is always the ISO date because this is the format I prefer, but a final solution would probably create a user setting to toggle between ISO or locale dates with locale being the default. Alternatively users could choose a custom date format. I am fine with any solution that allows ISO dates.


    3. Gabriel_p March 15, 2017 Too bad. If I could write code in JS I'd get right to it. Hopefully we won't have to see another 7 years go by before this is implemented :(


    4. adamsmith February 9, 2014 edited February 9, 2014 yeah, I'd be against ISO dates, too,


    5. YYYY-MM-DD is a format for computers.

      NOT ONLY!!!

    6. bwiernik February 9, 2014 To add a different perspective to this discussion, I personally hate the YYYY-MM-DD standardized format for reading. Unless it is can be preferenced, I definitely would not want a standardized display of dates to be implemented.

      WTF??? hate???

    7. I'll echo the comments above that the center pane date column can be very hard to read if I have sorted by something other than date (which I know it sorts correctly). I have dates appearing as "2013", "October 24, 2013", "October 2013", "2013/10", "2013/10/24", "10/24/2013", and "2013-10-24". Reading these is manageable, but it does slow me down. Is there any way for the center pane's date column to display dates in a consistent format?

      ok, good request!

    1. YaYaTurre June 4, 2018 edited June 4, 2018 I want to produce footnotes and bibliographical references for citations i.e. newspaper articles, reports, manuscripts, etc. that are in the DD MM YYYY format. Preferably like DD/MM YYYY. (26/4 1998).So this: "Nobelpristagaren Alfvén Kämpar Med Centern Mot Kärnkraftsamhället,” Norrköpings Tidningar, June 10, 1976, 8.Becomes this: "Nobelpristagaren Alfvén Kämpar Med Centern Mot Kärnkraftsamhället,” Norrköpings Tidningar, 10/6 1976, 8.Please let me know if you need any additional info. Thank you! damnation June 4, 2018 edited June 4, 2018 1. go here: https://raw.githubusercontent.com/citation-style-language/styles/master/chicago-fullnote-bibliography.csl2. Copy all that code3. Go here: http://editor.citationstyles.org/codeEditor/4. Paste all the code in the box in the bottom over the code in there5. Switch to the visual editor (on top)6. Top right: click on "Example citations"7. Untick anything and tick the "article-newspaper" one8. You should now see "Lisa W. Foderaro, “Rooftop Greenhouse Will Boost City Farming,” New York Times, April 6, 2012."9. click on the "April 6, 2012" part10. .... follow the video I made for you: https://www.youtube.com/watch?v=TOor64T4RvY&feature=youtu.be (note I'm using a different style as the chicago note style is huge and is lame; you just need to wait though!)make sure to change the file ID, self link and filename all to the same new name (like in the video). otherwise your new style will get overwritten with the next update. YaYaTurre June 4, 2018 Whoa! Thank you so much! You have really saved my hide. Thanks again!


    1. Personally I'd want Zotero to have it's own field for setting the output datetime format, rather than pick it up from the OS


    1. If you don't have plans to fix this bug, then I must admit, I will stop having plans to use Zotero.


      no more responses!

    2. If you mean the actual Date field, that's always displayed in the format used by the original source,

      CUIDADO: lo "fuerzan" los translators!

    1. As @CoNsTaN5foz said in 2020, there is a local language setting in Zotero/Preferences/Advanced that when set to "English (UK)" will give you dd/mm/yyyy 24-hour time. I used to have my Zotero with that setting. But somehow with my switch to the beta stream [probably my own fault] I lost that setting and until your question I had not tried to find it again until today. I still cannot get YYYY-MM-DD + 24h time but I'd love to have that format available.


    1. Fields like date published are very flexible and depends on how the item was imported

      see translators!!! eg: Crossref-REST.js;

              if (year) {
                  if (month) {
                      if (day) {
                          item.date = year + "-" + month + "-" + day;
                      else {
                          item.date = month + "/" + year;
                  else {
                      item.date = year;
    2. RadialThing October 16, 2018 Hi, thanks for responding.Steps to reproduce:Windows OS regional settings are set to to English (UK) and date settings adjusted to yyyy-MM-dd HH:mm. Zotero (/Juris-M) is set to Automatic (English). Expected behaviour:Zotero displays dates in lists as per the Windows OS settings, which is yyyy-MM-dd HH:mm.Actual behaviour:Zotero displays dates in dd/MM/yyyy HH:mm format.Preferred resolution is that Zotero follows the OS wide settings. Work around would be to be able to correct the date format in Zotero.

      ok, me too!

    3. dr_avk February 12, 2018 I have the same problem.Zotero I can not understand, why it is impossible to add Date-Time format option in the Preferences? Let users decide what format they want to use in the User Interface.Am I right?


    1. emilianoeheyns September 27, 2021 I didn't account for spaces in the key field; the current version of BBT would have picked up keys without spaces like [extra=ADSBibcode], the next version of BBT will also support [extra=ADS\ Bibcode]

      plugin BBT;

    2. jspilker September 22, 2021 Thanks so much for this, very much appreciated!If any astros from the future find this thread, you can use Better Bibtex to swipe the ADS Bibcode from the Extra field and use that as your cite key. This assumes that the format in the Extra field remains as "ADS Bibcode: xxxxxx", but you can also alter it if things change in the future. Go to Zotero -> Preferences -> Better Bibtex -> Citation keys (tab), and in the Citation key format box, enter:[Extra:transliterate:select=3] | [auth:lower:alphanum][shortyear]To break that down:- the [Extra:transliterate:select=3] part will search the Extra field, remove any unsafe characters ('transliterate'), and return all words starting with the 3rd. This removes the first two words, "ADS Bibcode:", from the full string so only the bibcode itself is used for the citekey.- In case there is no text in the Extra field, the cite key will revert by default to lastnameYY, which is what the [auth:lower:alphanum][shortyear] produces.

      HERE!!! HOWTO use Extra fields in Citation

    3. dstillman September 22, 2021 We've pushed out this change. Your Zotero Connector should auto-update within 24 hours, or you can update manually by clicking Update Translators in the Advanced pane of the Zotero Connector preferences.

      BUT...is translator "ADS Bibcode.js"; 1-date: 2021-09-22---->dstillman

      Sin embargo, "NASA ADS.js" sigue poniendo los dos campos en Extra!

    4. dstillman September 21, 2021 I think there's virtually no scenario where the citekey should be imported from the web Oh, OK. This was done on purpose, with the idea being that some astronomers might want to use a different citation key but that this would be a reasonable default.

      cambio "a proposito"

    5. As Zotero is planning for a Citekey field in the futre


    6. my suggestion is that when importing from ADS, the Extra field should contain only the "ADS Bibcode: bibcode" line, and the "Citation Key: bibcode" line should be removed.


    7. The issue is that BBT uses that same "Citation Key: usertext" format to override the citation keys that it generates by default according to the user's preferences


    8. However in recent Zotero versions when I add a new reference from ADS with the Firefox connector, all entries are auto-populated with text in the "Extra" field. The extra text consists of two lines that list the ADS bibcode, for example:Citation Key: 1965ApJ...142..419PADS Bibcode: 1965ApJ...142..419P

      ok, Citation Key: es usada por plugin Better BibText

    9. jspilker September 21, 2021 Another astronomer here - I think this update may have broken the way that Zotero interfaces with some extensions, specifically Better BibTeX.


    10. ADS Bibcode lookup has been added

      WHERE? 1-In /translators, exists "NASA ADS.js" 2-Date: 2021-08-19.created: 2021-05-03

    1. M B October 30, 2014 Maybe somehow I can include "http://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/?ids={z:DOI}&format=json&versions=no" to use Zotero DOI field to convert to PMID?

      TIP: 1-call PubMed with {z:DOI}; 2-save to zotero, informs PMID in Extra field; 3-copy extra in original item!!!; 4-merge or trash the new item (worse metadata from PubMed)

    2. M B November 1, 2014 edited November 1, 2014 But maybe there some workaround? I see, that PMID is stored in Zotoro "extra" field. So I could use "_urlTemplate": "http://www.ncbi.nlm.nih.gov/pubmed/{z:extra}", but how to strip/replace/remove "PMID: " string in the begining of {z:extra} value inside json script? How to strip/replace/remove "PMCID: [0-9]*" at the end?

      2021-12-22: me too! No response since 2014!!! How to extract field from Extra???

    1. With the exception of Item Type (CSL Type) and Date variables (CSL Issued, etc.), variables entered in Extra will not override corresponding values entered in proper Zotero fields.

      CSL override, but "custom" dont

    2. Enter each variable on a separate line at the top of the Extra field

      At the TOP???

    3. Citeable Fields not Included in Zotero These item fields are not yet formally supported in Zotero. For citation purposes, you can convert an item of a different type to one of these types by entering them in the Extra field in this format: CSL Variable: Value For example: PMID: 123456 Status: in press Original Date: 1886-04-01 Director: Kubrick || Stanley Field CSL Variable PMID PMID The PubMed identifier. PMCID PMCID The PubMed Central identifier. Status Status The publication status of an item (e.g., “forthcoming”, “in press”, “advance online publication”). Submitted Date Submitted The date an item was submitted for publication. Reviewed Title Reviewed Title The title of a reviewed work. Chapter Number Chapter Number The number of the chapter within a book. Archive Place Archive Place The geographic location of an archive. Event Date Event Date The date an event took place. Enter in ISO format (year-month-day). Event Place Event Place The geographic location of an event. Original Date Original Date The original date an item was published. Enter in ISO format (year-month-day). Original Title Original Title The original title of a work (e.g., the untranslated title). Original Publisher Original Publisher The publisher of the original version of an item (e.g., the untranslated version). Original Publisher Place Original Publisher Place The geographic location of the publisher of the original version of an item (e.g., the untranslated version). Original Author Original Author A type of Creator. The original creator of a work. Director Director A type of Creator. The director of a film, recording, or broadcast. In Zotero, “Director” is mapped to CSL author. If you need special labels for directors—“(Dir.)”, enter the Director label in Extra. Editorial Director Editorial Director A type of Creator. The managing editor of a publication (“Directeur de la Publication” in French). Illustrator Illustrator A type of Creator. The illustrator of a work.

      CSL Variables in Extra field

    4. For citation purposes, you can convert an item of a different type to one of these types by entering them in the Extra field in the following format: Type: CSL Type For example: Type: dataset Item Type CSL Type Dataset dataset A raw dataset. Figure figure A figure included in a scientific or academic work. Musical Score musical_score The written score for a musical work. Pamphlet pamphlet An informally-published work. Typically smaller and less technical than a Report. Book Review review-book A review of a book. Enter these as Journal, Magazine, or Newspaper Article, depending on where they were published, by providing a “Reviewed Author” creator. Treaty treaty A legal treaty between two nations.

      item Types not included in Zotero; Para "forzar" en las citas, usar en Extra (Type: xxx)

    5. Library Catalog The catalog or database an item was imported from. This field is used, for example, in the MLA citation style. Uses of this field are broader than actual library catalogs. Call Number The call number of an item in a library. For citing archival sources, also include the Call Number in Loc. in Archive (if applicable).

      Entender utilidad

    6. Archive Mainly for archival resources, the archive where an item was found. Also used for repositories, such as government report databases, institutional repositories, or subject repositories. Loc. in Archive The location of an item in an archive, such as a box and folder number or other relevant location information from the finding aid. Include the subcollection/call number, box number, and folder number together in this field. For additional tips on citing archival sources in Zotero, see here.

      Entender utilidad

    1. You might find using a JSON validator helpful (e.g., https://jsonformatter.curiousconcept.com/).

      TOOL: JSON formatter

    2. after adding to engines.json any of the engines listed in http://egh.github.io/zotero-lookup-engines/ (say. e.g. the LOC engine),

      ok, incluir LOC==Library of Congress; 1-En el enlace indicado, buscar LOC; 2-abrir pagina; 3-copiar json e incluir en engines.json

    3. i modified the engines.json adding the isidore engine with the script given by m.pouyllau (https://gitlab.huma-num.fr/pouyllau/ISIDORtero).

      ISIDORE: French repository

    1. I tried {z:issn},but the lookup engine won't show up in the UI. I also tried {z:pulisher} or {z:pulication}, and they won't work too.

      TIP: sintax: {z:field1} == required field; {z:field2?} == optional field;

      Si un item no tiene informado un campo obligatorio, no sale el engine en la lista!

    2. the filename for attached pdfs and links, I did some exploration in the data structures, and it seems they are obtainable simply by {z:title}.


    3. item.getField(param);

      WHERE TO FIND?: field names for sintax {z:name}

    4. [itemOpenURL["rft.date"][0].substr(0, 4)]

      PROBLEM: openurl waits parameter "year" with format "YYYY", BUT {frt:date} (o {z:date}) devuelve el valor completo (eg: 2021-12-22) and crossref api doest work good: retrieves year=202 (???)

    1. egh June 29, 2019 Also see http://egh.github.io/zotero-lookup-engines/

      library lookup

    2. bwiernik April 20, 2019 Currently the only way to add engines is to edit the engines.json file in the “locate” folder in your Zotero data directory: https://zotero.org/support/zotero_dataSee here for some example additional engines:https://raw.githubusercontent.com/bwiernik/zotero-tools/master/engines.json

      zotero-tools; example file uses "fields" without prefix "_"

    1. bwiernik September 16, 2017 edited May 7, 2018 It’s in your Zotero data directory. This defaults to C:/Users/:username:/Zotero You can also open the folder from the Advanced pane of the Zotero preferences.

      Edit.Preferences/Advanced/Files and Folders: section Data Directory Location; button Show Data Directory; open; subdirectory: locate; engines.json

    2. Does anything like this still work with 5.0?

      it seems it DOESNT WORK in Zotero 5

    1. You may be able to automatically detect the OpenURL resolver for your institution by clicking the “Search for resolvers” button.

      button not found!

    2. By default, Zotero uses the OpenURL service of WorldCat.org

      Library: default=WorldCat (for Books)

    3. Library Lookup - looks up the items in your library of choice using OpenURL

      configure in Preferences

    1. The citation style determines whether these abbreviations will appear with or without periods

      1-Tip: store with periods! 2-style: removes the periods when needed

    2. At the top of the screen, your items are placed on three bands. By default the top layer shows items per month, the middle band by years, the bottom band by decades. The white areas in the bottom two bands show the area currently shown in the top band. You can move along the timeline using click & drag or by entering a year into the “Jump to Year” field and pressing enter. Clicking on an item in the top band of the timeline select that item in your Zotero library.

      help about timelines

    3. Zotero automatically generates journal abbreviations using the information in the Publication field of items. It first compares them to a list of journal titles from PubMed, then a list of words, and finally an algorithm for abbreviations according to ISO norms

      ISO 4

    4. Zotero automatically embeds bibliographic information with the bibliography in COinS format. This way, anyone browsing the site using Zotero (as well as several other reference managers) will be able to import the items from the bibliography.

      WHAT site? Request: No funciona con ficheros (file://bib.html)