# JabRef Bibliography Management

Stay on top of your literature: JabRef helps you to collect and organize sources, find the paper you need and discover the latest research: JabRef is an open-source, cross-platform citation and [reference management tool](https://en.wikipedia.org/wiki/Reference_management_software).

To get started, please follow the installation instructions and familiarize yourself with the basics of JabRef.

{% content-ref url="/pages/-MbDzhEbD7S-GwIX-BXV" %}
[Installation](/installation)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEcI43\_S2UA1wiO" %}
[Getting started](/getting-started)
{% endcontent-ref %}

Use the Search icon at the top left of this page to find what you're looking for. To learn more about JabRef's features, please follow the links below.

## [Collect](/collect)

* Add new entries [manually](/collect/add-entry-manually) or the based on the [reference text](/collect/newentryfromplaintext)
* [Search](/collect/import-using-online-bibliographic-database) across many online scientific catalogs like CrossRef, Google Scholar, IEEEXplore, INSPIRE, Medline/PubMed, MathSciNet, Springer, arXiv, and zbMATH
* [Import options](/collect/import) for over 15 reference formats
* Easily retrieve and link full-text articles
* [Fetch complete bibliographic information based on identifiers](/collect/add-entry-using-an-id) such as ISBN, DOI, PubMed-ID and arXiv-ID
* [Extract metadata from PDFs](/collect/findunlinkedfiles)
* Import new references directly from the browser with one click using the [official browser extension](/collect/jabref-browser-extension) for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/jabref/?src=external-github), [Chrome](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh), [Edge](https://microsoftedge.microsoft.com/addons/detail/pgkajmkfgbehiomipedjhoddkejohfna) and [Vivaldi](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh)

## [Organize](/finding-sorting-and-cleaning-entries)

* [Edit the bibliographic information](/finding-sorting-and-cleaning-entries/edit-entry) using a convenient user interface
* [Group](/finding-sorting-and-cleaning-entries/groups) your research into hierarchical collections and organize research items based on keywords/tags, search terms or your manual assignments
* [Advanced search and filter features](/finding-sorting-and-cleaning-entries/search)
* [Complete and fix bibliographic data](/finding-sorting-and-cleaning-entries/getbibtexdatafromdoi) by comparing with curated online catalogs such as Google Scholar, Springer or MathSciNet
* [Customizable citation key generator](/setup/citationkeypatterns)
* [Manage field names and their content](/finding-sorting-and-cleaning-entries/managing-field-names-and-their-content)
* Customize and add new metadata fields or reference types
* [Fix common mistakes](/finding-sorting-and-cleaning-entries/cleanupentries), automatically [upon save](/finding-sorting-and-cleaning-entries/saveactions) if you wish
* [Find and merge duplicates](/finding-sorting-and-cleaning-entries/findduplicates)
* [Attach related documents](/finding-sorting-and-cleaning-entries/filelinks): 20 different kinds of documents supported out of the box, completely customizable and extendable
* Automatically rename and move associated documents according to customizable rules
* [Keep track of what you read](/finding-sorting-and-cleaning-entries/specialfields): relevancy, ranking, priority, printed, quality-assured, read status

## [Cite](/cite)

* [Cite-as-you-write functionality](/cite/cite-as-you-write) inside external applications
* [Push citation keys](/cite/pushtoapplications) to external applications such as Emacs, Kile, LyX, Texmaker, TeXstudio, Vim and WinEdt
* Format references in one of the many thousand built-in citation styles or create your style
* Support for [Word](/cite/export-to-microsoft-word) and [LibreOffice/OpenOffice](/cite/openofficeintegration) for inserting and formatting citations
* Native [BibTeX and biblatex support](/cite/bibtex-and-biblatex)

## [Share](/collaborative-work)

* [Many built-in export options](/collaborative-work/export) or [create a custom export format](/collaborative-work/export/customexports)
* Library is saved as a simple text file, and thus it is easy to [share with others](/collaborative-work/sharedbibfile) e.g. via Dropbox and is version-control friendly
* Work in a team: sync the contents of your library [via a SQL database](/collaborative-work/sqldatabase)

JabRef is [highly customizable](/setup) and adapts to you, not the other way around.

If you want to dive even deeper, have a look at the [advanced information](/advanced) about JabRef.

{% hint style="success" %}
JabRef is developed and maintained by a multidisciplinary [core team](https://github.com/JabRef/jabref/blob/main/MAINTAINERS) of PhD students, postdocs, and researchers in industry who work on JabRef in their freetime. Without the support of numerous volunteers, none of this would have been possible. [We welcome anyone who would like to contribute to be part of an active user and developer community!](/contributing)
{% endhint %}


# Installation

JabRef can be either installed (the preferred way) or be used as a portable application.

## Installation instructions

To get the latest version, head to [jabref.org](https://jabref.org/#download) to download the installer for your system, run them and follow the on-screen instructions.

Alternatively, on **Windows**, you can use the [chocolatey package manager](https://chocolatey.org) and execute `choco install jabref` to get the latest version. On **Ubuntu**, you can use `snap install jabref` to get the latest stable version [from snapcraft](https://snapcraft.io/jabref).

{% content-ref url="/pages/-MbDzhEcI43\_S2UA1wiO" %}
[Getting started](/getting-started)
{% endcontent-ref %}

#### Portable version

The portable version of JabRef is designed to be run from a USB stick (or similar) with no installation.

Download it from [downloads.jabref.org](https://downloads.jabref.org). These are generic archive files (e.g., `tar.gz` files for Linux and MacOS, and `zip` files for Windows) which need to be extracted. Inside the archive files you will find the file needed to run JabRef:

* for Windows `JabRef.exe`.
* for Linux
  * either run`bin/JabRef`
  * or `/lib/runtime/bin/JabRef`.
* for Mac, this is the file `JabRef.app`.

Be sure to activate "Load and Save preferences from/to jabref.xml on start-up (memory stick mode)" in Options → Preferences → General. Also, if the Linux version of JabRef portable is put into a folder named `bin`, it will not start. Other names are fine, like `apps`.

#### Development version

If you want to take advantage of the [latest features](https://github.com/JabRef/jabref/blob/main/CHANGELOG.md#unreleased), you can use pre-built binaries crafted from the latest development branch. To use the prebuilt binaries, visit [builds.jabref.org/main](https://builds.jabref.org/main/) and download the packaged binaries (e.g., `dmg` files for MacOS and `exe` files for Windows), run them and follow the instructions.

If you want to try the development version in parallel with the stable version, we recommend to download the portable version (e.g. `JabRef-X.Y.portable_windows.zip`, `JabRef-X.Y.portable_macos.tar.gz`, or `JabRef-X.Y.portable_linux.tar.gz`) from [builds.jabref.org/main](https://builds.jabref.org/main/) to ensure that both versions do not conflict.

## Troubleshooting

{% tabs %}
{% tab title="Windows" %}

#### Issues with high resolution displays

You have to change the "compatibility settings" for JabRef to "Disable scaling for high DPI settings". Further information is available at <https://www.microsoft.com/surface/en-us/support/apps-and-windows-store/app-display-issues?os=windows-10>.

Further reading: <https://github.com/JabRef/jabref/issues/415> and <http://discourse.jabref.org/t/jabref-3-6-on-hires-laptop-screen-messed-up/277>.

#### Warning about preferences

In case you get the following error message

`WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.`

start regedit and create the following key: `HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs`. \[[source](https://stackoverflow.com/a/20798112/873282)]

#### How can I start or focus JabRef with hotkey ⊞+J (Win+J)?

Use [AutoHotkey](http://www.autohotkey.com) and [JabRef.ahk](https://github.com/koppor/autohotkey-scripts/blob/main/JabRef.ahk) provided at [koppor's autohotkey scripts](https://github.com/koppor/autohotkey-scripts).
{% endtab %}

{% tab title="Linux" %}

#### OpenOffice/LibreOffice integration

The connection from JabRef to Libre Office requires some office related `jar`-archives to be present. For this, you have to install the package `libreoffice-java-common`.

#### External program integration in Snap and Flatpak packages

The snap and flatpak packages cannot interact directly with external programs (i.e. programs not contained in the package sandbox). What this means is that for now there is no possible connection between JabRef and Libreoffice if either one is a snap/flatpak.

The integration with TeX editors is fine if JabRef is a deb/rpm, and the editor is a snap/deb/rpm (not a flatpak).

Depending on your use case and needed integrations it is advisable to choose the proper packages. Watch this page for new developments on the interactions with external programs.

|                       | Snap | Flatpak | deb/rpm | tar |
| --------------------- | ---- | ------- | ------- | --- |
| Libreoffice (system)  | ❌    | ❌       | ✅       | ✅   |
| Libreoffice (snap)    | ❌    | ❌       | ❌       | ❌   |
| Libreoffice (flatpak) | ❌    | ❌       | ❌       | ❌   |
| TexShow               | ❌    | ✅       | ✅       | ✅   |
| TexMaker              | ❌    | ✅       | ✅       | ✅   |
| LyX                   | ❌    | ✅       | ✅       | ✅   |
| Vim/Emacs             | ❌    | ❌       | ✅       | ✅   |

#### Change default application to open files for JabRef snap

When JabRef is installed as a snap, it initially asks which application should be used to open PDFs (or other files). However, after selecting the same application three times, that application is set as default and there is no obvious way to select another application ("Preferences" -> "External File Types" does not help here, because the snap sandbox does not "see" any of the user's applications). This setting is stored in the XDG permission storage, and can be changed with a command like the following (see [this forum thread](https://forum.snapcraft.io/t/xdg-permissions-stores-should-be-configurable-with-snapd/25048) for further information, and have a look at `flatpack permissions` to find the correct "Table": look for a line where the "App" is `snap.jabref` - in the below example, the table is the default `desktop-used-apps`): `flatpak permission-set --data "{'always-ask':<false>}" desktop-used-apps application/pdf snap.jabref okularApplication_pdf 0 3` In this example, the default application to open PDF files is set to `okularApplication_pdf`, and the counter for when to stop asking how to open PDF files is set to 0/3. If you want JabRef to ask you which application to use every time, use `'always-ask':<true>` in the `data` parameter.

#### Include JabRef in the start menu of Ubuntu

See <http://askubuntu.com/a/721387/196423> for details.

#### Cannot start JabRef from the command line

You have several Java Virtual Machines installed, and under the command line the wrong one is chosen. Have a look at the previous question that tells you how to change the virtual machine used. For Ubuntu you may also have a look at the [Ubuntu page on Java](https://help.ubuntu.com/community/Java).

#### Everything looks too big or too small. How can I change it to to a more reasonable size?

In the background, JabRef uses [JavaFX](https://en.wikipedia.org/wiki/JavaFX). Applications using JavaFX can be scaled via `java -Dglass.gtk.uiScale=1.5 -jar <application>.jar`. If you have installed JabRef via a package manager, you probably don't have a `.jar` file but a binary file. In this case, you need to find your `JabRef.cfg` in your installation folder (possibly located at `/opt/JabRef/lib/app/JabRef.cfg`) and add in the section `[JavaOptions]` the line `-Dglass.gtk.uiScale=1.5`. Then, restart JabRef. Try finding a value that is suitable for you. On high resolution displays, values around `1.5` seem to be reasonable.

#### Non-latin characters are not showing up properly

You might need to install an additional font for JabRef to display characters correctly.

| System    | Language | Font                                                            |
| --------- | -------- | --------------------------------------------------------------- |
| ArchLinux | Japanese | [otf-ipafont](https://archlinux.org/packages/?name=otf-ipafont) |

#### Submenus from the menu bar close immediately after left click is let go of if the menu bar was clicked in its top half

This issue seems to be related to this [JavaFX bug](https://bugs.openjdk.org/browse/JDK-8251240). A temporary workaround is to click the menu bar in its lower half. To fix the issue permanently set the following system property: `java -Djdk.gtk.version=2`. This can be done globally by adding `_JAVA_OPTIONS="-Djdk.gtk.version=2"` to `/etc/environment`. It can also be set locally by editing `JabRef.cfg` in your installation folder (possibly located at `/opt/JabRef/lib/app/JabRef.cfg`) and add the line `-Djdk.gtk.version=2` in the `[JavaOptions]` section.

Note: This could not work in JabRef 5.12. or later.
{% endtab %}

{% tab title="macOS" %}

#### I cannot start JabRef 5.9 due to file being damaged

Execute xattr -d com.apple.quarantine /Applications/JabRef.app (This is a known problem related to Apple's notarization)

#### JabRef is slow/hangs sometimes

Some users with macOS Sierra have reported freezes when using JabRef. It seems this is a bug in the networking part of Java on macOS. [Adding a host mapping for 127.0.0.1](https://dzone.com/articles/macos-sierra-problems-with-javanetinetaddress-getl) seems to solve these issues.

#### Some characters are not displayed in the main table (math characters or some upper-cased letter)

This is one the one hand a font problem and second a lognstanding [JavaFX bug](https://bugs.openjdk.java.net/browse/JDK-8176835). This might be a problem related to the font you are using. You can download some other font that supports mathematical alphanumeric symbols, for example, FreeSerif or Cambria Math. A list of fonts supporting Math Unicode blocks is available at <http://www.fileformat.info/info/unicode/block/mathematical_alphanumeric_symbols/fontsupport.htm>.
{% endtab %}
{% endtabs %}

## Building from source

This method is mainly for package maintainers and users who would like to build the latest snapshots of JabRef directly from the source. If you want to setup JabRef for development, follow the instructions for [setting up a workspace](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace).

To build JabRef from source, you first need to have a working Java Development Kit (see above link for details) and Git installed on your system. After installing the requirements, you open a terminal window (i.e., a command prompt) and type the following:

```shell
git clone --recurse-submodules --depth=10 https://github.com/JabRef/jabref
cd jabref
./gradlew :jabgui:jpackage
```

In a nutshell, you clone the latest snapshot of JabRef into `jabref` directory, initialize and update all its submodules, change directory to `jabref`, and build the application.

The executable file will be written to an OS-specific subdirectory of `jabgui/build/packages`. On Windows, this would be `jabgui/build/packages/windows-latest/JabRef/JabRef.exe`.

## Running from source

To run from source without building an executable, type the following in a terminal window:

```shell
./gradlew :jabgui:run
```


# Getting started

{% hint style="info" %}
In French/En français: [Découvrir JabRef](https://ist.inrae.fr/wp-content/uploads/sites/21/2022/01/OpenClass_Decouvrir_JabRef_2022.pdf) (external document, courtesy of INRAE)
{% endhint %}

{% hint style="info" %}
Some videos to help you start using JabRef:

* [Intro to JabRef](https://www.youtube.com/watch?v=11qMBE_PSBw) by JoshTheEngineer (youtube - English - 22 minutes - January 2021)
* [JabRef for beginners (Part 1): JabRef interface and creating a library](https://www.youtube.com/watch?v=oF22xJ9lDVk) by James Azam (youtube - English - 14 minutes - April 2021)
* [JabRef for beginners (Part 2): How to manage and cite references in MS Word and LaTeX](https://www.youtube.com/watch?v=Q62nO-KDDZw) by James Azam (youtube - English - 11 minutes - April 2021)
  {% endhint %}

## Main Window of JabRef

Upon the first start of JabRef the main user interface is showing up the main elements are:

* Menu bar
* Icon bar (shortcuts for most frequently used features)
* Side bar (for groups and web search)
* The Welcome Tab provides quick actions, common settings, and access to helpful walkthroughs.
  * Quick settings allow you conveniently specify the [main file directory](https://docs.jabref.org/finding-sorting-and-cleaning-entries/filelinks#directories-for-files), change [themes](https://docs.jabref.org/advanced/custom-themes), enable [large library optimizations](https://docs.jabref.org/faq#q-i-have-a-huge-library.-what-can-i-do-to-mitigate-performance-issues), configure the [entry table](https://docs.jabref.org/advanced/main-window), adjust [online services](https://docs.jabref.org/collect/import-using-online-bibliographic-database), and set up [push to applications](https://docs.jabref.org/cite/pushtoapplications).
  * The walkthroughs are designed to help you learn and discover JabRef's features, such as changing preferences, searching libraries, linking external files, and organizing entries into groups.

![Screenshot of main window](/files/-MHmU38Cyp3TXlHUE7jw)

## Creation of a new library

A "library" is the main file that saves all the information about your collection of references. The storage format of the file is text-based in the BibTeX standard (by default).

{% hint style="info" %}
The usage of a text-based file format has some advantages:

* The file is "human readable" and editable with every text editor
* the text format allows for an easy tracking of changes with every common version control protocol (e.g., git)
* and finally: the format is dedicated for the usage with LaTeX; so you do not need to convert it to any other format but you can just directly link to your JabRef library
  {% endhint %}

To create a new library, just select the "New library" menu item in the "File" menu:

![Creating a new library](/files/-MGXK72P1EDOhD6s5i_S)

The main screen is now showing an empty "entry table" we will now start to fill with some entries.

## Adding of a new entry manually

To add a new entry select the menu bar entry "Library" -> "New entry", click on the icon in the icon bar, or just hit CTRL-N.

This opens a dialog where you can select the type of reference you want to store. By default all entry types defined by the BibTeX format are available:

![Screenshot of "new entry" dialog](/files/-MGXK72Oks8rxR3B40jr)

For our running example we will select "Article".

After clicking on the "Article" button, the dialog closes and the so called "Entry Editor" is opened for the newly created entry:

![Main window now showing the entry editor](/files/-MG_IRGtweBl6X3u91PC)

The most important information about the reference to be added can now be entered in the "Main" tab. "Author", "Title", "Journal", and "Year" should be self-explanatory - however, a "citationkey", might not be familiar to you. Basically, the idea of the "citationkey" is coming from working with BibTeX, where it is necessary to have an unique identifier for each entry. This allows for referencing within a document you might be creating using the stored information in your library. Moreover, also within JabRef this "key" is used for example for cross-references to other related entries or to determine file names for full-text references.

The key usually follows a global pattern and can be easily created automatically by clicking on the "generate" button next to the field.

{% hint style="info" %}
The default key pattern is `[auth][year]`, which means that Author information is followed by the year of the publication, resulting in the example in `Turing1950`. However, the key pattern is customizable to your needs. See [Configuration](https://docs.jabref.org/setup) > ["Customize the citation key generator"](https://docs.jabref.org/setup/citationkeypatterns) for more details.
{% endhint %}

After entering some information, you can see on the right side of the entry editor a preview of the bibliographic data:

![Added information for new entry](/files/-MbDzlRApeYhLo7prGqe)

There are further possibilities to add entries to your library which are described in the section "Collect" of this documentation:

{% content-ref url="/pages/-MbDzhEdgN8BlujoT0Oi" %}
[Collect](/collect)
{% endcontent-ref %}

## Enhancing the information

After creating the basic information the addition of all other bibliographical details is often cumbersome and error-prone. To ease this task, JabRef allows for an automatic completion of the bibliographic information by looking up the data in public databases. To use this feature just click on the "Update with bibliographic information from the web" button in the editor:

![Update information from web](/files/-MGXK72JgQ6T6rvFYOmz)

{% hint style="info" %}
The found information is most accurate if an identifier like a "DOI" or "ISBN" is maintained. If you already know such an unique identifier, this can also be already the starting point to create a new entry without manual entering any information by using the "create from ID" feature in the Create entry dialog. For more information see: [Collect](https://docs.jabref.org/collect) > ["Add entry using an ID"](https://docs.jabref.org/collect/add-entry-using-an-id)
{% endhint %}

If additional information is found you will be asked in a dialog which information should be taken over:

![Merging the existing and the web information](/files/-MG_IRGw2Yqrh7OV8B68)

## Adding a full text document

Usually, you also want to attach a reference to the full-text of a reference. For this, you can use the "file" field in the "General" tab. Here you can either attach a file manually, search for an already existing local file matching the citationkey pattern, or trying to automatically download a matching full text from the web.

{% hint style="info" %}
In order to use the automated feature, it is necessary to set-up a file directory first. To do so, please go to "Options" > "Preferences", go to "Linked files" section, and select there an existing folder as the "Main file directory":
{% endhint %}

To test the automatic download of full texts you can click on the "Get full-text" icon next to the file field, or choose "Lookup" -> "Search full text documents online" from the menu. As soon as a full-text is found, the file will be stored in the local file directory and linked to the entry:

![Finding a full-text document online](/files/-MbDzlRLLimDpG6V-PYv)

To open the downloaded full text you can click on the "file" icon before the file name - or use the same icon in the entry table: ![Opening the full-text](/files/-MbDzlRNRfTwQDN2ksdt)

## Finding more references in the web

If you want to search for other references, it is also possible to directly trigger a search in many of the most common bibliographic databases. To start a search just use the "Web Search" feature of JabRef: First select one of the existing data sources, enter a search term and click on "search":

The search results will be shown in an window where you can select all the search hits to be added to your library.

![Web Search: Trigger and result window](/files/-MGXK72LWLPalMvcGxzi)

## Next steps

After adding more and more entries, your library might be a bit too unstructured. In order to keep all you references organized JabRef is offering a lot of helpful features like grouping, consistency checks, etc.

You can find more information on this topics in the "Organize" section of the documentation:

{% content-ref url="/pages/-Lr5QENyCIwSXmB3ijuU" %}
[Organize](/finding-sorting-and-cleaning-entries)
{% endcontent-ref %}

If you want to start writing your own papers, articles or thesis, you might find some helpful information on how to use JabRef for citing your collected references from your library:

{% content-ref url="/pages/-MbDzhF1KGRwD8DgjVZ7" %}
[Cite](/cite)
{% endcontent-ref %}


# Collect

Learn how to add new literature to JabRef.

JabRef provides you with many ways to add a new entry.

{% content-ref url="/pages/-MbDzhEe6WMc26wjxh8g" %}
[Add entry manually](/collect/add-entry-manually)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEfwOlRYnfTHbBi" %}
[Add entry using an ID](/collect/add-entry-using-an-id)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEg0k9sssHuT6CE" %}
[Add entry using reference text](/collect/newentryfromplaintext)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEhu1zlA\_LZ3urk" %}
[Searching externally using Online Services](/collect/import-using-online-bibliographic-database)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEiyVfFKQHP39ca" %}
[Add entry using PDFs](/collect/findunlinkedfiles)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEjxdztwlhK-lFZ" %}
[Browser Extension](/collect/jabref-browser-extension)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEkP0LZMMHj7Cr7" %}
[Import](/collect/import)
{% endcontent-ref %}


# Add entry manually

To add a new entry, select **Library → Add entry using...**, press `CTRL + N​` or click on the dedicated icon of the toolbar.

The "Choose entry type" dialog window is displayed. By default, 5 common types of entries are displayed:

![Window for selecting default entry types. Note: the actual content of the "others" menu depends on the database mode (BibTeX or biblatex).](/files/-MV0jFfQ7TXliVg-KRy8)

For other types of entries, click on `Others.` That expands the window and displays the other entry types available:

![Window with all available entry types. Note: the actual content of the "others" menu depends on the database mode (BibTeX or biblatex).](/files/PCThV0IlryEr5IdNSbul)

Finally, the [entry editor](/advanced/entryeditor) opens and let you fill in the various fields.

{% hint style="info" %}
You can directly create a new entry of a specific entry type by using a keyboard shortcut. We strongly recommend learning the shortcuts for the entry types you use most often, e.g. `Ctrl + Shift + A` for adding an article entry.​ See **File → Preferences → Keyboard Shortcuts**.
{% endhint %}


# Add entry using an ID

Create an entry based on an ID such as DOI or ISBN.

## From an ID to an entry

For other identifiers, choose **Library → New entry**, or click on the `New entry` button, or use the keyboard shortcut `CTRL + N`. In the lower part of the window, there are two boxes : "ID type" and "ID". In the field "ID type", you can select the desired identifier, e.g. "ISBN" (it works also for DOI). Then enter the identifier in the textbox below and press Enter. That will generate an entry based on the given ID (you can also click on "Generate"). The entry is added to your library and opened in the entry editor. In case an error occurs, a popup is shown.

![Window for selecting an entry type or the ID of an entry. Note: the actual content of the dialog depends on the database mode (BibTeX or biblatex).](/files/-MV0jFfQ7TXliVg-KRy8)

{% hint style="info" %}
Sometimes the new entry contains a `url` field. This field usually points to the URL of the book at the respective online book store. In case you buy the book using this link, the service provider (e.g., [ebook.de](https://www.ebook.de)) receive a commission to fund the service.
{% endhint %}

{% hint style="info" %}
You can also add an entry by simply pasting its BibTex or its DOI from your clipboard to the maintable.
{% endhint %}

## Supported catalogs

### arXiv

[arXiv](https://arxiv.org) is a repository of scientific preprints in the fields of mathematics, physics, astronomy, computer science, quantitative biology, statistics, and quantitative finance ([Wikipedia](https://en.wikipedia.org/wiki/ArXiv)).

ID search is carried out using the [arXiv identifier](https://arxiv.org/help/arxiv_identifier).

### Crossref

[Crossref](https://en.wikipedia.org/wiki/Crossref) is an official Digital Object Identifier (DOI) Registration Agency of the International DOI Foundation.

ID search is carried out using the DOI.

### ISBN

First, [eBook.de's](https://www.ebook.de/de/) API is used to fetch bibliographic information based on the ISBN. If no entry is found, the JabRef tries [OttoBib](https://www.ottobib.com) to get data.

ID search is carried out using the [International Standard Book Number](https://en.wikipedia.org/wiki/International_Standard_Book_Number).

![Screenshot of new entry dialog](/files/-M8jNXiDY2dJDd_sFocy)

### DiVA

[DiVA (Digitala Vetenskapliga Arkivet)](https://www.info.diva-portal.org/w/diva/om-diva/) is a database with publications from about [40](https://www.diva-portal.org/smash/aboutdiva.jsf?dswid=-7604).

ID search is carried out using the DiVA id (diva2).

![Screenshot of new entry dialog](/files/QszFldZLzvw5wLKgfIg3)

### DOI

JabRef uses [http://dx.doi.org/](http://dx.doi.org) (provided by [http://crossref.org/](http://crossref.org)) to convert the given DOI to a new entry.

ID search is carried out using the DOI.

![Screenshot of new entry dialog](/files/Gh529xsssU3nfE2I2JKN)

{% hint style="warning" %}
If JabRef cannot find the reference of your DOI using this ID type, please, try the same DOI with the ID type "mEDRA". The ID type mEDRA looks for the reference corresponding to a DOI too, but using another registration agency.
{% endhint %}

### IACR eprints

The [International Association for Cryptologic Research](https://www.iacr.org) maintains an eprint archive to which anyone can submit papers and technical reports. These eprints are given IDs based on the year of submission, e.g. the 10th submission in 2018 gets the ID "2018/10". To get the ID, you may want to use their web search form at <https://eprint.iacr.org/search.html>.

ID search is carried out using the Cryptology ePrint ID.

### Library of congress

The Library of Congress is the research library that officially serves the United States Congress and is the *de facto* national library of the United States ([wikipedia](https://en.wikipedia.org/wiki/Library_of_Congress)).

ID search is carried out using the [Library of Congress Control Number](https://en.wikipedia.org/wiki/Library_of_Congress_Control_Number) (LCCN).

### MathSciNet

[MathSciNet](http://www.ams.org/mathscinet/) is a searchable online bibliographic database. It contains all of the contents of the journal Mathematical Reviews (MR) since 1940 along with an extensive author database, links to other MR entries, citations, full journal entries, and links to original articles. It contains almost 3 million items and over 1.7 million links to original articles ([Wikipedia](https://en.wikipedia.org/wiki/MathSciNet)).

ID search is carried out using the MR number, e.g. `MR3300361`.

### Medline/Pubmed

[Medline/Pubmed](https://www.nlm.nih.gov/bsd/medline.html) is a bibliographic database of life sciences and biomedical information. It includes bibliographic information for articles from academic journals covering medicine, nursing, pharmacy, dentistry, veterinary medicine, and health care. Medline also covers much of the literature in biology and biochemistry, as well as fields such as molecular evolution ([Wikipedia](https://en.wikipedia.org/wiki/MEDLINE)).

ID search is carried out using the PubMed Unique Identifier (PMID).

[Screenshot of new entry dialog](https://github.com/JabRef/user-documentation/tree/4fe3bfdabd1204001f27cb7b138818d58c0ea1d0/en/.gitbook/assets/newentrychoosetype-idgeneratorhighlighted-medline.png)

### mEDRA

[mEDRA](https://www.medra.org) is the multilingual European Registration Agency of DOI, the standard persistent identifier for any form of intellectual property on a digital network.

ID search is carried out using the DOI.

### SAO/NASA ADS

[SAO/NASA Astrophysics Data System](http://www.adsabs.harvard.edu) is an online database of over eight million astronomy and physics papers from both peer reviewed and non-peer reviewed sources. Abstracts are available free online for almost all articles, and full scanned articles are available in Graphics Interchange Format (GIF) and Portable Document Format (PDF) for older articles ([Wikipedia](https://en.wikipedia.org/wiki/Astrophysics_Data_System)).

ID search is carried out using the [ADS Bibcode](http://adsabs.github.io/help/actions/bibcode).

![Screenshot of new entry dialog](/files/20LpcOaamvoUzcjET4po)

### Title

Based on the title of your publication, JabRef call Crossref, which return the corresponding DOI. Then JabRef fetches the reference based on this DOI.

To return a reference, the publication needs to have a DOI.

### RFC

IETF (Internet Engineering Task Force) Datatracker is a database that "contains data about the documents, working groups, meetings, agendas, minutes, presentations, and more, of the IETF." It used to be available at `https://datatracker.ietf.org/` (currently down).

ID search is carried out using the (Request for Comments number) (RFC) of the IETF database.

![Screenshot of new entry dialog](/files/-Lr5amileaL3by4DmHPf)

### zbMATH Open

[zbMATH Open](https://zbmath.org) is an abstracting and reviewing service in pure and applied mathematics. Its database contains about 4 million bibliographic entries with reviews or abstracts currently drawn from about 3,000 journals and book series, and 180,000 books. The coverage starts in the 18th century and is complete from 1868 to the present by the integration of the "Jahrbuch über die Fortschritte der Mathematik" database ([about](https://zbmath.org/about/)).

ID search is carried out using the Zbl number.


# Add entry using reference text

> Entries can be created from a reference text.

In case you have a reference string, JabRef offers the functionality to convert the text to BibTeX (or biblatex).

{% hint style="warning" %}
Different parsers will lead to different results. It is strongly recommended to fact-check all conversions, regardless of parser choice. All of them can confabulate. For comparison, [adding entries using an ID](/collect/add-entry-using-an-id) is much more reliable and accurate.
{% endhint %}

Example:

```
O. Kopp, A. Armbruster, und O. Zimmermann, "Markdown Architectural Decision Records: Format and Tool Support", in 10th ZEUS Workshop, 2018.
```

1. Click Library and select "New entry from plain text..." Alternatively, you can press Ctrl+Shift+N.

   <div align="left"><figure><picture><source srcset="/files/8RBeHZVMdBTLvmAjAdN0" media="(prefers-color-scheme: dark)"><img src="/files/A0kaXmjv8VAxwxIRLPgA" alt=""></picture><figcaption></figcaption></figure></div>
2. The "Plain Reference Parser" window opens

   <div align="left"><figure><picture><source srcset="/files/PnlE1Wl6w7ZTFeI6Vxkv" media="(prefers-color-scheme: dark)"><img src="/files/4F0hjs6JwMmZJ7ytppsm" alt=""></picture><figcaption></figcaption></figure></div>
3. Paste the reference text:

   <div align="left"><figure><picture><source srcset="/files/UiKIwYcvEpU1wjyGwaLJ" media="(prefers-color-scheme: dark)"><img src="/files/rknwfQaUq7y700JkY9AD" alt=""></picture><figcaption></figcaption></figure></div>
4. Choose a parser from the drop-down menu.
5. Click "Add to current library"
6. The result is selected in the entry table:

   <figure><picture><source srcset="/files/f2ccNtBJvGgOuPjgfxcH" media="(prefers-color-scheme: dark)"><img src="/files/PtB5MmFvgnbXzPdN37yY" alt=""></picture><figcaption></figcaption></figure>

## Parser Explanation

### Rule-based

This is the default parser. It does not require any extensive setups, nor does it send data to remote services. Any conversions are executed locally on your device. The rule-based parser also is deterministic, as the rules are hard-coded. Unfortunately, at time of writing, the rule-based parser is far from perfect. As one can see in the example above, the number "10" was wrongly interpreted as a page number, which is clearly not the intended result. The underlying rules are insufficient to account for all possibilities that bibliographic metadata may contain and ideally would require a way more fine-grained, but an ever more complex rule-set. It is recommended to use the rule-based parser as a last-resort, when the Grobid or LLM based parsers are not available or not desirable.

### Grobid

JabRef uses the technology offered by [Grobid](https://github.com/kermitt2/grobid), a machine learning software project with decades of experience and development dedicated to bibliographic metadata extraction. The Grobid parser usually tends to achieve better results than the rule-based parser. Since JabRef runs Grobid on a remote instance, users will have to confirm sending data to JabRef's online service in the preferences (*File > Preferences > Web search > Remote Services*). Sending data is disabled by default. It cannot be guaranteed that JabRef's Grobid instance will always be up and running, but it is possible for you to set up your [own Grobid Instance](https://grobid.readthedocs.io/en/latest/Grobid-docker/).

<figure><picture><source srcset="/files/vouHc3xnmhYKjGpo8thd" media="(prefers-color-scheme: dark)"><img src="/files/TLi6GimuhX8jZSwRE4Ja" alt=""></picture><figcaption><p>Grobid related preference section in JabRef</p></figcaption></figure>

### LLM

Large Language Models too can be used to convert the reference text. The quality of the results is surprisingly good, tends to be better than the rule-based parser and competes with Grobid. Nevertheless, it depends on the model or service that is used and if they are trained/designed for this use-case. Extensive documentation about how to set up a local LLM or connect to a remote AI service can be found in the [AI functionality](/ai) section. Data privacy depends on the external application that you are using to run the local model and/or on the remote AI provider, if you are connecting to one of those.


# Searching externally using Online Services

Using online catalogs to search for references

JabRef is not intended to be a tool for mass download of citations. The purpose of the Web search is to easily gather a few entries directly from within JabRef. If you use the search functionality too extensively you might get blocked (for some time). To fetch entries from an online catalog, choose **View → Web search**, and the search interface will appear in the side panel. Select the catalogs you want to search (e.g., arXiv) in the dropdown menu. Note that it might be necessary to scroll downwards to find certain fetchers. An example for this is provided in the image below. You may opt to download files (such as PDFs) linked to the search results by checking the **Download referenced files (PDFs, ...)** checkbox. Note that JabRef will only download files directly linked in the search results and will not attempt to find or retrieve full-text articles. Then enter the words of your query, and press Enter, or the **Search** button. The results are displayed in the [import inspection dialog](/collect/import/importinspectiondialog). Some online services support advanced search queries. These are described below at the respective fetcher.

![JabRefWebSearch](https://user-images.githubusercontent.com/6931104/199564571-2287248b-40ac-4089-9af7-9feda25744b7.png)

Apart from fetching entries by using a full search, it is also possible to directly [create an entry using a unique identifier](/collect/add-entry-using-an-id).

## Mass downloading of articles

However, it is still possible to import hundreds or even thousands of entries from these catalogs. The process depends a bit on the specifics of each catalog, but in general works as follows: Search the catalog in your browser, export the result in one of the supported file formats and then [import the file into JabRef](/collect/import).

## Using a Proxy Server

If you need to use an HTTP proxy server, you can configure JabRef to use a proxy using the "Network" preferences (**File → Preferences → Network**).

## Search Syntax

Since version [6.0](https://github.com/JabRef/jabref/blob/main/CHANGELOG.md#unreleased):

JabRef searches the catalogs by using the specified keywords. One can use quotes (`"`) to keep words togehter: An example is `"process mining"`. It is also possible to restrict the search to dedicated fields:

Thereby, JabRef supports following fields:

| field        | meaning                                                   |
| ------------ | --------------------------------------------------------- |
| `author`     | The author of the work                                    |
| `title`      | The title of the work                                     |
| `journal`    | The title of the journal of the work                      |
| `year`       | The year in which the work was published                  |
| `year-range` | The year range (e.g., `1999-2001`) the work was published |
| `doi`        | The document object identifier of the work                |

One can usually combine different searches using the Boolean operators `AND` and `OR`. Thereby, the default operator is `OR`.

### Examples

* `author=smith and author=jones`: search for references with authors "smith" and "jones"
* `author=smith or author=jones`: search for references with either author "smith" or author "jones"
* `author=smith and not title=processor`: search for author "smith" and omit references with "processor" in the title

Technical note: The web search syntax currently uses the same syntax as the [local search functionality](/finding-sorting-and-cleaning-entries/search) in JabRef. The terms are then transformed into the required format for the specific APIs used in the background.

## Supported catalogs

### ACM Portal

The [ACM Portal](https://dl.acm.org) includes two catalogs ([Wikipedia](https://en.wikipedia.org/wiki/Association_for_Computing_Machinery#Portal_and_Digital_Library)):

* the **ACM Digital Library** is a text collection of every article published by the [Association for Computing Machinery](https://www.acm.org), including over 60 years of archives from articles, magazines and conference proceedings.
* the **Guide to Computing Literature** that is a bibliographic collection from major publishers in computing with over one million entries.

### arXiv

[ArXiv](https://arxiv.org) is a repository of scientific preprints in the fields of mathematics, physics, astronomy, computer science, quantitative biology, statistics, and quantitative finance ([Wikipedia](https://en.wikipedia.org/wiki/ArXiv)).

### Bibliotheksverbund Bayern (BVB)

The [Bibliotheksverbund Bayern (BVB)](https://www.bib-bvb.de) provides bibliographic information from all public libraries in Bavaria, Germany. The format used is [MarcXML](https://www.loc.gov/marc/bibliographic/), [which has been modified](https://www.bib-bvb.de/documents/10792/9f51a033-5ca1-42e2-b2d3-a75e7f1512d4), which in turn is [based on other modifications](https://www.dnb.de/marc21).

### Biodiversity Heritage Library

[Biodiversity Heritage Library](https://www.biodiversitylibrary.org/) makes biodiversity literature openly available to the world as part of a global biodiversity community. It is the world’s largest open access digital library for biodiversity literature and archives ([Wikipedia](https://en.wikipedia.org/wiki/Biodiversity_Heritage_Library)).

### CiteSeerX

{% hint style="warning" %}
The CiteSeerX fetcher was removed from JabRef because the service is defunct and its links now redirect to the Wayback Machine.
{% endhint %}

[CiteSeerX](https://csxstatic.ist.psu.edu/home) is a public search engine for scientific and academic papers primarily with a focus on computer and information science. However, CiteSeerX has been expanding into other scholarly domains such as economics, physics, and others ([Wikipedia](https://en.wikipedia.org/wiki/CiteSeer)).

### Collection of Computer Science Bibliographies (CCSB)

{% hint style="warning" %}
As of July 2023, CCSB ceased its operations.
{% endhint %}

The [Collection of Computer Science Bibliographies](https://en.wikipedia.org/wiki/Collection_of_Computer_Science_Bibliographies) is a public search engine for bibliographies of scientific literature in computer science.

### Crossref / Unpaywalll

[Unpaywall](https://unpaywall.org) is an open catalog with over 20 million free scholarly articles harvested from over 50,000 journals and open-access repositories around the globe. Sources for these articles include repositories run by renowned universities, governments, and scholarly societies. Unpaywall is integrated into thousands of existing search engines, library platforms, and information products, making articles easy to find, track, and use for your scholarly communication needs.

The Unpaywall catalog has a very simple structure: it has one record for each article with a Crossref DOI. It harvests from many sources to find Open Access content, and then matches this content to these DOIs using content fingerprints. So for any given DOI, we know about any OA versions that exist anywhere.

To fetch entries from Unpaywall indirectly through Crossref, choose **Search → Web search**, and the search interface will appear in the side pane. Select **Crossref** in the dropdown menu. To start a search, enter the words of your query, and press Enter or the **Fetch** button.

### DBLP

[DBLP](https://dblp.uni-trier.de/db/) is a computer science bibliography website listing more than 3.1 million journal articles, conference papers, and other publications on computer science ([Wikipedia](https://en.wikipedia.org/wiki/DBLP)).

### DOAB

[DOAB (Directory of Open Access Books)](https://doabooks.org) is a community-driven discovery service that indexes and provides access to scholarly, peer-reviewed open access books and helps users to find trusted open access book publishers.

### DOAJ

[DOAJ (Directory of Open Access Journals)](https://doaj.org) is a catalog covering more than 10000 open access journals covering all areas of science, technology, medicine, social science, and humanities ([Wikipedia](https://en.wikipedia.org/wiki/Directory_of_Open_Access_Journals)).

It is possible to limit the search by adding a field name to the search, as **field:text**. The supported fields are:

| key         | description                  |
| ----------- | ---------------------------- |
| `title`     | The title of the article     |
| `doi`       | The DOI of the article       |
| `issn`      | The ISSN of the journal      |
| `publisher` | The publisher of the journal |
| `abstract`  | The abstract of the article  |

### Google Scholar

{% hint style="warning" %}
Currently not working, because Google changed their API
{% endhint %}

[Google Scholar](https://scholar.google.com) is a freely accessible catalog that indexes the full text or metadata of scholarly literature across an array of publishing formats and disciplines. Google Scholar index includes most peer-reviewed online academic journals and books, conference papers, theses and dissertations, preprints, abstracts, technical reports, and other scholarly literature, including court opinions and patents ([Wikipedia](https://en.wikipedia.org/wiki/Google_Scholar)).

#### Traffic limitations

Google scholar can block "automated" crawls which generate too much traffic in a short time. To unblock your IP, doing a Google scholar search in your browser might help. You will be asked to show that you are not a robot (a CAPTCHA challenge). If no CAPTCHA appears, or JabRef is still blocked after performing a search in the browser, you can also change your IP address manually or wait for some hours to get unblocked again.

Thus, the Google Scholar fetcher is not the best way to obtain lots of entries at the same time. The [JabRef browser extension](/collect/jabref-browser-extension) might be an alternative to download the bibliographic data directly from the browser.

### GVK

[GVK](https://gso.gbv.de), the GBV Union Catalogue, is a multimaterial bibliographic catalog of seven German federal states. It covers 41.5 million records of books, conference proceedings, periodicals, dissertations, microfilms and electronic resources.

#### Advanced search

You can simply enter words / names / years you want to search for, or you can specify search fields.

Supported fields are:

| field     | description                                                       |
| --------- | ----------------------------------------------------------------- |
| `all`     | all words. Not specifYing a search key results in an "all" search |
| `title`   | title words (converted to GVK's `tit` field)                      |
| `author`  | Searches author, editors, etc. (converted to GVK's `per` field)   |
| `journal` | The journal (converted to GVK's `zti` field)                      |
| `year`    | The year of publication (converted to GVK's `erj` field)          |
| `thm`     | topics                                                            |
| `slw`     | key words                                                         |
| `txt`     | tables of content                                                 |
| `num`     | numbers, e.g. ISBN                                                |
| `kon`     | names of conferences                                              |
| `ppn`     | Pica Production Numbers of the GVK                                |
| `bkl`     | Basisklassifikation-numbers                                       |

Year ranges are not supported. In case a year range is provided, it is ignored. Otherwise, GVK returns no results.

#### Notes

* queries can be combined with `and`. The use of `and` is optional, though.
* in many cases you can use the truncation sign `?`
* spaces in person names are not supported yet. Please use the truncation sign `?` after the first name for several given names. E.g. `per Maas,jan?`

#### Sample queries

* `marx kapital`
* `author=grodke and title=db2`
* `author="Maas,jan?"`

### IEEEXplore

[IEEEXplore](https://ieeexplore.ieee.org/Xplore/home.jsp) is a scholarly research catalog that indexes, abstracts, and provides full-text for articles and papers on computer science, electrical engineering and electronics. IEEEXplore comprises over 180 journals, over 1,400 conference proceedings, more than 3,800 technical standards, over 1,800 eBooks and over 400 educational courses ([Wikipedia](https://en.wikipedia.org/wiki/IEEE_Xplore))

### INSPIRE

[INSPIRE-HEP](https://inspirehep.net/?ln=en) is an open access digital library for the field of high energy physics ([Wikipedia](https://en.wikipedia.org/wiki/INSPIRE-HEP)).

#### Query syntax

The INSPIRE-HEP search function merely passes your search queries onto the INSPIRE-HEP web search, so you should build your queries in the same way. INSPIRE supports the fielded search too. See <https://inspirehep.net/help/knowledge-base/inspire-paper-search/> for advanced help.

The following list shows some of the field indicators that can be used:

| field        | description                                                                                                                                                                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `author`     | search author names                                                                                                                                                                                                                                  |
| `title`      | search in title                                                                                                                                                                                                                                      |
| `journal`    | Here either the common abbreviation or the 5 letter CODEN abbreviation for a journal can be used. Volume and page can also be included, separated by commas. For instance, *j Phys. Rev.,D54,1* looks in the journal Phys. Rev., volume D54, page 1. |
| `collection` | The collecion                                                                                                                                                                                                                                        |
| `fulltext`   | Search in the fulltext                                                                                                                                                                                                                               |
| `k`          | search in keywords                                                                                                                                                                                                                                   |

### Jstor

{% hint style="warning" %}
Currently disabled because of traffic limit
{% endhint %}

[Jstor](https://jstor.org) is an online catalog with access to more than 12 million journal articles, books, and sources in 75 disciplines. [About](https://about.jstor.org)

It is possible to limit the search by adding a field name to the search, such as `field="text"`. The supported fields are:

* `title`: The title of the article
* `author`: an author of the article
* `journal`: journal title (sent as `pt` to Jstor)
* `pt`: publication title

### MathSciNet

[MathSciNet](https://www.ams.org/mathscinet/) is a searchable online bibliographic catalog. It contains all of the contents of the journal Mathematical Reviews (MR) since 1940 along with an extensive author catalog, links to other MR entries, citations, full journal entries, and links to original articles. It contains almost 3 million items and over 1.7 million links to original articles ([Wikipedia](https://en.wikipedia.org/wiki/MathSciNet)).

You can also search directly using the MR number, e.g. `MR3300361`.

### Medline/PubMed

[MEDLINE](https://www.nlm.nih.gov/bsd/pmresources.html) is a bibliographic catalog of life sciences and biomedical information. It includes bibliographic information for articles from academic journals covering medicine, nursing, pharmacy, dentistry, veterinary medicine, and health care. MEDLINE also covers much of the literature in biology and biochemistry, as well as fields such as molecular evolution ([Wikipedia](https://en.wikipedia.org/wiki/MEDLINE)).

The Medline syntax is completely different form the Lucene syntax. One cannot use fielded search there.

There are two ways of specifying which entries to download:

1. Enter one or more MEDLINE IDs (separated by comma/semicolon) in the text field.
2. Enter a set of names and/or words to search for. You can use the operators `and` and `or` and parentheses to refine your search expression. See [OVID operators](https://resourcecenter.ovid.com/site/help/documentation/ospa/en/Content/syntax.htm) for full description.

#### Examples

* `May \[au\] AND Anderson \[au\]`
* `Anderson RM \[au\] HIV \[ti\]`
* `Valleron \[au\] 1988:2000\[dp\] HIV \[ti\]`
* `Valleron \[au\] AND 1987:2000\[dp\] AND (AIDS \[ti\] OR HIV\[ti\])`
* `Anderson \[au\] AND Nature \[ta\]`
* `Population \[ta\]`

### SAO/NASA Astrophysics Data System

[SAO/NASA Astrophysics Data System](https://www.adsabs.harvard.edu) is an online catalog of over eight million astronomy and physics papers from both peer-reviewed and non-peer-reviewed sources. Abstracts are available free online for almost all articles, and full scanned articles are available in Graphics Interchange Format (GIF) and Portable Document Format (PDF) for older articles ([Wikipedia](https://en.wikipedia.org/wiki/Astrophysics_Data_System)).

### SearchAll

{% hint style="info" %}
To be detailed.
{% endhint %}

### Semantic Scholar

[Semantic Scholar](https://www.semanticscholar.org/) is a free, AI-powered, research tool for scientific literature. Developed at the Allen Institute for AI, it uses advances in natural language processing to provide summaries for scholarly papers ([Wikipedia](https://en.wikipedia.org/wiki/Semantic_Scholar)).

### Springer

[Springer](https://www.springer.com) (aka Springer Science+Business Media) is a global publishing company that publishes books, e-books, and peer-reviewed journals in science, technical and medical publishing. Springer also hosts a number of scientific catalogs, including SpringerLink, Springer Protocols, and SpringerImages ([Wikipedia](https://en.wikipedia.org/wiki/Springer_Science%2BBusiness_Media)).

### zbMATH Open

[zbMATH Open](https://zbmath.org) is an abstracting and reviewing service in pure and applied mathematics. Its catalog contains about 4 million bibliographic entries with reviews or abstracts currently drawn from about 3,000 journals and book series, and 180,000 books. The coverage starts in the 18th century and is complete from 1868 to the present by the integration of the "Jahrbuch über die Fortschritte der Mathematik" catalog ([about](https://zbmath.org/about/)).

#### Structured Search

You cannot use the same query syntax as in the one-line search at zbmath.org; you have to stick with the Apache Lucence syntax. This means that your query can be composed of several terms, combined by the logical operators `AND` and `OR`. Queries are case-insensitive. Further operators that can be used are `NOT` for logical negation, `*` for a right wildcard, `" "` for exact phrase matches, and parentheses `( )` to group terms. Optionally, it is possible to add a field name in the form field:text to limit the search results. The supported fields are:

| field       | description                                                                                          |
| ----------- | ---------------------------------------------------------------------------------------------------- |
| `author`    | Author, editor - sent in the `au` field                                                              |
| `title`     | Author, editor - sent in the `ti` field                                                              |
| `journal`   | Journal - sent in the `so` field                                                                     |
| `year`      | Year - sent in the `py` field                                                                        |
| `yearrange` | Year range - sent in the `py` field                                                                  |
| `cc`        | MSC code                                                                                             |
| `dt`        | document type (possible values are `j` for journal articles, `b` for books, `a` for book articles)   |
| `an`        | the zbl id of the document                                                                           |
| `ai`        | internal author identifier                                                                           |
| `la`        | language either as a string or as [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code |
| `ab`        | search for term in reviews or abstracts                                                              |
| `rv`        | reviewer                                                                                             |
| `sw`        | software                                                                                             |
| `en`        | external identifier                                                                                  |
| `br`        | biographical reference                                                                               |

#### Examples

* \`\`[`algebra*`](https://zbmath.org/?q=algebra*): Searches for publications containing a term starting with algebra (e.g. algebra, algebras, algebraic, etc.) in any field.
* [`title="Graph Theory"`](https://zbmath.org/?q=ti%3A+%E2%80%9CGraph+Theory%E2%80%9D): Searches for publications with the exact phrase *Graph Theory* in their `title` field.
* [`an=0492.90056`](https://zbmath.org/?q=an%3A0492.90056): Searches for the document with zbl number *0492.90056*.
* [`author=Berge and title="Graph Theory"`](https://zbmath.org/?q=au%3A+Berge+%26+ti%3A+%E2%80%9CGraph+Theory%E2%80%9D): Searches for entries written by *Berge* with `Graph Theory` in their **title** field.
* [`dt=b author=Berge`](https://zbmath.org/?q=dt%3A+b+au%3A+Berge): Searches for all books written by Berge.
* [`title="Graph Theory" yearrange=2010-2020`](https://zbmath.org/?q=ti%3A+%E2%80%9CGraph+Theory%E2%80%9D+py%3A+2010-2020): Searches for documents containing the exact phrase `Graph Theory` in their **title** that are published between *2010* and *2020*.
* [`so=Combinatorica`](https://zbmath.org/?q=so%3A+Combinatorica): Searches for documents published in the journal `Combinatorica`.
* [`cc="(05C|90C)"`](https://zbmath.org/?q=cc%3A+%2805C%7C90C%29): Searches for documents with **MSC code** in `05C` or `90C`.
* [`la="es | pt"`](https://zbmath.org/?q=la%3A+es+%7C+pt): Searches for documents written in Spanish or Portuguese.
* [`sw=python`](https://zbmath.org/?q=sw%3Apython): Searches for publications using the **software** `python`.
* [`en=arXiv`](https://zbmath.org/?q=en%3AarXiv): Searches for entries with a link to an `arXiv` preprint.
* [`br="Claude Berge"`](https://zbmath.org/?q=br%3AClaude+Berge): Searches for publications with biographical information on `Claude Berge`.


# Add entry using PDFs

JabRef can create entries from PDF files.

## Adding using drag and drop

{% hint style="info" %}
The simplest way to create a new entry based on a single PDF file is to drag & drop the file onto the table of entries (between two existing entries). JabRef will then analyze the PDF and create a new entry.
{% endhint %}

If you drop a PDF onto an entry in the main table or the entry preview in the entry editor, the PDF is simply attached to the entry. To add a new entry based on the PDF meta data, drop it **between** two entries in the main table or onto the empty area in the maintable (available for small libraries). The meta data of the PDF is then parsed and a new entry is added to the library. The PDF file is moved and renamed to the library as default. If you want to copy or just link it, hold the respective modifier keys. On Windows, Ctrl is for copying and Alt is for linking.

### Better filenames

JabRef changes the filenames automatically. You can adapt the pattern at Preferences -> Import ![Preferences - Import](/files/-Mf9oaDgaJcnilptvChM)

Select "Choose pattern" and choose "bibtexkey - title" ![Preferences - Import - Choose pattern](/files/-Mf9oaDhVyG51NlzLANq). This results in the setting `\bibtexkey\begin{title} - \format[RemoveBrackets]{\title}\end{title}`.

This makes the filenames start with the citation key followed by the full title. In the concrete case, `\bibtexkey` only may be the better option as the described bibtey key already contains the title.

More details are given at [Managing Linked Files](/finding-sorting-and-cleaning-entries/filelinks).

## Adding files currently not linked in the library

In case you have numerous PDF files and want to convert them into new entries, JabRef can search automatically for the PDF files, let you select the relevant ones, and convert them into new entries.

This feature is available through **Lookup -> Search for unlinked local files**.

### Preparation: Adjust the JabRef key generation pattern to fit your needs

JabRef offers a BibTeX key generation and offers different patterns described at [BibtexKeyPatterns](/setup/citationkeypatterns).

### Using the Wizard "Search for unlinked local files"

{% hint style="warning" %}
This information is partially outdated. Please help to improve it ([how to edit a help page](/contributing/how-to-improve-the-help-page#editing-help-pages-directly-in-the-browser)).
{% endhint %}

1. Create or open a library (AKA a `.bib` file).
2. Go to **Lookup -> Search for unlinked local files**. (or press `SHIFT + F7`)

   ![FindUnlinkedFiles - Menu](/files/JM9XpqSgXA09agtEBucJ) ![FindUnlinkedFiles - Menu](/files/-MGFBhbCjJ60SzPgNphg)
3. The "Search for unlinked local files" dialog opens.

   <img src="/files/-MGFBhbGsUwXJ9AG2bMT" alt="FindUnlinkedFiles - Initial dialog" data-size="original">
4. Choose a start directory using the "Browse" button.
5. Click on "Search" / "Scan directory".
6. In "Select files", the files not yet contained in the library are shown.

   <img src="/files/8NEm5DY9LtOSRWO5myPz" alt="FindUnlinkedFiles - Found files" data-size="original">
7. Select the entries you are interested in. Note: the button `Export selected files` allows you to export the list of the selected files (a text file containing on each line one filename with its path)
8. Click on `Import`.

   The windows close and the entry table now contains the newly-imported entries.
9. The entry editor with the last imported entry is shown ![FindUnlinkedFiles - 08 - entry editor](/files/-Lr5anQ6eIFKUoO-9Z2m)
10. You can now save the file and are finished.
11. Optional: Click on "General" to see the linked file ![FindUnlinkedFiles - 09 - entry editor - General](/files/-Lr5anQ8NXL-2UEpkZKc)
12. Optional: Click on "BibTeX source" to see the BibTeX source ![FindUnlinkedFiles - 10 - entry editor - BibTeX source](/files/-Lr5anQAWvjoGXEglF7F)
13. Optional: You have to shrink it to see the entry in the entry table, enlarge the JabRef window and use the mouse at the upper border of the entry editor ![FindUnlinkedFiles - 11 - entry editor - shrunk](/files/-Lr5anQCzTqKlRfRYuMN)
14. Optional: Press Esc to show the entry preview ![FindUnlinkedFiles - 12 - entry preview](/files/-Lr5anQEGHmzjJbs2aWJ)

{% hint style="danger" %}
The imported entries may need some editing because all the information gathered from the PDF files may not be accurate (see below "PDFs for which it works").
{% endhint %}

## How .gitignore affects “Find unlinked local files”

JabRef’s “Find unlinked local files” feature respects `.gitignore` files. A `.gitignore` file is a small text file where you list file names or patterns you don’t want to see; tools that support it (like Git and JabRef) skip those files during searches.

## What JabRef does

* Looks for an applicable `.gitignore` in the directory being scanned and applies its patterns.
* Interprets patterns relative to the directory that contains the `.gitignore`.
* Applies all patterns (not “first match wins”).
* Also ignores the `.git` directory and common OS metadata by default, and ignores the `.gitignore` file itself.

## Notes about pattern behavior

* Patterns are matched against the path relative to the `.gitignore`’s directory.
* Patterns like `ignore/*` and `ignore/**` work as in Git to ignore a named subdirectory and its contents.
* Patterns starting with `**/` (for example, `**/*.png`) also match files in the top directory for convenience, so PNGs are ignored both in subdirectories and at the base level.

## Examples

Ignore all PNG images everywhere:

```gitignore
*.png
```

Ignore a specific subdirectory named ignore (and everything inside, including nested folders):

```gitignore
ignore/*
ignore/**
```

Ignore PDFs in any subfolder (and also at the base directory):

```gitignore
**/*.pdf
```

## Tips

* Place a `.gitignore` file in the folder you start the search in (or deeper) to control what is scanned.
* If you use multiple `.gitignore` files in different subfolders, each one applies to the files under its directory.

This behavior mirrors Git’s expectations in practice, while making it straightforward to exclude unneeded files from the unlinked-files search.

## Further information

### PDFs for which it works

The importer works well if there is BibTeX on the first page of the PDF, based on the content has been written for IEEE and [LNCS](https://github.com/latextemplates/LNCS) formatted papers. Other formats are not (yet) supported. In case a DOI is found on the first page, the DOI is used to generate the BibTeX information.

Background:

* Embedding BibTeX inside PDFs is done by the [LaTeX authorarchive package](https://ctan.org/pkg/authorarchive)
* Having BibTeX on the first page is done by the [LaTeX CoverPage package](https://ctan.org/pkg/coverpage)
* Embedding BibTeX data [using XMP is available in JabRef](/advanced/xmp)
* Online parsing is enabled using the online service Grobid.

### Related questions on stack overflow

* [Extract titles from each page of a PDF?](http://stackoverflow.com/q/18071127/873282)
* [Zotero: Extract references from PDF and create new library items from them](https://forums.zotero.org/discussion/16277/extract-references-from-pdf-and-create-new-library-items-from-them)
* [Is there an open source tool for producing bibtex entries from paper PDFs?](http://academia.stackexchange.com/questions/15504/is-there-an-open-source-tool-for-producing-bibtex-entries-from-paper-pdfs)
* [Extracting information from PDFs of research papers](http://stackoverflow.com/questions/1813427/extracting-information-from-pdfs-of-research-papers/3523416)


# Add PDFs to an entry

Finding full text documents online

JabRef offers finding full text documents online. Mostly, these are PDFs file. To use this feature, go to "Lookup" and then select "Find full text documents online".

<figure><img src="/files/SaVr6CDcWBbVAcysT2qf" alt=""><figcaption><p>Lookup > Search for unlinked local files</p></figcaption></figure>

Then, JabRef uses online services to find a PDF. (Implementation details are provided at the [developer's documentation](https://devdocs.jabref.org/code-howtos/fetchers.html).)

<figure><img src="/files/Pu6MjAsMHaifnxftkznA" alt=""><figcaption><p>JabRef looking up full text documents</p></figcaption></figure>

Result of the look up:

<figure><img src="/files/P5fSyHFGoY4dmDNTVBvB" alt=""><figcaption><p>Look up result</p></figcaption></figure>

## Supported sources

JabRef uses different publishers and services to find full text documents. When multiple sources find a PDF for the same entry, JabRef prefers results from higher-trust sources (e.g., a publisher's own site is preferred over a meta-search aggregator).

## Configuring API keys

Some publishers/services require an API key to work. You can configure API keys in **File > Preferences > Web search**.

<figure><img src="/files/1a9SYh4N3ddk7eSLP68l" alt=""><figcaption><p>Configuring API keys in Preferences > Web search</p></figcaption></figure>

For each publisher that supports an API key, click the **"Configure API key"** button next to it to enter your key.

The following publishers require API keys:

| Publisher | API key                                                                                                                                  |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Wiley TDM | **Required.** Without a token, Wiley PDF downloads will fail (Wiley blocks direct downloads). See [Wiley setup](#wiley-tdm-setup) below. |

### Wiley TDM setup

Wiley journals cannot be downloaded directly because Wiley blocks automated access with Cloudflare protection. Instead, JabRef uses Wiley's official [Text and Data Mining (TDM) API](https://onlinelibrary.wiley.com/library-info/resources/text-and-datamining) to retrieve PDFs.

To set it up:

1. Go to the [Wiley TDM page](https://onlinelibrary.wiley.com/library-info/resources/text-and-datamining) and sign in with your Wiley account.
2. Accept the click-through license agreement to receive your personal TDM API token.
3. In JabRef, go to **File > Preferences > Web search**.
4. Find **"Wiley TDM"** in the list, click **"Configure API key"**, paste your token, and check **"Save API key to use in future?"**.

<figure><img src="/files/E0lzhvfmYAhjjnv559Ep" alt=""><figcaption><p>Configuring the Wiley TDM token</p></figcaption></figure>

After configuring the token, **Lookup > Find full text documents online** will be able to download PDFs for Wiley DOIs.

{% hint style="info" %}
The Wiley TDM token is personal and non-transferable. Each user needs to obtain their own token. You can only access articles that your institution subscribes to.
{% endhint %}


# Browser Extension

The official browser extension automatically identifies and extracts bibliographic information on websites and sends them to JabRef with one click.

> [Firefox](https://addons.mozilla.org/en-US/firefox/addon/jabref/?src=external-github) - [Chrome](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh) - [Edge](https://microsoftedge.microsoft.com/addons/detail/pgkajmkfgbehiomipedjhoddkejohfna) - [Vivaldi](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh)

{% hint style="warning" %}
The browser extension is currently non-functional on Chrome, as of \[issue 616]\(<https://github.com/JabRef/JabRef-Browser-Extension/issues/616>).
{% endhint %}

JabRef offers an official browser extension. It automatically identifies and extracts bibliographic information on websites and sends them to JabRef with one click.

When you find an interesting article through Google Scholar, the arXiv or journal websites, this browser extension allows you to add those references to JabRef. Even links to accompanying PDFs are sent to JabRef, where those documents can easily be downloaded, renamed, and placed in the correct folder. [A wide range of publisher sites, library catalogs, and databases are supported](https://www.zotero.org/support/translators).

## Installation and Configuration

Normally, you simply install the extension from the browser store and are ready to go.

> [Firefox](https://addons.mozilla.org/en-US/firefox/addon/jabref/?src=external-github) - [Chrome](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh) - [Edge](https://microsoftedge.microsoft.com/addons/detail/pgkajmkfgbehiomipedjhoddkejohfna) - [Vivaldi](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh)

While Chrome extensions can work in Edge (and will install), JabRef is configured to work with the Edge extension in the Edge Browser, and the Chrome extension in the Chrome Browser. It will not work if they are mixed.

## Usage

After the installation, you should be able to import bibliographic references into JabRef directly from your browser. Just visit a publisher site or some other website containing bibliographic information (for example, [the arXiv](https://arxiv.org/list/gr-qc/pastweek?skip=0\&show=25)) and click the JabRef symbol in the Firefox search bar (or press Alt+Shift+J). Once the JabRef browser extension has extracted the references and downloaded the associated PDF's, the import window of JabRef opens.

You might want to configure JabRef so that new entries are always imported in an already opened instance of JabRef. For this, activate "Listen to remote operation on port" under the "Network" tab of the JabRef Preferences.

## Troubleshooting

### In case you have Adblock Plus extension and JabRef extension doesn't work

1\) Go to [zotero.org](https://zotero.org). 2) Deactivate AdBlock plus extension for the whole domain (zotero.org) by clicking on the Adblock plus extension button and sliding the corresponding slider to allow adds on the whole domain. 3) Close and reopen the browser in order to reload all the extension and their settings. 4) Verify the functioning of the JabRef extension by visiting a page you know is working to extract its bibliographic data (for example, [the arXiv](https://arxiv.org/list/gr-qc/pastweek?skip=0\&show=5)) by pressing the extension button or <kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>J</kbd>.

In case you encounter problems in this procedure refer to issue #241 on GitHub for further help.

### In case script jabrefHost.py doesn't work

Error message `bad interpreter: /usr/bin/python3: no such file or directory` means that python3 is not installed at the expected location. Run `which python3` to see if python3 is installed elsewhere. Then copy that path at the first line of jabrefHost.py maintaining `#!` prefix.

### In case PowerShell script JabRefHost.ps1 cannot be executed due to ExecutionPolicy

Check your ExecutionPolicy by using `Get-ExecutionPolicy -List` in PowerShell. If you get something else than `Undefined` for your `MachinePolicy`, changes are high that this policy is set by Microsoft Group Policy. In this case the option `-ExecutionPolicy Bypass` in JabRefHost.bat won't work. If your `MachinePolicy` says `AllSigned` you can self-sign your JabRefHost.ps1 script, by following tutorials like [windows-10-signing-a-powershell-script-with-a-self-signed-certificate](https://community.spiceworks.com/how_to/153255-windows-10-signing-a-powershell-script-with-a-self-signed-certificate).

## Manual Installation

Most JabRef installations include the necessary files, so test the extension before proceeding with the following instructions. However, sometimes, a manual installation is necessary (e.g. if you use the portable version of JabRef). In this case, please take the following steps:

### Windows

1. Make sure you have at least [JabRef 5.0](https://www.jabref.org/#download) installed.
2. Install the JabRef browser extension: [Firefox](https://addons.mozilla.org/en-US/firefox/addon/jabref/?src=external-github), [Chrome](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh), [Edge](https://microsoftedge.microsoft.com/addons/detail/pgkajmkfgbehiomipedjhoddkejohfna), [Vivaldi](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh)
3. Download the following files and copy them to the same directory as `JabRef.exe`
   * [jabref-firefox.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/windows/jabref-firefox.json)
   * [jabref-chrome.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/windows/jabref-chrome.json)
   * [JabRef.bat](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/windows/JabRefHost.bat)
   * [JabRef.ps1](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/windows/JabRefHost.ps1)
4. Make sure that the correct file name of the `JabRef.bat` file is specified in `JabRefHost.ps1` under `$jabRefExe`.
5. Run the following command from the console (with the correct path to the `jabref.json` file):

   a. For Firefox support:

   ```
   REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\NativeMessagingHosts\org.jabref.jabref" /ve /d "C:\path\to\jabref-firefox.json" /f
   ```

   b. For Chrome/Opera/Brave/Vivaldi and other chromium-based browser support:

   ```
   REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\org.jabref.jabref" /ve /d "C:\path\to\jabref-chrome.json" /f
   ```

   c. For Edge support:

   ```
   REG ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Edge\NativeMessagingHosts\org.jabref.jabref" /ve /t REG_SZ /d "C:\path\to\jabref.json" /f
   ```

   You may need to change the root `HKEY_LOCAL_MACHINE` to `HKEY_CURRENT_USER` if you don't have admin rights.

### Linux

#### Deb, RPM or Portable

1. Download and install the Debian package of [JabRef](https://www.jabref.org/#download) (>= 5.0).
2. Install the JabRef browser extension: [Firefox](https://addons.mozilla.org/en-US/firefox/addon/jabref/?src=external-github), [Chrome](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh), [Edge](https://microsoftedge.microsoft.com/addons/detail/pgkajmkfgbehiomipedjhoddkejohfna), [Vivaldi](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh)
   * Firefox: Download [org.jabref.jabref.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/linux/native-messaging-host/firefox/org.jabref.jabref.json) and put it into
     * `/usr/lib64/mozilla/native-messaging-hosts/org.jabref.jabref.json` (and `/usr/lib/mozilla/native-messaging-hosts/org.jabref.jabref.json`) to install with admin rights for all users
     * `~/.mozilla/native-messaging-hosts/org.jabref.jabref.json` to install without admin rights for the current user
   * Chrome and Brave: Download [org.jabref.jabref.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/linux/native-messaging-host/chromium/org.jabref.jabref.json) and put it into

     * `/etc/opt/chrome/native-messaging-hosts/org.jabref.jabref.json` to install with admin rights for all users
     * `~/.config/google-chrome/NativeMessagingHosts/org.jabref.jabref.json` to install without admin rights for the current user

     Note: Brave is using the Google file structure for `NativeMessagingHosts`, see [Github Issue](https://github.com/brave/brave-browser/issues/5074).
   * Chromium: Download [org.jabref.jabref.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/linux/native-messaging-host/chromium/org.jabref.jabref.json) and put it into
     * `/etc/chromium/native-messaging-hosts/org.jabref.jabref.json` to install with admin rights for all users
     * `~/.config/chromium/NativeMessagingHosts/org.jabref.jabref.json` to install without admin rights for the current user
   * Edge: Download [org.jabref.jabref.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/linux/native-messaging-host/chromium/org.jabref.jabref.json) and put it into
     * `/etc/opt/edge/native-messaging-hosts/org.jabref.jabref.json` to install with admin rights for all users
     * `~/.config/microsoft-edge/NativeMessagingHosts/org.jabref.jabref.json` to install without admin rights for the current user
3. Open the file `org.jabref.jabref.json` with a text editor, and alter it so that its `path` variable matches the location of your `jabrefHost.py` file.

#### Snap

1. Install the snap package of [JabRef](https://snapcraft.io/jabref) (>= 5.0).
2. Install the JabRef browser extension: [Firefox](https://addons.mozilla.org/en-US/firefox/addon/jabref/?src=external-github), [Chrome](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh), [Edge](https://microsoftedge.microsoft.com/addons/detail/pgkajmkfgbehiomipedjhoddkejohfna), [Vivaldi](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh)
3. Connect the appropriate plug for the selected browser:
   * Firefox: `snap connect jabref:hostfs-mozilla-native-messaging-jabref`
   * Chrome: `snap connect jabref:etc-opt-chrome-native-messaging-jabref`
   * Chromium: `snap connect jabref:etc-chromium-native-messaging-jabref`
   * Edge: `snap connect jabref:etc-opt-edge-native-messaging-jabref`

#### Flatpak

1. Install the flatpak of [JabRef](https://flathub.org/apps/details/org.jabref.jabref).
2. Install the JabRef browser extension: [Firefox](https://addons.mozilla.org/en-US/firefox/addon/jabref/?src=external-github), [Chrome](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh), [Edge](https://microsoftedge.microsoft.com/addons/detail/pgkajmkfgbehiomipedjhoddkejohfna), [Vivaldi](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh)

#### Browser

If the browser is installed as a snap or flatpak there is an extra step to enable the extension.

With Firefox installed as a snap (default in Ubuntu):

* `flatpak permission-set webextensions org.jabref.jabref snap.firefox yes`

With Firefox installed as a flatpak:

* Enable the following permission (Note that this will partially disable confinement):
  * via terminal command: `flatpak override --user --talk-name=org.freedesktop.Flatpak org.mozilla.firefox`
  * via Flatseal app: add `org.freedesktop.Flatpak` to the `Session Bus Talk` section for `org.mozilla.firefox`

### macOS

1. Download and install the DMG package of [JabRef](https://www.jabref.org/#download) (>= 5.0).
2. Install the JabRef browser extension: [Firefox](https://addons.mozilla.org/en-US/firefox/addon/jabref/?src=external-github), [Chrome](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh), [Edge](https://microsoftedge.microsoft.com/addons/detail/pgkajmkfgbehiomipedjhoddkejohfna), [Vivaldi](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh)
   * Firefox: If it's not auto-installed for you, download [org.jabref.jabref.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/macos/Resources/native-messaging-host/firefox/org.jabref.jabref.json) and put it into
     * `/Library/Application Support/Mozilla/NativeMessagingHosts/org.jabref.jabref.json` to install with admin rights for all users
     * `~/Library/Application Support/Mozilla/NativeMessagingHosts/org.jabref.jabref.json` to install without admin rights for the current user
   * Chrome and Brave: If it's not auto-installed for you, download [org.jabref.jabref.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/macos/Resources/native-messaging-host/chromium/org.jabref.jabref.json) and put it into

     * `/Library/Google/Chrome/NativeMessagingHosts/org.jabref.jabref.json` to install with admin rights for all users
     * `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/org.jabref.jabref.json` to install without admin rights for the current user

     Note: Brave is using the Google file structure for `NativeMessagingHosts`, see [Github Issue](https://github.com/brave/brave-browser/issues/5074).
   * Chromium based: If it's not auto-installed for you, download [org.jabref.jabref.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/macos/Resources/native-messaging-host/chromium/org.jabref.jabref.json) and put it into
     * `/Library/Application Support/Chromium/NativeMessagingHosts/org.jabref.jabref.json` to install with admin rights for all users
     * `~/Library/Application Support/Chromium/NativeMessagingHosts/org.jabref.jabref.json` to install without admin rights for the current user
   * Edge: If it's not auto-installed for you, download [org.jabref.jabref.json](https://github.com/JabRef/jabref/blob/main/jabgui/buildres/macos/Resources/native-messaging-host/chromium/org.jabref.jabref.json) and put it into

     * `/Library/Microsoft/Edge/NativeMessagingHosts/org.jabref.jabref.json` to install with admin rights for all users
     * `~/Library/Application Support/Microsoft Edge {Channel_Name}/NativeMessagingHosts/org.jabref.jabref.json` to install without admin rights for the current user

     The {Channel\_Name} in Microsoft Edge {Channel\_Name} must be one of the following values: Canary, Dev, Beta.

     When using the Stable release/channel, {Channel\_Name} is not required.
3. Check that the Python script works. In Terminal run `/Applications/JabRef.app/Contents/Resources/jabrefHost.py`. If there are no errors the script is working properly. Stop the script by pressing `Ctrl + D`.

#### Local JabRef installs

org.jabref.jabref.json directs the browser extension to a python script in the JabRef app, which is set to the most common install path by default (`/Applications/JabRef.app/Contents/Resources/jabrefHost.py`). If you have installed JabRef somewhere else, most likely to your local applications folder (`~/Applications/JabRef`), then you will need to update this path to the correct location. For example, in local installs this would be `/Users/USER/Applications/JabRef.app/Contents/Resources/jabrefHost.py`, where `USER` is your username.


# Import

{% hint style="warning" %}
This help page should describe the menu File -> Import (and the various file formats available).

Please, populate this page. Visit our page about [how to edit a help page](/contributing/how-to-improve-the-help-page#editing-help-pages-directly-in-the-browser).
{% endhint %}

{% content-ref url="/pages/-MbDzhEl-lyE7Ak9Zvmw" %}
[Custom import filters](/collect/import/customimports)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEmALhqt0mRBNps" %}
[Import inspection window](/collect/import/importinspectiondialog)
{% endcontent-ref %}

See also:

{% content-ref url="/pages/-MbDzhFA7AQftoSDkmaE" %}
[Export](/collaborative-work/export)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFB-GgplzWPUSYV" %}
[Custom export filters](/collaborative-work/export/customexports)
{% endcontent-ref %}


# Custom import filters

{% hint style="warning" %}
This information is outdated. Please help to improve it ([how to edit a help page](/contributing/how-to-improve-the-help-page#editing-help-pages-directly-in-the-browser)).
{% endhint %}

JabRef allows you to define and use your own importers, in very much the same way as the standard import filters are defined. An import filter is defined by one or more Java *classes*, which parse the contents of a file from an input stream and create BibTex entries. So with some basic Java programming, you can add an importer for your favorite source of references or register a new, improved version of an existing importer. Also, this allows you to add compiled custom importers that you might have obtained e.g. from GitHub without rebuilding JabRef (see "Sharing your work" below).

Custom importers take precedence over standard importers. This way, you can override existing importers for the Autodetect and Command Line features of JabRef. Custom importers are ordered by name.

## Adding a custom import filter

Make sure, you have a compiled custom import filter (one or more `.class` files as described below) and the class files are in a directory structure according to their package structure. To add a new custom import filter, open the dialog box **Options → Manage custom imports**, and click **Add from folder**. A file chooser will appear, allowing you to select the classpath of your importer, i.e. the directory where the top folder of the package structure of your importer resides. In a second file chooser, you select your importer class file, which must be derived from `ImportFormat`. By clicking **Select new ImportFormat Subclass**, your new importer will appear in the list of custom import filters. All custom importers will appear in the **File → Import → Custom Importers** and **File → Import and Append → Custom Importers** submenus of the JabRef window.

Please note that if you move the class to another directory you will have to remove and re-add the importer. If you add a custom importer under a name that already exists, the existing importer will be replaced. Although in some cases it is possible to update an existing custom importer without restarting JabRef (when the importer is not on the classpath), we recommend restarting JabRef after updating a custom-importer. You can also register importers contained in a ZIP- or JAR-file, simply select the Zip- or Jar-archive, then the entry (class-file) that represents the new importer.

## Creating an import filter

For examples and some helpful files on how to build your own importer, please check our download page.

### A simple example

Let us assume that we want to import files of the following form:

```
1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
2003;Boldrin & Levine;Case Against Intellectual Monopoly
2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
```

In your favorite IDE or text editor create a class derived from `ImportFormat` that implements methods `getFormatName()`, `isRecognizedFormat` and `importEntries()`. Here is an example:

```java
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import net.sf.jabref.logic.importer.Importer;
import net.sf.jabref.logic.importer.ParserResult;
import net.sf.jabref.logic.util.FileExtensions;
import net.sf.jabref.model.entry.BibEntry;
import net.sf.jabref.model.entry.BibtexEntryTypes;

public class SimpleCSVImporter extends Importer {

    @Override
    public String getName() {
        return "Simple CSV Importer";
    }

    @Override
    public FileExtensions getExtensions() {
        return FileExtensions.TXT;
    }

    @Override
    public String getDescription() {
        return "Imports CSV files, where every field is separated by a semicolon.";
    }

    @Override
    public boolean isRecognizedFormat(BufferedReader reader) {
        return true; // this is discouraged except for demonstration purposes
    }

    @Override
    public ParserResult importDatabase(BufferedReader input) throws IOException {
        List<BibEntry> bibitems = new ArrayList<>();

        String line = input.readLine();
        while (line != null) {
            if (!line.trim().isEmpty()) {
                String[] fields = line.split(";");
                BibEntry be = new BibEntry();
                be.setType(BibtexEntryTypes.TECHREPORT);
                be.setField("year", fields[0]);
                be.setField("author", fields[1]);
                be.setField("title", fields[2]);
                bibitems.add(be);
                line = input.readLine();
            }
        }
        return new ParserResult(bibitems);
    }
}
```

Note that the example is in the default package. Suppose you have saved it under `/mypath/SimpleCSVImporter.java`. Also, suppose the JabRef-2.0.jar is in the same folder as `SimpleCSVImporter.java` and Java is on your command path. Compile it using a JSDK 1.4 e.g. with

```
javac -classpath JabRef-2.0.jar SimpleCSVImporter.java
```

Now there should be a file `/mypath/SimpleCSVImporter.class`.

In JabRef, open **Options → Manage custom imports** and click **Add from folder**. Navigate to `/mypath` and click the **Select ...** button. Select the `SimpleCSVImporter.class` and click the **Select ...** button. Your importer should now appear in the list of custom importers under the name "Simple CSV Importer" and, after you click **Close** also in the **File → Import → Custom Importers** and **File → Import and Append → Custom Importers** submenus of the JabRef window.

## Sharing your work

With custom importer files, it's fairly simple to share custom import formats between users. If you write an import filter for a format not supported by JabRef, or an improvement over an existing one, we encourage you to post your work on our GitHub page. We'd be happy to distribute a collection of submitted import files or to add to the selection of standard importers.


# Import inspection window

## Purpose

When you import new entries from a supported reference format or fetch entries directly from the Internet, the inspection window allows you to select the entries you want to keep, to [avoid adding duplicated entries](/finding-sorting-and-cleaning-entries/findduplicates), and to perform some simple operations like generating citation keys for the entries or adding them to [groups](/finding-sorting-and-cleaning-entries/groups). If you are importing into an existing database, it is often easier to perform these operations before they are mixed in between the entries of your database.

## The inspection window

Entries are first shown in the inspection window. Note that, if this takes too long (for example), you can click on the button **Stop** at the bottom of the window.

Once the entries displayed in the inspection window, none of them have been added to one of your databases yet.

![Screenshot of the inspection window](/files/-MF2P89Zj0iKfzPcZrtY)

By default, all the entries are selected for importation, as shown by the checked boxes in the *Keep* column. You can select/unselect an entry by clicking on these checkboxes. On the left panel, buttons allow you to **Select all** the entries for importation, or to **Deselect all** the entries.

A left-click on an entry (out of the check box and icons) let you choose it. It displays a preview of the entry below the entry table. As usual, you can choose several entries by using the Shift or the Ctrl keys. Then, pushing the button **Delete** on the left panel will remove the chosen entries from the table.

A right-click on an entry displays a drop-down menu which allows you to:

* delete the entry
* add the entry to a group
* link a local file to the entry
* download the file corresponding to the entry
* automatically set file links to the entry
* attach an URL to the entry

### Duplicated entries

Potential duplicates are pointed out by an icon in the second column. A click on this icon allows you to [check the similarities](/finding-sorting-and-cleaning-entries/findduplicates). A button on the left panel allows you to **Deselect all duplicates** (without inspection).

### Citation key generation

On the left panel, if the box **Generate keys** is checked, keys will be automatically generated on import. You can also choose to generate the keys now by clicking on the button **Generate now**.

### Import into the database

Once you are done with the entry selection, you can add these entries to your database by clicking on **OK** at the bottom of the window. Alternatively, you can **Cancel** the import.


# Organize

Organizing your database with JabRef

## How to find, sort, and clean entries

JabRef is designed to facilitate your workflow.

You can select a subset of entries using the [search bar](/finding-sorting-and-cleaning-entries/search). Within a library, you can organize your entries in a tree-like structure made of [group and subgroups of entries](/finding-sorting-and-cleaning-entries/groups).

You can add information to an entry using the [entry editor](/finding-sorting-and-cleaning-entries/edit-entry), but JabRef can also [complete the information](/finding-sorting-and-cleaning-entries/getbibtexdatafromdoi) for you. And JabRef takes care of the [associated files](/finding-sorting-and-cleaning-entries/filelinks) (PDF, etc.)

Once your database starts to be large, some tidy-up may be needed. JabRef can [check for the integrity of your entries](/finding-sorting-and-cleaning-entries/checkintegrity), [clean them up](/finding-sorting-and-cleaning-entries/cleanupentries), [detect duplicated entries](/finding-sorting-and-cleaning-entries/findduplicates), help you in [merging 2 entries](/finding-sorting-and-cleaning-entries/mergeentries).

Hence, your database is always clean and up-to-date.

{% content-ref url="/pages/-MbDzhEoq-O2OGROWO4d" %}
[Edit an entry](/finding-sorting-and-cleaning-entries/edit-entry)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5QEO4ijs-466B\_5B-" %}
[Groups](/finding-sorting-and-cleaning-entries/groups)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEq8oE1dxym6F4E" %}
[Keywords](/finding-sorting-and-cleaning-entries/keywords)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhErt6pZNpmXagGb" %}
[Mark and grade](/finding-sorting-and-cleaning-entries/specialfields)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7P2h0tzNqQ8wKe" %}
[Searching within the library](/finding-sorting-and-cleaning-entries/search)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7KG9FWFlaYtwxp" %}
[Complete information using online databases](/finding-sorting-and-cleaning-entries/getbibtexdatafromdoi)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEuncEVPpPI3i6-" %}
[Manage associated files](/finding-sorting-and-cleaning-entries/filelinks)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEvJtVJHbTmKane" %}
[Manage field names and their content](/finding-sorting-and-cleaning-entries/managing-field-names-and-their-content)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEwGSKr\_DrwAgI5" %}
[Best practices](/finding-sorting-and-cleaning-entries/bestpractices)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7I-7o8T9aJ872k" %}
[Cleanup entries](/finding-sorting-and-cleaning-entries/cleanupentries)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7HGMIVce571fJW" %}
[Check integrity](/finding-sorting-and-cleaning-entries/checkintegrity)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7JcF4YeOry73GY" %}
[Find duplicates](/finding-sorting-and-cleaning-entries/findduplicates)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7MRp8DSJmn5J2v" %}
[Merge entries](/finding-sorting-and-cleaning-entries/mergeentries)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7O0o0qCqGUYD2T" %}
[Save actions](/finding-sorting-and-cleaning-entries/saveactions)
{% endcontent-ref %}


# Edit an entry

Modify the content of an entry

Entry edition is done in the [entry editor](/advanced/entryeditor).

To open the entry editor for a specific entry, you can either:

* double-click on the entry in the table of entries
* select the entry and press `Enter`
* select the entry and go to the menu **View → Open entry editor**
* select the entry and press `CTRL + E`

Then you can modify the content of the entry. When done, click on the top left-hand corner of the entry editor or press `ESC` to close the entry editor and go back to the table of entries.


# Groups

Structure your bibliography to your needs

Groups allow structuring of bibliographic libraries in a tree-like way that is similar to organizing files on disk in directories and sub-directories. The two main differences are:

* While a file is always located in exactly one directory, an entry may be contained in more than one group.
* Groups may use certain criteria to dynamically define their content. New entries that match these criteria are automatically added to these groups. This feature is not available in common file systems, but in several Email clients (e.g. Thunderbird and Opera).

Selecting a group shows the entries contained in that group. Selecting multiple groups shows the entries contained in any group (union) or those entries common in all selected groups (intersection), depending on the current settings. All this is explained in detail below.

{% hint style="info" %}
Group definitions are database-specific.​
{% endhint %}

## Groups interface and first steps

The group interface is shown in the side pane on the left of the screen. It can be toggled on or off by pressing `Alt + 3` or by the menu **View → Groups**. The interface has several buttons, but most functions are accessed via a context menu (i.e. a right-click). Drag-and-drop is also supported.

![The main group interface](https://user-images.githubusercontent.com/6931104/188160207-63a74c16-8ce2-465a-8b2d-61171cd98608.png)

### Creating a group and adding entries to it

To create a group and manually assign entries to it, press the **Add group** button located at the bottom of the pane, enter a name for the group, then press (leaving all values at their defaults). Now select the entries to be assigned to the group, and drag-and-drop them to the group (or use **Add selected entries to this group** in the context menu of the group interface). Finally, select the group to see its content. Only the entries you just assigned to the group should be displayed in the entry table.

You can also automatically fill a group based on keywords. For this, you need to use a different [type of groups](#types-of-groups).

When you have numerous groups, the one of interest can be displayed by typing its name in the ''Filter groups'' field located near the top of the group pane.

### Display union or intersection of groups

Selecting one group shows the entries contained in that group (accounting for [hierarchical settings](#hierarchical-context)).

When selecting several groups, you can intersect or unionize them: *Union* displays all the entries of the selected groups while *Intersection* displays all the entries shared among the selected groups.

![Button for toggling union/intersection](https://user-images.githubusercontent.com/6931104/188161059-7f91441b-19d4-411f-a065-1d62613f5edc.png)

For example, if you have a group for the author 'Smith' and another one for the author 'Doe', selecting the groups displays the entries that they co-authored if 'Intersection' is selected. If 'Union' is selected, the entries that at least one of them authored are displayed.

To test this, create two groups having some entries in common. Click the **Intersection/Union** button and make sure that **Union** is selected. Now select both groups. You should see all entries contained in any of the two groups. Click again on the **Intersection/Union**. This selects **Intersection**. Now you should see only those entries contained in both groups (which might be none at all if groups do not share entries, or exactly the same entries if both groups contain the same entries).

## Group tree. Creating and removing groups

Just like directories, groups are structured like a tree, with the group *All Entries* at the root. By right-clicking on a group and selecting **Add subgroup**, you can add a subgroup to the selected group. The **Add group** button (at the bottom of the pane) lets you create a new subgroup of the group **All Entries**, regardless of the currently selected group(s). The context menu also allows removing groups and/or subgroups, and to sort subgroups alphabetically. Moving groups to a different location in the tree can be done by drag-and-drop.

## Group dialog window

The properties of a group can be defined in the 'Edit group' dialog window (the same window is displayed when creating a new group). To modify the group properties, right-click on the group name in the group pane and select **Edit group** in the context menu.

![Edit group window](/files/1eHJhBN8fgZxlNFulBO1)

### Name

Defines the name of the group, as displayed in the group pane.

### Description

A description of the group, to help you remember what it is about. This description is displayed when hovering the mouse over the group name.

### Icon and color

An icon can be displayed in front of the group name. Choose your favorite icon among the ones available at [https://materialdesignicons.com/](https://materialdesignicons.com), and enter its name of the field *Icon* (replacing any hyphens (`-`) with underscores (`_`)). The color of the icon can be set in the field *Color*.

![](/files/1K4nIu5EU3p4TTXag0dW)

### Hierarchical context

The displayed entries depend on the hierarchical context of the group. When a group is selected, the displayed entries can be:

* **independent** of its supergroup and of its subgroups.
* a **union** between the entries of the group and of its subgroups.
* an **intersection** between the entries of the group and of its supergroup.

#### Independent group

By default, a group is **independent** of its position in the group's tree: When selected, the table of entries shows only the group's content (i.e. all of its entries).

#### Intersection between a group and its supergroup

For a group defined with a hierarchical context *Intersection*, only the entries contained in *both* the group and its supergroup are displayed when the group is selected.

This is especially relevant for groups based on keywords or search expression, where it is often useful to define a group that intersects its supergroup. For example, consider a supergroup containing entries with the keyword *distribution* and a subgroup containing entries with the keyword *gauss*. With the subgroup *gauss* defined as an intersection (of its supergroup), selecting the subgroup *gauss* displays entries that match both conditions, i.e. are concerned with Gaussian distributions. Note that entries that only belong to the subgroup *gauss* will not be shown, i.e. for an entry to be displayed when selecting *gauss*, it must be assigned to both the subgroup *gauss* and the supergroup *distribution*. By adding another intersection group for *laplace* to the supergroup *distribution*, the grouping can easily be extended to Laplace distributions.

#### Union between a group and its subgroups

The union of a group and its subgroups is the logical complement of the intersection: when defined as *union*, selecting the group displays *both* the group's own entries and its subgroups' entries.

For example, you can create a group for your references about music, and then subgroups about the music styles (classic, jazz, rock, etc.). By setting the group "Music" as *union*, when you subsequently add references to a subgroup, they will automatically appear in group "Music" as well (without additional action).

### Nesting (sub)groups

You can populate your Group pane by configuring JabRef to use the bibtex source's `keywords = {...},` by clicking the `+` icon and following the [previous instructions](#specified-keywords). You can nest subgroups by using the right chevron `>` ([see here](https://github.com/JabRef/jabref/pull/2703/files#diff-e8f986c28ee8a35397cde5cb1352d4662f62be7085cd7d8856db279f1205245dR17)). You achieve this by editing the `keywords = {...},` bibtex field in the entry source by placing `>` between any two keywords where the left-hand keyword is the parent group and the right-hand keyword will be its sub-group. The library entry will be placed there. Note: when you select `+` to do this, the first delimiter must be the right chevron, and the second must be whichever field separator you have configured (by default a comma `,`).

### Mixing refining groups with including groups

If a refining group is a subgroup of a group that includes its subgroups -- the refining group's siblings --, these siblings are ignored when the refining group is selected.

### Types of groups

JabRef has six types of groups:

* **Explicit selection**. The group contains entries that were assigned manually. It behaves like a directory on disk, and contains only those entries that you explicitly assigned to it.
* **Searching for a keyword**. The group contain entries in which a certain field (e.g. `author`) contains a certain keyword (e.g. `Smith`). This method does not require manual assignment of entries but uses information that is already present in the database.
* **Free search expression**. Similar to **Searching for a keyword**, but for several keywords in several fields.
* **Specified keywords**. This feature will gather all words found in a specific field of your choice, and create a group for each word.
* **Cited entries**. The group contains the entries cited in a LaTeX document, based on its *.aux* file.
* **Date**. The group contains all entries that satisfy a certain date criteria.

#### Explicit selection

Groups based on explicit selection are populated only by manual assignment of entries.

![Fields for collecting by using an explicit selection](/files/1xzxTZGw2QTVgajUiO7m)

After creating an explicit-selection group, you select the entries to be assigned to it and use either drag-and-drop or the context menu **Add selected entries to this group** of the group interface.

To remove entries from an explicit-selection group, select them and use the context menu **Remove selected entries from this group** of the group interface.

{% hint style="info" %}
This method of grouping requires that all entries have a unique citation key. In case of missing or duplicate citation keys, the assignment of the affected entries cannot be correctly restored in future sessions.
{% endhint %}

#### Searching for a keyword in a field

This method groups entries in which a specified *field* (e.g. *author*) contains a specified *keyword* (e.g. *Smith*). The mentioned example will group all entries referring to the author *Smith*.

![Fields for collecting by searching for a keyword](/files/Csat8QD9xYkwXcM7D4iV)

The search can be case-sensitive or not (checkbox 'Case sensitive'). The search can either be done as a plain-text or a regular-expression search (checkbox 'Regular expression').

Obviously, this will work only for entries including the specified grouping field, and the quality of the grouping will depend on the content accuracy.

The content of the group is updated dynamically whenever the database changes: JabRef allows to manually assign/remove entries to/from the group by simply appending/removing the search term to/from the content of the grouping field. For example, if you add the keyword `A` to an entry, this entry will be added to the dedicated group automatically. This makes sense only for the `keywords` field or for self-defined fields, but obviously not for fields like `author` or `year`.

#### Using a free-form search expression

This is similar to the above, but rather than search for a single search term on a single field, a [search expression syntax](/finding-sorting-and-cleaning-entries/search) can be used. It supports logical operators (`AND`, `OR`, `NOT`) and allows searching multiple fields.

![Fields for collecting by a free-form search expression](/files/T6ndCp81LU50aMBDWnnk)

For example, the search expression `keywords=regression and not keywords=linear` groups entries concerned with non-linear regression.

The content of the group is updated dynamically whenever the database changes.

#### Specified keywords

With the group type "Specified keywords", you can quickly create a set of groups appropriate for your database. This feature will gather all words found in a specific field of your choice, and create a group for each word. This is useful for instance if your database contains suitable keywords for all entries. By auto-generating groups based on the `keywords` field, you should have a basic set of groups at no cost. If you have an entry with "keywords = {A, B}", then this group type creates subgroups "A" and "B" both containing the entry.

You can also specify characters to ignore, for instance, commas used between keywords. These will be treated as separators between words, and not part of them. This step is important for combined keywords such as `laplace distribution` to be recognized as a single semantic unit. (You cannot use this option to remove complete words. Instead, delete the unwanted groups manually after they were created automatically.)

![Fields for collecting by specified keywords](/files/SLkgsT0jvGfW7m0OWBu3)

If you enter `author` in the first *Field to group by*, a group will be created for each author's complete name (e.g. `John Smith`), containing all entries authored by this person. But if you enter `author` in the second *Field to group by*, a group will be created for each author's last name only (e.g. `Smith`), containing all entries authored by persons with this last name.

The content of the group is updated dynamically whenever the database changes.

#### Using the cited entries of a LaTeX document

The group contains the entries cited in a LaTeX document, based on its '.aux' file. The .aux file has to be specified.

![Fields for collecting by cited entries](/files/QWSdN4jcqnqrHWEKAQ2S)

The content of the group is updated dynamically whenever the `.aux` file changes.

#### Using the publication date

This feature groups entries based on the date of a selected field.

![Fields for collecting by date](/files/Vd6HLiPH195EZbgYZazV)

The field *Field to extract date from* specifies the entry's field from which the date is extracted. The field *Date grouping option* specifies how the entries are grouped, either by year, by month or by both year and month.

## Group color bars in the entry table

To see easily to which groups an entry belongs to, the entry table has a column dedicated to groups. For each entry, a set of color bars is displayed. The number of bars and their colors depend on the groups to which the entry belongs to.

![](/files/-MLiY2Ajcje0kI4YrQY5)

By hovering the mouse on this column, you can see the list of groups to which an entry belongs to.

The "groups" column is displayed by default. Using the menu **File → Preferences**, tab **Entry table**, you can:

* remove the "groups" column by clicking on the bin icon next to the item "Groups".
* add the "groups" column by selecting the "Groups" item in the drop-down menu, and clicking on the **+** button located to the right of the drop-down menu.

![Preferences for tab Entry table](https://user-images.githubusercontent.com/6931104/188165479-1beeed58-638b-4ef8-97d2-70bd350753fa.png)

## Groups and searching

When viewing the contents of selected group(s), a search can be performed within these contents using the [regular search facility](/finding-sorting-and-cleaning-entries/search).

## Preferences about groups

General preferences for groups can be accessed using **File → Preferences**, tab **Groups**.

![Preferences for tab Groups](/files/JvJCWNCS8xgBp49D0gMw)

### View

When selecting multiple groups, you can choose to:

* display only entries belonging to all selected groups (intersection)
* display all entries belonging to one or more of the selected groups (union). This is the default option.

### Automatically assign new entry to selected grouping

The checkbox "Automatically assign new entry go selected grouping" makes it possible to automatically assign new entries to selected groups. If checked (default), upon selection of one or more groups, all the new entries created will be assigned to the selected groups. This works both for entries created from the menu button or entries pasted from the clipboard. If unchecked, new entries are not assigned to groups automatically.

### Display count of items in group

If checked (default), the number of entries in each group is displayed in the group name, at the right of the group pane.

{% hint style="warning" %}
Be careful, this can slow down JabRef when a library has numerous groups.
{% endhint %}

## Groups in the library file

Groups are saved as a `@COMMENT` block in the `.bib`-file and are shared among all users (future versions of JabRef might support user-dependent groups).


# Keywords

Keywords help you in organizing, sorting and searching your entries.

## The field "keywords"

Keywords can be added to your entries in a specific field. In the entry editor, the keywords field is displayed in the Main tab. There, you can add new keywords to an entry by typing it in. If auto-completion is activated for the field keywords (**File → Preferences → Entry editor**), suggestions are given based on existing keywords.

By default, the keyword separator is a comma. It can be redefined in the preferences (**File → Preferences → Entry**). To use the separator character within a keyword itself, you can escape it with a backslash (`\`).

{% hint style="info" %}
When importing BibTeX entries, JabRef automatically detects keyword delimiters (such as `;`) that differ from your configured separator and normalizes them on import.
{% endhint %}

{% hint style="info" %}
If entries already in your library have a keyword separator differing from the prescribed one, you can use menu **Edit → Find and replace**. For example, you may want to replace semi-columns (;) by commas (,). Select the radio button "Limit to Fields" and type in "keywords" as the relevant field.​​
{% endhint %}

Additionally, the [special field](/finding-sorting-and-cleaning-entries/specialfields) values (relevance, priority, etc.) can be added to the keywords field automatically. This will allow you to group, sort, and search your library based on the special field values. See in **File → Preferences → Entry table** the item "Special fields" and select "Synchronize with keywords".

## Management of keywords

### Managing the keywords of specified entries

Select at least one entry and go to **Edit → Manage keywords**.

![](/files/-MLisFJRHAelb38pO1nw)

The keyword list is displayed in two modes:

* the keywords shared by ALL of the selected entries.
* the keywords appearing in ANY of the selected entries.

You can edit a keyword by double-clicking on it, or by clicking on the pencil icon. A keyword can be deleted by clicking on the minus icon.

### List of often-used keywords

To fasten the addition of often-used keywords, JabRef can store the list of your preferred keywords.

Go to **File → Manage content selectors**.

![](/files/Tg2qtq88YQCSF0AoYfdh)

First, click on the field name "Keywords". Then, enter the list of your preferred keywords. Now, when you start to type one of your preferred keywords, JabRef will display a list of the matching ones (independently of the auto-completion). For more details, see the help section about [Managing content selectors](/advanced/contentselector).

## Searching for entries based on keywords

You can search for entries having specific keywords. For this, use a regular expression search, such as `anykeyword matches apple` or `keywords = modell?ing`. For more details, see the help section about [Searching within the library](/finding-sorting-and-cleaning-entries/search).

## Grouping entries based on keywords

Different types of groups can be created based on the values of the field keywords. See the help section about [Groups](/finding-sorting-and-cleaning-entries/groups).


# Mark and grade

Qualify your entries with tags that make sense to your work.

A set of 6 special fields allows you to tag your entries in order to rate read papers, indicate their relevance to your work, indicate that their quality has been assured, etc. Internally, each special field is stored in a separate BibTeX field.

This feature has to be activated in **File → Preferences → Entry Table** by checking the item `Enable special fields`.

The status of each special field can be displayed in the table of entries as dedicated columns.

![Six special fields can be displayed in the table of entries](/files/-MbDzkxG5BDhgt2IkCYn)

Like any other field, the special field columns can be turned on and off individually in **File → Preferences → Entry Table.**

You can see the value of a special field by:

* clicking in the column.
* a right-click on an entry.
* the menu **Edit.**

## Types of Fields

### Relevance

An entry can be marked as relevant: a black-and-white star is displayed (in the first column of the image below).

![](/files/-MbDzkxG5BDhgt2IkCYn)

### Read status

The read status can be set to "No" (no symbol in the column), to "Skimmed" (an orange eye), or to "read" (a green eye).

### Ranking

JabRef offers a rank from one to five yellow stars to rate your papers. By default, no rank is given.

### Quality assured

An entry may be marked as quality assured (fourth column in the image below). For example, you can mark the entries for which a thorough check of the field contents has been done.

![](/files/-MbDzkxG5BDhgt2IkCYn)

### Priority

You can set the priority of an entry from low (red flag) to high (green flag). For example, you can use it to prioritize unread papers.

### Printed

This field allows to state is the paper has been printed or not (sixth column in the image above).

## Configuration of the storage mode in the library

{% hint style="info" %}
Pre JabRef 5.2

The way the special fields are stored in the libraries can be set in **File → Preferences → Entry Table**.​

2 modes of storage are available:

* With *Write values of special fields as separated fields* (default configuration since version 5.2)*,* each special field is stored in a separate field of the entry.
* With *Synchronize with keywords* enabled, the values of the special fields are stored twice: in a separated field and as a keyword. Each change in a special field is reflected in the keyword field, and, vice versa, each change in a keyword leads to a change in the special field. Additionally, when loading a database or pasting a new entry, the keywords are used to set the special field values.
  {% endhint %}


# Comment on an entry

Add comments on an entry

One can add free text to an entry. This is possible in the "Comments" tab of JabRef.

There is the general "comments" field.

JabRef offers to separate comments from as well as user-specific comments field.

The following screenshots show the comments for the user `koppor`. As default, general comments are managed through the field `comment`. In addition, the field `comment-koppor` stores the comments of the user koppor.

<figure><img src="/files/6ctkPeiVvc0Muu0qjhOs" alt=""><figcaption><p>JabRef's entry editor showing two comment fields</p></figcaption></figure>

Now, lets assume, the library (.bib File) is shared among different users. `koppor` closed the library and opened it later again. He sees that a user `otheruser` has written a comment:

<figure><img src="/files/wPFrMi8gpz7BSqF49S3S" alt=""><figcaption><p>JabRef showing the comment of the user "otheruser".</p></figcaption></figure>

Now, koppor desides, that he does not want to add any comments in JabRef, so he pushes the "Hide user comments" button. Then, JabRef does not display the comment field for koppor's user any more:

<figure><img src="/files/WHK3xjRI1GlFbZBILFXC" alt=""><figcaption><p>JabRef's entry editor showing the general comment field and a comment of another user.</p></figcaption></figure>

A bit later, koppor thinks, he wants to put comments again. To achieve that, he needs to navigate to File -> Preferences -> Entry editor. Then, he needs to add a checkmark to "Show user comment fields". then, he needs to press "Save" to save the preferences.

<figure><img src="/files/vjvNrEd8KwMm2c32TdOp" alt=""><figcaption><p>Preference to enable user-specific comments</p></figcaption></figure>

Then, JabRef's entry editor shows the field "Comment-koppor" again.


# Searching within the library

The search bar is located in the icon bar.

![Screenshot of the search bar](/files/VI6LaKMA2hUYNPXtZOXE)

To make the cursor jump to the search field, you can:

* Click in the search field.
* Press <kbd>Ctrl</kbd> + <kbd>F</kbd>.

## Search history

To find the search history, you can right click in the search field. Only ten recent searches will be displayed in the sub-menu. You can find clear history button under your search history.

## Simple search <a href="#simple-search" id="simple-search"></a>

In a normal search, the program searches your library for all occurrences of the words in your search string, once you entered it. Only entries containing all words will be considered matches. To search for sequences of words, enclose the sequences in double-quotes. For instance, the query **progress "marine aquaculture"** will match entries containing both the word "progress" and the phrase "marine aquaculture".

All entries that do not match are hidden, leaving for display the matching entries only.

To stop displaying the search results, just clear the search field, press Esc or click on the "Clear" (`X`) button.

## Search within specific fields

To search for entries whose author contains **miller**, enter: `author = miller`. The `=` sign is actually a shorthand for `contains`. Searching for an exact match is possible using `matches` or `==`.

If a field is not given, all fields are searched and one can mix the selection: `video and year == 1932` will search for entries with any field containing `video` and the field `year` being exactly `1932`.

### Pseudo fields

JabRef defines the following pseudo fields:

|                    |                                      |                                                                                                                                                                                                                                                                    |
| ------------------ | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Pseudo field**   | **Purpose**                          | **Example**                                                                                                                                                                                                                                                        |
| `anyfield` / `any` | Search in any field                  | `anyfield contains fruit`: search for entries having one of its fields containing the word **fruit**. This is identical to just writing `apple`. It may be more useful as `anyfield matches apple`, where one field must be exactly `apple` for a match.           |
| `anykeyword`       | Search among the keywords            | `anykeyword matches apple`: search for entries which have the word **apple** among its keywords. However, as this also matches `pineapple`, it may be more useful in searches of the type `anykeyword matches apple`, which will not match `apples` or `pineapple` |
| `key`              | Search for citation keys             | `citationkey == miller2005`: search for an entry whose citation key is **miller2005**                                                                                                                                                                              |
| `entrytype`        | Search for entries of a certain type | `entrytype = thesis`: search entries whose type (as displayed in the `entrytype` column) contains the word **thesis** (which would be **phdthesis** and **mastersthesis**)                                                                                         |

## Search for terms containing spaces

If the search term contains spaces, enclose it in quotes. Do *not* use spaces in the field specification! E.g., to search for entries with the title "image processing", type: `title = "image processing"`

## Search using parentheses, `and`, `or` and `not`

To search for entries with the title *or* the keyword "image processing", type: `title|keywords = "image processing"`. To search for entries *without* the title or the keyword "image processing", type: `title|keywords != "image processing"` It is also possible to chain search expressions. In general, you can use `and`, `or`, `not`, and parentheses as intuitively expected:

`(author = miller or title|keywords = "image processing") and not author = brown and != author = blue`

| Logical Operator / Symbol | Explanation                                                                                     |
| ------------------------- | ----------------------------------------------------------------------------------------------- |
| XY                        | X followed by Y                                                                                 |
| X\|Y                      | Either X or Y                                                                                   |
| (X)                       | X, as a capturing group                                                                         |
| !=                        | tests if the search term is *not* contained in the field (equivalent to `not ... contains ...`) |

## Search settings

At the right of the search text field, two buttons allow for selecting some settings:

* Regular expressions
  * Whether the search query uses regular expressions.
* Case sensitivity
  * Whether the search query is case-sensitive.

This applies to all "unfielded" search terms. Meaning: All search terms not specifying a field (e.g., `title`).

## Modifiers for fields

{% hint style="warning" %}
This has changed with JabRef v6
{% endhint %}

JabRef offers operators for the fielded search. The general idea is to have `=` for contains search and `==` for exact matches. Then, the `!` can be used to force case-sensitive matching (when used at the end) and as negation, when used in front. Finally, the `~` sign is used to enable regular-expression-based search.

This leads to following operator combinations:

| Operator | Explanation                           |
| -------- | ------------------------------------- |
| `=`      | Case insensitive contains             |
| `=!`     | Case sensitive contains               |
| `==`     | Exact match, case insensitive         |
| `==!`    | Exact match, case sensitive           |
| `=~`     | Regex check, case insensitive         |
| `=~!`    | Regex check, case sensitive           |
| `!=`     | Negated case insensitive contains     |
| `!=!`    | Negated case sensitive contains       |
| `!==`    | Negated exact match, case insensitive |
| `!==!`   | Negated exact match, case sensitive   |
| `!=~`    | Negated regex check, case insensitive |
| `!=~!`   | Negated regex check, case sensitive   |

Remember, the regex option has no effect on "field = value" expressions. To use regex with field names, the expression must have the form "field =\~ value", which will apply the regular expression regardless of the ".\*" regex option. To put it another way, using `field = myterm` explicitly disables regex while `field =~ myterm` explicitly enables it, *on this term only without affecting the rest of the search.* Note that the "abc" case-sensitive option follows the same principle.

The idea makes sense, because it allows regex and non-regex terms to coexist in the same search.

However, in practice this is totally unintuitive and not worth the trade-off. My suggestion for the maintainers is to keep "field =\~ value" explicit (always apply regex syntax for this term) and make "field = value" apply standard or regex syntax, depending on the regex button/checkmark. In other words, `=` and `=~` should be treated as equivalent when the regex option is enabled.

Personally, I keep regex enabled all the time, so adding escape characters as needed has become second nature.

This is how the search currently works in the development version.

| Terms                          | Regex | Term 1                                    | Term 2                                 |
| ------------------------------ | ----- | ----------------------------------------- | -------------------------------------- |
| `title =~ pa*ediatric AND 1.0` | Off   | Matches "paediatric", "pediatric"         | Matches "1.0"                          |
| `title =~ pa*ediatric AND 1.0` | On    | Matches "paediatric", "pediatric"         | Matches "1.0", "1+0" "1/0", "1q0", ... |
| `title = pa*ediatric AND 1.0`  | Off   | No match. Regex is disabled               | "1.0"                                  |
| `title = pa*ediatric AND 1.0`  | On    | No match. Regex is disabled for this term | Matches "1.0", "1+0" "1/0", "1q0", ... |

## Search using regular expressions <a href="#regular-expressions" id="regular-expressions"></a>

In order to only search for content within specific fields and/or to include logical operators in the search expression, a special syntax is available in which these can be specified. Both the field specification and the search term support regular expressions.

Regular expressions (RegEx for short) define a language for representing patterns matching text, for example when searching. There are different types of RegEx languages. JabRef uses regular expressions as defined in Java. For extensive advanced information about Java's RegEx patterns, please have a look at the [Java documentation](https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/regex/Pattern.html) and at the [Java tutorial](https://docs.oracle.com/javase/tutorial/essential/regex/).

#### Regular expressions and casing

By default, regular expressions do not account for upper/lower casing. Hence, while the examples below are all in lower case, they match also upper- and mixed case strings.

If casing is important to your search, activate the case-sensitive button.

#### Searching for entries with an empty or missing field

* `.` means: any character
* `+` means: one or more times

`author != .+` returns entries with empty or no author field.

* `^` means: the beginning of a line
* `[a-zA-Z]` means: a through z or A through Z, inclusive (range)
* `$` means: the end of a line
* `X{n}` means: X, exactly n times

`owner != ^[a-zA-Z]{3}$` returns empty and non-three-letter owners

#### Searching for a given word

* `\b` means: word boundary
* `\B` means: not a word boundary

`keywords = \buv\b` matches *uv* but not *lluvia* (it does match *uv-b* however)

`author = \bblack\b` matches *black* but neither *blackwell* nor *blacker*

`author == black` does not match *john black*, but `author = \bblack\b` does.

`author = \bblack\B` matches *blackwell* and *blacker*, but not *black*.

#### Searching with optional spelling

* `?` means: none or one copy of the preceding character.
* `{n,m}` means: at least *n*, but not more than *m* copies of the preceding character.
* `[ ]` defines a character class

`title =neighbou?r` matches *neighbour* and *neighbor*, and also *neighbours* and *neighbors*, and *neighbouring* and *neighboring*, etc.

`title = neighbou?rs?\b` matches *neighbour* and *neighbor*, and also *neighbours* and *neighbors*, but neither *neighbouring* nor *neighboring*.

`author = s[aá]nchez` matches *sanchez* and *sánchez*.

`abstract = model{1,2}ing` matches *modeling* and *modelling*.

`abstract = modell?ing` also matches *modeling* and *modelling*.

`year == 200[5-9]|201[0-1]​`specifies the range of years 2005-2011 (`200[5-9]` specifies years 2005-2009;`|` means "or"; `201[0-1]` specifies years 2010-2011).

`author = (John|Doe)`matches entries written by either John or Doe.

`author = (John|Doe).+(John|Doe)`matches entries written by both John or Doe.

#### Searching for strings with a special character (`()[]{}\^-=$!|?*+.`)

If a special character (i.e. `(` `)` `[` `]` `{` `}` `\` `^` `-` `=` `$` `!` `|` `?` `*` `+` `.` ) is included in your search string, it has to be escaped with a backslash, such as `\}` for `}`.

It means that to search for a string including a backslash, two consecutive backslashes (`\\`) have to be used: `abstract = xori{\\c{c}}o` matches *xoriço*.

#### Searching for strings with double quotation marks (`"`)

The character `"` has a special meaning: it is used to group words into phrases for exact matches. So, if you search for a string that includes a double quotation, the double quotation character has to be replaced with the hexadecimal character 22 in ASCII table `\x22`.

Neither a simple backslash `\"`, nor a double backslash `\\"` will work as an escape for `"`. Neither `author = {\"o}quist` with regular expression disabled, nor `author = \{\\\"O\}quist` with regular expression enabled, will find anything, even if the name `{\"o}quist` exists in the library.

Hence, to search for `{\"o}quist` as an author, you must input `author = \{\\\x22o\}quist`, with regular expressions enabled (Note: the `\`, `{`, `_` and the `}` are escaped with a backslash; see above).

#### Greedy quantifiers

| Quantifier | Explanation                             |
| ---------- | --------------------------------------- |
| X?         | X, once or not at all                   |
| X\*        | X, zero or more times                   |
| X+         | X, one or more times                    |
| X{n}       | X, exactly n times                      |
| X{n,}      | X, at least n times                     |
| X{n,m}     | X, at least n but not more than m times |

#### Reluctant quantifiers

| Quantifier | Explanation                             |
| ---------- | --------------------------------------- |
| X??        | X, once or not at all                   |
| X\*?       | X, zero or more times                   |
| X+?        | X, one or more times                    |
| X{n}?      | X, exactly n times                      |
| X{n,}?     | X, at least n times                     |
| X{n,m}?    | X, at least n but not more than m times |

#### Possessive quantifiers

| Quantifier | Explanation                             |
| ---------- | --------------------------------------- |
| X?+        | X, once or not at all                   |
| X\*+       | X, zero or more times                   |
| X++        | X, one or more times                    |
| X{n}+      | X, exactly n times                      |
| X{n,}+     | X, at least n times                     |
| X{n,m}+    | X, at least n but not more than m times |


# Complete information using online databases

JabRef can fetch automatically additional information about your entries. It can even get the publication file!​

* To *find identifiers* (arxiv, DOI)\_: select the entries and go to the menu **Lookup → search document identifier online**.​
* To *find the DOI*: open the [entry editor](/advanced/entryeditor), and in the Identifiers section of the Main tab, click on the button **Lookup DOI**.
* To *find the document* related to an entry: select the entry and to the menu [**Lookup → search full text documents online**](/collect/add-pdfs-to-an-entry).​

Be aware: The options above require your entry or entries to be filled with enough and correct bibliographic information. If the entry holds incomplete or inaccurate data, fetching the identifier or text document my fail.

## Completing information based on DOI or ISBN

JabRef can help you complement your entries with bibliographic data, which is associated with their registered DOI or ISBN. This is a very reliable way of obtaining correct bibliographic information and is very much recommended.

*The following features require your entry to have a DOI or ISBN and are disabled / greyed out otherwise.*

* Option A) In the entry table, right-click on the entry to complement, and select the menu **Get bibliographic data from DOI/ISBN/...**
* Option B) Open the [entry editor](/advanced/entryeditor), and in the Identifiers section of the Main tab, click on the button **Get bibliographic data from DOI**

![](/files/PPd2jyR2MCDeIskSYZjp)

Using any of the options opens the window *Merge entries*:

There it is possible to choose what is kept for each field: the **left side**, the **right side**, or the **merged entry**. By default, the original entry (left) is kept, and any fields not present in the original entry are obtained from the information collected from the DOI.

Finally, after selecting which fields to keep, you can decide to **Merge entries**. Alternatively, you can press **Cancel**.

**See also:** [Find duplicates](/finding-sorting-and-cleaning-entries/findduplicates), [Merge entries](/finding-sorting-and-cleaning-entries/mergeentries)


# Manage associated files

JabRef lets you link up your entries with files of any type stored on your system. Thereby, it uses the field `file`, which contains a list of linked files. Each entry can have an arbitrary number of file links, and each linked file can be opened quickly from JabRef. The fields `url` and `doi` are used as links to documents on the web in the form of a URL or a DOI identifier, respectively (see [URL and DOI in JabRef](/advanced/externalfiles)).

In BibTeX/biblatex terms, the file links are stored as text in the field `file`. From within JabRef, however, they appear as an editable list of links accessed from the entry editor along with other fields.

## Adding external links to an entry

The "file" field is shown in the **Files and links** section of the [Entry editor](/advanced/entryeditor)'s Main tab, where you can edit the list of external links for an entry. The editor includes buttons for inserting, editing and removing links, as well as buttons for reordering the list of links.

![](/files/-MiYC6s9296kGGwT7KM5)

## Directories for files

JabRef offers the following directory settings:

1. **File → Preferences → Linked files**, item *Main file directory.*

   <img src="/files/-MGFKc6akNBFBDWbyw1_" alt="Main file directory" data-size="original">
2. **Library → Library properties**, items *Library-specific file directory,* and *User-specific file directory*.![Override default file directories](/files/-MiYC_CsAgBUiB3QH6Eh)

One of these settings is required. Mostly the "Main file directory" is enough.

JabRef uses these 3 directories to search for the files: JabRef starts in the user-specific file directory, then the library-specific file directory, and, finally, the main file directory​

JabRef enables setting a directory per database. When sharing a library across multiple persons, each user might have a different directory. Either, each user can set his directory in the "Main file directory". In case the group also shares papers and thus there are two directories (the private one and a group-shared one), one can set a directory within the library (the "Library-specific file directory"). In case a user has a different location of the shared folder (e.g., different paths on Linux and Windows), he can use the "User-specific file directory". This setting is persisted in the `bib` file in a way that it does not overwrite the setting of another user. For this, JabRef uses the username of the currently logged-in user (`-<loginname>` is used as a suffix in the `jabref-meta` field). So, both `mary` and `aileen` can set a different user-specific file directory.

If JabRef saves an attached file and my login name matches the name stored in the `bib` file, it chooses that directory. If no match is found, it uses the "Library-specific file directory" of the bib file. If that is not found, it uses the one configured at File → Preferences → Linked files.

In some settings, the bib file is stored in **the same directory** as the PDF files. Then, one ignores all the above directories and enable "Search and store files relative to library file location". In this case, JabRef starts searching for PDF files in the directory of the `bib` file. It is also possible to achieve this result by setting `.` as "Library-specific file directory" in the library properties.

![Search and store files relative to library file location](/files/-MaAO9qfz9ETXh8oUSPc).

Relative file directories obviously only work in the library properties for a bib file, e.g. `a.bib` Library → Library properties → Library-specific file directory → `papers`. Assume to have two bib files: `a.bib` and `b.bib` located in different directories: `a.bib` located at `C:\a.bib` and `b.bib` located at `X:\b.bib`. When I click on the `+` icon in the Files and links section of file `a.bib`, the popup is opened in the directory `C:\papers` (assuming `C:\papers` exists).

## Auto-linking files

If you have a file within or below one of your file directories with an extension matching one of the defined external file types, and a name starting with (or matching) an entry's citation key, the file can be auto-linked. JabRef will detect the file and display a "link-add" icon in the entry editor, at the left of the filename. Click on the "link-add" icon to link this file to the entry.

The rules for which file names can be auto-linked to a citation key can be set up in **File → Preferences → Linked files**, section *Autolink files*.

![Linked Files Preferences](/files/-MGFKc6akNBFBDWbyw1_)

## Filename format and file directory pattern

Files can be automatically renamed and organized in folders according to custom patterns. The pattern syntax follows the same as for the [Customize the citation key generator](/setup/citationkeypatterns). JabRef can rename files according to this pattern, either automatically or as part of a cleanup operation.

With file directory pattern, JabRef can automatically create subfolders and move the files into the directory based on the defined pattern. As an example, you have a single folder, e.g. *papers* for all your PDFs linked to their corresponding entry in JabRef. Now you want to arrange them according to defined groups. Let's say you have two groups, **Automation** and **Biology,** with a couple of entries.\
Now set the file directory pattern to: `[groups:(unknown)]`

If you now execute the cleanup action "Move files", JabRef will automatically move the files of the corresponding in the file directory to the subfolders *papers/Automation* and *papers/Biology* respectively.

*Explanation*: The expression in the brackets says: Create a subdirectory based on the field “groups” of the entry. If the field `groups` is not set or empty, use “unknown” as a fallback name for the directory. If you have one entry assigned to multiple groups, the directory will have the name “groupA, groupB”.

For an entry, if you want to download a file and link it to the entry, you can do this by clicking the **Download** button in the entry editor.

![Download from URL](/files/-MbDzkz3bFomO2h5lLI1)

A dialog box will appear, prompting you to enter the URL. The file will be downloaded to your main file directory, named based on the entry's citation key, and finally linked from the entry.

## Using Regular Expression Search for Auto-Linking

It is possible to have greater flexibility in the naming scheme by using regular expressions for the search. In most cases, it should not be necessary though to adapt the given default.

If you open the preferences (**File → Preferences → Linked Files**), you will find in the section *Autolink files* an option called "Use regular expression search". Checking this option will allow you to enter your own regular expression for search in the PDF directories.

![The linked files preferences](/files/-MGFKc6akNBFBDWbyw1_)

The following syntax is understood:

* `*` - Search in all immediate subdirectories, excluding the current and any deeper subdirectories.
* `**` - Search in all subdirectories recursively AND the current directory.
* `.` and `..` - The current directory and the parent directory.
* `[title]` - All expressions in square brackets are replaced by their corresponding [citation key pattern](/setup/citationkeypatterns#citation-key-patterns).
* `[extension]` - Is replaced by the file-extension of the field you are using.
* All other text is interpreted as a regular expression. But caution: You need to escape backslashes by putting two backslashes after each other to not confuse them with the path-separator.

The default for searches is `**/.*[citationkey].*\\.[extension]`. As you can see, this will search in all subdirectories of the extension-based directory (for instance in the PDF directory) for any file that has the correct extension and contains the citation key somewhere.

## Opening external files

There are several ways to open an external file or web page. In the entry table, you can click on the PDF icon to open the PDF. In case there are multiple PDFs linked, always the first one is opened. You can also right-click on the line of the entry in the entry table and select "Open file". There is also a keyboard shortcut for this: In the default setting, this is `F4`, but [it can also be customized](/setup/customkeybindings).

To access any of an entry's links, click on the icon with the right mouse button (or `Ctrl + Click` on Mac OS X) to bring up a menu showing all links.

## Setting up external file types

In general, there is no need to change the settings of external file types. So, this setting is for advanced users. See [Manage external file types](/setup/externalfiletypes).

## Adding additional columns to entry table for file types

You can add extra columns to the entry table for storing linked files of a specific type. For instance, one might store longer comments in an external Markdown file. One wants to show the presence of this Markdown file using an extra column. This can be done with many other file types too such as Excel/XLSX, PNG, PowerPoint, etc.

To add a specific column, follow these steps:

1. Navigate to **File > Preferences > Entry Table**. This will show the dialog box shown below.
2. Tick the option for **Show Extra Columns**.
3. Replacing "X" in the following with the name of the file type you want, either directly type in `extrafile:X` into the text box, or enter the dropdown menu and find the option `X (Custom)`. So for instance if you wanted a Markdown file column, type in `extrafile:Markdown` or click the `Markdown (Custom)` option in the dropdown.
4. Click the "plus" button next to the text box or hit the Enter key. Your new entry will appear as a choice at the end of the combo box, and you can scroll down to find it.
5. Click Save and exit the dialog box.

![Image showing how to navigate to the entry table preferences option box. Click "File" at the top, then "Preferences" in the resulting dropdown. Then click the "Entry Table" option on the left side within the dialogue (see next image).](/files/r0Bn8hAwOogPq4po5KA1)

![Image showing the entry table preferences option box itself. Shows the dropdown in the middle of selecting Markdown (Custom). Other file column options shown in this image are OpenDocument Presentation (Custom), OpenDocument Spreadsheet (Custom), OpenDocument text (Custom), PNG Image (Custom), PostScript Image (Custom) and PowerPoint (Custom).](/files/NM3rLWJiRvlHLOnIQMIl)

Then you may find the column on your entry table like so! You may have to scroll right to find the column where you have added it, and drag it across to the position you desire.

![Result after adding new file column. The column icon is a file icon, and so are the entries in that column.](/files/WuA1m4NztHFV5WUUvDUD)


# Manage field names and their content

Modify easily the field names and the field contents by using the Automatic field editor.

After selecting a set of entries, go to **Edit → Automatic field editor**, to edit (set, append and clear field content), copy and move field content and rename a field.

{% hint style="info" %}
​To select all the entries of the current library, press`CTRL + A`.
{% endhint %}

A dialog window will be displayed with multiple tabs. Within are shown the actions that can be carried out on *all selected entries*. Down below, the actions are described in detail.

#### Reverting and Retaining Modifications

* *Cancel.* Pressing the "Cancel" button reverts any changes that have been made so far.
* *Keep Modifications.* Pressing the "Keep Modifications" button will result in retaining all the changes permanently.

#### Edit content

<figure><img src="/files/d08esNxGNgF94WX3Y7EX" alt=""><figcaption><p>Dialog window of the Automatic field editor in "Edit content" tab.</p></figcaption></figure>

* *Set content.* Choose the field to add or edit (by typing it in or using the drop-down menu; If the field does not exist, it will be created). Then enter the field content to be used (by typing in the text box). then press the button "Set". For example, "Field name = owner" and "Set content = Smith" adds the line "owner = {Smith}," to the entries. If the field "owner" is already present in an entry, it is not modified, except if the "Overwrite field content" checkbox is checked.
* *Append content.* Enable the "Overwrite field content" checkbox. Choose the field to edit (by using the drop-down menu; If the field does not exist, it will be created). Then enter the string (by typing in in the text box) to be appended at the end of the field content. Then press the button "Append". For example, "Field name = keywords" and "Append content = , programming" adds the keyword "programming" to the existing list of keywords. If there is no field content yet, the appended content will be at the beginning of the field content and the keyword separator (in this case the comma) and empty space are not required.
* *Clear field content.* This removes the field from the entries. For example, type into the field "comments". If the "Clear field content" button is pressed, all the fields "comments" (and their content) are removed.

#### Copy or Move content

<figure><img src="/files/7MaTDtmKRjA6GyBCMWPA" alt=""><figcaption><p>Dialog window of the Automatic field editor in "Copy or Move content" tab.</p></figcaption></figure>

* *Copy content.* This copies content from one field to another. Choose both a "from" and a "to" field (by typing it in or using the drop-down menus). Then press the "copy content" button. For example, enter the string "year" in the "From" text box. Also enter the string "date" in the "To" text box. If the copy content button is pressed, field content from the "year" field will be copied to the "date" field, but only, if the date field's content is empty (if the date field does not yet exist, it will be created). Field content in the "date" field will only be overwritten, if the "Overwrite field content" checkbox is checked. It is not possible to append content with this particular action.

{% hint style="warning" %}
Known issue: Copying content while the "Overwrite field content" checkbox is checked cannot be reverted, even if the "cancel" button is pressed
{% endhint %}

* *Move content.* This moves content from one field to another. Choose both a "from" and a "to" field (by typing it in or using the drop-down menus). Enable the "Overwrite field content" checkbox. Then press the "Move content" button. For example, enter the string "year" in the "From" text box. Also enter the string "date" in the "To" text box. As soon as the "Move content" button is pressed, field content from the "year" field will be moved to the "date" field. If the date field does not yet exist, it will be created. It is not possible to append content with this particular action and content within the "to" field will always be overwritten. The "from" field will be empty after the movement operation.
* *Swap content.* This swaps content of two fields with each other. Choose both a "from" and a "to" field (by typing it in or using the drop-down menus). Enable the "Overwrite field content" checkbox. Then press the "Swap content" button. For example, enter the string "year" in the "From" text box. Also enter the string "date" in the "To" text box. As soon as the "Swap content" button is pressed, field content from the "year" field will be moved to the "date" field and vice versa. If any of the fields do not yet exist, this action will not succeed.

#### Rename field

<figure><img src="/files/pUhi5AvYhf9ImhBEEpAc" alt=""><figcaption><p>Dialog window of the Automatic field editor in "Rename field" tab.</p></figcaption></figure>

* *Rename field.* Choose a field (by typing it in or using the drop-down menu). Enter the new name for this field into the text box. Press the "Rename" button. For example, "Field name = institution" and "Rename fields = school" renames the field "institution" into "school". The field content is not altered.​

{% hint style="info" %}
External resource: [A concrete example of using this feature to prune a library.​](http://tex.my/pruning-bib-files-with-jabref/)
{% endhint %}


# Best practices

How JabRef can make your life easier

## Helpful groups

* Group for your own papers: `author=YOURSELF`
* Group for the papers of your team: `author=YOURSELF and author=COLLEAGUE1 and author=COLLEAGUE2`

{% content-ref url="/pages/-Lr5QEO4ijs-466B\_5B-" %}
[Groups](/finding-sorting-and-cleaning-entries/groups)
{% endcontent-ref %}

## Sort order

**Library → Library properties**.

{% content-ref url="/pages/-Lr5am7Xck9bXGIFzFq-" %}
[Library properties](/setup/databaseproperties)
{% endcontent-ref %}

## Use integrity check often

Use **Quality** → **Check integrity** often to ensure that the quality of your library does not degrade.

{% content-ref url="/pages/-Lr5am7HGMIVce571fJW" %}
[Check integrity](/finding-sorting-and-cleaning-entries/checkintegrity)
{% endcontent-ref %}

## Enable save actions

To ensure that your library stays consistent, specify your save actions in **Library → Library properties**.

{% content-ref url="/pages/-Lr5am7O0o0qCqGUYD2T" %}
[Save actions](/finding-sorting-and-cleaning-entries/saveactions)
{% endcontent-ref %}


# Check consistency

JabRef can check the consistency of a library.

This feature is available through **Quality → Check consistency**.

## Background

You’re finalizing your research paper for an upcoming conference, and the deadline is near. While reviewing your references, you notice inconsistencies - some citations are missing DOIs others are missing page numbers. Manually identifying these across dozens of entries is tedious and time-consuming.

JabRef now makes this process effortless with its Bibliography Consistency Check feature. It automatically scans your references, identifies missing or inconsistent fields, and presents a structured report, allowing you to fix issues with just a few clicks.

## How to use

1. Open JabRef and go to the Quality menu.
2. Click on "Check Consistency" (below "Check Integrity").
3. JabRef will run the check on your entire library and show the results in a new window.
4. The result window will display entries grouped by their entry type (e.g., articles, books).
5. Each entry will be shown in a table with columns indicating whether required fields are present (x), optional fields are present (o), or if a field is missing (-).
6. If any entry has missing fields, click on it to go directly to the entry in the entry editor.

## Checking a .bib File for Consistency

Let’s say we have a .bib file like this:

```bibtex
@Article{Corti_2009,
  author       = {Corti, Roberto and Flammer, Andreas J. and Hollenberg, Norman K. and Lüscher, Thomas F.},
  title        = {Cocoa and Cardiovascular Health},
  journaltitle = {Circulation}, 
  issn         = {1475-2662}, 
  volume       = {119}
}

@Article{Cooper_2007,
  author       = {Cooper, Karen A. and Donovan, Jennifer L. and Waterhouse, Andrew L. and Williamson, Gary},
  title        = {Cocoa and health: a decade of research},
  issn         = {1743-7075},
  volume       = {99}
}
```

Here, the second entry is missing the journal field, which is required for an article. Running the Check Consistency tool will highlight this issue as shown:

![Consistency check results](/files/87jjMpor2dK6pAuTFu9U)

## Results Window

![Check consistency dialog](/files/8cHTmCkVV0tk9tVLqkqf)

The result window is designed to present the consistency check results in an easily digestible format:

* **Entry Type Headings**: The first column lists the name of the selected entry type.
* **Choose Entry type**: Entry types (such as article, book, in-proceedings, etc.) will be listed in a dropdown menu.
* **Columns**:
  * **Column 2**: Citation key of the entry.
  * **Other columns**: Represent the fields and their status (`x`, `o`, `?`, or `-`).
* **Navigation**: Clicking on a line in the table will take you directly to the corresponding entry in the editor, making it easy to address inconsistencies.

## Symbols in the Results

The following symbols will be used to indicate the presence or absence of fields:

* `x`: Required field is present.
* `o`: Optional field is present.
* `?`: Unknown field is present.
* `-`: Field is absent.

This simple system helps you quickly identify entries that need attention.


# Cleanup entries

Tidy up your library

JabRef can clean up the entries of a library. To do a clean up of the entries, go to **Quality → Clean up entries**. Then select the actions to be carried out.

![The Clean up entries dialog](/files/-MGIddPqS3T8FhKWRBkI)

under the table`Enable field formatters`. Then, under the table, you can select using 2 drop-down menus:

* an entry field (upon which the action will be applied).
* the type of action to be carried out (such as HTML to LaTeX, which converts HTML code to LaTeX code, as described in the window).​ See the [list of formatting actions](/finding-sorting-and-cleaning-entries/saveactions).

A click on the "circular arrow" icon enables a set of recommended formatting actions (the set of actions will depend on your database type: BibTeX or biblatex).

## See also

{% content-ref url="/pages/-Lr5am7HGMIVce571fJW" %}
[Check integrity](/finding-sorting-and-cleaning-entries/checkintegrity)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7O0o0qCqGUYD2T" %}
[Save actions](/finding-sorting-and-cleaning-entries/saveactions)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEvJtVJHbTmKane" %}
[Manage field names and their content](/finding-sorting-and-cleaning-entries/managing-field-names-and-their-content)
{% endcontent-ref %}


# Check integrity

JabRef can check the integrity of a library.

This feature is available through **Quality → Check integrity**.

![Check integrity dialog](/files/bRHYHhvxqSMMpcjC50Oc)


# Find duplicates

JabRef can look for duplicated entries inside a library.

This feature is accessible directly through **Quality → Find duplicates**. It is also used when [importing new entries](/collect/import/importinspectiondialog) from a supported reference format or directly from the Internet.

Detection of potential duplicates is done by an edit distance algorithm. Extra weighting is put on the fields *author*, *editor*, *title.* and *journal*.

<figure><img src="/files/ocrjouE4ZWykRVDJDYVo" alt="Screenshot of the duplicate resolver dialog in light mode"><figcaption><p>Screenshot of the duplicate resolver dialog in light mode</p></figcaption></figure>

The differences between the two entries can be configured through the toolbox located at the top of the window. From the toolbox, you can choose to show or hide differences, choose how to display differences *(Unified or Split)* and you can also choose how to compare entries *(by words or characters)*.

## Show or Hide Differences

* **Plain Text —** This option hides the differences.
* **Show Differences —** This option shows the differences.

## Choose Differences Display Mode

* **Unified View —** In this mode, differences are shown on the right side.
* **Split View —** In this mode, differences are shown on both sides, with <mark style="color:red;">deletions</mark> on the left side and <mark style="color:green;">additions</mark> and <mark style="color:blue;">updates</mark> on the right side.

## Choose Entries Comparison Method

* **Highlight words —** This option compares entries values in terms of words.
* **Highlight characters —** This option compares entries values in terms of characters. It divides both entry values into characters before comparing each character individually. This is perfect for comparing values with small differences *(1 or 2 different characters)*.

From the toolbox's top-left corner, you also can choose to select all the left entry values by clicking `Left` or selecting all the right entry values by clicking `Right`. Be aware that selecting all entry values will select a value even when it is empty.

## Selecting which entry to keep

<figure><img src="/files/q6oIJtUrSR71F38Hd4CH" alt="Screenshot of the buttons to choose which entry to keep"><figcaption><p>Screenshot of the buttons to choose which entry to keep</p></figcaption></figure>

You are offered to:

* **Automatically remove exact duplicates**. This button shows up if there are exact duplicates. Click it to stop showing other exact duplicates and have them removed automatically.
* **Keep left —** Keeps the left entry and removes the right entry.
* **Keep right —** Keeps the right entry and removes the left entry.
* **Keep both** **—** Keeps both entries. This usually means that you don't consider the entries to be duplicates.
* **Keep merged —** Keeps the merged entry only and removes the previous entries.
* **Cancel —** Closes the dialog and stops showing other duplicates.


# Merge entries

JabRef can help you to merge entries of your library.

First, select the two entries to be merged. Then select the menu **Quality → Merge entries**. Alternatively, select the right-click menu **Merge entries**.

The **Merge entries** window will pop up:

![](/files/UNGFSsUgQgMwNDw7ZpLC)

## Diff Highlighting

The differences between the two entries can be configured through the toolbox located at the top of the window. From the toolbox, you can choose to show or hide differences, choose how to display differences *(Unified or Split)* and you can also choose how to compare entries *(by words or characters)*.

### Show or Hide Differences

* **Plain Text —** This option hides the differences.
* **Show Differences —** This option shows the differences.

### Choose Differences Display Mode

* **Unified View —** In this mode, differences are shown on the right side.
* **Split View —** In this mode, differences are shown on both sides, with deletions on the left side and additions and updates on the right side.

### Choose Entries Comparison Method

* **Highlight words —** This option compares entries values in terms of words.
* **Highlight characters —** This option compares entries values in terms of characters. It divides both entry values into characters before comparing each character individually. This is perfect for comparing values with small differences *(1 or 2 different characters)*.

From the toolbox's top-left corner, you also can choose to select all the left entry values by clicking `Left` or selecting all the right entry values by clicking `Right`. Be aware that selecting all entry values will select a value even when it is empty.

### Select Both Field Values (AKA Merge Fields)

When merging entries, sometimes you want to select both values for a certain field. A common use case for this would be wanting the merged entry to have both the left and right entry groups. Now, you can simply click the merge button next to the groups label and we’ll take care of the rest. We’ll merge the left and right entry groups, keeping only one copy of any common group. And this works for more than just groups - you can also merge keywords, comments and files. So go ahead and give it a try - it’ll make your life a lot easier.

![](/files/Ob8bst2lyp9u2MeP8WnD)

### Open DOIs and URLs from The Merge Dialog

There are two buttons at the end of each field cell: one for copying the content of the field cell, and the other for opening links; at the moment, only URLs and DOIs can be opened.

![](/files/5qRJq3bxF97fI9SRUHIw)

### Select or Edit Merged Entry Manually

For each field, you can select whether to choose the left entry value or the right one. You can do that by clicking on the given field cell. Once you did that, the merged entry will update its content to reflect the new change.

You can also edit the merged entry values manually. Doing so, will update the selected field cell if the left or right cell equals that value you typed.

Finally, after selecting which fields to keep, you can decide to **Merge entries**. Alternatively, you can press **Cancel**.

**See also:** [Find duplicates](/finding-sorting-and-cleaning-entries/findduplicates)


# Save actions

Tidy up automatically your library each time you save it.

Field formats can be tidied up when saving the library. That ensures your entries to have consistent formatting. In **Library → Library properties**, check **Enable save actions**. You can now select the actions to be carried out using the 2 drop-down menus located under the table. Each action is defined by:

* an entry field (upon which the action will be applied).
* the type of action to be carried out (such as *HTML to LaTeX*, which converts HTML code to LaTeX code, as described in the window).

A click on the "circular arrow" icon enables a set of recommended formatting actions (the set of actions will depend on your library type: BibTeX or BibLaTeX).​

## List of formatting actions

### Clear

Clears the field completely.

### Escape underscores

Escape underscores

### Escape ampersands

Escapes ampersands.

* `Text & with &ampersands` ⇒ `Text \& with \&ampersands`

### HTML to LaTeX

Converts HTML code to LaTeX code.

### Cleanup URL link

Cleanup URL links.

* `http%3A%2F%2Fwikipedia.org` ⇒ `http://wikipedia.org`

### HTML to Unicode

Converts HTML code to Unicode.

### LaTeX cleanup

Cleans up LaTeX code:

* Escape percent character (e.g.`50% ⇒ 50\%)`
* Remove redundant `$`, `{`, and `}` (but not if the `}` is part of a command argument​)
* Move numbers, `+`, `-`, `/`, and brackets into equations
* Move numbers followed by a space left of `$` inside the equation (e.g. `0.35 $\mu$m`)
* Replace all `@@` with `$`
* Replace multiple spaces with a single space

### Normalize date

Normalizes the date to ISO date format. Format date string to yyyy-mm-dd or yyyy-mm. Keeps the existing String if it does not match one of the following formats:

* "M/y" (covers 9/15, 9/2015, and 09/2015)
* "MMMM (dd), yyyy" (covers September 1, 2015 and September, 2015)
* "yyyy-MM-dd" (covers 2009-1-15)
* "d.M.uuuu" (covers 15.1.2015)

### Normalize month

Normalize month to Bib(la)TeX standard abbreviation.

### Normalize names of persons

Normalizes lists of persons to the Bib(la)TeX standard. This separates authors by "and"s with first names after last name separated by a comma; first names are not abbreviated.

* "John Smith" ⇒ "Smith, John"
* "John Smith and Black Brown, Peter" ⇒ "Smith, John and Black Brown, Peter"
* "John von Neumann and John Smith and Black Brown, Peter" ⇒ "von Neumann, John and Smith, John and Black Brown, Peter".

### Normalize page numbers

Normalize pages to Bib(la)TeX standard. Format page numbers, separated either by commas or double-hyphens. Converts the range number format to page\_number--page\_number. Removes unwanted literals except for letters, numbers, and -+ signs. Keeps the existing String if the resulting field does not match the expected Regex.

```
1-2 ⇒ 1--2
1,2,3 ⇒ 1,2,3
{1}-{2} ⇒ 1--2
43+ ⇒ 43+
Invalid ⇒ Invalid
```

### Ordinals to LaTeX superscript

Converts ordinals to LaTeX superscripts, e.g. 1st, 2nd or 3rd. Will replace ordinal numbers even if they are semantically wrong, e.g. 21rd

* 1st Conf. Cloud Computing -> 1\textsuperscript{st} Conf. Cloud Computing

### Remove enclosing braces

Removes braces encapsulating the complete field content.

### Shorten DOI

Shortens DOI to more human-readable form using <http://shortdoi.org>.

### Unicode to LaTeX

Converts Unicode characters to LaTeX encoding.

### LaTeX to Unicode

Converts LaTeX to Unicode characters if possible.

* `$\acute{\omega}$` ⇒ `ώ`

### Units to LaTeX

Converts units to LaTeX formatting. This includes:

* Add braces around the unit to keep case.
* Replace hyphen with non-break hyphen
* Replace space with a hard space

### Unprotect terms

Remove protective braces from words.

* `{In} {CDMA}` ⇒ `In CDMA`

### Capitalize

Changes the first letter of all words to capital case and the remaining letters to lower case.

### Lower case

Changes all letters to lower case.

### Sentence case

Capitalize the first word, changes other words to lower case.

### Title case

Capitalize all words, but converts articles, prepositions, and conjunctions to lower case.

### Upper case

Changes all letters to upper case.

### Minify list of person names

Shortens lists of persons if there are more than 2 persons to "et al.".

## Save actions as modifiers

The field formatters listed above can also be used as modifiers in [citation key patterns](/setup/citationkeypatterns) using their keys listed below.

| Save action                                                     | Key                       |
| --------------------------------------------------------------- | ------------------------- |
| [Clear](#clear)                                                 | `clear`                   |
| [Escape underscores](#escape-underscores)                       | `escapeUnderscores`       |
| [Escape ampersands](#escape-ampersands)                         | `escapeAmpersands`        |
| [HTML to LaTeX](#html-to-latex)                                 | `html_to_latex`           |
| [Cleanup URL link](#cleanup-url-link)                           | `cleanup_url`             |
| [HTML to Unicode](#html-to-unicode)                             | `html_to_unicode`         |
| [LaTeX cleanup](#latex-cleanup)                                 | `latex_cleanup`           |
| [Normalize date](#normalize-date)                               | `normalize_date`          |
| [Normalize month](#normalize-month)                             | `normalize_month`         |
| [Normalize names of persons](#normalize-names-of-persons)       | `normalize_names`         |
| [Normalize page numbers](#normalize-page-numbers)               | `normalize_page_numbers`  |
| [Ordinals to LaTeX superscript](#ordinals-to-latex-superscript) | `ordinals_to_superscript` |
| [Remove enclosing braces](#remove-enclosing-braces)             | `remove_braces`           |
| [Shorten DOI](#shorten-doi)                                     | `short_doi`               |
| [Unicode to LaTeX](#unicode-to-latex)                           | `unicode_to_latex`        |
| [Latex to Unicode](#latex-to-unicode)                           | `latex_to_unicode`        |
| [Units to LaTeX](#units-to-latex)                               | `units_to_latex`          |
| [Unprotect terms](#unprotect-terms)                             | `unprotect_terms`         |
| [Capitalize](#capitalize)                                       | `capitalize`              |
| [Lower case](#lower-case)                                       | `lower_case`              |
| [Sentence case](#sentence-case)                                 | `sentence_case`           |
| [Title case](#title-case)                                       | `title_case`              |
| [Upper case](#upper-case)                                       | `upper_case`              |
| [Minify list of person names](#minify-list-of-person-names)     | `minify_name_list`        |


# Cite

Include citations of your references to your documents.

{% content-ref url="/pages/-MbDzhF22jNPv6HycDG4" %}
[BibTeX and biblatex](/cite/bibtex-and-biblatex)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhF4vv0m1QXm9Z63" %}
[Export to Microsoft Word](/cite/export-to-microsoft-word)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhF5idDxoWe8Hy6B" %}
[OpenOffice/LibreOffice integration](/cite/openofficeintegration)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhF3k0\_-IOX0\_wSv" %}
[Pushing to external editor application](/cite/pushtoapplications)
{% endcontent-ref %}

{% content-ref url="/pages/OJb80maMqSrJ2CuWnmsp" %}
[Cite As You Write](/cite/cite-as-you-write)
{% endcontent-ref %}


# BibTeX and biblatex

The data format of JabRef is BibTeX. In addtion JabRef also supports biblatex.

JabRef is a program for working with BibTeX and biblatex libraries. JabRef program uses no separate internal file format but directly works with BibTeX and biblatex. That means, your BibTeX/biblatex file is kept as is when opening in JabRef and saving again: You normally load and save your libraries directly in the BibTeX/biblatex`.bib` format. In addition, you can also [import](/collect) and export bibliography libraries in a number of other formats into JabRef.

The library mode can be changed in the [library properties](/setup/databaseproperties).

More information on BibTeX is available on [our information page on BibTeX fields](/advanced/fields).


# Pushing to external editor application

Inserting a citation directly in your editor.

JabRef allows you to push any entries in your main window to an external editor through the push-to-external application feature. It works with [Emacs](https://www.gnu.org/software/emacs/), [LyX](https://www.lyx.org/), [Kile](https://apps.kde.org/kile/), [Sublime Text](https://www.sublimetext.com/), [Texmaker](https://www.xm1math.net/texmaker/), [TeXShop](https://pages.uoregon.edu/koch/texshop/), [TeXstudio](https://www.texstudio.org/), [TeXworks](https://www.tug.org/texworks/), [vim](https://www.vim.org/), [Visual Studio Code](https://code.visualstudio.com/), and [WinEdt](https://www.winedt.com/).

To push as citation, first select the entries in your entry table that you would like to push. Then, either:

* go to **Tools → Push entry to external application​**
* Press `CTRL + L`
* Click on the dedicated button in the taskbar (left of the *Generate citation key* button)

![](/files/-LtTN5LMiBNjDEOd1hTB)

By default the external editor used to push citations is TeXstudio. You can select another application in **File → Preferences → External programs**. Under the **Push applications** section, click on the **Application to push entries to** field. This will cause a dropdown menu to appear, from which you are then able to select from a list of all the external editors you have configured.

![Preferences: External Programs: Configuration](/files/RXfCo3Gl9Bz7MOsx517H)

You can configure the citation command at "Cite command". JabRef intelligently parses the value you gave here. In the example, the congiration `\cite{key1,key2}` means, that the cite command is `\cite`, the keys are enclosed by `{...}` and that multiple keys are separted by a comma (`,`). With that, you can even support Pandoc's Markdown citation syntax. Configure it with `[@key1,@key2]`.

Once you have made your selection and click **Save**, the push-to-external application button icon will change to match that of the selected external editor application.

![New Application After Select](/files/-LtTN5LQVfgexcpyy9IL)

When you click on the push-to-external application button, JabRef will export your selected entries to an open LaTeX file in the selected external editor application. As an example, here is what happens when you export one entry to TexStudio.

![Initial Push to External Export](/files/-LtTN5LS-aXS5RWlwlvS)

As long as you continue using the same external editor application, clicking on the push-to-external application button for subsequent exports will just add new citations or extend an existing citation with additional entries. Following the example above, here is what happens when you export a second entry to TeXStudio on an existing citation, which is extended to include the new entry in your LaTeX document.

![Subsequent Push to External Export](/files/-MF2P9P8TNNIYQiF-Lzz)

## Hints on Emacs

There are the tools [`emacsclient`](https://www.emacswiki.org/emacs/EmacsClient) and `gnuclient`. Both support [GNU Emacs](https://www.emacswiki.org/emacs/GnuEmacs). Additionally, `gnuclient` supports [XEmacs](https://www.emacswiki.org/emacs/XEmacs). As default configuration, JabRef uses `emacsclient`. JabRef passes `-e` as parameter, because JabRef adds the emacs command after the given parameters. For a discussion on the use of `emacsclient`, see [a stackoferflow answer](https://stackoverflow.com/a/10911288/873282). The parameter `-n` (for `--no-wait`) is also passed, but that is not necessary.

On Windows, you can install emacs using `choco install emacs`. Then, start emacs. Afterwards, start the emacs daemon with following command:

```cmd
C:\tools\emacs\bin\emacs.exe --daemon
```

If that does not work, hints are provided at <https://emacs.stackexchange.com/q/35545/12933>.


# Cite As You Write

Using Cite As You Write to insert citations "on the fly" directly into your editor.

JabRef allows you to open up a search dialog to search for entries and their citation keys directly from your LaTeX editor and automatically insert them at your current cursor position. It works with different editors, such as TeXstudio, TeXworks, and Emacs.

Make sure you set the path to the application you want to use in JabRefs settings.

To use the Cite As You Write (CAYW) feature, you need to have JabRef running and the HTTP server enabled.

You can enable the HTTP server in **File → Preferences → General** and under the **HTTP Server** section check the box for **Enable HTTP Server**.

## Application setup

For instructions on how to setup your editor to use the CAYW endpoint, please consult the documentation of [Better BibTeX for Zotero](https://retorque.re/zotero-better-bibtex/citing/cayw/index.html).

## Endpoint parameters

We are working on becoming fully compatible with the CAYW endpoint of [Better BibTeX for Zotero](https://retorque.re/zotero-better-bibtex/citing/cayw/index.html). The endpoint is available under `http://localhost:23119/better-bibtex/cayw`.

Currently, the following optional **GET** parameters are supported:

| Parameter     | Description                                                                                   | Default    |
| ------------- | --------------------------------------------------------------------------------------------- | ---------- |
| `probe`       | If set to `true` or any non-empty value, the endpoint returns `ready`                         |            |
| `format`      | The format of the output, for a full list of the supported formats see below                  | `biblatex` |
| `clipboard`   | If set to `true`, the output is copied to the clipboard                                       |            |
| `application` | You can set it to any of the applications listed below to push directly to them               |            |
| `texstudio`   | If set to `true` or any non-empty value, it is the same as if you set `application=texstudio` |            |
| `selected`    | If set to `true` or any non-empty value, it will use the current selected entries in JabRef   |            |
| `select`      | If set to `true` or any non-empty value, it will select the selected entries in JabRef        |            |
| `librarypath` | The path to the library file, if not set, it will use the currently opened library in JabRef  |            |

### Supported formats

Supported values for paramter `format`:

| Format        | Description                                                                                            |
| ------------- | ------------------------------------------------------------------------------------------------------ |
| `biblatex`    | Additional `command` parameter, which allows to use another command for citing, defaults to `autocite` |
| `simple-json` | A simple json containing the entry ID and the citation key                                             |
| `natbib`      | Additional `command` parameter, which defaults to `cite`                                               |
| `latex`       | Additional `command` parameter, which defaults to `cite`                                               |
| `cite`        | Additional `command` parameter, which defaults to `cite`                                               |
| `citep`       | Additional `command` parameter, which defaults to `citep`                                              |
| `citet`       | Additional `command` parameter, which defaults to `citet`                                              |
| `mmd`         | MultiMarkdown                                                                                          |
| `pandoc`      | Pandoc mardown                                                                                         |
| `typst`       | Typst                                                                                                  |

If the `format` parameter used is not supported, `biblatex` will be used.

### Supported applications

Supported values for paramter `application`:

| Application | parameter   |
| ----------- | ----------- |
| emacs       | `emacs`     |
| LyX         | `lyx`       |
| Sublime     | `sublime`   |
| Texmaker    | `texmaker`  |
| TeXShop     | `texshop`   |
| TeXstudio   | `texstudio` |
| TeXworks    | `texworks`  |
| vim         | `vim`       |
| VS Code     | `vscode`    |
| WinEdt      | `winedt`    |


# Export to Microsoft Word

You can import your citations into a Microsoft Word document through JabRef's export feature. Please follow the steps below for instructions on how to export your JabRef sources into a Microsoft Word document.

1. Select the "File" tab in the upper lefthand corner of JabRef, hover over "Export", and select "Export selected entries". Be sure to save your file as a "MS Office 2007" file.
2. Open Microsoft Word and click on the "References" tab.
3. Select "Manage Sources", click "Browse", and locate the desired file. The file type should be an XML document.

   ***Mac OS users will not see a "Manage Sources" button. Mac users should follow these steps:***

   a.) Copy the selected file to /Library/Containers/com.microsoft.word/Data/Library/Application Support/Microsoft/Office or alternatively to /Users/{username}/Library/Containers/com.microsoft.Word/Data/Library/Application Support/Microsoft/Office/ and name it Sources.xml

   b.) Restart Word

   c.) Select "References", and then select "Citations"

   d.) A sidebar will open on the right side of the window. Click the icon with three dots.

   e.) Click “Citation Sources Manager” from the drop down bar.

   f.) Copy over your citations from the masters list.
4. Click on "Bibliography" under the "References" tab to add your cited sources.

More discussion at <https://tex.stackexchange.com/a/351452/9075>. See <https://www.youtube.com/watch?v=2PpLZTol9_o>.

For a detailed list of the fields which are exported in the Office 2007 XML format see the following page.

{% content-ref url="/pages/-MbDzhFib7FRfnAHJ1md" %}
[MS Office Bibliography XML format](/advanced/knowledge/msofficebibfieldmapping)
{% endcontent-ref %}

{% hint style="warning" %}
The only problem in the export could be when you have a "company" as author. That is simply exported as author and not in the company field.
{% endhint %}

{% hint style="info" %}
Another option is to use [Bibtex4Word](http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html). See <https://www.youtube.com/watch?v=9j3g4wfdM00> for a video explaining the usage.
{% endhint %}


# OpenOffice/LibreOffice integration

## Introduction

This feature offers an interface for inserting citations and formatting a Bibliography in an OpenOffice or LibreOffice Writer document from JabRef.

Throughout this help document, whenever the name *OpenOffice* is used, it can be interchanged with *LibreOffice*.

## Using the OpenOffice/LibreOffice interface

To communicate with OpenOffice, JabRef must first connect to a running OpenOffice instance. You need to start OpenOffice and enter your document before connecting from JabRef.

![](/files/2UQs0sgb0yA3hsDO0jo6)

JabRef needs to know the location of your OpenOffice executable (**soffice.exe** on Windows, and **soffice** on other platforms), and the directory where several OpenOffice jar files reside. If you connect by clicking the **Connect** button, JabRef will try to automatically determine these locations. If this does not work, you need to connect using the **Manual connect** button, which will open a window asking you for the needed locations.

If you are one of the rare users that have manually installed LibreOffice via a [deb](https://de.wikipedia.org/w/index.php?title=Debian-Paket\&oldid=244262361) file in Linux Mint (an Ubuntu based distribution), you can choose the LibreOffice program directory under `/opt/`. For example `/opt/libreoffice24.2/program`. In this particular case, it is enough to choose the directory path. Finding the soffice file is not required. Note that installing deb files manually is not recommended. If you can, use the package manager of your distribution.

After the connection has been established, you can insert citations by selecting one or more entries in JabRef and using the **Push to OpenOffice** button in the dropdown menu of JabRef's toolbar, or by using the appropriate button in the OpenOffice panel in the side pane. This will insert citations for the selected entries at the current cursor position in the OpenOffice document, and update the bibliography to contain the full reference.

![](/files/Hxia4I5Q29CrWRy6DcRR)

**Note:** JabRef does not use OpenOffice's built-in bibliography system, because of the limitations of that system. A document containing citations inserted from JabRef will not generally be compatible with other reference managers such as Bibus and Zotero.

Two different types of citations can be inserted - either a citation in parenthesis, "(Author 2007)", or an in-text citation, "Author (2007)". This distinction is only meaningful if author-year citations are used instead of numbered citations, but the distinction will be preserved if you switch between the two styles.

If you modify entries in JabRef after inserting their citations into OpenOffice, you will need to synchronize the bibliography. By default, **Automatically sync bibliography when inserting citations** is enabled. This can be disabled by clicking the **Settings** button and unchecking **Automatically sync bibliography when inserting citations**. The **Sync OO bibliography** button will update all entries of the bibliography, provided their citation keys have not been altered (JabRef encodes the citation key into the reference name for each citation to keep track of which citation key the original JabRef entry has).

The **Settings** menu also offers:

* **Add space before citation** / **Add space after citation** — insert a space before and/or after each inserted citation marker if one isn't already there.
* **Zotero compatibility mode** — when using a CSL style (not a legacy JStyle), makes JabRef emit citations in a form that Zotero can also read, and lets JabRef read citations that Zotero inserted.

## The style file

To customize the citation style you need to select a style file, or use one of the default styles. In addition to JabRef's own JStyle format described below, you can also select a CSL style or, experimentally, a BibTeX `.bst` style file for the bibliography. The style defines the format of citations and the format of the bibliography. You can use standard JabRef export formatters to process fields before they are sent to OpenOffice. Through the style file, the intention is to give as much flexibility in citation styles as possible. You can switch style files at any time, and use the **Update** button to refresh your bibliography to follow the new style.

By clicking the **Select style** button you can bring up a window that allows selection of either the default style or an external style file. If you want to create a new style based on the default, you can click the **View** button to bring up the default style contents, which can be copied into a text editor and modified.

To choose an external style file, you have two options. Either you can choose a style file directly, or you can set a style file directory. If you do the latter, you will see a list of styles from that directory (and subdirectories), and can choose one from that list.

To edit an already loaded custom style file or to reload changes that you made to a style file, click on **Select style** to bring up the style selection window, then right-click the currently loaded file to bring up a menu that allows you to choose either "Edit" or "Reload".

**CAUTION**: Please take care that your style file is saved using **UTF-8** for character encoding. If you use another character encoding (even other unicode encodings such as UTF-16 or UTF-32), JabRef will not be able to process your style file.

Here is an example style file:

```
NAME
Example style file for JabRef-OpenOffice integration.

JOURNALS
Journal name 1
Journal name 2

PROPERTIES
Title="References"
IsSortByPosition="false"
IsNumberEntries="false"
ReferenceParagraphFormat="Default"
ReferenceHeaderParagraphFormat="Heading 1"

CITATION
AuthorField="author/editor"
YearField="year"
MaxAuthors="3"
MaxAuthorsFirst="3"
AuthorSeparator=", "
AuthorLastSeparator=" & "
EtAlString=" et al."
ItalicEtAl="true"
YearSeparator=" "
InTextYearSeparator=" "
BracketBefore="["
BracketAfter="]"
BracketBeforeInList="["
BracketAfterInList="]"
CitationSeparator="; "
UniquefierSeparator=","
GroupedNumbersSeparator="-"
MinimumGroupingCount="3"
FormatCitations="false"
CitationCharacterFormat="Default"
MultiCiteChronological="false"
PageInfoSeparator="; "

LAYOUT
article=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
\format[FormatPagesForHTML]{\pages}\end{pages}.

book=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}\begin{editor}
\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.)\end{editor},
<b>\year\uniq</b>. <i>\title</i>. \publisher, \address.

incollection=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
(<b>\year\uniq</b>). <i>\title</i>. In: \format[AuthorLastFirst,
AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\booktitle</i>, \publisher.

inbook=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
(<b>\year\uniq</b>). <i>\chapter</i>. In: \format[AuthorLastFirst,
AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\title</i>, \publisher.

phdthesis=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
(<b>\year\uniq</b>). <i>\title</i>, \school.

default=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
\format[FormatPagesForHTML]{\pages}\end{pages}.
```

(Note that the layout for each entry type must be constrained to a single line in the style file - above, the lines are broken up to improve readability.)

Regarding tool support, there is the [Export-Filter-Editor](https://github.com/teertinker/Export-Filter-Editor) for Jabref to quickly create a style file.

### Global properties

The **PROPERTIES** section describes global properties for the bibliography. The following table describes the available properties:

|                                |          |                   |                                                                                                                                                                                                |
| ------------------------------ | -------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Property**                   | **Type** | **Default value** | **Description**                                                                                                                                                                                |
| IsNumberEntries                | boolean  | `false`           | Determines the type of citations to use. If `true`, number citations will be used. If `false`, author-year citations will be used.                                                             |
| IsSortByPosition               | boolean  | `false`           | Determines how the bibliography is sorted. If true, the entries will be sorted according to the order in which they are cited. If false, the entries will be sorted alphabetically by authors. |
| ReferenceParagraphFormat       | string   | `Default`         | Gives the name of the paragraph format to be used for the reference list. This format must be defined in your OpenOffice document.                                                             |
| ReferenceHeaderParagraphFormat | string   | `Heading 1`       | Gives the name of the paragraph format to be used for the headline of the reference list. This format must be defined in your OpenOffice document.                                             |
| Title                          | string   | `Bibliography`    | The text to enter as the headline of the reference list.                                                                                                                                       |

### Citation properties

The **CITATION** section describes the format of the citation markers inserted into the text.

The following table gives a brief description of all the available citation properties. Properties that are not given in the style file will keep their default value.

|                           |          |                   |                                                                                                                                                                                                                                                                                                                                                                               |
| ------------------------- | -------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Property**              | **Type** | **Default value** | **Description**                                                                                                                                                                                                                                                                                                                                                               |
| AuthorField               | string   | `author/editor`   | Field containing author names. Can specify fallback field, e.g. `author/editor`                                                                                                                                                                                                                                                                                               |
| AuthorLastSeparator       | string   | `&`               | Text inserted between the two last author names.                                                                                                                                                                                                                                                                                                                              |
| AuthorLastSeparatorInText | string   |                   | If specified, this property overrides `AuthorLastSeparator` for in-text citations such as `Smith & Jones (2001)`.                                                                                                                                                                                                                                                             |
| AuthorSeparator           | string   | `,`               | Text inserted between author names except the last two.                                                                                                                                                                                                                                                                                                                       |
| BracketAfter              | string   | `]`               | The closing bracket of citations.                                                                                                                                                                                                                                                                                                                                             |
| BracketAfterInList        | string   | ]                 | The closing bracket for citation numbering in the reference list.                                                                                                                                                                                                                                                                                                             |
| BracketBefore             | string   | `[`               | The opening bracket of citations.                                                                                                                                                                                                                                                                                                                                             |
| BracketBeforeInList       | string   | \[                | The opening bracket for citation numbering in the reference list.                                                                                                                                                                                                                                                                                                             |
| CitationCharacterFormat   | string   | `Default`         | If `FormatCitations` is set to `true`, the character format with the name given by this property will be applied to citations. The character format must be defined in your OpenOffice document.                                                                                                                                                                              |
| CitationSeparator         | string   | `;`               | Text inserted between items when a citation contains multiple entries, e.g. `[Smith 2001; Jones 2002]`                                                                                                                                                                                                                                                                        |
| EtAlString                | string   | `et al.`          | Text inserted after author names when not all authors are listed, e.g. `[Smith et al. 2001]`                                                                                                                                                                                                                                                                                  |
| FormatCitations           | boolean  | `false`           | Determines whether formatting should be applied to citations. If true, a character format will be applied to the citations. The property `CitationCharacterFormat` controls which format should be applied, and the given format must be defined in your OpenOffice document. Any font settings and effects can be chosen within OpenOffice for your chosen character format. |
| GroupedNumbersSeparator   | string   | `-`               | Text inserted between numbers when numbered citations are grouped, e.g. `[4-6]`                                                                                                                                                                                                                                                                                               |
| InTextYearSeparator       | string   | Single Space      | Text inserted between author names and starting bracket before year in in-text citations.                                                                                                                                                                                                                                                                                     |
| ItalicEtAl                | boolean  | `true`            | If true, the "et al." string in citation markers is italicized.                                                                                                                                                                                                                                                                                                               |
| MaxAuthors                | integer  | `3`               | The maximum number of authors to list in a citation that has appeared earlier in the document.                                                                                                                                                                                                                                                                                |
| MaxAuthorsFirst           | integer  | `3`               | The maximum number of authors to list in a citation when appearing for the first time.                                                                                                                                                                                                                                                                                        |
| MinimumGroupingCount      | integer  | `3`               | The minimum number of consecutive entries a citation should contain before the numbers are grouped, e.g. `[4-6]` vs. `[4; 5; 6]`.                                                                                                                                                                                                                                             |
| MultiCiteChronological    | boolean  | `true`            | If `true`, multiple entries in the same citation are sorted chronologically, otherwise they are sorted alphabetically.                                                                                                                                                                                                                                                        |
| PageInfoSeparator         | string   | `;`               | For citations with extra information, e.g. page numbers, this string is inserted between the year (for author-year citations) or the citation number (for numbered citations) and the extra information. E.g. the text between `2001` and `p. 301` in `[Smith 2001; p. 301]`.                                                                                                 |
| UniquefierSeparator       | string   | `,`               | Text inserted between letters used to differentiate citations with similar authors and year. E.g. the text between `a` and `b` in `[Smith 2001a, b]`.                                                                                                                                                                                                                         |
| YearField                 | string   | `year`            | The field to get publication year from.                                                                                                                                                                                                                                                                                                                                       |
| YearSeparator             | string   | Single Space      | Text inserted between author names and year in parenthesis citations such as `[Smith 2001]`.                                                                                                                                                                                                                                                                                  |

If numbered entries are used, the `BracketBefore` and `BracketAfter` properties are the most important - they define which characters the citation number is wrapped in. The citation is composed as follows: `[BracketBefore][Number][BracketAfter]` where \[Number] is the number of the citation, determined according to the ordering of the bibliography and/or the position of the citation in the text. If a citation refers to several entries, these will be separated by the string given in the property `CitationSeparator` (for instance, if `CitationSeparator`=;, the citation could look like `[2;4;6]`). If two or more of the entries have a series of consecutive numbers, the numbers can be grouped (for instance `[2-4]` for 2, 3 and 4 or `[2;5-7]` for 2, 5, 6 and 7). The property `GroupedNumbersSeparator` (default `-`) determines which string separates the first and last of the grouped numbers. The integer property `MinimumGroupingCount` (default 3) determines what number of consecutive numbers is required before entries are grouped. If `MinimumGroupingCount`=3, the numbers 2 and 3 will not be grouped, while 2, 3, 4 will be. If `MinimumGroupingCount`=0, no grouping will be done regardless of the number of consecutive numbers.

If numbered entries are not used, author-year citations will be created based on the citation properties. A parenthesis citation is composed as follows: `[BracketBefore][Author][YearSeparator][Year][BracketAfter]` where \[Author] is the result of looking up the field or fields given in the `AuthorField` property, and formatting a list of authors. The list can contain up to `MaxAuthors` names - if more are present, the list will be composed as the first author plus the text specified in the property `EtAlString`. If the property `MaxAuthorsFirst` is given, it overrides `MaxAuthors` the first time each citation appears in the text.

If several, slash-separated, fields are given in the `AuthorField` property, they will be looked up successively if the first field is empty for the given entry. In the example above, the "author" field will be used, but if empty, the "editor" field will be used as a backup.

The names in the author list will be separated by the text given by the `AuthorSeparator` property, except for the last two names, which will be separated by the text given by `AuthorLastSeparator`. If the property `AuthorLastSeparatorInText` is given, it overrides the former for citations of the in-text type. This makes it possible to get citations like `(Olsen & Jensen, 2008)` and `Olsen and Jensen (2008)` for the same style.

\[Year] is the result of looking up the field or fields given in the \[YearField] property.

An in-text citation is composed as follows: `[Author][InTextYearSeparator][BracketBefore][Year][BracketAfter]` where \[Author] and \[Year] are resolved in exactly the same way as for the parenthesis citations.

If two different cited sources have the same authors and publication year, and author-year citations are used, their markers will need modification in order to be distinguishable. This is done automatically by appending a letter after the year for each of the publications; 'a' for the first cited reference, 'b' for the next, and so on. For instance, if the author "Olsen" has two cited papers from 2005, the citation markers will be modified to `(Olsen, 2005a)` and `(Olsen, 2005b)`. In the bibliography layout, the placement of the "uniquefier" letter is indicated explicitly by inserting the virtual field `uniq`.

If several entries that have been "uniquefied" are cited together, they will be grouped in the citation marker. For instance, of the two entries in the example above are cited together, the citation marker will be `(Olsen, 2005a, b)` rather than `Olsen, 2005a; Olsen, 2005b)`. The grouped uniquefier letters (a and b in our example) will be separated by the string specified by the `UniquefierSeparator` property.

Author-year citations referring more than one entry will by default be sorted chronologically. If you wish them to be sorted alphabetically, the citation property `MultiCiteChronological` should be set to `false.`.

### Reference list layout

The **LAYOUT** section describes how the bibliography entry for each entry type in JabRef should appear. Each line should start with either the name of an entry type, or the word `default`, followed by a '='. The `default` layout will be used for all entry types for which an explicit layout hasn't been given.

The remainder of each line defines the layout, with normal text and spaces appearing literally in the bibliography entry. Information from the entry is inserted by adding `\field` markers with the appropriate field name (e.g. `\author` for inserting the author names). Formatting information for the field can be included here, following JabRef's standard export layout syntax. Refer to [JabRef's documentation on custom export filters](/collaborative-work/export/customexports) for more information about which formatters are available and tooling hints.

If author-year citations are used, you have to explicitly specify the position of the "uniquefier" letter that is added to distinguish similar-looking citations. This is done by including a marker for the virtual field `uniq`, typically right after the year (as shown in the example style file). The `uniq` field is automatically set correctly for each entry before its reference text is laid out.

To indicate formatting in the bibliography, you can use the HTML-like tag pairs \<b> \</b>, \<i> \</i>, \<sup> \</sup> and \<sub> \</sub> to specify bold text, italic text, superscript and subscript, respectively.

If you are using numbered citations, the number for each entry will be automatically inserted at the start of each entry in the reference list. By default, the numbers will be enclosed in the same brackets defined for citations. The optional citation properties `BracketBeforeInList` and `BracketAfterInList` override `BracketBefore` and `BracketAfter` if set. These can be used if you want different types of brackets (or no brackets) in the reference list. Note that these need not be brackets as such - they can be any combination of characters.

## Listing page numbers in the bibliography

The bibliography entries include the option to include on which document pages the references are cited. Currently, a JStyle must be selected in order for this feature to work. The setting can be accessed in the settings panel under the option `"Automatically add "Cited on pages..." at beginning of bibliographic entries"`. An example bibliography entry will look like such:

![](/files/Nzl1scwl3h0UE9GYlwws)

## Known issues

* Make sure to save your Writer document in OpenDocument format (odt). Saving to Word format will lose your reference marks.
  * Otherwise, try to use the external tool [JabRef LibreOffice Converter](https://github.com/teertinker/JabRef_LibreOffice_Converter). This LibreOffice extension converts the reference marks to code that can be saved.
* There is currently no support for footnote based citations.
* The cursor may be poorly positioned after inserting a citation.
* Copy-pasting the example style file directly from this page can give an unparseable file. To avoid this, instead download the example file from the link in the download section.
* Make sure that `libreoffice-java-common` is installed on Linux for LibreOffice 5, otherwise important libraries are missing.
* The snap version of LibreOffice and JabRef may cause connection issues. Try to use the \*deb versions instead.
* Open Office 4 will only work running under a 32-bit Java JRE/JDK on Windows because there is no 64-bit version of OpenOffice yet.


# Share

JabRef allows sharing both [Bib(La)TeX library](/collaborative-work/sharedbibfile) and [SQL database](/collaborative-work/sqldatabase). You can also [export your library to a variety of formats](/collaborative-work/export).

{% content-ref url="/pages/-Lr5am7fG4fWpN8WLycR" %}
[Sharing a Bib(la)TeX Library](/collaborative-work/sharedbibfile)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFA7AQftoSDkmaE" %}
[Export](/collaborative-work/export)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7efj7mGpntYZPE" %}
[Shared SQL Database](/collaborative-work/sqldatabase)
{% endcontent-ref %}

{% content-ref url="/pages/L4bjAO9pAJncGDMWzwrX" %}
[Send as email](/collaborative-work/send-as-email)
{% endcontent-ref %}


# Sharing a Bib(la)TeX Library

When sharing a Bib(la)TeX library, JabRef automatically recognizes a change in the `bib` file on disk and notifies the user of it. This works well on network drives.

*Note:* the use of a version control system (SVN, git, etc.) is recommended as this will allow for reverting changes.

To make the sharing of a Bib(la)TeX library easier, it is recommended to set specific library properties. In the menu **Library → Library properties**:

* Select `UTF-8` as encoding.
* Define a `Library-specific file directory`, which will be used to store shared PDF (and other) files.
* Check `Refuse to save the library before external changes have been reviewed`.
* Define a sort order (`year`, `author`, `title` is recommended)..
* Check `Enable save formatters`, and defines these actions, to help enforcing a consistent format for the entries.


# Shared SQL Database

JabRef is able to support collaborative work using a shared SQL database.

## Usage

To use this feature you have to connect to a remote database. To do so you have to open **File** in the menu bar and then click the **Connect to shared database** item. The **Connect to shared database** dialog will open and you will have to fill in the shared's database connection settings. Then, you have to fill out the remaining fields with the according information. If you like you can save your password by clicking the **Remember password?** checkbox.

### SSL configuration

Since version 5.0 JabRef supports secure SSL connection to the database. For PostgreSQL make sure the server supports SSL and you have correctly setup the [certificates](https://www.postgresql.org/docs/current/static/ssl-tcp.html). Then [convert the client certificates](https://jdbc.postgresql.org/documentation/ssl/#configuring-the-client) into a java readable format and import them into a (custom) keystore. For MySQL the procedure is similar. [Setting up MySQL with SSL](https://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html) and converting the certificates for the java keystore. However, it has only been tested with PostgreSQL. Once the certificates are imported into the keystore, specify the path to the keystore file in the connection dialog and the password for accessing the keystore.

![Screenshot of Connect to shared database dialog](/files/90eaLwMfBdcErpX8c3Zq)

After connecting to your shared database, your main window should look like this:

![Screenshot of JabRef with an open shared database](/files/-Lr5ammZmQnUz8ZzOTAJ)

JabRef will automatically detect your changes and push them to the shared side. JabRef will also constantly check if there is a newer version available. If you experience connection issues, you can pull changes from your shared database via the icon in the icon bar. If a newer version is available, JabRef will try to automatically merge the new version and your local copy. If this fails, the **Update refused** dialog will show up. You will then have to manually merge using the **Update refused** dialog. The dialog helps you by pointing out the differences, you then will have to choose if you want to keep your local version or update to the shared version. Confirm your merge by clicking on **Merge entries**.

![Screenshot of Update refused dialog](/files/-Lr5ammbO82Fso9S7PsL)

The **Update refused** dialog can also take a different form, if the BibEntry you currently work on has been deleted on the shared side. You can choose to keep the BibEntry in the database by clicking **Keep** or update to the shared side and click **Close**.

![Screenshot of Update refused dialog due to a deleted entry](/files/-Lr5ammdspALHiAefQg7)

If you experience a problem with your connection to your shared database, the **Connection lost** dialog will show up. You can choose to **Reconnect**, **Work offline** or **Close database**. Most of the time simply reconnecting will fix this problem, if that's not the case you will have to choose between **Work offline** or **Close database**. Pick **Work offline** if you want to make sure your changes are saved. If you think there is nothing to save just pick **Close database**. If you choose to work offline, JabRef will convert the shared database to a local .bib database. Since you are no longer working online, but instead on a local database, you will have to import your work via copy and paste into the shared database. However before you import it into the shared database, make sure to check if changes happened during your offline time. Otherwise you might override someone else's work.

![Screenshot of Connection lost dialog](/files/-Lr5ammfffyzkuIq9kov)

## Try it out

Choose one online provider and start a PostgreSQL database there.\
One list of providers is available at <https://www.postgresql.org/support/professional_hosting/>.


# Migration of pre-3.6 SQL databases into a shared SQL database

## Context

This situation occurs when you try to open an SQL database which was created with JabRef version older than 3.6.

With release of [JabRef 3.6](https://github.com/JabRef/jabref/releases/tag/v3.6) the SQL database structure has changed. So all SQL databases with an pre-3.6 structure are no longer supported.

![Screenshot of migration popup](/files/-Lr5amkF4_JT-vbAo_Js)

## Migration

To migrate your pre-3.6 SQL database into new shared SQL database you have to follow these steps:

* Download and install [JabRef 3.5](https://github.com/JabRef/jabref/releases/tag/v3.5)
* Open JabRef and goto **File** -> **Import from external SQL database**
* Enter required data and click on **Connect**
* Choose the database which should be imported and press **Import**
* Save the database locally (**File** -> **Save database**)
* Turn back at least to [JabRef 3.6](https://github.com/JabRef/jabref/releases/tag/v3.6)
* Goto: **File** -> **Open shared database**
* Enter required data and click on **Connect**
* Now goto **File** -> **Import into current database**
* Choose the file you saved locally and import it

After that the content is available as a shared SQL database and you can work live on it. [More information about the live editing](/collaborative-work/sqldatabase).


# Export

The order of the exported entries can be set in **File → Preferences,** tab **File**, under the menu "Export sort order".

{% hint style="warning" %}
This help page should describe the menu File -> Export (and the various file formats available).

Please, populate this page. Visit our page about [how to edit a help page](/contributing/how-to-improve-the-help-page#editing-help-pages-directly-in-the-browser).
{% endhint %}

{% content-ref url="/pages/-MbDzhFB-GgplzWPUSYV" %}
[Custom export filters](/collaborative-work/export/customexports)
{% endcontent-ref %}

See also:

{% content-ref url="/pages/-MbDzhEkP0LZMMHj7Cr7" %}
[Import](/collect/import)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEl-lyE7Ak9Zvmw" %}
[Custom import filters](/collect/import/customimports)
{% endcontent-ref %}


# Custom export filters

JabRef allows you to define and use your own export filters, in the same way as the standard export filters are defined. An export filter is defined by one or more *layout files*, which with the help of a collection of built-in formatter routines specify the format of the exported files. Your layout files must be prepared in a text editor outside of JabRef.

The custom export format of JabRef is an alternative to the [Citation Style Language](http://citationstyles.org/), which is an XML-based format to describe bibliographic rendering.

Existing public files are collected at <https://layouts.jabref.org>.

## Adding a custom export filter

The only requirement for a valid export filter is the existence of a file with the extension **.layout**. To add a new custom export filter, open the dialog box **File → Preferences**, go to the section **Custom export formats**, and click on **Add**. A new dialog box will appear, allowing you to specify a name for the export filter (which will appear as one of the choices in the File type dropdown menu of the file dialog when you use the **File → Export** menu choice in the JabRef window), the path to the **.layout** file, and the preferred file extension for the export filter (which will be the suggested extension in the file dialog when you use the export filter). Note that if you intend to use the custom export filter also for "Copy...->Export to Clipboard" in the maintable, the extension must be one of the following: `txt`, `rtf`, `rdf`, `xml`, `html`, `htm`, `csv`, or `ris`.

## Creating the export filter

To see examples of how export filters are made, look for the package containing the layout files for the standard export filters on our download page.

Regarding tool support, there is the [Export-Filter Editor for Jabref](https://github.com/teertinker/Export-Filter-Editor) to quickly create export filters.

### Layout files

Let us assume that we are creating an HTML export filter. While the export filter only needs to consist of a single **.layout** file, which in this case could be called *html.layout*, you may also want to add two files called *html.begin.layout* and *html.end.layout*. The former contains the header part of the output, and the latter the footer part. JabRef will look for these two files whenever the export filter is used, and if found, either of these will be copied verbatim to the output before or after the individual entries are written.

Note that these files must reside in the same directory as *html.layout*, and must be named by inserting **.begin** and **.end**, respectively. In our example export filter, these could look like the following:

*html.begin.layout*: `<!DOCTYPE html><html> <body style="color:#275856; font-family: Arial, sans-serif;">`

*html.end.layout*: `</body></html>`

The file *html.layout* provides the *default* template for exporting one single entry. If you want to use different templates for different entry types, you can do this by adding entry-specific **.layout** files. These must also reside in the same directory as the main layout file, and are named by inserting **.entrytype** into the name of the main layout file. The entry type name must be in all lowercase. In our example, we might want to add a template for book entries, and this would go into the file *html.book.layout*. For a PhD thesis we would add the file *html.phdthesis.layout*, and so on. These files are similar to the default layout file, except that they will only be used for entries of the matching type. Note that the default file can easily be made general enough to cover most entry types in most export filters.

### The layout file format

Layout files are created using a simple markup format where commands are identified by a preceding backslash. All text not identified as part of a command will be copied verbatim to the output file.

### Field commands

An arbitrary word preceded by a backslash, e.g. `\author`, `\editor`, `\title` or `\year`, will be interpreted as a reference to the corresponding field, which will be copied directly to the output.

### Field formatters

Often there will be a need for some preprocessing of the field contents before output. This is done using a *field formatter* - a java class containing a single method that manipulates the contents of a field.

A formatter is used by inserting the `\format` command followed by the formatter name in square braces, and the field command in curly braces, e.g.:

`\format[ToLowerCase]{\author}`

You can also specify multiple formatters separated by commas. These will be called sequentially, from left to right, e.g.

`\format[ToLowerCase,HTMLChars]{\author}`

will cause the formatter **ToLowerCase** to be called first, and then **HTMLChars** will be called to format the result. You can list an arbitrary number of formatters in this way.

The argument to the formatters, within the curly braces, does not have to be a field command. Instead, you can insert normal text, which will then be passed to the formatters instead of the contents of any field. This can be useful for some formatters, e.g. the CurrentDate formatter (described below).

Some formatters take an extra argument, given in parentheses immediately after the formatter name. The argument can be enclosed in quotes, which is necessary if it includes the parenthesis characters. For instance, `\format[Replace("\s,_")]{\journal}` calls the **Replace** formatter with the argument **\s,\_** (which results in the "journal" field after replacing all whitespace by underscores).

See below for a list of built-in export formatters.

### Conditional output

Some static output might only make sense if a specific field is set. For instance, say we want to follow the editor names with the text `(Ed.)`. This can be done with the following text:

`\format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)`

However, if the `editor` field has not been set - it might not even make sense for the entry being exported - the `(Ed.)` would be left hanging. This can be prevented by instead using the `\begin` and `\end` commands:

`\begin{editor} \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.) \end{editor}`

The `\begin` and `\end` commands make sure the text in between is printed if and only if the field referred in the curly braces is defined for the entry being exported.

A conditional block can also be dependent on more than one field, and the content is only printed when simple boolean conditions are satisfied. Three boolean operators are provided:

* AND operator : `&`, `&&`
* OR operator : `|`, `||`
* NOT operator : `!`

For example, to output text only if both `year` and `month` are set, use a block like the following: `\begin{year&&month}Month: \format[HTMLChars]{\month}\end{year&&month}` which will print "Month: " plus the contents of the `month` field, but only if also the `year` field is defined.

As an example for the usage of the NOT operator, consider the following: `\begin{!year}\format[HTMLChars]{(no year)}\end{!year}` Here, "no year" is printed as output text if no year field is defined.

**Note:** Use of the `\begin` and `\end` commands is a key to creating layout files that work well with a variety of entry types.

### Grouped output

If you wish to separate your entries into groups based on a certain field, use the grouped output commands. Grouped output is very similar to conditional output, except that the text in between is printed only if the field referred in the curly braces has changed value.

For example, let's assume I wish to group by keyword. Before exporting the file, make sure you have sorted your entries based on keyword. Now use the following commands to group by keyword:

`\begingroup{keywords}New Category: \format[HTMLChars]{\keywords} \endgroup{keywords}`

## Built-in export formatters

JabRef provides the following set of formatters:

* `Authors` : this formatter provides formatting options for the author and editor fields; for detailed information, see below. It deprecates a range of dedicated formatters provided in versions of JabRef prior to 2.7.
* `CreateBibORDFAuthors` : formats authors for according to the requirements of the Bibliographic Ontology (bibo).
* `CreateDocBookAuthors` : formats the author field in DocBook style.
* `CreateDocBookEditors` : formats the editor field in DocBook style.
* `CurrentDate` : outputs the current date. With no argument, this formatter outputs the current date and time in the format "yyyy.MM.dd hh:flag\_mm:ss z" (date, time and time zone). By giving a different format string as argument, the date format can be customized. For example `\format[CurrentDate]{yyyy.MM.dd}` will give the date only, e.g. 2005.11.30.
* `DateFormatter` : formats a date. With no argument, the date is given in ISO-format (yyyy-MM-dd), which is also the expected format of the input. The argument may contain `yyyy`, `MM`, and `dd` in any combination. For example `\format[DateFormatter(MM/yyyy)]{\date}` will output 07/2016 if the date field contains 2016-07-15.
* `Default` : takes a single argument, which serves as a default value. If the string to format is non-empty, it is output without changes. If it is empty, the default value is output. For instance, `\format[Default(unknown)]{\year}` will output the entry's year if set, and "unknown" if no year is set.
* `DOIStrip` : strips any prefixes from the DOI string.
* `DOICheck` : provides the full url for a DOI link.
* `EntryTypeFormatter` : camel case of entry types, so "inbook" -> "InBook".
* `FileLink(filetype)` : if no argument is given, this formatter outputs the first external file link encoded in the field. To work, the formatter must be supplied with the contents of the "file" field.

  This formatter takes the name of an external file type as an optional argument, specified in parentheses after the formatter name. For instance, `\format[FileLink(pdf)]{\file}` specifies `pdf` as an argument. When an argument is given, the formatter selects the first file link of the specified type. In the example, the path to the first PDF link will be output.
* `FirstPage` : returns the first page from the "pages" field, if set. For instance, if the pages field is set to "345-360" or "345--360", this formatter will return "345".
* `FormatChars` : This formatter converts LaTeX character sequences their equicalent unicode characters and removes other LaTeX commands without handling them.
* `FormatPagesForHTML` : replaces "--" with "-".
* `FormatPagesForXML` : replaces "--" with an XML en-dash.
* `GetOpenOfficeType` : returns the number used by the OpenOffice.org bibliography system (versions 1.x and 2.x) to denote the type of this entry.
* `HTMLChars` : replaces TeX-specific special characters (e.g. `{\"{a}}` or `{\sigma})` with their HTML representations, and translates LaTeX commands `\emph`, `\textit`, `\textbf`, `\texttt`, `\underline`, `\textsuperscript`, `\textsubscript`, `\sout` into HTML equivalents.
* `HTMLParagraphs` : interprets two consecutive newlines (e.g. \n \n) as the beginning of a new paragraph and creates paragraph-html-tags accordingly.
* `IfPlural` : outputs its first argument if the input field looks like an author list with two or more names, or its second argument otherwise. E.g. `\format[IfPlural(Eds.,Ed.)]{\editor}` will output "Eds." if there is more than one editor, and "Ed." if there is only one.
* `JournalAbbreviator` : The given input text is abbreviated according to the journal abbreviation lists. If no abbreviation for input is found (e.g. not in list or already abbreviated), the input will be returned unmodified. For instance, when using `\format[JournalAbbreviator]{\journal}`, "Physical Review Letters" gets "Phys. Rev. Lett."
* `LastPage` : returns the last page from the "pages" field, if set. For instance, if the pages field is set to "345-360" or "345--360", this formatter will return "360".
* `NoSpaceBetweenAbbreviations` : LayoutFormatter that removes the space between abbreviated First names. Example: J. R. R. Tolkien becomes J.R.R. Tolkien.
* `NotFoundFormatter` : Formatter used to signal that a formatter hasn't been found. This can be used for graceful degradation if a layout uses an undefined format.
* `Number` : outputs the 1-based sequence number of the current entry in the current export. This formatter can be used to make a numbered list of entries. The sequence number depends on the current entry's place in the current sort order, not on the number of calls to this formatter.
* `Ordinal` : replaces numbers with ordinals so `1` is replaced with `1st` etc.
* `RemoveBrackets` : removes all curly brackets "{" or "}".
* `RemoveBracketsAddComma` : removes all curly brackets "{" or "}". The closing curly bracket is replaced by a comma.
* `RemoveLatexCommands` : removes LaTeX commands like `\em`, `\textbf`, etc. If used together with `HTMLChars` or `XMLChars`, this formatter should be called last.
* `RemoveTilde` : replaces the tilde character used in LaTeX as a non-breakable space by a regular space. Useful in combination with the `Authors` formatter discussed in the next section.
* `RemoveWhitespace` : removes all whitespace characters.
* `Replace(regexp,replacewith)` : does a regular expression replacement. To use this formatter, a two-part argument must be given. The parts are separated by a comma. To indicate the comma character, use an escape sequence: ,

  The first part is the regular expression to search for. Remember that any commma character must be preceded by a backslash, and consequently a literal backslash must be written as a pair of backslashes. A description of Java regular expressions can be found at [vogella's repository](https://www.vogella.com/tutorials/JavaRegularExpressions/article.html#rules-of-writing-regular-expressions).

  The second part is the text to replace all matches with.
* `RisAuthors` : to be documented.
* `RisKeywords` : to be documented.
* `RisMonth` : to be documented.
* `RTFChars` : replaces TeX-specific special characters (e.g. {^a} or {"{o}}) with their RTF representations, and translates LaTeX commands `\emph`, `\textit`, `\textbf` into RTF equivalents.
* `ShortMonth` : formats the month field to use 3 letter BibTeX strings (`jan`, `feb`, `mar`, `apr`, ...).
* `ToLowerCase` : turns all characters into lower case.
* `ToUpperCase` : turns all characters into upper case.
* `WrapContent` : This formatter outputs the input value after adding a prefix and a postfix, as long as the input value is non-empty. If the input value is empty, an empty string is output (the prefix and postfix are not output in this case). The formatter requires an argument containing the prefix and postfix separated by a comma. To include the comma character in either, use an escape sequence (,).
* `WrapFileLinks` : See below.
* `XMLChars` : replaces TeX-specific special characters (e.g. {^a} or {"{o}}) with their XML representations.

### The `Authors` formatter

To accommodate for the numerous citation styles, the `Authors` formatter allows flexible control over the layout of the author list. The formatter takes a comma-separated list of options, by which the default values can be overridden. The following option/value pairs are currently available, where the default values are given in curly brackets.

`AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst ]` specifies the order in which the author names are formatted.

* `FirstFirst` : first names are followed by the surname.
* `LastFirst` : the authors' surnames are followed by their first names, separated by a comma.
* `LastFirstFirstFirst` : the first author is formatted as LastFirst, the subsequent authors as FirstFirst.

`AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial ]` specifies how the author names are abbreviated.

* `FullName` : shows full author names; first names are not abbreviated.
* `LastName` : show only surnames, first names are removed.
* `Initials` : all first names are abbreviated.
* `InitialsNospace` : as Initials, with any spaces between initials removed.
* `FirstInitial` : only first initial is shown.
* `MiddleInitial` : first name is shown, but all middle names are abbreviated.

`AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod ]` specifies the punctuation used in the author list when `AuthorAbbr` is used

* `FullPunc` : no changes are made to punctuation.
* `NoPunc` : all full stops and commas are removed from the author name.
* `NoComma` : all commas are removed from the author name.
* `NoPeriod` : all full stops are removed from the author name.

`AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=<string> ]` specifies the separator to be used between authors. Any separator can be specified, with the `Sep=<string>` option. Note that appropriate spaces need to be added around `string`.

`AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=<string> ]` specifies the last separator in the author list. Any separator can be specified, with the `LastSep=<string>` option. Note that appropriate spaces need to be added around `string`.

`AuthorNumber = [ {inf} | <integer> ]` specifies the number of authors that are printed. If the number of authors exceeds the maximum specified, the authorlist is replaced by the first author (or any number specified by `AuthorNumberEtAl`), followed by `EtAlString`.

`AuthorNumberEtAl = [ {1} | <integer> ]` specifies the number of authors that are printed if the total number of authors exceeds `AuthorNumber`. This argument can only be given after `AuthorNumber` has already been given.

`EtAlString = [ { et al.} | EtAl=<string> ]` specifies the string used to replace multiple authors. Any string can be given, using `EtAl=<string>`

If an option is unspecified, the default value (shown in curly brackets above) is used. Therefore, only layout options that differ from the defaults need to be specified. The order in which the options are defined is (mostly) irrelevant. So, for example,

`\format[Authors(Initials,Oxford)]{\author}`

is equivalent to

`\format[Authors(Oxford,Initials)]{\author}`

As mentioned, the order in which the options are specified is irrelevant. There is one possibility for ambiguity, and that is if both `AuthorSep` and `AuthorLastSep` are given. In that case, the first applicable value encountered would be for `AuthorSep`, and the second for `AuthorLastSep`. It is good practice to specify both when changing the default, to avoid ambiguity.

#### Examples

Given the following authors, *"Joe James Doe and Mary Jane and Bruce Bar and Arthur Kay"*, the `Authors` formatter will give the following results:

`Authors()`, or equivalently, `Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)` J. J. Doe, M. Jane, B. Bar and A. Kay

`Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)` Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay

`Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)` Doe JJ, Jane M, Bar B, and Kay A

`Authors(2,EtAl= and others)` J. J. Doe and others

Most commonly available citation formats should be possible with this formatter. For even more advanced options, consider using the Custom Formatters detailed below.

### The `WrapFileLinks` formatter

This formatter iterates over all file links, or all file links of a specified type, outputting a format string given as the first argument. The format string can contain a number of escape sequences indicating file link information to be inserted into the string.

This formatter can take an optional second argument specifying the name of a file type. If specified, the iteration will only include those files with a file type matching the given name (case-insensitively). If specified as an empty argument, all file links will be included.

After the second argument, pairs of additional arguments can be added in order to specify regular expression replacements to be done upon the inserted link information before insertion into the output string. A non-paired argument will be ignored. In order to specify replacements without filtering on file types, use an empty second argument.

The escape sequences for embedding information are as follows:

* `\i` : This inserts the iteration index (starting from 1), and can be useful if the output list of files should be enumerated.
* `\p` : This inserts the file path of the file link.
* `\f` : This inserts the name of the file link's type.
* `\x` : This inserts the file's extension, if any.
* `\d` : This inserts the file link's description, if any.

For instance, an entry could contain a file link to the file "/home/john/report.pdf" of the "PDF" type with description "John's final report". Using the WrapFileLinks formatter with the following argument:

`\format[WrapFileLinks(\i. \d (\p))]{\file}`

would give the following output:

1. John's final report (/home/john/report.pdf)

If the entry contained a second file link to the file "/home/john/draft.txt" of the "Text file" type with description 'An early "draft"', the output would be as follows:

1. John's final report (/home/john/report.pdf)
2. An early "draft" (/home/john/draft.txt)

If the formatter was called with a second argument, the list would be filtered. For instance:

`\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}`

would show only the text file:

1. An early "draft" (/home/john/draft.txt)

If we wanted this output to be part of an XML styled output, the quotes in the file description could cause problems. Adding two additional arguments to translate the quotes into XML characters solves this:

`\format[WrapFileLinks(\i. \d (\p),,text file,",&quot;)]{\file}`

would give the following output:

1. An early "draft" (/home/john/draft.txt)

Additional pairs of replacements could be added.

### Custom formatters

If none of the available formatters can do what you want to achieve, you can add your own by implementing the `net.sf.jabref.export.layout.LayoutFormatter` interface. If you insert your class into the `net.sf.jabref.export.layout.format` package, you can call the formatter by its class name only, like with the standard formatters. Otherwise, you must call the formatter by its fully qualified name (including package name). In any case, the formatter must be in your classpath when running JabRef.

## Using Custom Name Formatters

From JabRef 2.2, it is possible to define custom name formatters using the BibTeX-sty-file syntax. This allows ultimate flexibility, but is a cumbersome to write

You can define your own formatter in the preference tab "Name Formatter" using the following format and then use it with the name given to it as any other formatter

`<case1>@<range11>@<format>@<range12>@<format>@<range13>...@@ <case2>@<range21>@... and so on.`

This format first splits the task to format a list of author into cases depending on how many authors there are (this is since some formats differ depending on how many authors there are). Each individual case is separated by @@ and contains instructions on how to format each author in the case. These instructions are separated by a @.

Cases are identified using integers (1, 2, 3, etc.) or the character \* (matches any number of authors) and will tell the formatter to apply the following instructions if there are a number of less or equal of authors given.

Ranges are either `<integer>..<integer>`, `<integer>` or the character `*` using a 1 based index for indexing authors from the given list of authors. Integer indexes can be negative to denote them to start from the end of the list where -1 is the last author.

For instance with an authorlist of "Joe Doe and Mary Jane and Bruce Bar and Arthur Kay":

* 1..3 will affect Joe, Mary and Bruce
* 4..4 will affect Arthur
* \* will affect all of them
* 2..-1 will affect Mary, Bruce and Arthur

The `<format>`-strings use the BibTeX formatter format:

The four letters v, f, l, j indicate the name parts von, first, last, jr which are used within curly braces. A single letter v, f, l, j indicates that the name should be abbreviated. If one of these letters or letter pairs is encountered JabRef will output all the respective names (possibly abbreviated), but the whole expression in curly braces is only printed if the name part exists.

For instance if the format is "{ll} {vv {von Part}} {ff}" and the names are "Mary Kay and John von Neumann", then JabRef will output "Kay Mary" (with two space between last and first) and "Neuman von von Part John".

I give two examples but would rather point you to the BibTeX documentation.

Small example: `"{ll}, {f.}"` will turn `"Joe Doe"` into `"Doe, J."`

Large example:

> To turn:
>
> `"Joe Doe and Mary Jane and Bruce Bar and Arthur Kay"`
>
> into
>
> `"Doe, J., Jane, M., Bar, B. and Kay, A."`
>
> you would use
>
> `1@*@{ll}, {f}.@@2@1@{ll}, {f}.@2@ and {ll}, {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}.@-1@ and {ll}, {f}.`


# Send as email

JabRef allows you to send entries to third parties via email.

### How to send as e-mail

1. Select one or multiple entries
2. Choose **Tools → Send as email** in the menu

This will open your default email application and automatically paste the entries in their raw BibTeX format. Once your correspondents have received the email, they will be able to directly copy and paste the entries into JabRef (or use them in other ways).

### How to attach linked files of entries to your email

Once `Send as email` is pressed, JabRef will also automatically open the folder of attached files, as long as the option `automatically open folders of attached files` is enabled at **File → Preferences → External programs → Sending of emails**. Attaching these files to your email is possible by dragging and dropping the PDF files into your favorite email application.


# AI functionality

Since version 6, JabRef has AI functionality built in.

* AI can generate a summary of a research paper
* You can also chat with papers using a "smart" AI assistant

## AI summary tab

When you activate this tab, AI will generate a quick overview of the paper for you.

![AI summary tab screenshot](/files/seUjF3YU2zuRvrnHRIlu)

The AI will mention the main objectives of the research, methods used, key findings, and conclusions.

## AI chat tab

Here, you can ask questions, which are answered by the LLM.

![AI chat tab screenshot](/files/7IcL6NNueAH4lNQIrfpt)

In this window, you can see the following elements:

* Chat history with your messages
* Prompt for sending messages
* A button for clearing the chat history (just in case)

## How does the AI functionality work?

JabRef uses external AI providers to do the actual work. You can choose between various providers. They all run "Large Language Models" (LLMs) to process the requests and need chunks of text to work. For this, JabRef parses and indexes linked PDF files of entries: The file is split into parts of fixed-length (so-called *chunks*) and for each of them, an *embedding* is generated. An embedding itself is a representation of a part of text and in turn a vector that represents the meaning of the text. Each vector has a crucial property: texts with similar meaning have vectors that are close to (so-called *vector similarity*). As a result, whenever you ask AI a question, JabRef tries to find relevant pieces of text from the indexed files using vector similarity and provides those to the LLM system to be processed.

## More information

{% content-ref url="/pages/B7T0cJM5FoJnhQh4HNBc" %}
[How to enable and use AI features?](/ai/how-to-enable-and-use-ai-features)
{% endcontent-ref %}

{% content-ref url="/pages/uDpUSAEGMIONdfNGyKZw" %}
[AI providers and API keys](/ai/ai-providers-and-api-keys)
{% endcontent-ref %}

{% content-ref url="/pages/SPk0SIimpT66Htuf6RE2" %}
[AI troubleshooting](/ai/troubleshooting)
{% endcontent-ref %}

{% content-ref url="/pages/hQzGh4FLdVCDPbdnwRjU" %}
[AI preferences](/ai/preferences)
{% endcontent-ref %}

{% content-ref url="/pages/YT14vtZFVrAAIxGK3CWL" %}
[Running a local language model](/ai/local-llm)
{% endcontent-ref %}


# How to enable and use AI features?

Thank you for checking out JabRef AI features! We believe you can find them useful in your research or brainstorming process.

## 1. Locate and accept the AI Privacy Policy

1. Run JabRef, open a library, select an entry and open the [entry editor](/advanced/entryeditor). There you will see tabs that have AI in their name.

   <figure><img src="/files/XzZ5L1ALhUlstMLDjS1F" alt="AI related entry editor tabs (AI Summary and AI Chat)"><figcaption><p>AI related entry editor tabs</p></figcaption></figure>
2. Open the **AI Chat** or the **AI Summary** tab. The first time you open any of these tabs, JabRef will ask for your permission to accept the Privacy notice. In order to enable all AI features, you need to accept it, by pressing the **I agree** button. If you do not accept it, none of your information will be transmitted to external services.

   <figure><img src="/files/MIJI55eNVREq5DsaHDLT" alt="AI privacy notice"><figcaption><p>AI privacy notice</p></figcaption></figure>

   In the AI Privacy notice you can find links to Privacy Policies of supported external services and an explanation what data is sent to external services.

## 2. Attach a file to your entry

In order to use the following AI features in the entry editor, you need to [add PDFs to an entry](/collect/add-pdfs-to-an-entry):

* AI Chat and
* AI Summary tabs

This in turn requires you to [set a main file directory](/finding-sorting-and-cleaning-entries/filelinks#directories-for-files). JabRef supports other AI features that do not require you to attach a file to your entry, such as [using a language model to turn plain reference text into an entry](/collect/newentryfromplaintext#llm) and if that's all you need, you can skip this step.

## 3. Connect to an external AI provider

There is only one crucial step left for using AI features. You need to setup a connection to an external AI provider. With *external*, we mean a provider outside of JabRef, regardless, if that entails connecting to an [AI app on your local device](/ai/local-llm) or connecting to a remote online service.

While the former may or may not require an API key, online services most definitely will require you to enter one, therefore here is some guidance:

#### 1. Obtain an API key

Please look at the [AI providers and API keys](/ai/ai-providers-and-api-keys) documentation page to understand what is an AI provider and how to get an API key.

#### 2. Enter an API key

After you got your API key, you need to enter it in JabRef's [AI preferences](/ai/preferences).

1. Open the preferences menu via `File > Preferences`.
2. Locate the `AI` tab.
3. Choose the AI provider you have the API key from and enter the API key (in this order, because JabRef can store several API keys, tied to specific AI providers).

Finally, you can choose the chat model of the AI provider.

Save the preferences and henceforth you are able to use JabRef's AI features as you see fit!


# AI providers and API keys

## What is an AI provider?

An AI provider is a company or a service that gives you the ability to send requests to and receive responses from an artificial intelligence. At date of writing, the most capable AI systems are based on Large Language Model (LLM) architectures.

Here is the list of AI providers currently supported by JabRef:

* OpenAI
* Mistral AI
* Google
* Hugging Face
* Ollama

You can find more information about providers in the [`langchain4j` documentation](https://docs.langchain4j.dev/category/language-models/). This is the framework that we use in JabRef. This page lists available integrations. It should be noted that JabRef is compatible with any provider that itself is compatible with the OpenAI API.

## Which AI provider should I use?

We cannot give a clear recommendation. Providers change their service and their prices regularly and our documentation page is too static to keep up with daily changes. It is recommended to look up LLM benchmarks on the internet or to use the trial and error method. To date, remote AI providers like OpenAI, Google, Mistral and others offer state of the art quality.

If you want to [run a model locally](/ai/local-llm), you can choose Ollama or make use of the OpenAI API. In comparison to remote AI providers, open weight local models that are compatible with average consumer devices offer less capabilities. There are state of the art local models available, but they are very large (in terms of number of parameters) and the higher the number of parameters, the more memory is needed. To run the largest models, very expensive and capable hardware is required. That said, even small models can be sufficient for the [add entry using reference text](/collect/newentryfromplaintext) workflow.

## Why do I need an API key?

In order to use any of the (proprietary) remote services and to receive a response, you always need an API key to authenticate and manage billing. The following sections down below teach you how to receive a key and where to enter it in the preferences.

## What is an API key?

An API key or API token is like a password that lets an app or program access information or services from another app or website, such as an LLM service. It ensures that only authorized users or applications can use the service. For example, when an app uses an LLM service to generate text or answer questions, it includes its unique API key in the request. The LLM service checks this key to make sure the request is legitimate before providing the response. This process keeps the data secure and helps track how the service is being used.

## How to get an API key?

### How to get an OpenAI API key?

To get an OpenAI API key, follow these steps:

1. Log in or create an account on the [OpenAI website](https://auth.openai.com/log-in)
2. Go to the "API" section
3. Go to the "Dashboard" (upper-right corner)
4. Go to the "API keys" (left menu)
5. Click "Create new secret key"
6. Click "Create secret key"
7. OpenAI will display the key

### How to get a Mistral AI API key?

1. Login or create an account on the [Mistral AI website](https://auth.mistral.ai/ui/login)
2. Go to the [dashboard -> API keys](https://console.mistral.ai/api-keys/)
3. There you will find a button "Create new key". Click on it
4. You can optionally set up a name for the API key and its expiration date
5. After the creation, you will see "Your key is:" with a string of random characters after that

### How to get a Hugging Face API key?

Hugging Face refers to an "API key" as an "Access Token". It does not make much difference, you can interchangeably use either "API key", or "API token", or "access token".

1. [Login](https://huggingface.co/login) or [create account](https://huggingface.co/join) on Hugging Face
2. Go to [create access token](https://huggingface.co/settings/tokens/new)
3. Set "Token Type" to "Read"
4. Name a token
5. After you click "Create token", a popup will be shown with the API key

## What should I do with the API key and how can I enter it in JabRef?

Do not share the key with anyone, it is a secret that was created only for your account. Do not enter this key into unknown or unverified services.

Now you need to copy and paste it into JabRef preferences. To do this:

1. Launch JabRef
2. Go "File" -> "Preferences" -> "AI"
3. Check "Enable AI functionality"
4. Paste the key into the "API key" field
5. Click "Save"

If you have some money on your credit balance, you can chat with your library!

## How to increase the money balance for an API key?

### OpenAI

To increase your credit balance on OpenAI, follow these steps:

1. Add a [payment method](https://platform.openai.com/settings/organization/billing/payment-methods).
2. Add credit balance on [this](https://platform.openai.com/settings/organization/billing/overview) page.

### Mistral AI

Make the subscription on [their website](https://admin.mistral.ai/organization/billing).

### Hugging Face

You possibly may not have to pay anything for Hugging Face in order to send requests to LLMs. Though, the speed is very slow by default. It may take a long time to allocate free compute resources to your instance, resulting in longer response times. You can switch to faster inference by [upgrading your user account](https://huggingface.co/pricing#pro) or by [running a space on GPU](https://huggingface.co/docs/hub/spaces-gpus).


# AI preferences

![AI preferences](/files/NvhUU3YfvcRfQJSfudNc)

## General settings

* "Enable AI functionality in JabRef": by default it is turned off, so you need to check this option if you want to use the new AI features
* "Automatically generate embeddings for new entries": when this check box is switched on, for every new entry in the library, JabRef will automatically start an embeddings generation task. (If you do not know what are the embeddings, take a look at ["How does the AI functionality work?"](https://docs.jabref.org/ai#how-does-the-ai-functionality-work)).
* "Automatically generate summaries for new entries": when this check box is switched on, for every new entry in the library, JabRef will automatically generate a summary.

If you import a lot of entries at a time, we recommend you to switch off options "Automatically generate embeddings for new entries" and "Automatically generate summaries for new entries", because this may slow down your computer, and you may reach the usage limit of the AI provider.

## Connection settings

* "AI provider": you can choose between [various providers](https://docs.jabref.org/ai/ai-providers-and-api-keys#what-is-an-ai-provider).
* "Chat model": choose the model you like.
* "API key": enter your API key here.

## Expert settings

### API base URL

**Type**: string

**Requirements**: valid URL address

The "API Base URL" setting tells your application where to find the language model's online service. Think of it as the main address or starting point for all communications with the language model. By specifying this URL, your application knows exactly where to send requests to get responses from the language model.

You do not have to set this parameter manually or remember all the addresses. JabRef will automatically substitute the address for you when you select the AI provider.

### Embedding model

**Requirements**: choose one available from combo box

The embedding model transforms a document (or a piece of text) into a vector (an ordered collection of numbers). This transformation provides the AI with relevant information for your questions.

Different embedding models have varying performance, including accuracy and the speed of computing embeddings. The `_q` at the end of the model name usually denotes *quantized* (meaning reduced or simplified). These models are faster and smaller than their original counterparts but provide slightly less accuracy.

Currently, only local embedding models are supported. This means you do not need to provide a separate API key for them, as all the processing will be done on your machine.

### Instruction

**Type**: string

**Requirements**: not empty

An instruction (also known as a "system message") in Large Language Models (LLMs) sets the tone and rules for the conversation. Think of it as instructions given to the AI before it starts interacting with a user. It guides the AI on how to respond, ensuring it stays on topic and behaves appropriately. For example, a system message might tell the AI to be formal, concise, or provide detailed explanations. This helps the AI provide more relevant and useful answers tailored to the user's specific needs.

**Important**: in JabRef, the system message for the LLM is constructed from the supplied text plus information about the current library entry. Therefore, at the end of your text, you should add a note such as "Here is the information about the library entry you are chatting about:"

### Context window size

**Type**: integer

**Requirements**: > 0

The "context window size" in our application helps the AI remember and respond to conversations more effectively by keeping the most recent messages within a sliding window. As new messages are added, older messages are removed to make room, ensuring the AI always has the latest context. This feature enhances the AI's ability to provide accurate and relevant responses by focusing on the most current parts of the conversation, similar to how we remember the latest parts of a discussion. This process is managed automatically, so you can enjoy a smoother and more natural conversation experience without any additional effort. For the advanced user, we recommend to check the context window of the Large Language Model is trained on to find the largest possible parameter.

### Temperature

**Type**: float

**Requirements**: 0 >= && <= 2

This setting controls how creative or focused the AI’s responses will be. A lower temperature (closer to 0) makes the AI more predictable, providing safer and more straightforward answers. A higher temperature (closer to 2) allows the AI to be more creative and varied in its responses, but it may also become less consistent. Adjust the temperature based on whether you prefer more accurate or more imaginative answers.

### Document splitter chunk size

**Type**: integer

**Requirements**: > 0

The "chunk size" parameter in document splitting refers to the size of segments into which linked files are divided for processing by AI models. When dealing with linked files, such as PDFs, they are segmented into smaller chunks based on this parameter. Each segment typically contains a specified number of words or characters, ensuring manageable units for analysis and generating answers.

These segments are then passed to the AI model for processing. This approach helps optimize performance by breaking down large documents into smaller, more digestible parts, allowing for more efficient handling and analysis by the AI.

{% hint style="warning" %}
The chunk size should not exceed the capabilities of the embedding model, otherwise embeddings may fail to be generated. Users have to set the chunk size of the embedding model to `"max_position_embeddings": *,`. Model makers publish this info usually as part of the config.json (mostly at <https://huggingface.co>). For example <https://huggingface.co/intfloat/multilingual-e5-large/blob/main/config.json>
{% endhint %}

### Document splitter chunk overlap

**Type**: integer

**Requirements**: > 0 && < chunk size

The "chunk overlap" parameter determines how much text from adjacent chunks is shared when dividing linked files into segments. This overlap is measured in characters and ensures continuity and context across segmented chunks. By sharing a specified amount of text between adjacent segments, typically at the beginning and/or end of each chunk, the AI model can maintain coherence and understanding of the content across segments. This approach helps enhance the accuracy and relevance of responses generated by the AI from the segmented content.

### Retrieval augmented generation maximum results count

**Type**: integer

**Requirements**: > 0

The parameter "Retrieval augmented generation: maximum results count" specifies the maximum number of chunks or segments of text to retrieve for processing and generating responses. When using retrieval-augmented generation (RAG), which combines traditional language model generation with the retrieval of relevant text segments, this parameter determines how many segments are considered for each query or input.

Setting this parameter controls the scope of information the AI model uses to generate responses, balancing depth of context and computational efficiency. It ensures that the AI focuses on the most relevant segments to provide accurate and contextually rich answers based on the user's input or query.

### Retrieval augmented generation minimum score

**Type**: float

**Requirements**: > 0 && < 1

The "Retrieval augmented generation: minimum score" parameter sets the relevance threshold when retrieving chunks of text for generation. It specifies the minimum score that segments must achieve to be included in the results. Any text segments scoring below this threshold are excluded from the AI's response generation process.

This parameter is crucial for ensuring that the AI model focuses on retrieving and utilizing only the most relevant information from the retrieved chunks. By filtering out segments that do not meet the specified relevance score, the AI enhances the quality and accuracy of its responses, aligning more closely with the user's needs and query context.

## Templates

### General Description

The **Templates** section in the AI settings allows you to customize the behavior of every task in JabRef that includes LLMs.

To use the templates, we employ the [Apache Velocity](https://velocity.apache.org/) template engine. You can refer to the [User Guide](https://velocity.apache.org/engine/devel/user-guide.html) to learn the syntax of Apache Velocity.

There are four templates that JabRef uses:

* **System Message for Chatting**: This template constructs the system message (also known as the instruction) for every AI chat in JabRef (whether chatting with an entry or with a group).
* **User Message for Chatting**: This template is also used in chats and is responsible for forming a request to AI with document embeddings. The user message created by this template is sent to AI; however, only the plain user question will be saved in the chat history.
* **Summarization Chunk**: In cases where the chat model does not have enough context window to fit the entire document in one message, our algorithm will split the document into chunks. This template is used to summarize a single chunk of a document.
* **Summarization Combine**: This template is used only when the document size exceeds the context window of a chat model. It combines the summarized chunks into one piece of text.

You can create any template you want, but we advise starting from the default template, as it has been carefully designed and includes special syntax from Apache Velocity.

### Contexts for Templates

For each template, there is a context that holds all necessary variables used in the template. In this section, we will show you the available variables for each template and their structure.

* **System Message for Chatting**: There is a single variable, `entries`, which is a list of BIB entries. You can use `CanonicalBibEntry.getCanonicalRepresentation(BibEntry entry)` to format the entries.
* **User Message for Chatting**: There are two variables: `message` (the user question) and `excerpts` (pieces of information found in documents through the embeddings search). Each object in `excerpts` is of type `PaperExcerpt`, which has two fields: `citationKey` and `text`.
* **Summarization Chunk**: There is only the `text` variable, which contains the chunk.
* **Summarization Combine**: There is only the `chunks` variable, which contains a list of summarized chunks.

## Further literature

* [Visual representation of samplers (Temperature, Top-P, Min-P, ...) by Artefact2](https://artefact2.github.io/llm-sampling/index.xhtml)
* [What is a Context Window?](https://www.techtarget.com/whatis/definition/context-window)
* [Is temperature the creativity of Large Language Models?](https://arxiv.org/abs/2405.00492)
* [The Effect of Sampling Temperature on Problem Solving in Large Language Models](https://arxiv.org/abs/2402.05201)
* [Min P Sampling: Balancing Creativity and Coherence at High Temperature](https://arxiv.org/abs/2407.01082)
* [Challenges in Deploying Long-Context Transformers: A Theoretical Peak Performance Analysis](https://arxiv.org/abs/2405.08944)


# AI troubleshooting

## "Failed to load PyTorch native library" while trying the AI chat

If you encounter this error, download the latest [Visual C++ redistributable from Microsoft](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-microsoft-visual-c-redistributable-version). This installation is only required for AI features in JabRef, all other features can work without it. Also, if multiple installations of CUDA are installed, JabRef's Version first needs to be added to the PATH. For example, on Windows this would be adding `C:\Users\USER\.djl.ai\pytorch\CUDA-VERSION` to the Environment Variables. See [how to edit environment variables on Windows 10 or 11](https://www.howtogeek.com/787217/how-to-edit-environment-variables-on-windows-10-or-11/).

If you still have issues, the [DJL documentation](https://docs.djl.ai/master/docs/development/troubleshooting.html#unsatisfiedlinkerror-issue) might be of help.

## JabRef closed or crashed in the middle of downloading the embedding model

Do not worry! It could be as simple as only having to delete the embedding model cache.

The name of the folder is `.djl.ai`, and it is located in your home directory.


# Running a local language model

## Hardware Recommendations

1. Large Language Models (LLMs) require a lot of computational power and therefore lots of electricity and dedicated hardware. This following advise assumes a small scale project and availability of consumer hardware.
2. Smaller models typically respond qualitatively worse than bigger ones, but they are faster, need less memory and might already be sufficient for your use case (so start out with the small ones and if need be, scale up).
3. The size of a model can be measured in number of parameters in its neural network. The "b" in the model name typically stands for **b**illion parameters. It also can be measured in terms of gigabytes required to load the model into your devices RAM/VRAM.
4. The model should always completely fit into VRAM (fast), otherwise layers will typically be offloaded to RAM (very slow) and if it doesn't fit in there either, it will use your harddrive, typically a SSD or HDD (abysmally slow).
5. The Hardware recommendation to maximize prompt processing and token generation speed is a device with high *bandwidth*. To date, modern GPU with lots of VRAM will satisfy this requirement best.

## High-level explanation

You can use any program that creates a server with OpenAI-compatible API.

After you started your service, you can do this:

1. The "Chat Model" field in AI preferences is editable, so you can enter any model you have downloaded
2. There is a field called "API base URL" in "Expert Settings" where you need to provide the address of an OpenAI-compatible API server

Voilà! You can use a local LLM right away in JabRef.

## Step-by-step guide for `ollama`

The following steps guide you on how to use `ollama` to download and run local LLMs.

1. Install `ollama` from [their website](https://ollama.com/download)
2. Select a model that you want to run. `ollama` provides [a large list of models](https://ollama.com/library) to choose from. Some popular models are for instance [qwen3:30b-a3b](https://ollama.com/library/qwen3), [`granite3.1-moe:3b`](https://ollama.com/library/granite3.1-moe), [`devkit/L1-Qwen-1.5B-Max`](https://ollama.com/devkit/L1-Qwen-1.5B-Max), [`mistral:7b`](https://ollama.com/library/mistral) or [`mistral-small3.1:24b`](https://ollama.com/library/mistral-small3.1).
3. When you have selected your model, type `ollama pull <MODEL>:<PARAMETERS>` in your terminal. `<MODEL>` refers to the model name like `gemma2` or `mistral`, and `<PARAMETERS>` refers to parameters count like `2b` or `9b`.
4. `ollama` will download the model for you
5. After that, you can run ollama serve to start a local web server. This server will accept requests and respond with LLM output. Note: The ollama server may already be running, so do not be alarmed by a cannot bind error. If it is not yet running, use the following command: `ollama run <MODEL>:<PARAMETERS>`
6. Go to JabRef Preferences -> AI
7. Set the "AI provider" to "OpenAI"
8. Set the "Chat Model" to the model you have downloaded in the format `<MODEL>:<PARAMETERS>`
9. Set the "API base URL" in "Expert Settings" to `http://localhost:11434/v1/`

Now, you are all set and can chat "locally".


# Configuration

JabRef is highly customizable, allowing users to get the behaviour they expect.

The **File → Preference** menu command allows you to configure the JabRef interface, and to set the default features of your libraries. Features specific to a given library are configured in the **Library** menu. For example, while the default key patterns are set in **File → Preferences → Citation key generator → Key patterns**, key patterns specific to a library can be set in **Library → Citation key patterns**.

{% content-ref url="/pages/-Lr5am7WJWCnnSWhaSLT" %}
[Customize the citation key generator](/setup/citationkeypatterns)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7UNfJsKDaKkUkz" %}
[Customize entry types](/setup/customentrytypes)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7Vw2zEjWnu0NXv" %}
[Entry editor tabs](/setup/generalfields)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7Xck9bXGIFzFq-" %}
[Library properties](/setup/databaseproperties)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7Yy56WrxgUZOaN" %}
[Entry preview setup](/setup/preview)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7Z5e2Ddq7t1oKZ" %}
[Manage external file types](/setup/externalfiletypes)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7\_0oR4YMN5BkQ0" %}
[Manage protected terms](/setup/protectedterms)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7ae\_9bjECSQqkI" %}
[The string editor](/setup/stringeditor)
{% endcontent-ref %}


# Customize the citation key generator

The pattern used in the auto generation of citation labels can be set for each of the standard entry types in **File → Preferences**, tab **Citation key generator**. A detailed description can be found in the [default citation key pattern section](#default-citation-key-pattern).

## Citation key patterns

The key pattern can contain any text you wish, in addition to field markers that indicate that a specific field of the entry should be inserted at that position of the key. A field marker generally consists of the field name (in upper case letters) enclosed in square braces, e.g., **`[TITLE]`**. If the field is undefined in an entry at the time of key generation, no text will be inserted by the field marker. A field enclosed in square braces can be further changed by appending one or more of the [available modifiers](#modifiers) separated by `:`, e.g., **`[TITLE:abbr]`**.

For an entry with the title `An awesome paper on JabRef`, the citation key pattern `demo[TITLE:abbr]` will provide the key `demoAapoJ`.

### Special field markers

Several special field markers are offered, which extract only a specific part of a field. Feel free to suggest new special field markers.

#### Author-related field markers

* **`[auth]`**: The last name of the first author
* **`[authFirstFull]`**: Get the `von` part and last name of the first author
* **`[authForeIni]`**: The forename initial of the first author
* **`[auth.etal]`**: The last name of the first author, and the last name of the second author if there are two authors or `.etal` if there are more than two.
* **`[authEtAl]`**: The last name of the first author, and the last name of the second author if there are two authors or `EtAl` if there are more than two. This is similar to `auth.etal`. The difference is that the authors are not separated by `.` and in case of more than 2 authors `EtAl` instead of `.etal` is appended.
* **`[auth.auth.ea]`**: The last name of the first two authors, separated by `.`. If there are more than two authors, adds `.ea`.
* **`[authors]`**: The last name of all authors.
* **`[authorsN]`**: The last name of up to `N` authors. If there are more authors, `EtAl` is appended
* **`[authIniN]`**: The beginning of each author's last name, using at most `N` characters in total.
* **`[authN]`**: The first `N` characters of the first author's last name.
* **`[authN_M]`**: The first `N` characters of the `M`th author's last name.
* **`[authorIni]`**: The first 5 characters of the first author's last name, and the last name initial of the remaining authors.
* **`[authshort]`**: The last name if one author is given; the first character of up to three authors' last names if more than one author is given. A plus character is added, if there are more than three authors
* **`[authorsAlpha]`**: Corresponds to the BibTeX style “alpha”,
  * One author: The first three letters of the last name
  * Two to four authors: The first letter of the last name of each author
  * More than four authors: The first letter of the first three authors' last name. A `+` is added at the end if it is not in the [list of unwanted characters](#removing-unwanted-characters).
* **`[authorsAlphaLNI]`**: Follows the LNI (Lecture Notes in Informatics) template style,
  * **Single author or "and others" case**:
    * First two characters of the first author's last name
    * For organizations (names in braces), returns organization initials
  * **Multiple authors without "and others"**:
    * Takes the first letter of each author's last name
    * Maximum of 4 characters total
  * **Special cases**:
    * Prefixes like "van", "von" are ignored when getting the last name
    * When "and others" is present with multiple authors, reverts to using first two characters of first author
* **`[authorLast]`**: The last name of the last author.
* **`[authorLastForeIni]`**: The forename initial of the last author.

**Note:** If there is no author (as in the case of an edited book), then all of the above **`[auth...]`** markers will use the editor(s) (if any) as a fallback. Thus, the editor(s) of a book with no author will be treated as the author(s) for label-generation purposes. If you do not want this behavior, i.e. you require a marker which expands to nothing if there is no author, use **`pureauth`** instead of **`auth`** in the above codes. For example, **`[pureauth]`**, or **`[pureauthors3]`**.

The name of institutions and companies often contain spaces and words that have a specific meaning in the author field, e.g., `and`. The full name should be enclosed in braces (`{}`) to prevent the name from being miss-parsed for these cases. Names enclosed in braces are often abbreviated while generating citation keys to avoid creating excessively long keys. For example, when using `[authors]`, `author = {European Union Aviation Safety Agency}` is abbreviated to `Agency`, whereas `author = {{European Union Aviation Safety Agency}}` is abbreviated to `EUASA`.

#### Editor-related field markers

* **`[edtr]`**: The last name of the first editor
* **`[edtrIniN]`**: The beginning of each editor's last name, using at most `N` characters
* **`[editors]`**: The last name of all editors
* **`[editorLast]`**: The last name of the last editor
* **`[editorIni]`**: The first 5 characters of the first editor's last name, and the last name initials of the remaining editors
* **`[edtrN]`**: The first `N` characters of the first editor's last name
* **`[edtrN_M]`**: The first `N` characters of the `M`th editor's last name
* **`[edtr.edtr.ea]`**: The last name of the first two editors, separated by `.`. If there are more than two editors, adds `.ea`
* **`[edtrshort]`**: The last name if one editor is given; the first character of up to three editors' last names if more than one editor is given. A plus character is added, if there are more than three editors
* **`[edtrForeIni]`**: The forename initial of the first editor
* **`[editorLastForeIni]`**: The forename initial of the last editor

#### Title-related field markers

* **`[shorttitle]`**: The first 3 words of the title, ignoring any function words (see below). For example, `An awesome paper on JabRef` becomes `AwesomePaperJabref`
* **`[shorttitleINI]`**: The first 3 words of the title, abbreviated.
* **`[veryshorttitle]`**: The first word of the title, ignoring any function words (see below). For example, `An awesome paper on JabRef` becomes `Awesome`
* **`[camel]`**: Capitalize and concatenate all the words of the title. For example, `An awesome paper on JabRef` becomes `AnAwesomePaperOnJabref`
* **`[camelN]`**: Capitalize and concatenate no more than the first N words of the title. For example, `An awesome paper on JabRef plus four more words` becomes:
  * `AnAwesomePaperOnJabref` with `[camel5]`, and
  * `AnAwesome` with `[camel2]`.
* **`[title]`**: Capitalize all the significant words of the title, and concatenate them. For example, `An awesome paper on JabRef` becomes `AnAwesomePaperonJabref`
* **`[fulltitle]`**: The title with unchanged capitalization.

JabRef considers the following words to be [function words](https://en.wikipedia.org/wiki/Function_word): "a", "about", "above", "across", "against", "along", "among", "an", "and", "around", "at", "before", "behind", "below", "beneath", "beside", "between", "beyond", "but", "by", "down", "during", "except", "for", "for", "from", "in", "inside", "into", "like", "near", "nor", "of", "off", "on", "onto", "or", "since", "so", "the", "through", "to", "toward", "under", "until", "up", "upon", "with", "within", "without", "yet".

#### Other field markers

* **`[entrytype]`**: The type of the entry, e.g., `Article`, `InProceedings`, etc
* **`[firstpage]`**: The number of the first page of the publication (Caution: this will return the lowest number found in the pages field, i.e. for `7,41,73--97` it will return `7`.)
* **`[pageprefix]`**: The non-digit prefix of pages (like `L` for `L7`) or "" if no non-digit prefix exists (like "" for `7,41,73--97`)
* **`[keywordN]`**: Keyword number `N` from the “keywords” field, assuming keywords are separated by commas or semicolons
* **`[keywordsN]`**: Up to `N` keywords from the "keywords" field
* **`[lastpage]`**: The number of the last page of the publication (See the remark on `firstpage`)
* **`[shortyear]`**: The last 2 digits of the publication year

#### Bibentry fields

In addition to the special field markers, most BibTeX, biblatex, and JabRef field names can be accessed by their **capitalized name** directly. If you regularly use a field name not on this list, you are encouraged to add it.

* **`[AUTHOR]`**: `Ada Lovelace and Charles Babbage` becomes `AdaLovelaceandCharlesBabbage`
* **`[DATE]`**: `2020-09-25`
* **`[DAY]`**: `02` becomes `2`
* **`[GROUPS]`**: The groups or subgroups in JabRef. Subgroup `AppleTrees` and group `Trees` becomes `AppleTreesTrees`
* **`[MONTH]`**: `03` becomes `March`
* **`[YEAR]`**: `2020`

**Note:** You can use any field present in the entry. However, multi-line fields like comment or abstract can produce unexpected results, and their use is discouraged. The [customize entry types section](/setup/customentrytypes) contains more information about fields and their customization.

### Modifiers

A field name (or one of the above pseudo-field names) may optionally be followed by one or more modifiers.

Generally, modifiers are applied in the order they are specified. In the following, we present a list of the most common modifiers alongside a short explanation:

* **`:abbr`**: Abbreviates the text produced by the field name or special field marker. Only the first character and subsequent characters following white space will be included. For example:
  * **`[journal:abbr]`** would from the journal name `Journal of Fish Biology` produce `JoFB`
  * **`[title:abbr]`** would from the title `An awesome paper on JabRef` produce `AAPoJ`
  * **`[camel:abbr]`** would from the title `An awesome paper on JabRef` produce `AAPOJ`
* **`:lower`**: Forces the text inserted by the field marker to be in lowercase.
  * **`[auth:lower]`** expands the last name of the first author in lowercase
* **`:upper`**: Forces the text inserted by the field marker to be in uppercase.
  * **`[auth:upper]`** expands the last name of the first author in uppercase
* **`:capitalize`**: Changes the first character of each word to uppercase, all other characters are converted to lowercase. For example, `an example title` will be converted to `An Example Title`
* **`:titlecase`**: Changes the first character of all normal words to uppercase, all function words (see above) are converted to lowercase. Example: `example title with An function Word` will be converted to `Example Title with an Function Word`
* **`:truncateN`**: Truncates the string after the N:th character and trims any trailing whitespaces. For example, **`[fulltitle:truncate3]`** will convert `A Title` to `A T`.
* **`:sentencecase`**: Changes the first character of the first word to uppercase, all remaining words are converted to lowercase. Example: `an Example Title` will be converted to `An example title`
* **`:regex("pattern", "replacement")`**: Applies regular expression pattern matching and replacement. For example,
  * **`[auth.etal:regex("\.etal","EtAl"):regex("\.","And")]`** will extract the last name of the first author, and the last name of the second author, if there are two authors or .etal if there are more than two. The first `regex()` replaces `.etal` with `EtAl`. The second `regex()` replaces any `.` between entries with two authors with `And`.
* **`:(x)`**: The string between the parentheses will be inserted if the field marker preceding this modifier resolves to an empty value. The placeholder `x` may be any string. For instance, the marker **`[VOLUME:(unknown)]`** will return the entry's volume if set, and the string **unknown** if the entry's `VOLUME` field is not set.

### Formatters

Formatters are primarily used as [save actions](/finding-sorting-and-cleaning-entries/saveactions), but their key value can be used as a modifier. All available actions can be found in the [list of save actions](/finding-sorting-and-cleaning-entries/saveactions#save-actions-as-modifiers).

## Regular Expressions (RegEx)

Regular expressions (or RegEx for short) match patterns within a string. In other words, they are a way to search for (or replace) text within a closed off sequence of characters. They can enhance citation key patterns by altering [modifiers](#modifiers) even further (e.g. via **`:regex("pattern", "replacement")`**). Another use case for them is to [replace existing key patterns](#replace-via-regular-expression).

Documentation and examples for RegEx syntax can be found [in the Java documentation](https://docs.oracle.com/javase/9/docs/api/java/util/regex/Pattern.html) and [in the JabRef documentation](/finding-sorting-and-cleaning-entries/search#modifiers-for-fields).

Keep in mind, JabRef uses a Java flavored regular expressions engine (there are multiple engines) and therefore treats `\` and some other special meta-characters as escape characters. If you want to include any backslash into your RegEx, you have to use `\\` instead of `\`.

## Replace via Regular Expression

In addition to using regular expression replacement as [modifiers](#modifiers) of the field markers within [citation key patterns](#citation-key-patterns), regular expression matching and replacement can be done after the key patterns have been applied. In this case, the regular expression and replacement string are entered in the separate text fields above the [citation key patterns](#citation-key-patterns) section. If the replacement string is empty, then matches of the regular expression will be removed from the generated key.

![Citation key generator preferences - regex replacement](/files/dGyUlRflqpsgfqXw0XVg)

The regex `(?<=.{12}+).+` with an empty replacement string will cut the length of all citation keys to 12.

## Removing unwanted characters

The citation key generator preferences contain an option for removing unwanted characters. Add or remove characters to the right of "Remove the following characters:" to control which characters are included in the citation keys.

![Citation key generator preferences - unwanted characters](/files/-MaAO9zvc9YCrF8Ie8DJ)

Since JabRef 6.0, the default unwanted characters are `?`, `!`, `;`, `^`, `ʹ`, `$` and backtick (\`). If you also want to have `-` be removed (e.g., "Al-Ketan, 2019" should be "AlK19" instead of "Al-19" when using `[auth3][shortyear]`, add `-` to this list.

Note that [characters not allowed in BibTeX](https://tex.stackexchange.com/a/408548/9075) are completely removed - independent of this configuraiton. These characters are `{`, `}`, `(`, `)`, `,`, `=`, `\`, `"`, `#`, `%`, `~`', and `'`.

## Default citation key pattern

If you have not defined a key pattern for a certain entry type, the **Default pattern** will be used. You can change the default pattern - its setting is above the list of entry types in the **Citation key generator** section of the **Preferences** dialog.

The default key pattern is **`[auth][year]`**, and this could produce keys like e.g. `Yared1998` If the key is not unique in the current database, it is made unique by adding one of the letters a-z until a unique key is found. Thus, the labels might look like:

`Yared1998` `Yared1998a` `Yared1998b`

**Note:** In order for your changes to be retained, you must hit "enter" on your keyboard before clicking on the "Save" button.

### Changing the default citation key pattern

To change the citation key pattern to `[authors][camel]` for all libraries without individual settings, execute the following steps:

1. Open the preferences

   <img src="/files/-MKCs9w4fiwgMV4IZJQE" alt="File → Preferences" data-size="original">
2. Navigate to "Citation key generator"

   <img src="/files/DoswrXC5Kgir4XZDOQ6D" alt="Citation key generator preferences" data-size="original">
3. Change the default pattern to `[authors][camel]`

   <img src="/files/-MP52rfILMf_cQeRL_h2" alt="Citation key generator preferences - authors camel" data-size="original">
4. Press "Enter" (forgetting to do this is a leading cause of puzzlement)
5. Click "Save"

### Changing the citation key pattern for one library

To change the citation key patterns for a single library to `[auth][shortyear]`,

1. Make sure the library is open and selected in the JabRef main window

   <img src="/files/-MKCs9w74P3WC6E9hGTI" alt="Main screen selected library" data-size="original">
2. From the "Library" menu, open "Library properties"

   <img src="/files/Rj6V9vHtWdQ5oZlkdPRd" alt="Library Citation key patterns" data-size="original">
3. Set the pattern for the desired entry types (keeping in mind to press enter after setting each), and press the apply button.

   <img src="/files/VU0qp7rj3JVgvfCPr9Ye" alt="Citation key patterns" data-size="original">


# Customize entry types

To customize entry types, select the menu **File → Preferences → Entry types**.

When customizing an entry type, you both define how its entry editor should look, and what it takes for JabRef to consider an entry complete. You can both make changes to the existing entry types, and define new ones.

## Using the entry customization dialog

![Screenshot of the entry customization dialog](/files/-MINnET6gF6pV2-9FGci)

The entry customization interface is divided into two areas. On the left side all entry types (including any custom types) are listed. If you select a type from the left side, the right area shows all fields for the selected entry.

### Adding and removing entry types

The currently available entry types are listed in the left panel.

To add a new entry type, you must enter a name for it in the text field below the type list, and click **Add**. The new entry type will be added to the list, and selected for modification.

To remove a custom entry type, select it and click the trash icon. This operation is only available for custom entry types that are not merely modifications of standard types. It is not possible to remove a standard entry type.

## Editing entry types

When an entry type is selected, the current required and optional fields are listed on the right. A radio button indicates and allows to change the field's type from required to optional and vice versa.

To add a new field, edit the text field below the list, or select a field name from the dropdown menu, then click **Add**. The chosen field name will be added at the end of the list.

To remove a field select it in the list and click the trash icon to remove it.

To change the order of the fields you can use drag and drop.

### Either/or fields

Certain entry types have an either-or condition in their required fields. For instance, a *book* entry is complete with either the *author* or the *editor* field, or both. To indicate such a condition in a custom entry type, you should add a field named as the set of alternative fields separated by slashes, for instance *author/editor* indicates the condition mentioned above for the *book* entry type.


# Entry editor tabs

{% hint style="info" %}
Since the entry editor's redesign, it is no longer possible to define custom tabs with an arbitrary set of fields. All fields of an entry are shown together in the entry editor's [Main tab](/advanced/entryeditor#the-main-tab), grouped into collapsible sections (Identifiers, Files and links, Bibliometrics, Comments, Meta). The rest of this page describes the tabs that remain configurable.
{% endhint %}

You can choose which of the entry editor's built-in tabs are shown, and in which order, under **File → Preferences → Entry Editor → Editor tabs**. Untick a tab to hide it for all entry types; the tab list includes the Main tab, Bib(la)TeX source, Related articles, AI summary, AI chat, File annotations, LaTeX citations, Citations and Fulltext search results.

It does not matter how a field's name is capitalised. In the entry editor, normally a field's first letter is capitalised, i.e. *abstract* is represented as *Abstract*, *KEYwords* would be represented as *Keywords* (*DOI*, *ISBN*, *URL* are exceptions in that all letters are capitalised). In the bibtex code, all field names use lower case: *KEYwords* is *keywords* in the entry's bibtex code.


# Customize key bindings

This feature is available through **File → Preferences → Keyboard shortcuts**.

You can reset the keyboard shortcuts to default by pressing the "Default" button. This is especially useful when upgrading from a JabRef version before 3.8.2.

![](/files/-MFkqecqF24z2Qg7yc8I)


# Library properties

Each library can have specific properties that can be modified through **Library→ Library properties**. These specific properties override the generic properties defined in **Options → Preferences**.

The library-specific properties are stored in the database itself. This way, when moving the database to another computer, these properties are preserved. In most of cases, these are stored in the bib-file database using text blocks starting with `@Comment{jabref-meta:`.

{% hint style="warning" %}
**For shared SQL databases**, some properties are not available as they are not handled like a .bib file.\
The following properties are not available:

* Database encoding (always UTF-8)
* Library protection
* Save sort order
  {% endhint %}

The library properties window consists of four tabs:

* General
* Saving
* String constants
* Citation key patterns

## Tab "General"

![LibraryProperties-General](https://user-images.githubusercontent.com/6931104/187705732-5e511c13-a249-4e2e-be8b-81b0ea151c9f.png)

### General

#### Library encoding

This setting determines which character encoding JabRef will use when writing this library to disk. Changing this setting will override the setting made in Preferences dialog for this database. JabRef specifies the encoding near the top of the bib file, in order to be able to use the correct encoding next time you open the file. The drop-down menu allows to select one encoding.

{% hint style="info" %}
UTF-8 is highly recommended
{% endhint %}

#### Library mode

You can select if your library follows the [BibTeX or the biblatex format](/cite/bibtex-and-biblatex).

### Override default file directories

In your library, files (PDF, etc.) can be linked to an entry. The list of these files are stored in the *file* field of the entry. The location of these files has to be specified.

For your library, you can define a **Library-specific file directory** and a **User-specific file directory**. These settings override the *main file directory* defined in the Preferences dialog.

The **Library-specific file directory** is a common path for all the users of a shared database.\
The **User-specific file directory** allows each user to have its own file directory for the database. If defined, it overrides the **Library-specific file directory**.

JabRef stores the name of the current system alongside the **User-specific file directory**. This assumes that each user of the library has a different system name. For example, when using the computer *laptop*, the entry in the bib file is @Comment{jabref-meta: fileDirectory-jabref-laptop:\somedir;}

Relative directories can be specified. This means that the location of the files will be interpreted relative to the location of the bib file. Simply setting a directory to "." (without quotes) means that the files should reside in the same directory as the bib file.

{% hint style="info" %}
The legacy PDF/PS links (i.e. the pdf and ps fields, which were used in JabRef versions prior to 2.3), should in current versions be replaced by general file links. This can be done using **Quality → Cleanup entries...** and enabling *Upgrade external PDF/PS links to use the 'file' field*.​
{% endhint %}

### Preamble

The preamble defines some LaTeX commands that will be included in the bibliography once processed by BibTeX.

## Tab "Saving"

![LibraryProperties-Saving](https://user-images.githubusercontent.com/6931104/187706060-a25e735d-1695-4412-8a0f-296badf59261.png)

### Library protection

While you edit a shared library, another user may be editing it too. By default, saving the library will overwrite changes done by others (although a warning message about the changes will be displayed).​

To avoid discarding changes involuntarily, and hence to allow a smooth collaborative work, you can choose to refuse to save the library before external changes have been reviewed. This setting lets you enforce reviewing of external changes before the library can be saved: users will only be able to save the library after any external changes have been reviewed and either merged or rejected.

{% hint style="warning" %}
**This is not a security feature**, merely a way to prevent users from overwriting other users' changes inadvertently. This feature does not protect your library against malicious users.​
{% endhint %}

### Save sort order

When saving the library, the order of the entries will be preserved if **Save entries in their original order** is selected. Alternatively, by selecting **Save entries ordered as specified**, you can choose to sort the entries using three criteria. For each criterion, you can type-in the field to be used and select the order.

{% hint style="info" %}
Entries containing a `crossref` field will always be placed prior to the other entries. This is a necessary preliminary for BibTeX to be able to determine the correct referenced values. (See: [Tame the BeaST](https://ctan.org/pkg/tamethebeast), p. 26)
{% endhint %}

### Save actions

Field formatting can be tidied up when saving the library. That ensures your entries to have consistent formatting. If you check **Enable save actions**, the list of actions can be configured.

For more information see [Save Actions](/finding-sorting-and-cleaning-entries/saveactions).

## Tab "String constants"

![LibraryProperties-StringConstants](https://user-images.githubusercontent.com/6931104/187706302-13ed07f4-c704-4a28-9460-f4c9eae5e36c.png)

The [string constants](/advanced/strings) of the library.

## Tab "Citation key patterns"

![LibraryProperties-CitationKeyPatterns](https://user-images.githubusercontent.com/6931104/187706432-5ed71148-e78f-4666-9a49-0b9548873260.png)

The [citation key patterns](/setup/citationkeypatterns) to be used with this library.


# Entry preview setup

## Location

The **Entry Preview** is located inside the **Entry Editor** (except when navigated to the `File annotations` or `{} biblatex source` tab):

![Entry Preview](/files/-MMlrnMkG85yiDImsm_T)

You can display the entry preview as a separate tab (see screenshot above) by checking the box `Show preview as a tab in entry editor` in the entry preview settings `Options > Preferences > Entry preview > Current Preview` (see screenshot below).

## Layouts/Styles

The entry preview displays either the **Customized Preview Style** or a certain **Citation Style**. You can select the styles that should be available for display in **Options → Preferences → Entry preview**. In `Available` you find all styles selectable for display, in `Selected` all styles already selected for display:

![Entry Preview Settings](/files/3TmmjR3h2zb0mtRLYD26)

You can switch between all selected styles (customized preview and citation styles) in the entry preview in the main window by pressing `F9`.

## Display Mechanism

The layout is automatically created using the same mechanism as used by the [Custom export filter](/collaborative-work/export/customexports) facility. When previewed, an entry is processed using one of the selected layouts/styles to produce HTML code which is displayed by the preview panel.

## Modification of the Customized Preview Style

To customize the appearance and contents of the customize entry preview you need to edit/modify the customized preview style in the entry preview settings (see screenshot above) using the custom export filter syntax described in the [Documentation](/collaborative-work/export/customexports).


# Manage external file types

{% hint style="warning" %}
In general, there is no need to change the settings of external file types. So, this setting is for advanced users.​
{% endhint %}

For each file link, a file type must be chosen, to determine what icon should be used and what application should be called to open the file. The list of file types can be viewed and edited by choosing **Options → Preferences**, tab **External file types**.

A file type is specified by a graphical icon, a name, a file extension and an application to view the files. On Windows, the name of the application can be omitted in order to use Window's default viewer instead.

<figure><img src="/files/Z8ViXDprxBXn4sMOeMCe" alt=""><figcaption><p>Manage external file types</p></figcaption></figure>


# Manage protected terms

This feature is available through **File → Preferences → Protected terms files**.

{% hint style="warning" %}
This help page should describe the menu File → Preferences → Protected terms files..

Please, populate this page. Visit our page about [how to edit a help page.](/contributing/how-to-improve-the-help-page#editing-help-pages-directly-in-the-browser).
{% endhint %}

<img src="https://github.com/user-attachments/assets/97faa53c-ebe1-437c-b91c-3e0fa5ed428d" alt="grafik" height="731" width="1097">


# The string editor

In JabRef you write the contents of all fields the same way as you would in a text editor, with one exception: to reference a string, enclose the name of the string in a set of # characters, e.g.: '#jan# 1997', which will be interpreted as the string named `jan` followed by `1997`.

[Strings](/advanced/strings) can be edited in the library properties, reachable through **Library → Library Properties -> String constants**

*Strings* are the *BibTeX* equivalent to constants in a programming language. Each string is defined with a unique *name* and a *content*. Elsewhere in the database, the name can be used to represent the content.

For instance, if many entries are from a journal with an abbreviation that may be hard to remember, such as 'J. Theor. Biol.' (Journal of Theoretical Biology), a string named JTB could be defined to represent the journal's name. Instead of repeating the exact journal name in each entry, the characters '#JTB#' (without quotes) are put into the *journal* field of each, ensuring the journal name is written identically each time.

A string reference can appear anywhere in a field, always by enclosing the string's name in a pair of '#' characters. This syntax is specific for JabRef, and differs slightly from the *BibTeX* notation that is produced when you save your library. Strings can only be used for the fields defined under **File → Preferences → Entry**. You can add any other fields for which you may enable BibTeX string support. Here, you cannot use the '#' character for processing by BibTeX/LaTeX any more.

A string may in the same way be referred in the content of another string, provided the referred string is defined *before* the referring one.

While the order of strings in your BibTeX file is important in some cases, you do not have to worry about this when using JabRef. The strings will be displayed in alphabetical order in the string editor, and stored in the same order, except when a different ordering is required by BibTeX.

For a complete description of string syntax, see the [dedicated help](/advanced/strings).


# Advanced information

{% content-ref url="/pages/-MbDzhFOgrwNI1t0lTcV" %}
[Main Window](/advanced/main-window)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFPhDhiI5MCc3YU" %}
[Entry Editor](/advanced/entryeditor)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFUjjLK0HREvM7u" %}
[About BibTeX and its fields](/advanced/fields)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFVfs2irh24asxi" %}
[Strings](/advanced/strings)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFWoRfZACVFALbO" %}
[Field content selector](/advanced/contentselector)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFX-QVg7l1R-FhA" %}
[URL and DOI links in JabRef](/advanced/externalfiles)
{% endcontent-ref %}

{% content-ref url="<https://github.com/JabRef/user-documentation/tree/main/en/advanced/%3Chttps:/github.com/JabRef/user-documentation/blob/main/en/advanced/OCR.md%3E>" %}
<https://github.com/JabRef/user-documentation/tree/main/en/advanced/%3Chttps:/github.com/JabRef/user-documentation/blob/main/en/advanced/OCR.md%3E>
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFY0v8c5oCcYG\_R" %}
[Command line use and options](/advanced/commandline)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFZ9DkN91w8Sc2v" %}
[Automatic Backup (.sav and .bak) and Autosave](/advanced/autosave)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhF\_zXouBE2cYiGH" %}
[XMP metadata support in JabRef](/advanced/xmp)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFaG7HwoEXB-ZG5" %}
[Remote operation](/advanced/remote)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFcNLyqNUHQ-IJY" %}
[Journal abbreviations](/advanced/journalabbreviations)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr5am7r90otuS3ZwmzF" %}
[New subdatabase based on AUX file](/advanced/newbasedonaux)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFe41qL70qCge0D" %}
[How to expand first names of an entry](/advanced/how-to-expand-firstnames)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFflNEZXicpiceS" %}
[Resources](/advanced/resources)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhFgN47v8A1y\_5rc" %}
[License](/advanced/license)
{% endcontent-ref %}

{% content-ref url="/pages/-LtkgdxN5tZXO1Ru8q4b" %}
[Knowledge](/advanced/knowledge)
{% endcontent-ref %}


# Main Window

This is the main window from where you work with your databases. Below the menubar and the toolbar is a tabbed pane containing a panel for each of your currently open databases. When you select one of these panels, a table appears, listing all the database's entries, as well as a configurable selection of their fields. This table is also referred to as **Entry Table**

### Entry Table Preferences

* You decide which fields are shown in the entry table by checking the fields you want to see in the **File → Preferences → Entry table** dialog.

  ![Entry table configuration dialog](/files/ebuDUZNWWzfkrrF0ndtA)

### Entry Table

* Double-click a line of the entry table to edit the entry content. You can navigate the table with the arrow keys.

  ![Edit entry on the main table](/files/hjaEyb9QFR1XBybVnceG)
* To quickly change the sort order within the entry table, click the header of a column to set it as the primary sort criterion, or reverse the sorting if it is already set. Another click will deselect the column as sorting criterion. Hold down Ctrl and click a column to add, reverse or remove it as a sub-criterion after the primary column. You can add an arbitrary number of sub-criteria, but only three levels will be stored for the next time you start JabRef.
* Adjust the width of each column by dragging the borders between their headers.

  ![Adjust width of columns](/files/pENNqzMfQJ8NlTCiVPrK)


# Entry Editor

{% hint style="warning" %}
This information is outdated. Please help to improve it ([how to edit a help page](/contributing/how-to-improve-the-help-page#editing-help-pages-directly-in-the-browser)).
{% endhint %}

The entry editor opens from [main window](/advanced/main-window) (table of entries). To open it for a specific entry, you can either:

* double-click on the entry in the table of entries
* select the entry and press `Enter`
* select the entry and go to the menu **View → Open entry editor**
* select the entry and press `CTRL + E`

Then you can modify the content of the entry (see below). When done, click on the top left-hand corner of the entry editor or press **ESC** to close the entry editor and go back to the table of entries.

In this panel you can specify all relevant information on a single entry. The entry editor checks the type of your entry, and lists all the fields that are required, and the ones that are optional, for referring the entry with *BibTeX*.

You can fully customize which fields should be regarded as required and optional for each type of entry. See [Customizing entry types](/setup/customentrytypes) for more information about this.

For information about how the fields should be filled out, see [BibTeX help](/advanced/fields).

## The entry editor's tabs

You can choose which tabs are shown, and in which order, under **File → Preferences → Entry Editor → Editor tabs**.

### The Main tab

The **Main** tab shows all of the entry's fields in a single scrollable list. Required and optional fields for the entry's type are listed directly, with one-click chips for adding any optional field that isn't set yet, and a free-form box for adding arbitrary (non-standard) fields.

A few groups of fields are broken out into their own collapsible sections, each collapsed by default when empty and offering chips for its own unset fields:

* **Identifiers** — DOI, ISBN, ISSN, ePrint/arXiv fields, PMID, MR Number
* **Files and links** — linked files, URL, URI, URL date
* **Bibliometrics** — citation count, ICORE ranking
* **Comments** — the entry's comment field(s)
* **Meta** — crossref, groups, owner, timestamps and the [special fields](/finding-sorting-and-cleaning-entries/specialfields) (ranking, priority, read status, etc.)

### Other tabs

Besides Main, the entry editor offers: **Bib(la)TeX source** (see below), **Related articles**, **AI summary** and **AI chat** (if [AI features](/ai) are enabled), **File annotations**, **LaTeX citations**, **Citations**, and **Fulltext search results**.

Up to JabRef 4.1, the comment field was called "Review". The field name was changed to "Comments" as "Review" indicated some external reviews or some fundamental comments.

Switch tabs by clicking on them, or navigate to the tab to the left or right using the following key combinations: Ctrl + Tab or Ctrl + + switch to the tab to the right, and Ctrl + Shift + Tab or Ctrl + - switch to the tab to the left. You can also switch to the next or previous entry by pressing Ctrl + Shift + Down or Ctrl + Shift + Up, respectively, or by clicking the appropriate toolbar button.

*BibTeX source* (termed *biblatex* *source* in case of a biblatex library) shows how th entry will appear when the database is saved in *BibTeX* (or *biblatex*) format. If you wish, you can edit the source directly in this panel. When you move to a different panel, press Ctrl + S or close the entry editor, JabRef will try to parse the contents of the source panel. If there are problems, you will be notified, and given the option to edit your entry further, or to revert to the former contents.

**Tip:** If your database contains fields unknown to JabRef, these will be visible in the source panel.

**Tip:** the *pdf* and *url* fields support Drag and Drop operations. You can drop there an url from your browser. either a link to a pdf file (that JabRef can download for you) or you can keep the link.

## Field consistency checking

When the contents of a field is changed, JabRef checks if the new contents are acceptable. For field types that are used by *BibTeX*, the contents are checked with respect to the use of the '#' character. The hash symbol is *only* to be used in pairs (except in escaped form, '\\#'), wrapping the name of a *BibTeX* string that is referenced. Note that JabRef does not check if the referenced string actually exists (this is not trivial, since the *BibTeX* style you use can define an arbitrary set of strings unknown to JabRef).

If the contents are not accepted, the field will turn red, indicating an error. In this case the change will not be stored.

## Handling of string constants

BibTeX supports string constants. One can define in the bibliography. JabRef offers editing of these strings via the [String Editor](/setup/stringeditor).

For instance, if you see `#jan#` in the `month` field, the "real" BibTeX entry looks like `month = jan`. For more details, see [Strings](/advanced/strings).

## Word/name autocompletion

The entry editor offers autocompletion of words. In the **File → Preferences → Autocomplete**, you can enable or disable autocompletion, and choose for which fields autocompletion is active.

With autocompletion, JabRef records all words that appear in each of the chosen fields throughout your database. Whenever you write the beginning of one of these words, it will be suggested visually. To ignore the suggestion, simply write on. To accept the suggestion, either press Enter or use your arrow keys or other keys to remove the selection box around the suggested characters.

*Note:* the words considered for suggestion are only the ones appearing in the same field in entries of the same database as the one you are editing. There are many ways to realise this kind of feature, and if you feel it should have been implemented differently, we'd like to hear your suggestions!

## Drag and drop behavior settings

The entry editor allows for file(s) to be dragged and dropped directly into the entry editor window. JabRef follows the default behavior of your operating system and uses [Modifier keys](https://www.computerhope.com/jargon/m/modifkey.htm) to distinguish the drag and drop options. **Copy** means the entry editor will create a copy of the file in the current directory. The keyboard shortcuts needed to move, copy or link files are the following: **Move** means, the entry will move the file to the defined file directory, and rename the file according to the filename and file directory patterns. **Link** means the entry editor will create a link to the file. This creates a shortcut to the file and will not copy the file to the current directory.

* Move: Ctrl + Drag (Windows) or Option + Drag (MacOS/Linux)
* Copy: Shift + Drag (Windows) or Command + Drag (MacOS/Linux) or no key + Drag
* Link: Alt + Drag (Windows) or Command + Option + Drag (MacOS/Linux)

## Copy citation key including citation command

Pressing Ctrl + K or the 'key' button causes the citation key for your entry including the surrounding to be copied to the clipboard.

## Copy citation key

Pressing Ctrl + Shift + K causes the citation key for your entry to be copied to the clipboard.

## Autogenerate citation key

Press Ctrl + G or the 'gen key' button (the magic wand) to autogenerate a citation key for your entry based on the contents of its required fields.

For more information on how JabRef generates citation keys, see [Customizing the citation key generator](/setup/citationkeypatterns).

## Jump to field

Press Ctrl + J or the toolbar button to open a dialog for jumping directly to a specific field in the Main tab.

## Related Articles Tab

By selecting this Tab, we are sending the title of the selected paper to Mr. DLib.

Mr. DLib is a service that calculates recommendations for you based on this title. After a short loading time the recommendations are listed in the Related Articles Tab. For detailed information see [Mr. DLibs help page](http://mr-dlib.org/information-for-users/information-about-mr-dlib-for-jabref-users/). The following image shows the Related Articles Tab with recommendations to the selected item.

<figure><img src="/files/L0tFs5QIyJGm2b3oCmwT" alt=""><figcaption></figcaption></figure>

## File Annotations Tab

JabRef can display the content of annotations in PDFs linked to an entry.

Mark or annotate something in a linked PDF.

In the entry editor, you can now select the tab "File annotations" and you will see the content you have highlighted or commented on in the PDF.

If you have multiple PDFs linked to the entry, you can select the document as well in the File Annotation tab.

![](/files/GWR9MNqA5uQCMe6b24TT)


# Links to other entries

JabRef supports following fields to jump to other entries.

Following fields are supported:

* `cites` - comma separated list of citation keys which are cited by this entry
* `crossref` - single entry which is cross referenced.
* `related` - comma separated list of citation keys which are in some kind related to this entry. The type of **all** relations can be specified by a single `relatedtype` (see <https://github.com/plk/biblatex/issues/475#issuecomment-246931180>). Note: biblatex prints this information if `related` is active at the biblatex package.

To use the `crossref` field, navigate to the Main tab's **Meta** section and insert the Crossref there.

To use `cites` and `related`, follow these steps:

1. Navigate to Bib(la)TeX source
2. Insert `related = {citationkey},`
3. Close the entry editor
4. Open the entry editor
5. Navigate to the Main tab
6. There, you now see "related" with the possibilities to (i) navigate to the entry, (ii) add new related entries, (iii) remove related entries.

## Notes

If you use `crossref`, JabRef will move these entries first in the bibliography as otherwise BibTeX cannot use the information of the cross-referenced fields. See also <http://tex.stackexchange.com/a/148978/9075>.

Please note that biblatex treats `crossref` differently than BibTeX.

## Unsupported fields

* `citedBy` - this is the opposite of `cites`. Use `cites` instead.
* `relations` - this would introduce a complicated field similar to our save actions. A simple key/value is enough
* `references` - stores all references in plain text (PRVV plugin). Thus, we do not use it.

## Further information

See <https://github.com/koppor/jabref/issues/14> for the developer's discussion on the fields.


# The Bibtex / biblatex source tab

## What function fulfills the biblatex source tab?

The biblatex source tab allows you to add and edit biblatex entries by simply typing the desired content using correct biblatex syntax. Advanced users may at times find this to be the speedier option. The required syntax is extensively described in ["About BibTeX and its fields"](/advanced/fields).

Additionally, here the data is shown "as is", which means special symbols that are usually supposed to be hidden or translated into readable form, may show regardless.

As an example, let's inspect the file field of this example entry:

```bibtex
@Article{BennLazar2021www,
author = {Benn, Claire and Lazar, Seth},
date = {2021-09},
journaltitle = {Canadian Journal of Philosophy},
title = {What’s Wrong with Automated Influence},
doi = {10.1017/can.2021.23},
issn = {1911-0820},
number = {1},
pages = {125--148},
volume = {52},
abstract = {Abstract Automated Influence is the use of Artificial Intelligence (AI) to collect, integrate, and analyse people’s data in order to deliver targeted interventions that shape their behaviour. We consider three central objections against Automated Influence, focusing on privacy, exploitation, and manipulation, showing in each case how a structural version of that objection has more purchase than its interactional counterpart. By rejecting the interactional focus of “AI Ethics” in favour of a more structural, political philosophy of AI, we show that the real problem with Automated Influence is the crisis of legitimacy that it precipitates.},
creationdate = {2025-07-26T13:27:25},
file = {:JabRefBibLinkedFiles/BennLazar2021www Benn & Lazar (2021-09) What’s Wrong Automated 125--148.pdf:pdf},
modificationdate = {2026-04-12T16:50:28},
publisher = {Cambridge University Press (CUP)},
}
```

If we compare the field contents of the *{} biblatex source* tab (a representation of the raw biblatex data) with the fields contents in the *General* tab (a simplified user oriented representation of the field contents), we can see a difference. The characters `:` and `:pdf` exist in the *{} biblatex source* tab, but are not depicted in the *General* tab.

<figure><picture><source srcset="/files/F73130pk7ef5WQNzSyl3" media="(prefers-color-scheme: dark)"><img src="/files/rJp7eGTmTnoR8xkFW6hc" alt="Picture showing the {} bilatex source tab that includes the file field with its raw data."></picture><figcaption><p>In this "{} biblatex source" tab, the file field contains `:JabRefBibLinkedFiles/BennLazar2021www Benn &#x26; Lazar (2021-09) What’s Wrong Automated 125--148.pdf:pdf`</p></figcaption></figure>

<figure><picture><source srcset="/files/xxreFWm8jfd3wWMGArTh" media="(prefers-color-scheme: dark)"><img src="/files/UinbBvM0JsafOvtGK9RA" alt="Picture showing the entry editor with the file field in the General tab."></picture><figcaption><p>In the "General" Tab, the file field depicts: `JabRefBibLinkedFiles\BennLazar2021www Benn &#x26; Lazar (2021-09) What’s Wrong Automated 125--148.pdf`</p></figcaption></figure>


# The 'owner' field

JabRef can optionally mark all new entries added or imported to a library with your username.

You can disable or enable this feature by entering **File → Preferences → General → Entry Owner**, and selecting/deselecting the line *'mark new entries with owner name'*. You can also change the name used to mark entries. By default, your user name is used. Finally, if an entry with an existing field '*owner*' is imported, the field is updated with your name if *'Overwrite'* is checked.

The owner name is added in a field called *'owner'*, which is shown in the **Meta** section of the [entry editor](/advanced/entryeditor)'s Main tab.


# Time stamp field

JabRef can optionally set a field to contain the date an entry was added to the database.

## Configuration

You can disable or enable this feature by entering **File → Preferences → General**, and selecting/deselecting the line *'Mark new entries with addition date'*.

If an entry with a timestamp is pasted or imported, the field is updated with the current date if *'Overwrite'* is checked. The value of the timestamp field will be updated upon changes in the entry if *'Update timestamp on modification'* is checked.

By default, the date is added in a field called *'timestamp'*, which is shown in the **Meta** section of the [entry editor](/advanced/entryeditor)'s Main tab. You can alter the name of this field. The *date format* can also be customized (see below).

## Usage

The timestamp field can be edited in the **Meta** section of the Main tab in the [entry editor](/advanced/entryeditor). This section is collapsed by default when it has no set fields; expand it, or use its chip, to add or edit the timestamp field.

You can manually alter the value by typing in the date and time of your choice. Also, by clicking on the calendar icon located at the right end of the field, you can select the date you want in a calendar.

![Screenshot of the calendar](/files/-MGDMJtbhGQPGthoizXU)

## Formatting

The formatting of the time stamp is determined by a string containing designator words that indicate the position of the various parts of the date.

These are some of the available designator letters (examples are given in parentheses for Wednesday 14th of September 2005 at 5.45 PM):

* **yy**: year (05)
* **yyyy**: year (2005)
* **MM**: month (09)
* **dd**: day in month (14)
* **HH**: hour in day (17)
* **mm**: minute in hour (45)

These designators can be combined along with punctuation and whitespace. A couple of examples:

* **yyyy.MM.dd** gives **2005.09.14**
* **yy.MM.dd** gives **05.09.14**
* **yyyy.MM.dd HH:mm** gives **2005.09.14 17:45**


# LaTeX Citations Tab

This tool allows you to search for citations in LaTeX files.

In the user interface, a tab was added to the entry editor, the aesthetics have been improved, and the tool was renamed to **Search for Citations in LaTeX files**.

![LaTeX Citations tab](/files/-M21qQ_MQuJOtc4dFyFp)

## Overview

A new tab was added to the entry editor. It allows to search for citations to the active entry in the LaTeX file directory. It can be configured in the [*Library properties* dialog](/setup/databaseproperties).

See the image below to see how it works:

![LaTeX Citations tab animation](/files/-M21qQ_Or0BCRzK8liyw)

## Key Features

### The new tab

* A *LaTeX Citations* tab has been added to the entry editor.
* This tab can be disabled in the *Entry editor* preferences.
* A progress indicator appears while parsing.
* Current search is cancelled if another entry is selected.
* Parsed files are stored when the tool is run for the first time (to achieve better performance).
* The current search path is shown at the bottom, next to a button to set the LaTeX file directory.
* A user-friendly error logging and handling has also been implemented.

### A custom user interface controller for listing citations

* The citations list view is the same for dialog tool and tab.
* The context of citations is shown instead of the whole line of text (which is shown as a tooltip).
* Absolute file path has been changed into a relative one, from the search path.
* New icons and styles for context, file path, and position (line and column) of a citation.


# About BibTeX and its fields

The data format of JabRef is Bib(La)TeX

JabRef is a program for working with BibTeX and biblatex databases. JabRef program uses no separate internal file format but directly works with BibTeX and biblatex. That means, your BibTeX/biblatex file is kept as is when opening in JabRef and saving again: You normally load and save your libraries directly in the BibTeX/biblatex`.bib` format. In addition, you can also [import](/collect) and export bibliography libraries in a number of other formats into JabRef.

JabRef helps you work with your *BibTeX* libraries, but there are still rules to keep in mind when editing your entries, to ensure that your library is treated properly by the *BibTeX* program.

## JabRef's conventions

### Fields in the header of a bib file

JabRef stores the encoding of the file and (in case a shared [SQL database](/collaborative-work/sqldatabase) is used) the ID of the shared library in the header of the bib file.

#### Encoding

`% Encoding: <encoding>`: States the encoding of a BibTeX file. E.g., `% Encoding: UTF-8`

#### Shared Id

To enable auto save, JabRef adds `% DBID: <id>` to the header. This helps JabRef identifying the SQL database where the file belongs. E.g., `% DBID: 2mvhh73ge3hc5fosdsvuoa808t`.

## Standard BibTeX Format

<div align="center"><figure><img src="/files/xdpqoTzxr3IA7GSwCr4Z" alt=""><figcaption><p>A BibTeX "Entry"</p></figcaption></figure></div>

An entry consists of entrytype, citekey, fields and field content. The BibTeX and Biblatex standards define a wide range of entrytypes and fields, which should give much leeway. Users that have further needs will be able to edit their entries and come up with custom entrytypes, fields and citekeys, as long as the syntax is honored.

## Standard *BibTeX* fields

There is a lot of different fields in *BibTeX*, and some additional fields that you can set in JabRef.

The following fields are recognized by the default bibliography styles:

* **bibtexkey** A unique string used to refer to the entry in LaTeX documents. Note that when referencing an entry from LaTeX, the key must match case-sensitively with the reference string. Some characters should not be used in bibtexkey as they are not compatible or not recommended:

  `{ } ( ) , \ " - # ~ ^ : '`
* **address** Usually the address of the `publisher` or other type of institution. For major publishing houses, you may omit the information entirely or give simply the city. For small publishers, on the other hand, you can help the reader by giving the complete address.
* **annote** An annotation. It is not used by the standard bibliography styles, but may be used by others that produce an annotated bibliography.
* **author** This field should contain the complete author list for your entry. The names are separated by the word *and*, even if there are more than two authors. Each name can be written in two equivalent forms:

  Donald E. Knuth *or* Knuth, Donald E.

  Eddie van Halen *or* van Halen, Eddie

  The second form should be used for authors with more than two names, to differentiate between middle names and last names.
* **booktitle** Title of a book, part of which is being cited. For book entries, use the `title` field instead.
* **chapter** A chapter (or section or whatever) number.
* **crossref** The library key of the entry being cross referenced.
* **edition** The edition of a book--for example, \`\`Second''. This should be an ordinal, and should have the first letter capitalized, as shown here; the standard styles convert to lower case when necessary.
* **editor** This field is analogue to the *author* field. If there is also an `author` field, then the `editor` field gives the editor of the book or collection in which the reference appears.
* **howpublished** How something strange has been published. The first word should be capitalized.
* **institution** The sponsoring institution of a technical report.
* **journal** The name of a journal or magazine. The name of a journal can be abbreviated using a "string". To define such string, use the [string editor](/setup/stringeditor).
* **key** Used for alphabetizing, cross referencing, and creating a label when the \`\`author'' information is missing. This field should not be confused with the key that appears in the `\cite` command and at the beginning of the library entry.
* **month** The month in which the work was published or, for an unpublished work, in which it was written. You should use the standard three-letter abbreviation of the English names (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec).
* **note** Any additional information that can help the reader. The first word should be capitalized.
* **number**

  The number of a journal, magazine, technical report, or of a work in a series. An issue of a journal or magazine is usually identified by its volume and number; the organization that issues a technical report usually gives it a number; and sometimes books are given numbers in a named series.
* **organization** The organization that sponsors a conference or that publishes a manual.
* **pages** One or more page numbers or range of numbers, such as `42--111` or `7,41,73--97` or `43+` (which indicates `page 43 and following pages`). The standard styles convert a single dash (as in `7-33`) to the double dash used in TeX to denote number ranges (as in `7--3`).
* **publisher** The publisher's name.
* **school** The name of the academic institution where a thesis was written.
* **series** The name of a series or set of books. When citing an entire book, the `title` field gives its title and an optional `series` field gives the name of a series or multi-volume set in which the book is published.
* **title** The title of the work. The capitalization may depend on the bibliography style and on the language used. For words that have to be capitalized (such as a proper noun), enclose the word (or its first letter) in braces.
* **type** The type of a technical report - for example, "Research Note".
* **volume** The volume of a journal or multivolume book.
* **year** The year of publication or, for an unpublished work, the year it was written. Generally it should consist of four numerals, such as `1984`, although the standard styles can handle any `year` whose last four nonpunctuation characters are numerals, such as "(about 1984)". This field is required for most entry types.

## BibLaTeX fields

BibLaTeX defines more fields. It gets especially interesting in the context of date handling. See the [BibLaTeX manual](https://ftp.rrzn.uni-hannover.de/pub/mirror/tex-archive/macros/latex/contrib/biblatex/doc/biblatex.pdf) for detais.

* **date** The date of the publication. Can also include date ranges (e.g., `2014-04-07/2014-04-10`).

## Non-standard fields

BibTeX is extremely popular, and many people have used it to store information in non-standard fields. The information in these non-standard fields may be ignored by BibTeX.

Here is a list of some of the more common non-standard fields ("\*" = not directly supported by JabRef):

* **affiliation** The authors affiliation.
* **abstract** An abstract of the work.
* **doi** The Digital Object Identifier, a permanent identifier given to documents.
* **eid** The Electronic identifier is for electronic journals that also appear in print. This number replaces the page number, and is used to find the article within the printed volume. Sometimes also called *citation number*.
* **contents** A table of contents
* **copyright** Copyright information.
* **ISBN** The International Standard Book Number.
* **ISSN** The International Standard Serial Number. Used to identify a journal.
* **keywords** Key words used for searching or possibly for annotation.
* **language** The language the document is in.
* **location** A location associated with the entry, such as the city in which a conference took place.
* **LCCN** The Library of Congress Control Number. I've also seen this as `lib-congress`.
* **mrnumber** The number of Mathematical Reviews.
* **price** The price of the document.
* **size** The physical dimensions of a work.
* **URL** The WWW Uniform Resource Locator that points to the item being referenced.

## JabRef-specific fields

To help in managing your bibliography, and extend the features of BibTeX, JabRef defines some specific fields:

* [External files](/advanced/externalfiles)
* [Entry editor tabs](/setup/generalfields)
* [Owner](/advanced/entryeditor/owner)
* [Quality and grading](/finding-sorting-and-cleaning-entries/specialfields)
* [Time stamp](/advanced/entryeditor/timestamp)

## Define your own fields

You can create new fields by [editing (or creating) entry types](/setup/customentrytypes).

## Hints on fields

* Generally, you can use LaTeX commands inside of fields containing text. *BibTeX* will automatically format your reference lists, and those fields that are included in the lists will be (de)capitalized according to your bibliography style. To ensure that certain characters remain capitalized, enclose them in braces, like in the word *{B}elgium*.
* An institution name should be inside `{}` brackets.

  If the institution name also includes its abbreviation, this abbreviation should be also in `{}` brackets.

  For instance, `{The Attributed Graph Grammar System ({AGG})}`.

## Further information resources

* [Tame the BeaST - The B to X of BibTxX](http://mirrors.ctan.org/info/bibtex/tamethebeast/ttb_en.pdf) - long manual explaining the workings of BibTeX, the BibTeX format, and the available entry types with required and optional fields.
* [BibTeX format according to Wikibook](https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management#BibTeX)
* [BibTeX format according to Wikipedia](https://en.wikipedia.org/wiki/BibTeX#Bibliographic_information_file)
* [Reference documentation about BibTeX](https://ctan.org/tex-archive/biblio/bibtex/contrib/doc) --> `btxdoc.pdf`
* [BibTeX tips and FAQ](https://ctan.org/tex-archive/biblio/bibtex/contrib/doc) --> `btxFAQ.pdf`

### BibTeX files

* <https://github.com/lvilnis/BibtexParser/tree/master/inputs>
* <https://github.com/environmentalinformatics-marburg/jabref>
* <https://mirrors.ctan.org/biblio/bibtex/contrib/test/test.bib>

### BibLaTeX files

* <http://mirrors.ctan.org/macros/latex/contrib/biblatex/bibtex/bib/biblatex/biblatex-examples.bib>
* <http://mirrors.ctan.org/macros/latex/contrib/biblatex/bibtex/bib/biblatex/biblatex-examples.bib>

### BibTeX and BibLaTeX files in the JabRef repository

* <https://github.com/JabRef/jabref/tree/main/src/test/resources/testbib>

### Good references for the BibTeX "standard"

* <https://mirrors.ctan.org/biblio/bibtex/contrib/doc/btxdoc.pdf>
* <http://maverick.inria.fr/~Xavier.Decoret/resources/xdkbibtex/bibtex_summary.html>

### BibLaTeX standard

* <http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf>
* <https://github.com/plk/biblatex>

### BibTeX parsers

* <https://github.com/ambs/Text-BibTeX>
* <https://github.com/lvilnis/BibtexParser>
* <https://github.com/sciunto-org/python-bibtexparser>
* [citation.js](https://citation.js.org/)


# Strings

*BibTeX* supports storing constant strings using `@String {key = value}`. JabRef supports managing them using **Library → Edit string constants**, which opens the [String Editor](/setup/stringeditor). These values can be used in fields. For example, you can have:

```
@String { kopp = "Kopp, Oliver" }
@String { kubovy = "Kubovy, Jan" }
@String { et = " and " }
```

and then in some entry for example

```
@Misc{m1,
  author = kopp # et # kubovy,
}
```

or

```
@Misc{m2,
  author = kopp # " and " # kubovy,
}
```

In the JabRef field editor, the author has to be inserted as `#kopp# #et# #kubovy#` or `#kopp# and #kubovy#`.

## Rendering of constants in JabRef's entry editor

Strings are rendered specially in the entry editor. This is especially important in the case of months. For instance, take the following BibTeX entry:

```
@Misc{m3,
  month = may,
}
```

In JabRef, the entry editor then displays `#may#`. In case the entry editor just displays `may`, this is written as follows:

```
@Misc{m4,
  month = {may},
}
```

In other words: The character `#` indicates something special in the entry editor.

## JabRef's typed Strings

JabRef enhances the concept of Strings to add a type to those `@String`s. The issue is how to preserve such type of a string in a BibTeX file. JabRef adds the type though prefixes:

* `@String { aKopp = "Kopp, Oliver" }` is a `@String` with the type author.
* `@String { iMIT = "{Massachusetts Institute of Technology ({MIT})}" }` is a `@String` with the type of institution.
* `@String { anct = "Anecdote" }` is a `@String` of type other.
* `@String { lTOSCA = "Topology and Orchestration Specification for Cloud Applications" }` is a `@String` of type other.

Then `@String`s of type author should be used for author and editors fields only. `@String`s of type institution should be used for institution and organization fields only. `@String`s of type publisher should be used only for publisher fields. And finally `@String`s of type other can be used anywhere.

It can also happen that you will have the same institution for more types:

* `@String { aMIT = "{Massachusetts Institute of Technology ({MIT})}" }` if the institution will appear as author or editor
* `@String { iMIT = "{Massachusetts Institute of Technology ({MIT})}" }` if the institution will appear as institution or organization
* `@String { pMIT = "{Massachusetts Institute of Technology ({MIT}) press}" }` if the institution will appear as publisher.

Even if the last example may appear contradicting the intention was to remove duplicity and unify the names of persons and institutions.

## More examples

* `\@String{aKahle = "Kahle, Brewster "}` -> author
* `\@String{aStallman = "Stallman, Richard"}` -> author
* `\@String{iMIT = "{Massachusetts Institute of Technology ({MIT})}" }` -> institution
* `\@String{pMIT = "{Massachusetts Institute of Technology ({MIT}) press}" }` -> publisher
* `\@String{anct = "Anecdote" }` -> other
* `\@String{eg = "for example" }` -> other
* `\@String{et = " and " }` -> other
* `\@String{lBigMac = "Big Mac" }` -> other

Usage:

```
\@Misc {
  title       = "The GNU Project"
  author      = aStallman # et # aKahle
  institution = iMIT
  publisher   = pMIT
  note        = "Just " # eg
}
```

## Further reading

See <https://tex.stackexchange.com/questions/303467/bibliography-contents-journal-names-not-abbreviated-even-with-ieeeabrv/303489#303489> for a MWE for string constants.


# Field content selector

The preferences for this feature are accessible via **Library → Library properties → Content selectors** and allows you to store often-used words or phrases. This creates the possibility to conveniently make use of them in the entry editor to fill in field content.

To add a new word by using the content selector in the entry editor, you can simply click into the text box for the field for which you configured the selectors. A drop down menu will appear and you can select the keyword of your choice. This mechanism is based on the [autocompletion](https://docs.jabref.org/advanced/entryeditor#word-name-autocompletion) functionality in JabRef (**File → Preferences → Autocompletion**) . Therefore, you need to have autocompletion enabled in your preferences.

By default, the feature is enabled for the fields *Journal*, *Author*, *Keywords* and *Publisher*, but you can also add selectors to other fields.

The word selection is library-specific, and is saved along with your references in the .bib file.


# URL and DOI links in JabRef

For linking attached files, see [File links in JabRef](/finding-sorting-and-cleaning-entries/filelinks).

JabRef lets you link documents on the web in the form of an URL or a DOI identifier.

## Setting up external viewers

JabRef has to know which external viewers to use for web pages. These are by default set to values that probably make sense for your operating system, so there's a fair chance you don't have to change these values.

To change the external viewer settings, go to **Options → Preferences → External programs**.

## Opening external links

There are several ways to open an external web page. In the entry editor, click on the icon "open" right of the text field to open the respective DOI or URL.

![Open DOI](/files/3n4m5k92pf3APu7Kkagj)

In the entry table you can select an entry and use the menu choice, keyboard shortcut or the right-click menu to open the file or web page. Finally, you can click on a URL or DOI icon.

![Open DOI via popup](/files/CgrzUzMO6cAM9Toni97Q)

By default the entry table will contain a singly column containing an indicator whether there is a DOI or a URL linked. You can remove the "Link identifiers" column in **Options → Preferences → Entry table**.


# OCR

[OCR](https://en.wikipedia.org/wiki/Optical_character_recognition) (Optical Character Recognition) is defined as the electronic or mechanic conversion of images of typed, handwritten or printed text into machine-encoded text. Consequently, with this technology it is possible to add editable and searchable data to PDFs and other files in your Jabref library. OCR can be used via multiple tools and engines. Currently, JabRef supports two OCR engines: [OCRmyPDF](https://ocrmypdf.readthedocs.io/en/latest/) and [Docling](https://github.com/docling-project/docling).

## How to install an OCR engine

Install whichever engine you plan to use, no need to install both.

### OCRmyPDF

* Please check the [OCRmyPDF installation guide](https://ocrmypdf.readthedocs.io/en/latest/installation.html) and follow the instructions for your operating system.

### Docling

* Please check the [Docling installation guide](https://docling-project.github.io/docling/getting_started/installation/) and follow the instructions for your operating system.

## How to perform OCR on a scanned PDF file in JabRef

{% hint style="warning" %}
The OCR engine selected in your preferences must be installed on your system to use this feature.
{% endhint %}

1. Open JabRef and select the entry with the PDFs you want to OCR.
2. Scroll down the Main Tab of the Entry Editor till you reach the Files and Links section.
3. Right-click on the File and select "Perform OCR and embed text into new PDF file", or select the file and use the shortcut `Ctrl+Alt+R`.

   ![Perform OCR](/files/LIXn9OxmOVvaEkbSDPfO)

* After performing OCR, JabRef creates a new PDF file with the OCR text embedded, and it will be linked to all the entries that have the old file linked to them. The original scanned PDF will remain unchanged.

  ![Original and OCRed files](/files/tAxlbeApUYQzqytXLfRH)
* Now you can select and search text in the new PDF file.

  ![Comparison between original and OCRed file](/files/Owfm827Uo1MkctNOEXKw)

## OCR Preferences

* The OCR preferences can be accessed via **File → Preferences → OCR**.

  ![OCR preferences](/files/9W3icDNRf91UBS18tv2L)

### OCR Engine Selection

* JabRef lets you choose which OCR engine to use from the **OCR engine** dropdown at the top of the OCR preferences tab.

  ![OCR engine selection dropdown](/files/Gd6Hy9yKI3ElhSmxCjiL)
* Available engines:

1. **OCRmyPDF**: the default engine. Well suited for general-purpose OCR on scanned PDFs.
2. **Docling**: an alternative engine with strong handling of complex layouts and documents containing tables or figures (slower than OCRmyPDF).

* Changing the selected engine automatically re-runs **auto-detection** for that engine's path (see below), so if the newly selected engine is installed in a standard location, its path field will populate automatically.

### Engine Path

{% hint style="warning" %}
Performing OCR will fail if wrong engine path is provided, make sure that the correct path is provided.
{% endhint %}

* JabRef needs to know the location of the selected engine's executable to run OCR. By default, JabRef assumes the engine's standard command (`ocrmypdf` or `docling`) is available on your system PATH, which is the case for most standard installations.
* If your chosen engine is installed in a non-standard location, or if OCRmyPDF needs to be invoked through Python, you can configure the path manually in this preference tab.
* The path field always corresponds to the engine currently selected in the **OCR engine** dropdown above, switching engines switches which path you're viewing and editing.
* There are two ways to set the engine path:

1. **Type the path manually**: Enter the path directly into the text field. This can be a bare command name (e.g. `ocrmypdf`, `docling`, or `python -m ocrmypdf`) if it is available on your system PATH, or a full absolute path to the executable (e.g. `/home/user/.local/bin/ocrmypdf`).

   ![Text field for engine path](/files/Jk10nqTGkronYLwkKAX7)
2. **Browse**: Click the folder icon to open a file chooser and navigate to the engine's executable on your system.

   ![Browse engine path button](/files/pKN2oxDPAn3WZPIRxnUz)

* JabRef also **auto-detects the path automatically** whenever you change the selected engine in the dropdown, you don't need to trigger this manually. When you switch engines, JabRef tries the following commands, in order, and fills in the path field with the first one that works:

  **For OCRmyPDF:**

  1. `ocrmypdf`
  2. `python -m ocrmypdf`
  3. `py -m ocrmypdf`
  4. `python3 -m ocrmypdf`

  **For Docling:**

  1. `docling`

If none of these succeed, the path field will remain unchanged and you will need to set the path manually.

### Handling of pre-existing text

* Some PDFs may contain a mix of pages with and without embedded text.
* In such cases, you will have three options:

1. **Skip pages with text**: Performs OCR only on the pages without already embedded text. This is the default behavior, if not specified.
2. **Redo text in pages containing OCRed text**: Uses OCR on pages containing text created by a prior OCR run.
3. **Overwrite text in pages containing text**: Forces OCR with rasterization on all pages, potentially reducing quality or losing vector content, but this technique works, even when the `Redo text in pages containing text` option doesn't work.

* This can be configured in Handling of pre-existing text section in the OCR preferences.

  ![OCR options for handling of pre-existing text](/files/6xldT3bwrEX3ybz8ZwLf)

{% hint style="info" %}
This setting applies to whichever OCR engine is currently selected.
{% endhint %}


# Command line use and options

Although JabRef is primarily a GUI based application, it offers several command line options that may be useful. JabRef can even perform file conversion operations without opening the graphical interface.

## Basics

{% hint style="info" %}
This description applies since JabRef 5.0, because JabRef comes with a pre-bundled Java-Runtime Environment
{% endhint %}

**Windows:**

Locate `JabRef.bat`, for example: `JabRef-5.0-portable_windows\JabRef\runtime\bin\JabRef.bat`

\
**Linux:**

`JabRef-5.0-portable_linux/JabRef/lib/runtime/bin/JabRef`.

\
**macOS:**

`/Applications/JabRef.app/Contents/MacOS/JabRef`\\

**Do not use `JabRef\JabRef.exe` or `bin/JabRef`**

The following documentation is for Windows, but works equally well on Linux and macOS:

```cmd
C:\portable-apps\JabRef-5.0-portable_windows\JabRef\runtime\bin\JabRef.bat [OPTIONS] [BIBTEX_FILE]
```

In some cases, you have to specify `--console` to ensure that output is written to the console.

You can always specify one or more Bib(la)TeX files to load by simply listing their filenames.\
Take care to specify all options before your list of file names.\
Ensure that the first file name is not misunderstood as being an argument for an option; this simply means that if a boolean option like `-n` or `-l` immediately precedes a file name, add the word `true` as an argument.\
For instance, the command line will correctly load the file `original.bib`, export it in [docbook format](https://docbook.org/whatis) to `filetoexport.xml`, and suppress the GUI:

```cmd
C:\portable-apps\JabRef-5.0-portable_windows\JabRef\runtime\bin\JabRef.bat -o filetoexport.xml,docbook5 -n true original.bib
```

The word *true* prevents the file name from being interpreted as an argument to the `-n` option.

## Options

* [Help: `-h`](#help--h)
* [No-GUI mode: `-n`](#no-gui-mode--n)
* [Import file: `-i filename[,import format]`](#import-file--i-filenameimport-format)
* [Export file: `-o filename[,export format]`](#export-file--o-filenameexport-format)
* [Import BibTeX: `-importBibtex`](#import-bibtex--importbibtex)
* [Export matching entries: `-m [field]searchTerm,outputFile:file[,exportFormat]`](#export-matching-entries--m-fieldsearchtermoutputfilefileexportformat)
* Write BibTexEntry as XMP metadata to PDF: `-w CITEKEY1[,CITEKEY2][,CITEKEYn] | PDF1[,PDF2][,PDFn] | all`
* [Fetch entries from Web: `-f=FetcherName:QueryString`](#fetch-entries-from-web--ffetchernamequerystring)
* [Subdatabase from .aux file: `-a infile[.aux],outfile[.bib] base-BibTeX-file`](#subdatabase-from-aux-file--a-infileauxoutfilebib-base-bibtex-file)
* [Set file links: `-asfl`](#set-file-links--asfl)
* [Regenerate keys: `-g`](#regenerate-keys--g)
* [Export preferences: `-x filename`](#export-preferences--x-filename)
* [Import preferences: `-p filename`](#import-preferences--p-filename)
* [Reset preferences: `-d key`](#reset-preferences--d-key)
* [No files at startup: `-b`](#no-files-at-startup--b)
* [Version: `-v`](#version--v)
* [Debug mode: `--debug`](#debug-mode---debug)
* [Display output in the console: `--console`](#display-output-in-the-console---console)

### Help: `-h`

(or `--help`)

Displays a summary of the command line options, including the list of available import and export formats.

### No-GUI mode: `-n`

(or `--nogui`)

Suppresses the JabRef window (i.e. no GUI - Graphic User Interface - is displayed).

It causes the program to exit immediately once the command line options have been processed. This option is useful for performing file conversion operations from the command line or a script.

### Import file: `-i filename[,import format]`

(or `--import filename[,import format]` or `--importToOpen filename[,import format]`)

Import or load the file `filename`.

If only the filename is specified (or if the filename is followed by a comma and a `*` character), JabRef will attempt to detect the file format automatically. This works for BibTeX files, and also for all files in a supported import format. If the filename is followed by a comma and the name of an import format, the given import filter will be used.

Use the `-h` option to get the list of available import formats.

If an export option is also specified, the import will always be processed first, and the imported or loaded file will be used by the export filter. If the GUI is not suppressed (using the `-n` option), any imported or loaded file will show up in the main window.

If `--importToOpen` is used, the content of the file will be imported into the opened tab.

*Note:* The `-i` option can be specified only once, and for one file only.

### Export file: `-o filename[,export format]`

(or `--output filename[,export format]`)

Export or save a file imported or loaded by the same command line.

If a file is imported using the `-i` option, that file will be exported. If no `-i` option is used, the *last* file specified (and successfully loaded) will be exported.

If only filename is specified, it will be exported in BibTeX format. If the filename is followed by a comma and an export format, the given export filter will be used.

A custom export filter can be used, and will be preferred if the export name matches both a custom and a standard export filter.

If the GUI is not suppressed (using the `-n` option), any export operation will be performed before the JabRef window is opened, and the imported database will show up in the window.

*Note:* The `-o` option can be specified only once, and for one file only.

#### Xmp export option

[XMP](https://en.wikipedia.org/wiki/Extensible_Metadata_Platform) is an ISO standard for the creation, processing and interchange of standardized and custom metadata for digital documents and data sets.

The first option is to export all entries, which are included in the `entries.bib` file to the specified `export.xmp` file. The second argument, separated by comma, is the type of exporter used by JabRef.

```cmd
JabRef.bat -o path\export.xmp,xmp  path\entries.bib -n
```

The second option is to export every entry in the entries.bib in a single .xmp file. Therefore, the file name is replaced by the keyword `split` without a file ending! JabRef generates individual .xmp files at the `path` location. The file name is a combination of the identifier provided by JabRef and the cite key of the entry.

```cmd
JabRef.bat -o path\split,xmp  path\entries.bib -n
```

### Import BibTeX: `-importBibtex`

Import or load code directly from the BibTeX file. This only works for BibTeX files, and does not support files of other import formats. If it detects this command line option, the JabRef CLI will take in its following argument as a BibTeX string that represents the BibTeX article file being read in for import (usually a filename). JabRef then passes on this information to a helper function that will parse the BibTex string into entries and return the resulting BibTex entries to the JabRef CLI.

If the GUI is not suppressed (using the `-n` option), any imported or loaded BibTeX file will show up in the main window.

*Note:* The `-importBibtex` option can be specified only once, and for one file only.

### Export matching entries: `-m [field]searchTerm,outputFile:file[,exportFormat]`

(or `--exportMatches [field]searchTerm,outputFile:file[,exportFormat]`)

Save to a new file all the database entries matching the given search term.

If the filename is followed by a comma and an export format, the given export filter will be used. Otherwise, the default format *html-table* (with *Abstract* and *BibTeX*, provided by *tablerefsabsbib*) is used.

Information about to the search function is given in ['advanced search' documentation](/finding-sorting-and-cleaning-entries/search).

*Note:* In addition it is also possible to search for entries within a time frame such as `Year=1989-2005` (instead of only searching for entries of a certain year as in `Year=2005`).

*Note:* Search terms containing blanks need to be bracketed by quotation marks, as in `(author=bock or title|keywords="computer methods")and not(author=sager)`

### Write BibTexEntry as metadata to PDF: `-w CITEKEY1[,CITEKEY2][,CITEKEYn] | PDF1[,PDF2][,PDFn] | all`

(or `-writeMetadatatoPdf -w CITEKEY1[,CITEKEY2][,CITEKEYn] | PDF1[,PDF2][,PDFn] | all`)

Exports information stored in the database as Metadata to linked files. The metadata is stored as XMP metadata and as an embedded bib file. The entries can be selected by citekey. Individual pdfs can be selectec by the path to the pdf (either as given in the database or as an absolute or relative path to the pdf file itself). The keyword `all` may be specified to write metadata on all pdfs in the database.

### Write BibTexEntry as XMP metadata to PDF: `-writeXMPtoPdf CITEKEY1[,CITEKEY2][,CITEKEYn] | PDF1[,PDF2][,PDFn] | all`

As -writeMetadatatoPdf, but only write XMP metadata.

### Write BibTexEntry as XMP metadata to PDF: `-embeddMetadataInPdf CITEKEY1[,CITEKEY2][,CITEKEYn] | PDF1[,PDF2][,PDFn] | all`

As -writeMetadatatoPdf, but only embedd a bib file.

### Fetch entries from Web: `-f=FetcherName:QueryString`

(or `--fetch=FetcherName:QueryString`)

Query a Web fetcher and import the entries.

Pass both the name of a fetcher and your search term or paper id (e.g. `--fetch=Medline:cancer`), and the given fetcher will be run. Some fetchers will still display a GUI window if they need feedback from you.

The fetchers listed in the Web search panel can be run from the command line. To get the list of available fetchers, run `--fetch` without parameters.

### Subdatabase from .aux file: `-a infile[.aux],outfile[.bib] base-BibTeX-file`

(or `--aux infile[.aux],outfile[.bib] base-BibTeX-file`)

Extract a subdatabase from a .aux file:

When you compile a LaTeX document (e.g. `infile.tex`), an .aux file is created (`infile.aux`). Among other things, it contains the list of entries used in your document. JabRef can extract the references used from the `base-BibTeX-file` to a new .bib file (`outfile.bib`). This way, you will have a subdatabase containing only the entries used in the .tex file.

### Set file links: `-asfl`

(or `--automaticallySetFileLinks`)

Automatically set file links.

### Regenerate keys: `-g`

(or `--generateCitationKeys`)

Regenerate all keys for the entries of a Bib(la)TeX file.

### Export preferences: `-x filename`

(or `--prexp filename`)

Export user preferences to an XML file. After exporting, JabRef will start normally.

### Import preferences: `-p filename`

(or `--primp filename`)

Import user preferences from an XML file (exported using the `-x` option, or through the GUI). After importing, JabRef will start normally.

### Reset preferences: `-d key`

(or `--prdef key`)

Reset preferences (key1, key2,..., or `all`).

### No files at startup: `-b`

(or `--blank`)

Do not open any files at startup

### Version: `-v`

(or `--version`)

Display the version number of JabRef.

### Debug mode: `--debug`

Show debug level messages. The log files are stored in an internal file. See FAQs for [Windows](https://docs.jabref.org/faq/windows#q-where-can-i-find-jabrefs-log-files), [Linux](https://docs.jabref.org/faq/linux#where-can-i-find-jabrefs-log-files), [macOS](https://docs.jabref.org/faq/osx#q-where-can-i-find-jabrefs-log-files) depending on your OS where to find it.

### Display output in the console: `--console`

Show info and error messages in the console.

## Development

As developer, you pass arguments to the app using gradle's `--app` switch. Enclose the arguments in quotes. For instance `--args="--debug"` turns on debug mode.

<figure><img src="/files/0FD0I5dJskiyEsWVSFoo" alt=""><figcaption></figcaption></figure>

You can then view the event log in JabRef as follows:

<figure><img src="/files/kSavSXFN2fs01hbAwP5h" alt=""><figcaption></figcaption></figure>


# Automatic Backup (.sav and .bak) and Autosave

{% hint style="info" %}
Changelog:\\

JabRef 5.8\
Major rework and a change in what .bak and .sav denote. Henceforth,\
`.sav` is a temporarily written file.\
`.bak` is a backup file.

\
JabRef 5.1\
To reduce the amount of configuration options, the possibility to disable the creation of `.bak` files was removed.\
\
JabRef 3.7\
First introduction of the autosave and backup features.\
`.sav` is the automatic backup feature.\
`.bak` preserves the last state of the library after saving
{% endhint %}

## What are `.sav`, `.bak` and `.tmp` files?

JabRef generates `.sav`, `.bak` and `.tmp` files while working.

* `.bak` stands for the automatic backup feature: Each 20 seconds, after a change to the library, the current state of the library is saved to a .bak file. JabRef keeps 10 older versions of a .bak file in the [user data dir](https://github.com/harawata/appdirs#supported-directories).
* `.sav` preserves the last state of the library after saving. Thus, one can go back one save command in the history. Used when writing the .bib file. Used for copying the .bib away before overwriting on save.
* `.tmp` is a temporary file with changes that are supposed to be written to the `.bib` file.

**Rough outline of what's happening during a write to the `.bib` file:**\
\
A `.tmp` will be written --> `.bib` copies to `.sav` --> `.tmp` copies to `.bib` --> `.sav` gets deleted --> 20 seconds later, a copy of the `.bib` file will be stored as`.bak` file in the user data dir.

#### How to ignore JabRef's .sav and .bak files in Git

By using the [gitignore.io](https://www.gitignore.io) service, you can generate an appropriate `.gitignore` file by opening <https://www.gitignore.io/api/jabref>. A `gitignore` file specifies intentionally untracked files that Git should ignore. Files already tracked by Git are not affected; See <https://git-scm.com/docs/gitignore> for further details.

## Automatic backup of current library edits

This functionality runs in the background while you are working on a *bibliographic database*. It makes a *backup copy* (the `.bak` file) and keeps that up-to-date on every user interaction. For instance, when you change a field the new value would get saved into the backup copy. Assuming that *JabRef* crashes while you are working on a *BibTeX database*. When you try again to open the file *JabRef* crashed with you will get the following dialog:

<div align="left"><figure><img src="/files/tHvxzvgYaUkvOOL375vD" alt=""><figcaption><p>Screenshot of the backup found dialog</p></figcaption></figure></div>

Now you have the possibility to restore and review your changes which would normally get lost.

For shared remote libraries and more advanced history, we recommend to use [git as version control system](https://git-scm.com/book).

#### Where can I find the backup files?

* **The backup files (`.bak`) can be found in the** [**user data dir**](https://github.com/harawata/appdirs#supported-directories)**.**
* **Unix/Linux:**\
  `/home/<username>/.local/share/org.jabref/jabref`
* **Windows:**\
  Windows 7/10:\
  `C:\Users\<Account>\AppData\org.jabref\jabref`\
  Alternatively, open the run dialogue by pressing `Windows+R`, then enter `%APPDATA%\..\Local\org.jabref\jabref`\
  Windows XP:\
  `C:\Documents and Settings\<Account>\Application Data\Local Settings\org.jabref\jabref>`
* **Mac OS X:**\
  `/Users/username/Library/Application Support/org.jabref/jabref`

## Automatic saving of the current library

JabRef offers **automatic saving of the library.** No need to click on File --> Save or pressing Ctrl+S anymore: The opened database are saved automatically without manual intervention.

In case the `.bib` file should automatically be saved on each change, you can direct JabRef to do so. This feature needs to be activated in the preferences:

<div align="center"><figure><img src="/files/4uRvUrFH7vL6eRpJN0Z7" alt=""><figcaption><p>Screenshot of the autosave preferences</p></figcaption></figure></div>


# XMP metadata support in JabRef

Bib(la)TeX information into the PDF metadata

XMP is a standard created by Adobe Systems for storing metadata (data about data) in files. A well known example for metadata are MP3 tags, which can be used to describe artist, album and song name of a MP3 file. Adding metadata to MP3 helps other people to identify the songs correctly independent of file-name and can provide means for software (MP3 players for instance) to sort and group songs.

With XMP support the JabRef team tries to bring the advantages of metadata to the world of reference managers. You can now choose to "Write XMP metadata to PDFs" in the Tools menu of JabRef, which will put all the Bib(la)TeX information into the PDFs. If you then email a PDF to a colleague, they can just drag the file into JabRef and all information that you entered will be available to them.

## Usage

To use the XMP-feature in JabRef you can do the following:

* *To import a single annotated PDF-file* *that contains XMP*, select **File → Import into...** and then choose the filter "XMP-annotated PDF", or drag the file into the main view.
* *To annotate all the PDFs in a given database,* select **Tools → Write XMP metadata to PDFs**.
* *To verify if it worked,* you can open the PDF in Adobe Acrobat and select **File → Document Properties → Additional Metadata → Advanced**. In the tree to the right you should see an entry called "<http://purl.org/net/bibteXMP>". Note: this works only with Adobe Acrobat, *not with Adobe Reader*. If you do not have Adobe Acrobat, you can use `pdfinfo` instead in order to see the XMP metadata. `pdfinfo` is part of [Xpdf tools](http://www.foolabs.com/xpdf/) and [Poppler](http://poppler.freedesktop.org).

## BibTeXMP Fileformat

JabRef builds on [Dublin Core](https://en.wikipedia.org/wiki/Dublin_Core) to encode bibliographic information. That information us embedded in the PDF using the XMP format. Dublin Core itself i) builds on RDF and ii) can be extended with own information. In case BibTeX data cannot be stored using native Dublin Core fields, new fields are used. Basically, all fields and values are turned into nodes of an XML document. Only authors and editors are stored as `rdf:Seq`-structures, so users of the data can skip the splitting on `and`s. All strings and crossrefs will be resolved in the data.

The following easy minimal schema is used:

* The citation key is stored as `citationkey`.
* The type of the BibTeX entry is stored as `entrytype`.
* `author` and `editor` are encoding as `rdf:Seq`s where the individual authors are represented as `rdf:li`s.
* All other fields are saved using their field-name as is.

The following is an example of the mapping

```
@INPROCEEDINGS{CroAnnHow05,
  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
  title = {Effective work practices for floss development: A model and propositions},
  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
  year = {2005},
  owner = {oezbek},
  timestamp = {2006.05.29},
  url = {http://james.howison.name/publications}
}
```

will be transformed into

```markup
<?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?><x:xmpmeta xmlns:x="adobe:ns:meta/">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
      <dc:creator>
        <rdf:Seq>
          <rdf:li>K. Crowston</rdf:li>
          <rdf:li>H. Annabi</rdf:li>
          <rdf:li>J. Howison</rdf:li>
          <rdf:li>C. Masango</rdf:li>
        </rdf:Seq>
      </dc:creator>
      <dc:relation>
        <rdf:Bag>
          <rdf:li>bibtex/booktitle/Hawaii International Conference On System Sciences (HICSS)</rdf:li>
          <rdf:li>bibtex/citationkey/CroAnnHow05</rdf:li>
          <rdf:li>bibtex/file/:CroAnnHow05.pdf:PDF</rdf:li>
          <rdf:li>bibtex/owner/fdarboux</rdf:li>
          <rdf:li>bibtex/timestamp/2020-11-22</rdf:li>
          <rdf:li>bibtex/url/http://james.howison.name/publications</rdf:li>
        </rdf:Bag>
      </dc:relation>
      <dc:title>
        <rdf:Alt>
          <rdf:li xml:lang="x-default">Effective work practices for floss development: A model and propositions</rdf:li>
        </rdf:Alt>
      </dc:title>
      <dc:date>
        <rdf:Seq>
          <rdf:li>2005</rdf:li>
        </rdf:Seq>
      </dc:date>
      <dc:format>application/pdf</dc:format>
      <dc:type>
        <rdf:Bag>
          <rdf:li>InProceedings</rdf:li>
        </rdf:Bag>
      </dc:type>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta><?xpacket end="w"?>
```

Be aware of the following caveats if you are trying to parse BibTeXMP:

* In RDF attribute-value pairs can also be expressed as nodes and vice versa.

## Related Links

Some links about XMP and annotating PDFs

* [Wikipedia article on XMP](https://en.wikipedia.org/wiki/Extensible_Metadata_Platform)
* [James Howison's blog "Themp---Managing Academic Papers like MP3s"](https://web.archive.org/web/20110424121251/http://freelancepropaganda.com/themp/)
* [Good thread on ArsTechnica discussing the management of PDFs.](http://arstechnica.com/civis/viewtopic.php?f=19\&t=408429)


# Remote operation

This feature can be toggled and configured under **Preferences → Network**.

*Note that activating this feature under Windows XP SP2 (and possibly other configurations) may prompt a message box stating that certain features of the program have been blocked by the Windows firewall. You can safely tell the firewall to keep blocking - the firewall will not interfere with remote operation of JabRef.*

If listening for remote operation is enabled, JabRef will at startup attempt to start listening to a specific port. This means that other applications can send information to JabRef through this port. JabRef will only accept local connections, to avoid the risk of interference from outside.

Binding to this port makes it possible for a second JabRef instance to discover that the first one is running. In this case, unless specifically instructed to run in stand-alone mode, the second JabRef instance will pass its command line options through the port to the first JabRef instance, and then immediately quit.

The first JabRef instance will read the command line options, and perform the indicated actions, such as reading or importing a file, or importing a file to the currently shown database. If a file is imported using the command-line option `--importToOpen`, the imported entries will be added to the currently shown database. If no database is open, a new one will be created.


# Custom themes

## General

Since `JabRef 5.2` it is possible to use custom themes. In `Preferences > Appearance > Visual theme` the themes in general can be changed. Themes are just [CSS](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics) files defining the look of the UI.

* **Light Theme**: The default theme is the light theme ([`Base.css`](https://github.com/JabRef/jabref/blob/main/src/main/java/org/jabref/gui/Base.css)).
* **Dark Theme**: There is an alternative dark theme ([`Dark.css`](https://github.com/JabRef/jabref/blob/main/src/main/java/org/jabref/gui/Dark.css)) which is based on `Base.css` and just overwrites the colors.
* **Custom Theme**: In `Preferences > Appearance > Visual theme > Custom theme` there can be set a custom theme by simply selecting a custom CSS (based on `Base.css` or `Dark.css`), for instance:

You can find a collection of user contributed themes at [https://themes.jabref.org](https://themes.jabref.org/).

{% file src="/files/-MQC8gLdo34HJTg-XKt6" %}

## Selection of Useful CSS selectors

| UI element                       | CSS selector       |
| -------------------------------- | ------------------ |
| preview box                      | `#previewBody`     |
| `{} biblatex source` tab         | `.code-area`       |
| text in `{} biblatex source` tab | `.code-area .text` |

## Examples

**Light Theme** ![Light Theme](/files/-MPQdbeQ4kz24Akf-I2m)

**Dark Theme** ![Dark Theme](/files/NUQOoX4GXT3dF18QJGyf)

**Custom Theme** ![Custom Theme](/files/ym8OdXppIEg9LOzHc8NS) (based on the Dark Theme)

## Known bugs

* [#8523](https://github.com/JabRef/jabref/issues/8523): On Windows 10, it is not possible to use fonts that were installed user-wide in the CSS, only system-wide fonts are working. A workaround to use fonts that are not installed system-wide is to include the font file via [`@font-face`](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face).


# Journal abbreviations

{% hint style="info" %}
Since: 5.0
{% endhint %}

JabRef can automatically toggle journal names between abbreviated and unabbreviated form, as long as the names are contained in one of your journal lists.

This feature can be configured under **Options → Preferences → Manage journal abbreviations**.

JabRef includes a fairly extensive build-in list of journal abbreviations. This list is a merge of all lists available at <https://abbrv.jabref.org>. However, this might still be incomplete (or outdated) for the purposes of some users. Thus, JabRef allows to add abbreviations in the form of a personal list or external lists.

![General view](/files/7XBCYmkrs3MlYnTAKdXp)

## Using the feature

Journal name conversion can be accessed either from within the entry editor, or from the **Quality** menu. In the entry editor you will find a button labeled *Toggle abbreviation* by the *journal* field. Clicking this button will cause the current journal name to be switched to the next of four modes:

* Full name, e.g. "Aquacultural Engineering"
* Default abbreviation, e.g. "Aquacult. Eng."
* Medline abbreviation, e.g. "Aquacult Eng"
* Shortest unique abbreviation, e.g. "AQEND6"

If the current journal name is not found in your journal lists, the field will not be modified.

To convert the journal names of many entries in bulk, you can select any number of entries and go to **Quality → Clean up entries → Journal-related → Manage journal abbreviations**. From the dropdown menu, choose an action: **Abbreviate (default)**, **Abbreviate (dotless)**, **Abbreviate (shortest unique)**, **Unabbreviate** or **No changes**. These actions will abbreviate or unabbreviate the journal names of all selected entries for which the journal name could be found in your journal lists.

## Setting up additional journal lists

In addition to the build-in journal list, you can have a personal list and external lists.

Any entry in your personal journal list will override an entry with the same full journal name in one of the external lists. Similarly, the external lists are given precedence in the order they are listed.

### Your personal journal abbreviations list

Your personal journal list is managed on top of the **Manage journal abbreviations** window. To start building your personal journal abbreviations list, choose *Add new list*, and enter a filename. If you already have a file that you want to use as a starting point, use the *Open existing list* button. The table will update to show the contents of the list you have selected.

The table and the tool buttons in the upper right allow you to add, remove and edit journal entries. For each entry you must provide the full journal name, and the default abbreviation (e.g. "Aquacultural Engineering" and "Aquacult. Eng."). The last field, which contains the shortest unique abbreviation, is optional. Therefore, you can actually safely omit it. To edit an entry, double-click its row in the table.

Once you click *Save changes*, if you have selected a file, and the table contains at least one entry, the table contents will be stored to the selected file, and JabRef's list of journals will be updated.

### External journal lists

You can link to a number of external lists. These links can be set up on top of the **Manage journal abbreviations** window. External lists are similar to the personal list. The *Open existing list* button allows you to select an existing file on your computer.

![External list](/files/-MF2PBa6cGlY-4h1RBvN)

External lists can be found at [JabRef's repository abbreviation lists](http://abbrv.jabref.org). These data files are in CSV format (using comma as separators):

```csv
<full name>,<abbreviation>[,<shortest unique abbreviation>[,<frequency>]]
```

The two last fields are optional, and you can omit them. JabRef supports the third field, which contains the shortest unique abbreviation. The last field is not currently used; its intention is gives frequency (e.g., `M` for monthly). For instance:

```csv
Accounts of Chemical Research,Acc. Chem. Res.,ACHRE4,M
```

#### Contributing an external journal list

We want to expand both the build-in list and the selection of smaller lists, so if you have set up a representative list for your own subject area, we would appreciate it if you share your list via [GitHub](https://github.com/JabRef/abbrv.jabref.org) or by dropping a note on [our forum](https://discourse.jabref.org/).


# New subdatabase based on AUX file

Based on the `.aux` file generated by LaTeX, JabRef can create a subdatabase containing only the cited entries.

This feature is available through **Tools → New subdatabase based on AUX file**.


# How to expand first names of an entry

Sometimes, one has a BibTeX/biblatex entry with abbreviated short names:

```bibtex
@Article{Eshuis_2015,
  author    = {R. Eshuis and A. Norta and O. Kopp and E. Pitkanen},
  journal   = {{IEEE} Transactions on Services Computing},
  title     = {Service Outsourcing with Process Views},
  year      = {2015},
  month     = {jan},
  number    = {1},
  pages     = {136--154},
  volume    = {8},
  publisher = {Institute of Electrical and Electronics Engineers ({IEEE})},
}
```

Now, one wants to have the full first names. In case, there is a DOI available, this is as simple as the following steps:

1. Determine the DOI: Switch to the "General" tab and click on "Look up DOI"

   ![Screenshot of determine DOI](/files/Y67rtkdpLYSZn1xBxCXx)
2. Fetch BibTeX data from the DOI: Click on "Get BibTeX data from DOI"

   ![Screenshot of get BibTeX data from DOI](/files/e1Ncis9kVbqwnkcofZAb)
3. A popup appears. Select which data you want to merge into the eixting entry

   ![Screenshot of Merge Entries Dialog](/files/vLs4r2yId8WK6LYsFk6T)
4. Now the first names are expanded:

   ![Screenshot of Result](/files/5OjmFpNhnsgxvAv9gxgs)


# Debugging your library file

When error ensues, how to debug your library file with various methods.

## Enable debug log

Sometimes, it helps to [ask JabRef to write some more debugging messages](https://docs.jabref.org/advanced/commandline#debug-mode-debug).

## Use Backups

If you encounter any errors that are related to wrong, erroneous, corrupt or vanished data in your library file or simply unintended behavior that has unknown causes, the first thing that is advised to do, is to find and make use of your backups.

1. **Navigate to your** [**backup directory**](https://docs.jabref.org/advanced/autosave#where-can-i-find-the-backup-files)**.**
2. **Find and select all** [**backups files**](https://docs.jabref.org/advanced/autosave#what-are-.sav-.bak-and-.tmp-files) (the `.bak` files).
3. **Copy the backup files to a safe, but different location.** (Basically, create a backup of the backups. This step is very important, as each 20 seconds, after a change to the library, the current state of the library is saved to a .bak file, but JabRef at most stores 10 backup files and if you continue to work with your original library file (.bib), eventually JabRef will overwrite your old backup files)
4. **Compare the backup file with the erroneous library.** You can do this by editing your chosen backup file (via JabRef or file editor) in such a way that the modification date is newer than that of your erroneous library. Open the erroneous library and the backup merge dialogue should trigger, which allows you to see what has changed in the file. Alternatively, to achieve the same result, it is possible to use third party file versioning systems like [Git](https://git-scm.com/) or visual difference and merge tools like [Meld](https://meldmerge.org/) or [WinMerge](https://winmerge.org/).

If this method works: Great!\
If this method does not work with the first backup file: Try an older backup file\
If this method does not work with any backup file: Try the method of half splitting.

## The method of half splitting

The method of **half splitting** (also referred to as **halving**) can be used to find certain faults in your library file, which are caused by erroneous syntax, file conversions or incompatible encodings/charsets. These faults may make it impossible for JabRef to correctly parse, read or import the library file.\
\
An easy way to look at the method of halving is to repeatedly ask yourself the following question, after having deleted a part of your library file: "Is the error in the first part or the last part of the entries?"

#### **How it works:**

1. Create a backup of your library file.
2. Open your library with the text-editor of your choice (For example, [Notepad++](https://alternativeto.net/software/notepad-plus-plus/)).
3. Delete half of your [entries](https://docs.jabref.org/advanced/fields#standard-bibtex-format).
4. Open your library with JabRef.
5. If your library now miraculously does not trigger the error, don't stop and leave. Instead, rinse and repeat and use the technique of halving on the junk of entries that you just deleted (hence the need for backups!). Use the technique of halving on THAT part of the library.
6. Repeat deleting entries until you can isolate the specific entry or entries that trigger errors.
7. Remove these entries with the error.\
   Add all the other entries back.\
   Open JabRef.\
   Be happy :-)\\

#### **Example:**

Half splitting a library with two entries:

<figure><img src="/files/NQczJXHsi1wXCCK37mNe" alt=""><figcaption></figcaption></figure>

#### How efficient is this method?

Halving as a process of elimination will quickly lead to results, as the following table illustrates:

| Number of entries | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 33 | 65 | 129 | 257 | ... |
| ----------------- | - | - | - | - | - | - | - | - | -- | -- | -- | -- | --- | --- | --- |
| Steps             | 1 | 2 | 2 | 3 | 3 | 3 | 3 | 4 | 4  | 5  | 6  | 7  | 8   | 9   | ... |

#### Related Literature

If you want to find out more about this method, the following articles explain the method of halving in various contexts:

* <https://ljackso.medium.com/half-splitting-applying-a-troubleshooting-technique-to-debugging-code-6a0578d1833c>
* <https://www.ecmweb.com/maintenance-repair-operations/article/20889049/the-beauty-of-halfsplitting>
* <https://www.techrepublic.com/article/secrets-of-a-super-geek-use-half-splitting-to-solve-difficult-problems/>


# Resources

## JabRef-compatible text editors

JabRef can push entries, i.e., insert `\cite{key}` commands, to the following text editors:

* [Emacs](https://www.gnu.org/software/emacs/)
* [Kate](https://apps.kde.org/en-gb/kate/)
* [LyX](http://www.lyx.org/)/[Kile](https://apps.kde.org/en/kile/)
* [TeXstudio](http://www.texstudio.org/)
* [Texmaker](http://www.xm1math.net/texmaker/)
* [Vim](http://www.vim.org/)
* [WinEdt](http://www.winedt.com/)

Additionally, JabRef can natively insert citations and format a bibliography in:

* [OpenOffice Writer](https://www.openoffice.org/)
* [LibreOffice Writer](https://www.libreoffice.org/)

See [OpenOffice/LibreOffice integration](https://docs.jabref.org/import-export/other-integrations/openofficeintegration) for details.

## JabRef journal abbreviation lists

JabRef can help you refactor your reference list by automatically abbreviating or unabbreviating journal names, as explained in [the dedicated help](https://docs.jabref.org/fields/journalabbreviations).

Although JabRef comes with a build-in list of journals, additional lists are available at <https://abbrv.jabref.org>.

## Export filters and style files for LibreOffice

JabRef allows you to create custom export filters and style files for LibreOffice. This functionality and the installation procedure are described in the help file on [Custom export filters](https://docs.jabref.org/import-export/export/customexports). Some users have created export filters that can be useful to many others.

Export filters are collected at <https://layouts.jabref.org>. Style files for LibreOffice are available at <https://jstyles.jabref.org>.

### Endnote export filter set

This improves author recognition and adds support for more fields to EndNote.

Homepage: <https://github.com/JabRef/EndNode-JabRef-filters>

### Export-Filter Editor

Using this tool you can easily create a custom export filter for JabRef to build your own bibliography style. The tool itself supports:

* HTML Export Filter
* RTF Export Filter
* OpenOffice/ LibreOffice Style File
* Saving the filter for later refinements

[Download the Export-Filter Editor](https://github.com/teertinker/Export-Filter-Editor)

## Additional tools

### BibSync

[BibSync](https://github.com/minad/bibsync) is a tool to synchronize your paper library with a BibTeX file which might be most useful for Physicists and Mathematicians since it supports synchronization with DOI and arXiv.

### Bibtex4word

[Bibtex4Word](http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html) is an add-in for Microsoft Word that allows the citation of references and the insertion of a bibliography into your document using your choice of formatting style. It is lightweight, transparent and does not mess up your documents.

### Eratosthenes Reference Manager

Eratosthenes Reference Manager is a BibTeX-based bibliography manager for Android. It [integrates with JabRef](https://bitbucket.org/mkmatlock/eratosthenes/wiki/Home#!using-eratosthenes-with-jabref), supporting top-level groups and attached files/external links.

Available for Android 4.0 and up.

Unfortunately, this application is not available anymore from Google Play and must be [build on your own from source](https://bitbucket.org/mkmatlock/eratosthenes/).

### Feinerleiser

[Feinerleiser](http://www.sourceforge.net/projects/feinerleiser/) is a tool for improving the JabRef-LibreOffice integration when writing for the humanities. This tool can be run to finalize a document, providing citation features that are not supported by JabRef itself.

### gitignore.io

This site offers to generate `.gitignore` files using common patterns for applications. For instance, you can use the keywords JabRef, Windows, Linux, macos, latex to generate a `.gitignore` for your daily tex work.

* Homepage: <https://www.gitignore.io/>
* .gitignore for JabRef and friends: <https://www.gitignore.io/api/jabref%2Clatex%2Cwindows%2Clinux%2Cmacos>

### WinEdt's JabRef launcher

This WinEdt's package allows to launch the JabRef program from within WinEdt.

[Download the WinEdt's JabRef launcher](http://www.winedt.org/config/menus/JabRef.html)

### JabRef LibreOffice Converter

A LibreOffice extension that converts JabRef references to plain text code and vice versa so that you can use your references with MS Office and other software.

[Description and download of the extension](https://github.com/teertinker/JabRef_LibreOffice_Converter)


# License

## The license of the JabRef software

The JabRef software is under the [MIT License](https://github.com/JabRef/jabref/blob/main/LICENSE). In short, JabRef is free to use, even commercially. You can also redistribute and modify JabRef as long as you include the original copyright and license notice in any copy of the software/source.

## The license of the JabRef documentation

The documentation of JabRef is under the [Creative Commons Attribution 4.0 International License](https://github.com/JabRef/user-documentation/blob/main/LICENSE/README.md). In short, you can make a commercial use of it, distribute it, modify it and rename it. You must give credit, include copyright, and state changes. And you cannot sublicense it.


# Knowledge


# MS Office Bibliography XML format

JabRef supports the MS Office Bibliography XML format for exporting and importing.

## Howto: Import from Microsoft Word

See <https://stackoverflow.com/a/4628718/873282>

## Entry Type Mappings

Some field names in the XML format differ from the field names in the BibTeX/BibLaTeX format and can therefore be not directly mapped between the formats. Therefore this help file provides a list of all field mappings.

| BibTeX/biblatex entry type | XML entry type        |
| -------------------------- | --------------------- |
| book                       | Book                  |
| inbook                     | BookSection           |
| booklet                    | BookSection           |
| incollection               | BookSection           |
| article                    | JournalArticle        |
| inproceedings              | ConferenceProceedings |
| conference                 | ConferenceProceedings |
| proceedings                | ConferenceProceedings |
| collection                 | ConferenceProceedings |
| techreport                 | Report                |
| manual                     | Report                |
| mastersthesis              | Report                |
| phdthesis                  | Report                |
| unpublished                | Report                |
| patent                     | Patent                |
| misc                       | Misc                  |
| electronic                 | ElectronicSource      |
| online                     | InternetSite          |
| periodical                 | ArticleInAPeriodical  |

## Field mappings

The field mapping for import and export is mostly the same, but there are some differences, as not all field exists in both formats. Additionally, some fields have to be treated differently during import/export.

| BibTeX/BibLaTeX | XML field                                |
| --------------- | ---------------------------------------- |
| bibtexkey       | Tag                                      |
| title           | Title                                    |
| year            | Year                                     |
| note            | Comments                                 |
| volume          | Volume                                   |
| language        | LCID                                     |
| edition         | Edition                                  |
| publisher       | Publisher                                |
| booktitle       | BookTitle                                |
| chapter         | ChapterNumber                            |
| issue           | Issue                                    |
| school          | Department                               |
| institution     | Institution                              |
| doi             | DOI                                      |
| url             | url                                      |
| shorttitle      | ShortTitle                               |
| pages           | Pages                                    |
| authors         | Authors                                  |
| editors         | Editors                                  |
| translator      | Translator                               |
| bookauthor      | Bookauthor                               |
| volumes         | NumberVolumes                            |
| urldate         | YearAccessed, MonthAccessed, DayAccessed |

### BibTeX/BibLaTeX only fields

The following fields are BibTeX/biblatex only fields, they have no representation in office XML. In the resulting XML file, they are represented with the prefix `BIBTEX_`

| BibTeX/biblatex only fields | XML representation   |
| --------------------------- | -------------------- |
| series                      | BIBTEX\_Series       |
| abstract                    | BIBTEX\_Abstract     |
| keywords                    | BIBTEX\_KeyWords     |
| crossref                    | BIBTEX\_CrossRef     |
| howpublished                | BIBTEX\_HowPublished |
| affiliation                 | BIBTEX\_Affiliation  |
| contents                    | BIBTEX\_Contents     |
| copyright                   | BIBTEX\_Copyright    |
| price                       | BIBTEX\_Price        |
| size                        | BIBTEX\_Size         |
| intype                      | BIBTEX\_InType       |
| paper                       | BIBTEX\_Paper        |
| \<BibTexEntryType>          | BIBTEX\_Entry        |
| \<BibTexEntryType>          | SourceType           |
| key (not bibtexkey)         | BIBTEX\_KEY          |
| pubstate                    | BITEX\_Pubstate      |

The XML field `SourceType` contains the associated entry type from the first table, while the original BibTeX/BibLaTex entrytype is preserved in the field `BIBTEX_ENTRY`.

### MS-Bib only fields

The following fields are XML-only fields, they have no BibTeX/biblatex representation: In the resulting bib database they are represented with the prefix `msbib-`.

| BibTeX/BibLaTex represenation | XML field                                           |
| ----------------------------- | --------------------------------------------------- |
| msbib-numberofvolume          | NumberVolumes                                       |
| msbib-periodical              | PeriodicalTitle                                     |
| msbib-day                     | Day                                                 |
| msbib-accessed                | Accessed (YearAccessed, MonthAccessed, DayAccessed) |
| msbib-medium                  | Medium                                              |
| msbib-recordingnumber         | RecordingNumber                                     |
| msbib-theater                 | Theater                                             |
| msbib-distributor             | Distributor                                         |
| msbib-broadcaster             | Broadcaster                                         |
| msbib-station                 | Station                                             |
| msbib-type                    | Type                                                |
| msbib-court                   | Court                                               |
| msbib-reporter                | Reporter                                            |
| msbib-casenumber              | CaseNumber                                          |
| msbib-abbreviatedcasenumber   | AbbreviatedCaseNumber                               |
| msbib-productioncompany       | ProductionCompany                                   |
| msbib-producername            | producerNames                                       |
| msbib-composer                | composers                                           |
| msbib-conductor               | conductors                                          |
| msbib-performer               | performers                                          |
| msbib-writer                  | writers                                             |
| msbib-director                | directors                                           |
| msbib-compiler                | compilers                                           |
| msbib-interviewer             | interviewers                                        |
| msbib-interviewee             | interviewees                                        |
| msbib-inventor                | inventors                                           |
| msbib-counsel                 | counsels                                            |

### Special Export treatment

The following fields are treated as follows during export:

| BibTeX/biblatex representation                                     | XML field                                      |
| ------------------------------------------------------------------ | ---------------------------------------------- |
| booktitle                                                          | ConferenceName                                 |
| journal                                                            | JournalName                                    |
| journaltitle                                                       | JournalName                                    |
| month                                                              | Month                                          |
| date                                                               | year, month, day (if date is in ISO 8601 form) |
| issue                                                              | issue                                          |
| isbn                                                               | StandardNumber                                 |
| issn                                                               | StandardNumber                                 |
| lccn                                                               | StandardNumber                                 |
| mrnumer                                                            | StandardNumber                                 |
| address (if field contains at least one comma)                     | City                                           |
| address (if field does not contain a comma)                        | City, StateProvince, CountryRegion             |
| location (if field contains at least one comma)                    | City                                           |
| location (if field does not contain a comma)                       | City, StateProvince, CountryRegion             |
| \<EntryType is thesis>                                             | ThesisType                                     |
| \<EntryType is patent> number                                      | PatentNumber                                   |
| number (entry is not patent)                                       | Number                                         |
| Authors/Editors (single author/editor is enclosed in curly braces) | Corporate                                      |
| author (if entry type is patent)                                   | Inventor                                       |

### Special Import treatment

The following fields are treated as follows during import:

| BibTeX/biblatex representation | XML field                          |
| ------------------------------ | ---------------------------------- |
| organization                   | ConferenceName                     |
| journaltitle                   | Journal                            |
| location                       | City, StateProvince, CountryRegion |


# Comparison of the Medline (txt), Medline (xml), and RIS format

The Medline (txt) format can be used by a simple text document. Here, you have to write the field names at the beginning of each line. The Medline (xml) format is a XML document. The field name has to be written between `<` and `>`. For further information visit <https://www.nlm.nih.gov/bsd/licensee/elements_descriptions.html>. Medline (txt) and Medline (xml) always take the type "article". RIS works similar to Medline (txt) with the difference that different fields are supported and the file extension is "ris".

In other sources, you might encounter "MedlinePlain" as a synonym for "Medline (txt)" and "Medline" as a synonym for "Medline (XML)".

## Table with fields

| Field                                        | Medline (txt) | Medline (XML)               | RIS          |
| -------------------------------------------- | ------------- | --------------------------- | ------------ |
| Abstract                                     | **AB**        | **Abstract / AbstractText** | **AB**       |
| Affiliation                                  | **AD**        |                             |              |
| Article Date                                 |               | **ArticleDate**             |              |
| Article Identifier                           | **AID**       | **Article**                 |              |
| Article Title                                |               | **ArticleTitle**            |              |
| Author                                       | **AU**        | **AuthorList**              | **AU/A1**    |
| Author Identifier                            | **AUID**      |                             |              |
| Book Title                                   | **BTI**       |                             | **BT**       |
| Chemical List                                |               | **ChemicalList**            |              |
| Citation Subset                              |               | **CitationSubset**          |              |
| Collection Title                             | **CTI**       |                             |              |
| Collaborators                                |               |                             | **A3**       |
| Comments Corrections List                    |               | **CommentsCorrectionsList** |              |
| Corporate Author                             | **CN**        |                             |              |
| Copyright Information                        |               | **CopyrightInformation**    |              |
| Create Date                                  | **CRDT**      |                             |              |
| Country                                      |               | **Country**                 |              |
| Data Bank List                               |               | **DataBankList**            |              |
| Date Completed                               | **DCOM**      | **DateCompleted**           |              |
| Date Created                                 | **DA**        | **DateCreated**             |              |
| Date Last Revised                            | **LR**        | **DateRevised**             |              |
| Date of Electronic Publication               | **DEP**       |                             |              |
| Date of Publication                          | **DP**        |                             | **Y2**       |
| Delete Citation                              |               | **DeleteCitation**          |              |
| DOI                                          |               |                             | **DOI**      |
| Edition                                      | **EN**        |                             |              |
| Editor and Full Editor Name                  | **FED**       |                             | **ED**       |
| End                                          |               |                             | **ER**       |
| End Page                                     |               |                             | **EP**       |
| Entrez Date                                  | **EDAT**      |                             |              |
| Full Author                                  | **FAU**       |                             |              |
| Full Personal Name as Subject                | **FPS**       |                             |              |
| Gene Symbol                                  | **GS**        |                             |              |
| General Note                                 | **GN**        | **GeneralNote**             |              |
| Grant List                                   |               | **GrantList**               |              |
| Grant Number                                 | **GR**        |                             |              |
| Investigator Name and Full Investigator Name | **IR/FIR**    |                             |              |
| Investigator List                            |               | **InvestigatorList**        |              |
| ISO Abbreviation                             |               | **ISOAbbreviation**         |              |
| ISBN                                         | **ISBN**      |                             | **SN**       |
| ISSN                                         | **IS**        | **ISSN**                    |              |
| ISSN Linking                                 |               | **ISSNLinking**             |              |
| Issue                                        | **IP**        | **Issue**                   | **IS**       |
| Journal Issue                                |               | **JournalIssue**            |              |
| Journal Title                                | **JT**        | **Journal**                 | **JO/JF/JA** |
| Journal Title Abbreviation                   | **TA**        |                             |              |
| Keywords                                     |               | **KeywordList**             | **KW**       |
| Language                                     | **LA**        | **Language**                |              |
| Location Identifier                          | **LID**       |                             |              |
| Manuscript Identifier                        | **MID**       |                             |              |
| Medline Title Abbreviation                   |               | **MedlineTA**               |              |
| Medline Date                                 |               | **MedlineDate**             |              |
| MeSH Date                                    | **MHDA**      |                             |              |
| Mesh Heading List                            |               | **MeshHeadingList**         |              |
| MeSH Terms                                   | **MH**        |                             |              |
| Misc                                         |               |                             | **M1-M3**    |
| NLM Unique ID                                | **JID**       | **NlmUniqueID**             |              |
| Note                                         |               |                             | **N1**       |
| Number of References                         | **RF**        |                             |              |
| Other Abstract and other abstract language   | **OAB/OABL**  | **OtherAbstract**           |              |
| Other Copyright Information                  | **OCI**       |                             |              |
| Other ID                                     | **OID**       | **OtherID**                 |              |
| Other Term                                   | **OT**        |                             |              |
| Other Term Owner                             | **OTO**       |                             |              |
| Owner                                        | **OWN**       |                             |              |
| Pagination                                   | **PG**        | **Pagination**              |              |
| Personal Name as Subject                     | **PS**        |                             |              |
| Personal Name as Subject List                |               | **PersonalNameSubjectList** |              |
| Place of Publication                         | **PL**        |                             |              |
| Publication History Status                   | **PHST**      |                             |              |
| Publication Status                           | **PST**       |                             |              |
| Publication Type                             | **PT**        |                             |              |
| Publication Type List                        |               | **PublicationTypeList**     |              |
| Publisher                                    |               |                             | **PB**       |
| Publishing Date                              |               | **PubDate**                 |              |
| Publishing Model                             | **PUBM**      |                             |              |
| PubMed Central Identifier                    | **PMCR**      |                             |              |
| PubmMed Unique Identifier                    | **PMID**      | **PMID**                    |              |
| Registry Number                              | **RN**        |                             |              |
| Reprint                                      |               |                             | **RP**       |
| Start Page                                   |               |                             | **SP**       |
| Substance Name                               | **NM**        |                             |              |
| Supplemental Mesh List                       |               | **SupplMeshList**           |              |
| Secondary Source ID                          | **SI**        |                             |              |
| Source                                       | **SO**        |                             |              |
| Space Flight Mission                         | **SFM**       |                             |              |
| Status                                       | **STAT**      |                             |              |
| Subset                                       | **SB**        |                             |              |
| Title                                        | **TI**        | **Title**                   | **TI/T1**    |
| Transliterated Title                         | **TT**        |                             |              |
| Type                                         |               |                             | **TY**       |
| URL                                          |               |                             | **UR**       |
| User Text                                    |               |                             | **U1-U3**    |
| Volume                                       | **VI**        | **Volume**                  | **VL**       |
| Volume Title                                 | **VTI**       |                             |              |
| Vernacular Title                             |               | **VernacularTitle**         |              |
| Year                                         |               |                             | **PY/Y1**    |


# EndNote Export Filter


# Frequently Asked Questions

## Q: I use JabRef in my work. Should I mention JabRef in my publications?

A: You are not obliged to cite JabRef, but we would greatly appreciate it if you do.

```bibtex
@Article{jabref,
  author  = {Oliver Kopp and Carl Christian Snethlage and Christoph Schwentker},
  title   = {{JabRef}: {BibTeX}-based literature management software},
  journal = {TUGboat},
  issn    = {0896-3207},
  issue   = {138},
  volume  = {44},
  number  = {3},
  pages   = {441--447},
  doi     = {10.47397/tb/44-3/tb138kopp-jabref},
  year    = {2023},
}
```

## Q: Is JabRef free for private and corporate use?

A: Yes it is. JabRef is distributed under the MIT License, which [allows the following usage](https://tldrlegal.com/license/mit-license).

## Q: JabRef does not start. What should I do?

A: You can try resetting the settings. Depending on your operating system, you may need to pass the command line arguments `-d all -n` to JabRef.

(E.g. in Windows this means `jabref-X.Y.exe -d all -n`, where `X.Y` means the version number of JabRef. If this does not help, run `regedit` and delete the folder `HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\net\sf\jabref`. Be careful with `regedit`, as you can easily corrupt the basic Windows configuration.)

## Q: I have tried the latest version of JabRef. Since then, the library entries are no longer displayed in any old version. What should I do?

A: Don't panic. No data should be damaged in your bib library. Since version 5.0 the columns in the main entry table are stored differently internally. You can reset the preferences by command line. See above.

## Q: I have a huge library. What can I do to mitigate performance issues?

A: Check your configuration. Disable some or all of following preferences:

* disable fulltext index (File → Preferences → Linked files → Fulltext Index → ...)
* disable time stamps (File → Preferences → General → Time Stamp → ...)
* disable field formatters (Library → Library Properties → Saving → Save actions → ...)
* disable autosave (File → Preferences → File → Saving → ...)
* disable count of items in group (File → Preferences → Groups → ...)
* Sort the maintable columns from A-Z (low to highest), not from Z-A. See issue [8977](https://github.com/JabRef/jabref/issues/8977#issuecomment-1707854570).

Any preference that has the potential to affect all your entries at once is worth inspecting.

We collect performance related issues in the [performance label on GitHub](https://github.com/JabRef/jabref/labels/dev%3A%20performance).

## Q: Are there any publications dealing with JabRef?

A: We are collecting all publications we hear about at <https://github.com/JabRef/jabref/wiki/JabRef-in-the-media>.

## Q: Does JabRef support non-English languages or UTF8 in general?

A: Yes. In **File → Preferences → General**, set "Default Encoding" to *UTF8* and select an alternative user interface language in "Language" if required.

## Q: If I double click a BibTeX file in the file browser, JabRef always opens a new window. Can JabRef open the libraries in the same window just in a different tab?

A: In **File → Preference → Single Instance**, ensure that "Enforce single JabRef Instance (and allow remote operations) using port \[6050]" is checked. Note that 6050 is the default port and can be changed if desired.

## Q: I have a DOI/ISBN/ePrint/etc. Is it possible to create an entry directly out of this identifier?

A: Paste the DOI in the table of entries, and JabRef will create the corresponding entry. Additionally, in **Library → New entry** you can select the type of the identifier in the field "ID type" and enter the identifier in "ID". A click on "Generate" should create the correct entry. If this does not work, try a web search. For more details, see [Add entry using an ID](/collect/add-entry-using-an-id).

## Q: Why can't JabRef find any DOI/ISBN/ePrint/etc.?

A: There are several reasons why JabRef cannot find your identifier online. For example, your DOI is not listed in the [CrossRef database](https://search.crossref.org/) if you are using the CrossRef fetcher. Another reason could be that the search result for your DOI on [DOI.org](https://dx.doi.org) returns invalid BibTeX which is unable to be read by JabRef. Try a [web search](/collect/import-using-online-bibliographic-database) instead.

## Q: I miss a field *translator*, *lastfollowedon*, etc. How can I add such fields?

A: To add this *translator* field to a specific entry type, edit the specific entry type(s) (**File → Customize entry types**) and add a *translator* field under required fields or optional fields, as you like (see [Customize entry types](/setup/customentrytypes)). It will then show up in the entry editor's Main tab as a free field for entries of that type. Alternatively, you can add it as an arbitrary field to a single entry directly in the Main tab's free-form field box, without customizing the entry type.

## Q: How do I prevent JabRef from introducing line breaks in certain fields (such as “title”) when saving the .bib file?

A: Open **File → Preferences**. In the “File” panel, you will find an option called “Do not wrap the following fields when saving”. This option contains a semicolon-separated list of field names. Any field you add to this list will always be stored without introduction of line breaks.

## Q: Is it possible to append entries from a BibTeX file, e.g. from my web browser to the currently opened library?

A: Yes, you can use the parameter `--importToOpen bibfile` of the [command line](/advanced/commandline).

## Q: How do I link external files with paths relative to my .bib file, so I can move my library along with its files to another directory?

A: You need to override the default file directory for this specific library. In **Library → Library properties** you can override the **Default file directory** setting. There, you can either enter the path in **Library-specific file directory** (for it to be valid for all users of the file) or in **User-specific file directory** (for it to be valid for you only). If you simply enter “.” (a dot, without the quotes), the file directory will be the same as the .bib file directory. To place your files in a subdirectory called **subdir**, you can enter **“./subdir”** (without the quotes). Files will automatically be linked with relative paths if the files are placed in the default file directory or in a directory below it. More details on the [help page about the library properties](/setup/databaseproperties).

## Q: Can I use a bib-file specific PDF directory?

A: In **Library → Library properties** you can choose a library-specific directory in the field “Library-specific file directory”. If you want to set a directory only for you (so that other users should use the default directory), use the field “User-specific file directory”.

## Q: How do I export my bibliography entries into a simple text file, so I can import them into a spreadsheet (in LibreOffice, OpenOffice, MS Office, etc.)?

A: Use **File → Export**. As “Filter” choose “OpenOffice/LibreOffice CSV”.

## Q: How do I add and remove keywords of multiple entries?

A: Select the entries and go to **Library → Manage keywords**. There you can manage keywords appearing in all selected entries or in any selected entry. New keywords are added to all selected entries. More details about [keywords in JabRef](/finding-sorting-and-cleaning-entries/keywords).

## Q: When linking a file, I cannot set the correct type. How do I add new types?

In **File → Preferences**, tab **External programs**, button "Manage external file types", you can add arbitrary types. See the [dedicated page about external file types](/setup/externalfiletypes).

## Q: When an organization is provided as author, my BibTeX style doesn't recognize it. For instance, why is “European Commission” converted to “Commission, E.”?

A: Use curly braces to tell BibTeX to keep your author field as-is: `{European Commission}`. In BibLaTeX, you can use `label = {EC}` to have `EC05` as a label for a publication of the European Commission in the year 2005.

## Q: Is there a FAQ on BibTeX?

A: Take a look at “Bibliographies and citations” at the [UK List of TeX Frequently Asked Questions on the Web](https://texfaq.org/). For German readers, there is the [dante e.V. FAQ](https://wiki.dante.de/dantefaq/literaturverzeichnis#).

## Q: How do I export a subset of my library to BibTeX (or BibLaTeX) format?

A: Your JabRef library is already a file in Bib(La)TeX format. To export a specific subset of your library, select the entries to be exported and then choose **File → Export → Save selected as plain BibTeX...**.

## Q: I have the Bib(La)TeX code of a reference. How to add it to my library as a new entry?

A: Paste the Bib(la)Tex code of a reference into the table of entries, and JabRef will create the new corresponding entry.

## Q: I have the PDF of a publication. How to make it a new entry of my library?

A: Drag & drop a PDF onto the table of entries (between two existing entries). JabRef will analyze the PDF and create a new entry. More details about [Adding entries from PDFs.](/collect/findunlinkedfiles)

## Q: I am looking at a publication in my web browser. How to make it a new entry of my library?

A: Use [JabRef Browser extension](/collect/jabref-browser-extension): with one click, JabRef browser extension identifies and extracts bibliographic information on websites and sends them to JabRef.

## Q: I am missing the DOI of some of my publications. Can JabRef help?

A: JabRef can fetch the DOI for you: select the entries and go to **Lookup → Search document identifier online → DOI**.

## Q: I am missing the PDF of some of my publications. Can JabRef help?​

A: JabRef can fetch the PDFs for you: select the entries and to **Lookup → Search full text documents online**.​

## Q: How do I export a subset corresponding to my LaTeX file?

A: Upon compilation, LaTeX generates a file with the extension ".aux". This file contains the keys of the cited references (among other things). Using this AUX file, JabRef can extract the relevant entries. Choose the menu **Tools → New sublibrary based on AUX file...** , then select the AUX file.

## Q: When I modify my library, I would like that JabRef performs entry cleaning automatically. How to do this?

A: In **Library → Library properties**, you will find a section named "Save actions". After enabling this feature, you can choose which actions should be performed for each field upon saving. That should help you keep your library tidy. More details about [cleaning up entries](/finding-sorting-and-cleaning-entries/cleanupentries), [save actions](/finding-sorting-and-cleaning-entries/saveactions), and [check integrity](/finding-sorting-and-cleaning-entries/checkintegrity).

## Q: Search on Google scholar does not work anymore. Why?

A: Google scholar is blocking "automated" crawls which generate too much traffic in a short time. JabRef already uses a two-step approach (with the prefetched list before crawling the actual BibTeX data) to circumvent this. However, after too many crawls JabRef is being blocked. To solve this issue, see the section [*Traffic limitations*](/collect/import-using-online-bibliographic-database#traffic-limitations) in the Google Scholar database.

## Q: JabRef does not push to vim, although I have configured the right path and server name. What is going on?

A: You have to start vim with the option `--servername` (such as `vim --servername MyVimServer`). If you get the `Unknown option argument` message, it means your version of vim does not include the *clientserver* feature (you can check with `vim --version`). In such a case, you have to install another version of `vim`.

## Q: My plugins stopped working. Why?

A: In JabRef 3.0 plugin support was removed because the development team cannot keep up plugin support anymore. Nevertheless, plugins can be integrated in JabRef. See [issue #152](https://github.com/JabRef/jabref/issues/152) for the current status and discussion. Please contact the author of the respective plugin and ask them to port their plugin into JabRef's code.

## Q: In the preferences, I want to change the option XYZ. How to find it?

A: Enter XYZ in the search field located at the upper left-hand corner of the preference window.

## Q: "Unable to monitor file changes. Please close files and processes and restart. You may encounter errors if you continue with this session."

A: This error message has been observed on systems that use [inotify](https://www.man7.org/linux/man-pages/man7/inotify.7.html). System calls to `inotify_init` and `inotify_add_watch` set `errno` to `EMFILE` when `inotify` has reached its limit. The most common reason is that `inotify` is running too many instances. To solve this problem, contact your system administrator and request that they increase the limits defined in `/proc/sys/fs/inotify/max_user_*` files.

## Q: "I'm using JabRef with Linux (Gnome desktop version) and each time I want to see a pdf document in JabRef, the document viewer Evince is opened. I would prefer to open it with Okular."

A: JabRef opens the pdf document with the application Gnome has set by default: Evince. If you want JabRef to open another application (Okular or other), in your file explorer, right-click on whatever pdf file > properties > Open With > choose your application > Set as default at the bottom right corner. From now on, both when you double-click a pdf file in your file explorer or when you ask JabRef to open it via its document viewer, your chosen application will be used.

## Q: How does JabRef support me in sharing my Bib(La)TeX libraries?

A: JabRef automatically recognizes a change in the `bib` file on disk and notifies the user of it. This is cool for network drives.

If you use version control, a few advices are given for a smoother [sharing of a bib file](/collaborative-work/sharedbibfile).

In addition, we have [many open issues dealing with collaboration](https://github.com/JabRef/jabref/wiki/FeatureRequests-Sorted#allow-me-to-work-with-others-please).

## Q: How to do collaborative work on a library?

A: You can either choose to [use an SQL database](/collaborative-work/sqldatabase) or to [share a bib file](/collaborative-work/sharedbibfile).

## Q: Which network protocols and ports are used by JabRef?

A: JabRef uses `https` to connect to external catalogs to fetch bibliographic data. The concrete port used depends on the external service. Mostly, the standard port `443` is used. When connecting to a SQL database, the standard port for PostgreSQL and MySQL is used. JabRef offers a local interface used by the browser plugin. For that, JabRef uses a proprietary, text-based protocol offered on the configurable port `6050`.

## Q: My question is not answered here. What can I do?

A: After consulting [JabRef's help](https://docs.jabref.org) and checking whether your question has been [regarded as issue](https://github.com/JabRef/jabref/issues?utf8=%E2%9C%93\&q=is%3Aissue+) please head over to the [Forum](https://discourse.jabref.org/).

## Q: There is a mistake in this FAQ, a dead link, or I have written a better/new explanation for a question! What can I do?

A: See [How to improve the help page](/contributing/how-to-improve-the-help-page).


# Linux

## Is there any way to include JabRef in the start menu of Ubuntu?

Yes, there is. See <http://askubuntu.com/a/721387/196423> for details.

## JabRef does not start under Linux! What can I do?

### Wayland-based systems

JabRef relies on [XWayland](https://wayland.freedesktop.org/docs/html/ch05.html) to run in Wayland environments. If your system is missing this dependency, the application will fail to launch (often showing an `Unable to open DISPLAY` error). To fix this, install `xwayland` using your distribution's package manager.

### JabRef 5.x

JabRef comes with a bundled JRE. There is no need to install Java separately. Thus, there should be no issues at start up.

### JabRef 4.x

> JabRef requires Java 8

Please follow the steps provided on our [installation page](/installation). JabRef 4.x does not run under Java 9 or newer. See <https://github.com/JabRef/jabref/issues/2594>

You might see the error message `Error: Could not find or load main class org.jabref.JabRefMain`. This means, you do not have [JavaFX](https://en.wikipedia.org/wiki/JavaFX) support activated in your Java runtime environment. This typically happens if you use [OpenJDK](http://openjdk.java.net/), where one needs to setup [OpenJFX](https://wiki.openjdk.java.net/display/OpenJFX/Main) separately.

## I am on Debian/Ubuntu and clicking on the JabRef icon works, but I cannot start JabRef from the command line. What is wrong?

You have several Java Virtual Machines installed, and under the command line the wrong one is chosen. Have a look at the previous question that tells you how to change the virtual machine used.

For Ubuntu you may also have a look at the [Ubuntu page on Java](https://help.ubuntu.com/community/Java).

## Everything looks too big or too small. How can I change it to a more reasonable size?

In the background, JabRef uses [JavaFX](https://en.wikipedia.org/wiki/JavaFX). Applications using JavaFX can be scaled via `java -Dglass.gtk.uiScale=1.5 -jar <application>.jar`. If you have installed JabRef via a package manager, you probably don't have a `.jar` file but a binary file. In this case, you need to find your `JabRef.cfg` in your installation folder (possibly located at `/opt/JabRef/lib/app/JabRef.cfg`) and add in the section `[JavaOptions]` the line `-Dglass.gtk.uiScale=1.5`. Then, restart JabRef. Try finding a value that is suitable for you. On high resolution displays, values around `1.5` seem to be reasonable.

## Where can I find JabRef's log files?

A: On Linux, the path to the log files is `~/.local/share/jabref/logs/$version/`


# Mac OS X

## Q: After downloading and unzipping, OS X shows “JabRef Installer.app” cannot be opened because it is from an unidentified developer

A: Currently this is necessary, since our code signing infrastructure is not operational. `Ctrl-click` to open the downloaded `.dmg` file in Finder to install JabRef.

## Q: After installing JabRef 5.9 on macOS ventura I get the error message: JabRef 5.9 is damaged and cannot be opened

A: Execute `xattr -d com.apple.quarantine /Applications/JabRef.app`

Because we could not get 5.9 notarized correctly from Apple this step is unfortuantely necessary.

## Q: I am trying to install JabRef, but I am blocked by "JabRef Installer cannot be opened because it is from an unidentified developer."

A: To override that, Ctrl + Click instead, and choose "open", which gives the same warning but the possibility to override it. then you can install.

## Q: Jabref slow/hangs on MacOS Sierra

A: This is a problem some users experience in JabRef 4.0 or later on MacOS Sierra. It seems this is a bug in the networking part of Java on MacOS. You can try to add localhost explicitly to `/etc/hosts` as described in [this article on macOS networking problems](https://dzone.com/articles/macos-sierra-problems-with-javanetinetaddress-getl).

## Q: Some characters are not displayed in the main table (math characters or some upper-cased letter)

A: This might be a problem related to the font you are using. You can download some other font that supports mathematical alphanumeric symbols, for example, FreeSerif or Cambria Math. A list of fonts supporting Math Unicode blocks is available at <http://www.fileformat.info/info/unicode/block/mathematical_alphanumeric_symbols/fontsupport.htm>.

## Q: Where can I find JabRef's log files?

A: It's in `Users/.../Library/Logs/jabref/version`.


# Windows

## Q: I have issues with my high resolution display. What can I do?

You have to change the "compatibility settings" for JabRef to "Disable scaling for high DPI settings". Further information is available at <https://support.microsoft.com/en-us/topic/windows-scaling-issues-for-high-dpi-devices-508483cd-7c59-0d08-12b0-960b99aa347d>

Further reading: <https://github.com/JabRef/jabref/issues/415> and <http://discourse.jabref.org/t/jabref-3-6-on-hires-laptop-screen-messed-up/277>.

## Q: How can I use JabRef as backend for Microsoft Word?

You can directly use the references in Word's internal reference manager. Short explanation: Export your bibliography in XML format and replace the Sources.xml in `%APPDATA%\Roaming\Microsoft\Bibliography`. Long explanation: check out [Export to Microsoft Word](/cite/export-to-microsoft-word). Also, see <https://www.youtube.com/watch?v=2PpLZTol9_o> for a video explaining how to add and how to cite references in a Word document.

Another option is to use [Bibtex4Word](http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html). See <https://www.youtube.com/watch?v=9j3g4wfdM00> for a video explaining the usage.

The last option is to use [Docear4Word](https://github.com/Docear/Docear4Word), which is planned to be ported to JabRef (see [JabRef4Word](https://github.com/JabRef/JabRef4Word)).

## Q: I get `WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.`

Start regedit and create the following key: `HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs`. \[[source](https://stackoverflow.com/a/20798112/873282)]

## Q: Where can I find JabRef's log files?

A: On Windows, one finds the log files in `%APPDATA%\..\Local\org.jabref\jabref\Logs\{version}`. `{version}` indicates the currently used JabRef version.

## Q: I have issues with the Chinese display language in Windows 10 Enterprise. What can I do?

A: According to [source](https://discourse.jabref.org/t/chinese-character/4167), you may have to set the font manually by downloading the Base.css from Custom themes - JabRef. Then open the Base.css, and add the following text at the end of Base.css:

```css
.text {
-fx-font-family: “Microsoft YaHei”;
}
```


# JabKit

JabKit is JabRef's CLI tool

## Installing and Running

### Native binary (recommended)

JabKit is available as a native binary for Linux (amd64/arm64) and macOS (Apple Silicon). It is a self-contained executable: no Java runtime is required, and it starts instantly. Download it from the [JabRef builds server](https://builds.jabref.org/main/) and unpack it:

```bash
# Linux (amd64)
curl -fL https://builds.jabref.org/main/linux-amd64/tools/jabkit-native_linux.tar.gz | tar xz
./jabkit/jabkit --help
```

```bash
# Linux (arm64)
curl -fL https://builds.jabref.org/main/linux-arm/tools/jabkit-native_linux_arm64.tar.gz | tar xz
./jabkit/jabkit --help
```

```bash
# macOS (Apple Silicon)
curl -fLO https://builds.jabref.org/main/macOS-silicon/tools/jabkit-native_macos-silicon.zip
unzip jabkit-native_macos-silicon.zip
./jabkit/jabkit --help
```

On other platforms (e.g. Windows, Intel macOS), use one of the options below.

### JBang and Docker

The easiest way to run JabKit is using [npx](https://docs.npmjs.com/cli/v8/commands/npx) and [jbang](https://www.jbang.dev/):

```bash
npx @jbangdev/jbang jabkit@jabref
```

You can also run it using [docker](https://www.docker.com/):

```bash
docker run ghcr.io/jabref/jabkit:edge --help
```

### Making JabKit available on the CLI as `jabkit`

In case JabKit should be available on the command line, execute following steps

1. Install JBang by following one option at the [download page of JBang](https://www.jbang.dev/download/).
2. Execute `jbang app install jabkit@jabref`

Then, JabKit can be run as follows:

```bash
jabkit --help
```

## General Usage

```bash
Usage: jabkit [-dhpv] [COMMAND]
  -d, --debug       Enable debug output
  -h, --help        display this help message
  -p, --porcelain   Enable script-friendly output
  -v, --version     display version info
```

## Available Commands

```pre
Commands:
  generate-citation-keys  Generate citation keys for entries in a .bib file.
  check-consistency       Check consistency of the library.
  check-integrity         Check integrity of the database.
  fetch                   Fetch entries from a provider.
  search                  Search in a library.
  convert                 Convert between bibliography formats.
  generate-bib-from-aux   Generate small bib from aux file.
  preferences             Manage JabKit preferences.
  pdf                     Manage PDF metadata.
  get-cited-works         Get the cited works (bibliography).
  get-citing-works        Get the works citing the work at hand.
```

Hint: Using `jabkit <COMMAND> --help` will show the supported options for each command.

## Updating JabKit

Make use of `--fresh` to update JabKit

`jbang --fresh jabkit@jabref`

Then, the `jabkit` command also uses the latest version.


# Contribute to JabRef

We are really happy that you are interested in contributing to JabRef. Please take your time to look around here. We especially invite you to look into our [community members page](https://discourse.jabref.org/t/community-members/1868?u=koppor) where members introduce themselves.

## I would like to try out a feature introduced at pull request

In JabRef, there are dozens of bug fixes and new features introduced using GitHub's pull request mechansim. You can browse all at <https://github.com/JabRef/jabref/pulls>. The JabRef team really welcomes users to try out these changes and to comment on them. Improving on changes in active pull requests is much easier than fixing them later on after their acceptance.

If you are familiar with the command line on your OS, then it is very easy to try out pull requests and give feedback. In the following, we try to give a minimal set of installation instructions to be able to run a contribution from a fork.

### Required tooling

* [`gg.cmd`](https://github.com/eirikb/gg) - A cross-platform and cross-architecture version manager. Download [`gg.cmd`](https://github.com/eirikb/gg/releases/latest/download/gg.cmd) and store it in your home (or `Downloads`) directory.

### Initial setup

* Windows:
  * Open PowerShell
  * Switch to a directory containing git repositories. We recommend `c:\git-repositories`
    * `mkdir c:\git-repositories`
    * `cd c:\git-repositories`
  * Get `gg.cmd`
    * `wget ggcmd.io -OutFile gg.cmd`
  * Have JBang trust JabRef's source
    * `.\gg.cmd jbang trust add https://github.com/JabRef/jabref/`
  * Clone JabRef
    * `.\gg.cmd jbang https://github.com/JabRef/jabref/blob/main/.jbang/CloneJabRef.java jabref`
    * NOTE: You can also use the native git client: `git clone --recurse-submodules https://github.com/JabRef/jabref.git` to achieve the same result.
  * Make `gg.cmd` available in `jabref` source directory
    * `cd jabref`
    * `move ..\gg.cmd .`
* Linux:
  * Open a shell
  * Switch to a directory containing git repositories. We recommend `~/git-repositories`
    * `mkdir ~/git-repositories`
    * `cd ~/git-repositories`
  * Get `gg.cmd` (using either `wget` or `curl`)
    * `wget ggcmd.io/gg.cmd`
    * Alternative: `curl -L ggcmd.io > gg.cmd`
  * Have JBang trust JabRef's source
    * `sh ./gg.cmd jbang trust add https://github.com/JabRef/jabref/`
  * Clone JabRef
    * `sh ./gg.cmd jbang https://github.com/JabRef/jabref/blob/main/.jbang/CloneJabRef.java jabref`
    * NOTE: You can also use the native git client: `git clone --recurse-submodules https://github.com/JabRef/jabref.git` to achieve the same result.
  * Make `gg.cmd` available in `jabref` source directory
    * `cd jabref`
    * `mv ../gg.cmd .`

Now you are all set: You have a directory `jabref` containing the recent updates and also `gg.cmd` which you will need later for executing a JabRef build.

Note: If you don't want to store JabRef's source code permanently, you can follow the steps at [our blog post on gg.cmd usage](https://blog.jabref.org/2025/05/31/run-pr/). There, JabRef's source is checked out in a temporary directory.

### Try a branch

1. `cd` into the `jabref` source directory: `cd c:\git-repositories\jabref`
2. Checkout the PR and run JabRef: `sh ./gg.cmd just run-pr <pr-number>` - replace `<pr-number>` with the PR number or the unique branch identifier by GitHub
   * Example: `13182` for [pr#13182](https://github.com/JabRef/jabref/pull/13182).
   * Example: `Yubo-Cao:walkthrough` for the branch identifier output by GitHub\
     ![pr-13182](/files/8bSIlbo26PzFwCBNQinn)

This will download the necessary JDK and a gradle distribution. On the first run, please give the system enough time to accommodate and wait until the JabRef window launches. Depending on your hardware, this may take a few minutes.

On Windows, instead of `sh ./gg.cmd` use `.\gg.cmd`:

```
.\gg.cmd just run-pr <pr-number>
```

#### Alternatives

1. In case you don't want to use `gg.cmd`: You can install [JBang](https://www.jbang.dev/) for yourself and execute the commands directly. These are
   * `jbang https://github.com/JabRef/jabref/blob/main/.jbang/CheckoutPR.java <pr-number>`
   * `./gradlew :jabgui:run`
2. In case you don't want to use `JBang`:
   * You have the project clone ready and have some [Java JDK](https://adoptium.net/de/temurin/releases/?os=any\&arch=any\&version=21) available: In the `jabref` directory, execute `./gradlew run`.
   * Install `gh` (the [GitHub CLI](https://cli.github.com/), a command-line client for GitHub) by using the installer linked on their [homepage](https://cli.github.com/) or the commands given at the [installation hints](https://github.com/cli/cli#installation).
3. In case you don't want to use `gh`: You can use the "usual" `git clone ...`, `git remote add ...`, `git fetch ...`, and `git checkout ...` commands to checkout a pull request from a fork.

## I would like to improve the help page

Please see [How to Improve the Help Page](/contributing/how-to-improve-the-help-page)

## I would like to help to translate JabRef to another language

We encourage you to read about [translating the JabRef user interface](/contributing/how-to-translate-the-ui).

## I would like to keep Wikipedia pages up-to-date

JabRef improves -- and Wikipedia pages should keep up!

For changes affecting all languages, update the [wikidata entry of JabRef](https://www.wikidata.org/wiki/Q1676802).

For changes in a specific language, go to the related page, and simply click on "Edit" (top right-hand tab). Currently, existing pages are:

* Deutsch: <https://de.wikipedia.org/wiki/JabRef>
* English: <https://en.wikipedia.org/wiki/JabRef>
* Español: <https://es.wikipedia.org/wiki/JabRef>
* Français: <https://fr.wikipedia.org/wiki/JabRef>
* Italiano: <https://it.wikipedia.org/wiki/JabRef>
* Русский: <https://ru.wikipedia.org/wiki/JabRef>
* Portuguese: <https://pt.wikipedia.org/wiki/JabRef>
* Svenska: <https://sv.wikipedia.org/wiki/JabRef>
* Українська: <https://uk.wikipedia.org/wiki/JabRef>
* 中文: <https://zh.wikipedia.org/wiki/JabRef>

If there is no page for your own language, you can easily create one.

## I have some cool feature requests

[Come discuss it!](http://discourse.jabref.org)

## Can I make a donation? How?

Donations keep us going! You can use PayPal or bank transfers. Your institution/company can contribute too, through bank transfer for example. All details are provided at <https://donations.jabref.org>.

Our team consists of volunteers. To provide better support, we are currently trying to get a funded developer on board. Please consider donating money!

## I would like to contribute code. How to?

Please head to our [Contributing Guide](https://github.com/JabRef/jabref/blob/main/CONTRIBUTING.md#contributing).


# How to Improve the Help Page

Here is a quick start guide on how to improve help pages in the [JabRef User Documentation](https://docs.jabref.org).

## Prerequisite

The JabRef help pages are hosted at [GitBook](https://www.gitbook.com) with integration to GitHub, which provides version control based on [git](https://git-scm.com). In order to edit or create a JabRef help page, you need a GitHub account. You can [sign up for a GitHub account](https://github.com/join) for free. If you already have an account, please make sure that you are signed in.

## Editing Help Pages directly in the browser

The easiest way to fix small errors, or to add additional information, is to edit a help page directly in your browser, using the following steps.

### 1. Start editing

At the top of each help page, you can find the GitHub icon with "Edit on GitHub" link. Just click the link to show the source of the page.

This leads you to the GitHub page associated with the help page:

![](/files/di2CTxP4SdfG7fV8dgqi)

To actually edit the page, click on the pencil icon, as highlighted above.

### 2. Make your changes

The window to edit the page at GitHub looks like this:

![Edit view at GitHub](/files/-MbDzkgq2W1PBHu6aXKu)

Most text can be simply added/edited in this field as plain text. However, you can style your contribution by using [markdown](https://daringfireball.net/projects/markdown/). Markdown is a rather easy way to format text without the need for complex markup, such as with HTML. You can find an introduction to markdown in [Daring Fireball's Markdown documentation](https://daringfireball.net/projects/markdown/) or in [GitHub's basic writing and formatting syntax guide](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax).

In order to review your changes, click on the "Preview changes" tab:

![Edit view at GitHub](/files/QYwEytP4TbPkTTr9w2Sz)

### 3. Saving the changes

To save the changes, create a so-called "Commit" by scrolling down and pressing the "Propose File Change" button:

![Save changes](/files/-MGFFGwty5qOWhrP-OtP)

*Please note: The message you provide here will be visible in the history of the help page, so please consider your change and provide a meaningful description of your changes.*

As the last step, submit the changes you have made back to the JabRef team:

![Create Pull Request](/files/-Ltai2NCeZG_UC-jfS6G)

Just press the "Create Pull Request" button, and confirm the creation of the request on the next page.

That's it! The JabRef team will review your changes and publish them on [docs.jabref.org](https://docs.jabref.org).

## Advanced Contribution Hints

### Advanced editing

To edit more than one file at a time, add screenshots, and for other more advanced changes, we recommend that you checkout this repository locally and create a Pull Request of your changes using the standard git and GitHub workflow.

### CI

Two CI jobs (called "workflows" in GitHub terminology) are triggered each time you push or pull request.

* Lint workflow checks for minor Markdown formatting style issues.
* Check links workflow checks for broken links, e.g. to images or external resources.

On PRs, you are able to view the results directly on the PR (though you have to wait for a maintainer to approve running the workflow). You can also view the results on the local fork of the repo that you pushed to (which you are recommended to check first so you can fix mistakes before the maintainer has to look at it).

On your local fork, you can check the results of the workflows in the Actions tab > All actions panel on Github as shown below. Click on a specific workflow and its run to check the results.

![Actions tab on Github](/files/onzBUgAiOn0oluJVtIdc)

### Notes on links workflow

Links to external resources that aren't essential should be added to `.lycheeignore`. Resources can change URL or be taken down, and it isn't the best use of contributor resources to constantly keep fixing them, so try to spare us the headache!

Note that check links may fail on links which you did not modify in your changes, in which case you can ignore them. Just do make sure that you don't introduce any additional broken links.

TEMPORARY NOTE: until [issue #533](https://github.com/JabRef/user-documentation/issues/533) is fixed, you will actually find a *lot* of broken links.

### Tables

The best way to enter tables is to use this [Table Generator](https://www.tablesgenerator.com/markdown_tables) for Markdown. It has the nice feature to generate markdown tables from different sources, e.g. you can directly copy the table from a spreadsheet or upload a csv file. Just copy and paste the generated markdown into the documentation.

### How to regenerate `SUMMARY.md` from scratch

Use <https://github.com/koppor/gitbook-summary-generator>.

### How to rename files

The gitbook integration changes some of the file names and appends "(1) (2) (1)" or something like this. If one fixes that in the GitHub repository, then the next sync rewrites the names again. The only solution we've found so far is manually replacing the images using the GitBook UI: Left to the image you have a hamburger with a "replace" option.

In case GitBook was fixed, with some command line magic, this could be solved:

1. Create a script renaming all images: `fd -e png -x bash -c "echo '{}' | sed 's/\([^(]*\)\(.*\).png/mv \"\\1\\2.png\" \"\\1.png\"/' | sed 's/ \.png/.png/'" | sort > fix-filenames.sh`. Execute in `en/.gitbook`. Otherwise, `fd` does not find any file.
2. Repeat for `gif` instead of `png`.
3. Create a script doing the renaming in all `.md` files: `fd -e md -x bash -c "echo sed -i '\"s/assets\/\([^%]*\)\(.*\).png/assets\/\\1.png/\"' {}" > fix-mds.sh`. Execute in the root repository. You can also do manually in VSCode using `( \(\d\))+.png` as RegEx.
4. Repeat for `gif` instead of `png`.

On Ubuntu, use `fdfind` (and install it using `sudo apt install fd-find`).


# How to translate the JabRef User Interface

## Introduction

JabRef comes with a set of translations into 20 different languages: Chinese (simplified), Danish, Dutch, English, Farsi, French, German, Greek, Indonesian, Italian, Japanese, Norwegian, Persian, Portuguese, Portuguese (Brazil), Russian, Spanish, Swedish, Tagalog, Turkish and Vietnamese.

If the JabRef interface already exists in your language, you can help improve it. Otherwise, you can start translating JabRef into your own language.

## Improving an existing translation

We use the service of [Crowdin](https://translate.jabref.org) to keep our translations updated. It is a service directly running in the browser and one can quickly join and start translating.

* Visit [https://translate.jabref.org/](https://translate.jabref.org) to get started
* Select your preferred language, login, and click on *JabRef\_en.properties*

  <img src="/files/00o36pSO1hTaQpOVLVWs" alt="Screenshot of Crowdin select file page" data-size="original">
* Choose the string you want to translate in the left panel (strings to be translated are listed first)

  and enter the translation in the central panel (suggestions are given at the bottom)

  <img src="/files/-MG5qWDKGnPjxnHC-j00" alt="Screenshot of Crowdin translation page" data-size="original">

## Translating JabRef into a new language

Crowdin offers to quickly add a new language. Please contact us so that we add a new language for you.

## Testing the translation

You may decide to wait for [a new test version of JabRef to be published](https://builds.jabref.org/main/).

To test directly your translation, you must be able to compile the source tree after making your additions. This requires you to install the [Java Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/index.html). Ensure that you use the most recent version.

Crowdin allows for downloading the current translation file:

![Screenshot of Crowdin download dialog](/files/-M0xodsj3pkP6_qUhZdG)

Place the downloaded file in the path `src/main/resources/l10n`. Then, execute `gradlew run` in the root directory and JabRef should start.

For a new language to be available within JabRef, a corresponding line must be added in the Java class GUIGlobals (found in the directory `/src/main/java/org/jabref/logic/l10n/Languages.java` in the JabRef source code tree). The line is inserted in the `static {}` section where the map `LANGUAGES` is populated. The code must of course be recompiled after this modification.

## Localization in JabRef code

### File location

For each language, there is the file `JabRef_xx.properties` (`xx` denotes the country code for the language). It contains all translations in a key/value format. In the JabRef source code tree, the property files reside in the [/src/main/resources/l10n](https://github.com/JabRef/jabref/blob/main/src/main/resources/l10n/) directory.

### File format

Each entry is first given in English, then in the other language, with the two parts separated by an '=' character. For instance, a line can look like this in a German translation file:

```properties
Background\ color\ for\ optional\ fields=Hintergrundfarbe für optionale Felder
```

Note that each space character is escaped (`\`) to make it a valid property key. The translation value does not need any escapes.

Some entries contain "variables" that are inserted at runtime by JabRef - this can for instance be a file name or a file type name:

```properties
Synchronizing\ %0\ links...=Synchronisiere %0-Links...
```

A variable is denoted by `%0`, `%1`, `%2` etc. In such entries, simply repeat the same notation in the translated version.

As we can see, there are several "special" characters: the percent sign and the equals sign, along with the colon character. If these characters are to be part of the actual text in an entry, they must be escaped in the English version, as with the colon in the following example:

```properties
Error\ writing\ XMP\ to\ file\:_%0=Fehler beim Schreiben von XMP in die Datei: %0
```

The character encoding should be **UTF-8**. Please avoid Unicode escaping such as `\u2302`.


# JabRef Bibliography Management

Stay on top of your literature: JabRef helps you to collect and organize sources, find the paper you need and discover the latest research: JabRef is an open-source, cross-platform citation and [reference management tool](https://en.wikipedia.org/wiki/Reference_management_software).

To get started, please follow the installation instructions and familiarize yourself with the basics of JabRef.

{% content-ref url="/pages/-MbDzhEbD7S-GwIX-BXV" %}
[Installation](/v5/installation)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEcI43\_S2UA1wiO" %}
[Getting started](/v5/getting-started)
{% endcontent-ref %}

Use the Search icon at the top left of this page to find what you're looking for. To learn more about JabRef's features, please follow the links below.

## [Collect](/v5/collect)

* Add new entries [manually](/v5/collect/add-entry-manually) or the based on the [reference text](/v5/collect/newentryfromplaintext)
* [Search](/v5/collect/import-using-online-bibliographic-database) across many online scientific catalogs like CiteSeer, CrossRef, Google Scholar, IEEEXplore, INSPIRE, Medline/PubMed, MathSciNet, Springer, arXiv, and zbMATH
* [Import options](/v5/collect/import) for over 15 reference formats
* Easily retrieve and link full-text articles
* [Fetch complete bibliographic information based on identifiers](/v5/collect/add-entry-using-an-id) such as ISBN, DOI, PubMed-ID and arXiv-ID
* [Extract metadata from PDFs](/v5/collect/findunlinkedfiles)
* Import new references directly from the browser with one click using the [official browser extension](/v5/collect/jabref-browser-extension) for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/jabref/?src=external-github), [Chrome](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh), [Edge](https://microsoftedge.microsoft.com/addons/detail/pgkajmkfgbehiomipedjhoddkejohfna) and [Vivaldi](https://chrome.google.com/webstore/detail/jabref-browser-extension/bifehkofibaamoeaopjglfkddgkijdlh)

## [Organize](/v5/finding-sorting-and-cleaning-entries)

* [Edit the bibliographic information](/v5/finding-sorting-and-cleaning-entries/edit-entry) using a convenient user interface
* [Group](/v5/finding-sorting-and-cleaning-entries/groups) your research into hierarchical collections and organize research items based on keywords/tags, search terms or your manual assignments
* [Advanced search and filter features](/v5/finding-sorting-and-cleaning-entries/search)
* [Complete and fix bibliographic data](/v5/finding-sorting-and-cleaning-entries/getbibtexdatafromdoi) by comparing with curated online catalogs such as Google Scholar, Springer or MathSciNet
* [Customizable citation key generator](/v5/setup/citationkeypatterns)
* [Manage field names and their content](/v5/finding-sorting-and-cleaning-entries/managing-field-names-and-their-content)
* Customize and add new metadata fields or reference types
* [Fix common mistakes](/v5/finding-sorting-and-cleaning-entries/cleanupentries), automatically [upon save](/v5/finding-sorting-and-cleaning-entries/saveactions) if you wish
* [Find and merge duplicates](/v5/finding-sorting-and-cleaning-entries/findduplicates)
* [Attach related documents](/v5/finding-sorting-and-cleaning-entries/filelinks): 20 different kinds of documents supported out of the box, completely customizable and extendable
* Automatically rename and move associated documents according to customizable rules
* [Keep track of what you read](/v5/finding-sorting-and-cleaning-entries/specialfields): relevancy, ranking, priority, printed, quality-assured, read status

## [Cite](/v5/cite)

* Native [BibTeX and biblatex support](/v5/cite/bibtex-and-biblatex)
* [Cite-as-you-write functionality](/v5/cite/pushtoapplications) for external applications such as Emacs, Kile, LyX, Texmaker, TeXstudio, Vim and WinEdt
* Format references in one of the many thousand built-in citation styles or create your style
* Support for [Word](/v5/cite/export-to-microsoft-word) and [LibreOffice/OpenOffice](/v5/cite/openofficeintegration) for inserting and formatting citations

## [Share](/v5/collaborative-work)

* [Many built-in export options](/v5/collaborative-work/export) or [create a custom export format](/v5/collaborative-work/export/customexports)
* Library is saved as a simple text file, and thus it is easy to [share with others](/v5/collaborative-work/sharedbibfile) e.g. via Dropbox and is version-control friendly
* Work in a team: sync the contents of your library [via a SQL database](/v5/collaborative-work/sqldatabase)

JabRef is [highly customizable](/v5/setup) and adapts to you, not the other way around.

If you want to dive even deeper, have a look at the [advanced information](/v5/advanced) about JabRef.

{% hint style="success" %}
JabRef is developed and maintained by a multidisciplinary [core team](https://github.com/JabRef/jabref/blob/main/MAINTAINERS) of PhD students, postdocs, and researchers in industry who work on JabRef in their freetime. Without the support of numerous volunteers, none of this would have been possible. [We welcome anyone who would like to contribute to be part of an active user and developer community!](/v5/contributing)
{% endhint %}


# Installation

JabRef can be either installed (the preferred way) or be used as a portable application.

## Installation instructions

To get the latest version, head to [downloads.jabref.org](https://downloads.jabref.org), download the installer for your system (e.g., `dmg` files for MacOS and `msi` files for Windows), run them and follow the on-screen instructions.

| Version           | 🍎                    | 🐧               |
| ----------------- | --------------------- | ---------------- |
| JabRef 5.6        | macOS 10.14 or higher |                  |
| JabRef 5.12 (dev) | macOS 11 or higher    | GTK 3.8 or later |

Alternatively, on **Windows**, you can use the [chocolatey package manager](https://chocolatey.org) and execute `choco install jabref` to get the latest version. On **Ubuntu**, you can use `snap install jabref` to get the latest stable version [from snapcraft](https://snapcraft.io/jabref).

{% content-ref url="/pages/-MbDzhEcI43\_S2UA1wiO" %}
[Getting started](/v5/getting-started)
{% endcontent-ref %}

#### Portable version

The portable version of JabRef is designed to be run from a USB stick (or similar) with no installation.

Download it from [downloads.jabref.org](https://downloads.jabref.org). These are generic archive files (e.g., `tar.gz` files for Linux and MacOS, and `zip` files for Windows) which need to be extracted. Inside the archive files you will find the file needed to run JabRef:

* for Windows `JabRef.exe`.
* for Linux
  * either run`bin/JabRef`
  * or `/lib/runtime/bin/JabRef`.
* for Mac, this is the file `JabRef.app`.

Be sure to activate "Load and Save preferences from/to jabref.xml on start-up (memory stick mode)" in Options → Preferences → General. Also, if the Linux version of JabRef portable is put into a folder named `bin`, it will not start. Other names are fine, like `apps`.

#### Development version

If you want to take advantage of the [latest features](https://github.com/JabRef/jabref/blob/main/CHANGELOG.md#unreleased), you can use pre-built binaries crafted from the latest development branch. To use the prebuilt binaries, visit [builds.jabref.org/main](https://builds.jabref.org/main/) and download the packaged binaries (e.g., `dmg` files for MacOS and `exe` files for Windows), run them and follow the instructions.

If you want to try the development version in parallel with the stable version, we recommend to download the portable version (e.g. `JabRef-X.Y.portable_windows.zip`, `JabRef-X.Y.portable_macos.tar.gz`, or `JabRef-X.Y.portable_linux.tar.gz`) from [builds.jabref.org/main](https://builds.jabref.org/main/) to ensure that both versions do not conflict.

## Troubleshooting

{% tabs %}
{% tab title="Windows" %}
**Issues with high resolution displays**

You have to change the "compatibility settings" for JabRef to "Disable scaling for high DPI settings". Further information is available at <https://www.microsoft.com/surface/en-us/support/apps-and-windows-store/app-display-issues?os=windows-10>.

Further reading: <https://github.com/JabRef/jabref/issues/415> and <http://discourse.jabref.org/t/jabref-3-6-on-hires-laptop-screen-messed-up/277>.

**Warning about preferences**

In case you get the following error message

`WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.`

start regedit and create the following key: `HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs`. \[[source](https://stackoverflow.com/a/20798112/873282)]

**How can I start or focus JabRef with hotkey ⊞+J (Win+J)?**

Use [AutoHotkey](http://www.autohotkey.com) and [JabRef.ahk](https://github.com/koppor/autohotkey-scripts/blob/main/JabRef.ahk) provided at [koppor's autohotkey scripts](https://github.com/koppor/autohotkey-scripts).
{% endtab %}

{% tab title="Linux" %}
**OpenOffice/LibreOffice integration**

The connection from JabRef to Libre Office requires some office related `jar`-archives to be present. For this, you have to install the package `libreoffice-java-common`.

**External program integration in Snap and Flatpak packages**

The snap and flatpak packages cannot interact directly with external programs (i.e. programs not contained in the package sandbox). What this means is that for now there is no possible connection between JabRef and Libreoffice if either one is a snap/flatpak.

The integration with TeX editors is fine if JabRef is a deb/rpm, and the editor is a snap/deb/rpm (not a flatpak).

Depending on your use case and needed integrations it is advisable to choose the proper packages. Watch this page for new developments on the interactions with external programs.

|                       | Snap | Flatpak | deb/rpm | tar |
| --------------------- | ---- | ------- | ------- | --- |
| Libreoffice (system)  | ❌    | ❌       | ✅       | ✅   |
| Libreoffice (snap)    | ❌    | ❌       | ❌       | ❌   |
| Libreoffice (flatpak) | ❌    | ❌       | ❌       | ❌   |
| TexShow               | ❌    | ✅       | ✅       | ✅   |
| TexMaker              | ❌    | ✅       | ✅       | ✅   |
| LyX                   | ❌    | ✅       | ✅       | ✅   |
| Vim/Emacs             | ❌    | ❌       | ✅       | ✅   |

**Change default application to open files for JabRef snap**

When JabRef is installed as a snap, it initially asks which application should be used to open PDFs (or other files). However, after selecting the same application three times, that application is set as default and there is no obvious way to select another application ("Preferences" -> "External File Types" does not help here, because the snap sandbox does not "see" any of the user's applications). This setting is stored in the XDG permission storage, and can be changed with a command like the following (see [this forum thread](https://forum.snapcraft.io/t/xdg-permissions-stores-should-be-configurable-with-snapd/25048) for further information, and have a look at `flatpack permissions` to find the correct "Table": look for a line where the "App" is `snap.jabref` - in the below example, the table is the default `desktop-used-apps`): `flatpak permission-set --data "{'always-ask':<false>}" desktop-used-apps application/pdf snap.jabref okularApplication_pdf 0 3` In this example, the default application to open PDF files is set to `okularApplication_pdf`, and the counter for when to stop asking how to open PDF files is set to 0/3. If you want JabRef to ask you which application to use every time, use `'always-ask':<true>` in the `data` parameter.

**Include JabRef in the start menu of Ubuntu**

See <http://askubuntu.com/a/721387/196423> for details.

**Cannot start JabRef from the command line**

You have several Java Virtual Machines installed, and under the command line the wrong one is chosen. Have a look at the previous question that tells you how to change the virtual machine used. For Ubuntu you may also have a look at the [Ubuntu page on Java](https://help.ubuntu.com/community/Java).

**Everything looks too big or too small. How can I change it to to a more reasonable size?**

In the background, JabRef uses [JavaFX](https://en.wikipedia.org/wiki/JavaFX). Applications using JavaFX can be scaled via `java -Dglass.gtk.uiScale=1.5 -jar <application>.jar`. If you have installed JabRef via a package manager, you probably don't have a `.jar` file but a binary file. In this case, you need to find your `JabRef.cfg` in your installation folder (possibly located at `/opt/JabRef/lib/app/JabRef.cfg`) and add in the section `[JavaOptions]` the line `-Dglass.gtk.uiScale=1.5`. Then, restart JabRef. Try finding a value that is suitable for you. On high resolution displays, values around `1.5` seem to be reasonable.

**Non-latin characters are not showing up properly**

You might need to install an additional font for JabRef to display characters correctly.

| System    | Language | Font                                                            |
| --------- | -------- | --------------------------------------------------------------- |
| ArchLinux | Japanese | [otf-ipafont](https://archlinux.org/packages/?name=otf-ipafont) |

**Submenus from the menu bar close immediately after left click is let go of if the menu bar was clicked in its top half**

This issue seems to be related to this [JavaFX bug](https://bugs.openjdk.org/browse/JDK-8251240). A temporary workaround is to click the menu bar in its lower half. To fix the issue permanently set the following system property: `java -Djdk.gtk.version=2`. This can be done globally by adding `_JAVA_OPTIONS="-Djdk.gtk.version=2"` to `/etc/environment`. It can also be set locally by editing `JabRef.cfg` in your installation folder (possibly located at `/opt/JabRef/lib/app/JabRef.cfg`) and add the line `-Djdk.gtk.version=2` in the `[JavaOptions]` section.

Note: This could not work in JabRef 5.12. or later.
{% endtab %}

{% tab title="macOS" %}
**I cannot start JabRef 5.9 due to file beeing damaged**

Execute xattr -d com.apple.quarantine /Applications/JabRef.app (This is a known problem related to Apple's notarization)

**JabRef is slow/hangs sometimes**

Some users with macOS Sierra have reported freezes when using JabRef. It seems this is a bug in the networking part of Java on macOS. [Adding a host mapping for 127.0.0.1](https://dzone.com/articles/macos-sierra-problems-with-javanetinetaddress-getl) seems to solve these issues.

**Some characters are not displayed in the main table (math characters or some upper-cased letter)**

This is one the one hand a font problem and second a lognstanding [JavaFX bug](https://bugs.openjdk.java.net/browse/JDK-8176835). This might be a problem related to the font you are using. You can download some other font that supports mathematical alphanumeric symbols, for example, FreeSerif or Cambria Math. A list of fonts supporting Math Unicode blocks is available at <http://www.fileformat.info/info/unicode/block/mathematical_alphanumeric_symbols/fontsupport.htm>.
{% endtab %}
{% endtabs %}

## Building From Source

This method is mainly for package maintainers and users who would like to build the latest snapshots of JabRef directly from the source. If you want to setup JabRef for development, follow the instructions for [setting up a workspace](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace).

To build JabRef from source, you first need to have a working Java Development Kit (see above link for details) and Git installed on your system. After installing the two requirements, you open a terminal window (i.e., a command prompt) and type the following:

```shell
git clone --recurse-submodules --depth=10 https://github.com/JabRef/jabref
cd jabref
./gradlew assemble
./gradlew jlink
```

In a nutshell, you clone the latest snapshot of JabRef into `jabref` directory, change directory to `jabref`, initialize and update all the submodules (dependencies) of JabRef, assemble them to be built via JDK and finally build and link them together.

The output should be the `build/image` subdirectory that contains the JabRef binary with all of its Java dependencies. To start JabRef, you need to run `bin/JabRef` (in Linux and MacOS) or `bin/JabRef.bat` (in Windows) under `build/image` subdirectory.


# Getting started

{% hint style="info" %}
In French/En français: [Découvrir JabRef](https://ist.inrae.fr/wp-content/uploads/sites/21/2022/01/OpenClass_Decouvrir_JabRef_2022.pdf) (external document, courtesy of INRAE)
{% endhint %}

{% hint style="info" %}
Some videos to help you start using JabRef:

* [Intro to JabRef](https://www.youtube.com/watch?v=11qMBE_PSBw) by JoshTheEngineer (youtube - English - 22 minutes - January 2021)
* [JabRef for beginners (Part 1): JabRef interface and creating a library](https://www.youtube.com/watch?v=oF22xJ9lDVk) by James Azam (youtube - English - 14 minutes - April 2021)
* [JabRef for beginners (Part 2): How to manage and cite references in MS Word and LaTeX](https://www.youtube.com/watch?v=Q62nO-KDDZw) by James Azam (youtube - English - 11 minutes - April 2021)
  {% endhint %}

## Main Window of JabRef

Upon the first start of JabRef the main user interface is showing up the main elements are:

* Menu bar
* Icon bar (shortcuts for most frequently used features)
* Side bar (for groups and web search)

![Screenshot of main window](/files/Gb2WHQ3MY2CnE0bVZfjH)

## Creation of a new library

A "library" is the main file that saves all the information about your collection of references. The storage format of the file is text-based in the BibTeX standard (by default).

{% hint style="info" %}
The usage of a text-based file format has some advantages:

* The file is "human readable" and editable with every text editor
* the text format allows for an easy tracking of changes with every common version control protocol (e.g., git)
* and finally: the format is dedicated for the usage with LaTeX; so you do not need to convert it to any other format but you can just directly link to your JabRef library
  {% endhint %}

To create a new library, just select the "New library" menu item in the "File" menu:

![Creating a new library](/files/AWt0aaVOqS1M9mnLcQ6R)

The main screen is now showing an empty "entry table" we will now start to fill with some entries.

## Adding of a new entry manually

To add a new entry select the menu bar entry "Library" -> "New entry", click on the icon in the icon bar, or just hit CTRL-N.

This opens a dialog where you can select the type of reference you want to store. By default all entry types defined by the BibTeX format are available:

![Screenshot of "new entry" dialog](/files/-MikU-H9eNVAOxQeiKkZ)

For our running example we will select "Article".

After clicking on the "Article" button, the dialog closes and the so called "Entry Editor" is opened for the newly created entry:

![Main window now showing the entry editor](/files/gbQb1yxBOmA2gl3YNB5l)

The most important information about the references to be added can now be entered in the "Required Fields" tab. "Author", "Title", "Journal", and "Year" should be self-explanatory - however, a "citationkey", might not be familiar to you. Basically, the idea of the "citationkey" is coming from working with BibTeX, where it is necessary to have an unique identifier for each entry. This allows for referencing within a document you might be creating using the stored information in your library. Moreover, also within JabRef this "key" is used for example for cross-references to other related entries or to determine file names for full-text references.

The key usually follows a global pattern and can be easily created automatically by clicking on the "generate" button next to the field.

{% hint style="info" %}
The default key pattern is `[auth][year]`, which means that Author information is followed by the year of the publication, resulting in the example in `Turing1950`. However, the key pattern is customizable to your needs. See [Configuration](https://docs.jabref.org/setup) > ["Customize the citation key generator"](https://docs.jabref.org/setup/citationkeypatterns) for more details.
{% endhint %}

After entering some information, you can see on the right side of the entry editor a preview of the bibliographic data:

![Added information for new entry](/files/pYynPyISfoiw713ie47e)

There are further possibilities to add entries to your library which are described in the section "Collect" of this documentation:

{% content-ref url="/pages/-MbDzhEdgN8BlujoT0Oi" %}
[Collect](/v5/collect)
{% endcontent-ref %}

## Enhancing the information

After creating the basic information the addition of all other bibliographical details is often cumbersome and error-prone. To ease this task, JabRef allows for an automatic completion of the bibliographic information by looking up the data in public databases. To use this feature just click on the "Update with bibliographic information from the web" button in the editor:

![Update information from web](/files/gXGOSBwyQHKW3Pi1bs67)

{% hint style="info" %}
The found information is most accurate if an identifier like a "DOI" or "ISBN" is maintained. If you already know such an unique identifier, this can also be already the starting point to create a new entry without manual entering any information by using the "create from ID" feature in the Create entry dialog. For more information see: [Collect](https://docs.jabref.org/collect) > ["Add entry using an ID"](https://docs.jabref.org/collect/add-entry-using-an-id)
{% endhint %}

If additional information is found you will be asked in a dialog which information should be taken over:

![Merging the existing and the web information](/files/Wvy8Uu98LksMPM7gWHED)

## Adding a full text document

Usually, you also want to attach a reference to the full-text of a reference. For this, you can use the "file" field in the "General" tab. Here you can either attach a file manually, search for an already existing local file matching the citationkey pattern, or trying to automatically download a matching full text from the web.

{% hint style="info" %}
In order to use the automated feature, it is necessary to set-up a file directory first. To do so, please go to "Options" > "Preferences", go to "Linked files" section, and select there an existing folder as the "Main file directory":
{% endhint %}

To test the automatic download of full texts you can click on the "Get full-text" icon next to the file field, or choose "Lookup" -> "Search full text documents online" from the menu. As soon as a full-text is found, the file will be stored in the local file directory and linked to the entry:

![Finding a full-text document online](/files/uCky9A8tjqRxumVMTHN0)

To open the downloaded full text you can click on the "file" icon before the file name - or use the same icon in the entry table: ![Opening the full-text](/files/J5ouFuIfs2AWQDeLaPAU)

## Finding more references in the web

If you want to search for other references, it is also possible to directly trigger a search in many of the most common bibliographic databases. To start a search just use the "Web Search" feature of JabRef: First select one of the existing data sources, enter a search term and click on "search":

The search results will be shown in an window where you can select all the search hits to be added to your library.

![Web Search: Trigger and result window](/files/5bpWKhZkbMiJeZAIp4WI)

## Next steps

After adding more and more entries, your library might be a bit too unstructured. In order to keep all you references organized JabRef is offering a lot of helpful features like grouping, consistency checks, etc.

You can find more information on this topics in the "Organize" section of the documentation:

{% content-ref url="/pages/-Lr5QENyCIwSXmB3ijuU" %}
[Organize](/v5/finding-sorting-and-cleaning-entries)
{% endcontent-ref %}

If you want to start writing your own papers, articles or thesis, you might find some helpful information on how to use JabRef for citing your collected references from your library:

{% content-ref url="/pages/-MbDzhF1KGRwD8DgjVZ7" %}
[Cite](/v5/cite)
{% endcontent-ref %}


# Collect

Learn how to add new literature to JabRef.

JabRef provides you with many ways to add a new entry.

{% content-ref url="/pages/-MbDzhEe6WMc26wjxh8g" %}
[Add entry manually](/v5/collect/add-entry-manually)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEfwOlRYnfTHbBi" %}
[Add entry using an ID](/v5/collect/add-entry-using-an-id)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEg0k9sssHuT6CE" %}
[Add entry using reference text](/v5/collect/newentryfromplaintext)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEhu1zlA\_LZ3urk" %}
[Searching externally using Online Services](/v5/collect/import-using-online-bibliographic-database)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEiyVfFKQHP39ca" %}
[Add entry using PDFs](/v5/collect/findunlinkedfiles)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEjxdztwlhK-lFZ" %}
[Browser Extension](/v5/collect/jabref-browser-extension)
{% endcontent-ref %}

{% content-ref url="/pages/-MbDzhEkP0LZMMHj7Cr7" %}
[Import](/v5/collect/import)
{% endcontent-ref %}




---

[Next Page](/llms-full.txt/1)

