Note
Users of Vim and Neovim < 0.10.4 have to switch to the "vim" branch.
Zotcite is a Neovim plugin that provides integration with Zotero for Markdown, Quarto, Rmd, vimwiki, and Typst and has rudimentary support for LaTeX and Rnoweb file types. With zotcite you can:
-
Do auto-completion of citation keys from Zotero database in Markdown, RMarkdown, Quarto, and Typst documents (with
cmp-zotcite
). -
Quickly see on the status bar information on the reference under the cursor.
-
Use the
zotref.py
filter to pre-process the Markdown document before the citations are processed bypandoc
, avoiding the need ofbib
files. -
Open the PDF attachment of the reference associated with the citation key under the cursor.
-
Extract highlighted text and text notes from PDF attachments of references.
-
Extract Zotero notes and annotations from Zotero database.
-
Add all cited references to the YAML header of the Markdown document.
Zotcite is being developed and tested on Linux and should work flawlessly on other Unix systems, such as Mac OS X. It may require additional configuration on Windows.
Requirements:
-
Zotero >= 5
-
Python 3
-
Python 3 modules pynvim (see Neovim documentation on
provider-python
for details) and PyYAML. -
Only if you are going to extract annotations from PDF documents that were inserted by a PDF viewer other than Zotero: Python modules PyQt5 and python-poppler-qt5, or Python module pymupdf (see Zotcite documentation for details).
Zotcite can be installed as any Neovim plugin, and it depends on
telescope.nvim, and
nvim-treesitter as well
as tree-sitter parsers for markdown
, markdown_inline
, and yaml
.
Optionally, you can also use
cmp-zotcite, for auto-completing
the citations keys. Below is an example of how to install zotcite
with
lazy.nvim:
{
"jalvesaq/zotcite",
dependencies = {
"nvim-treesitter/nvim-treesitter",
"nvim-telescope/telescope.nvim",
},
config = function ()
require("zotcite").setup({
-- your options here (see doc/zotcite.txt)
})
end
},
{
"nvim-treesitter/nvim-treesitter",
run = ":TSUpdate",
config = function ()
require("nvim-treesitter.configs").setup({
sync_install = true,
ensure_installed = {
"html",
"latex",
"markdown",
"markdown_inline",
"yaml",
},
highlight = {
enable = true,
},
indent = {
enable = true,
},
})
vim.o.foldmethod = "expr"
vim.o.foldexpr = "nvim_treesitter#foldexpr()"
vim.o.foldenable = false
end
},
Note: you don't need to lazy load zotcite because it already lazy loads its modules only for the supported file types, and you do need to call zotcite's setup function.
The Python module zotero
does not import the vim
module. Hence, its code
could easily be adapted to other text editors or as a language server for
markdown and quarto.
Please, read the plugin's documentation for further instructions.
Zotcite's Python code was based on the citation.vim project.