Skip to content

Preview markdown files and convert to PDF inside Neovim!

Notifications You must be signed in to change notification settings

arminveres/md-pdf.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Markdown to PDF

Note

Pull requests are welcome!

Warning

This plugin is still very early in its development, so expect bugs and if possible report them here! Thanks and enjoy.

A very simple and easy plugin to convert open markdown files to PDFs and open them it to the side.

image

Features

  • Preview markdown documents easily on Linux, Mac, Windows or just define a custom preview command!
  • Generate PDFs out of markdown
  • Lightweight ~200 loc fully lua written plugin
  • auto-generate on save, don't reopen new viewer

Installation

Currently you can just put it into lazy or packer and require it at some point.

Lazy

{
    'arminveres/md-pdf.nvim',
    branch = 'main', -- you can assume that main is somewhat stable until releases will be made
    lazy = true,
    keys = {
        {
            "<leader>,",
            function() require("md-pdf").convert_md_to_pdf() end,
            desc = "Markdown preview",
        },
    },
    opts = {},
}

Configuration

require('md-pdf').setup() -- default options, or
require('md-pdf').setup({
    --- Set margins around document
    margins = "1.5cm",
    -- tango, pygments are quite nice for white on white
    highlight = "tango",
    -- Generate a table of contents, on by default
    toc = true,
    -- Define a custom preview command, enabling hooks and other custom logic
    preview_cmd = function() return 'firefox' end,
    -- if true, then the markdown file is continuously converted on each write, even if the
    -- file viewer closed, e.g., firefox is "closed" once the document is opened in it.
    ignore_viewer_state = false,
    -- Specify font, `nil` uses the default font of the theme
    fonts = nil,
    -- or, where all or only some options can be specified. NOTE: those that are `nil` can be left
    -- out completely
    fonts = {
        main_font = nil,
        sans_font = "DejaVuSans",
        mono_font = "IosevkaTerm Nerd Font Mono",
        math_font = nil,
    },
    -- Custom options passed to `pandoc` CLI call, can be ignored for setup
    pandoc_user_args = nil,
    -- or
    pandoc_user_args = {
        -- short
        "-V KEY[:VALUE]",
        -- long options
        "--standalone=[true|false]",
    },
})

-- setup mapping
vim.keymap.set("n", "<Space>,", function()
    require('md-pdf').convert_md_to_pdf()
end)

Requirements

Warning

The plugin currently only recognizes the document being open on Zathura.

Tested on Windows 10, MacOS 13, and Linux (Fedora Workstation 38)

  • neovim >= 9, didn't test below that.
  • PDF Viewer, uses xdg-open on Linux, open on Mac and powershell on Windows
  • pandoc for conversion, also probably some TeX distribution with pdflatex included.

Why

I have often found myself wanting to see my markdown files as a PDF, for which I usually created a Makefile which converted the files through pandoc.

After having done it a few times it became repetitive and I thought to myself, why not just create a plugin that does exactly that in my favorite text editor. And tada, here it is! Enjoy :D

TODO

  • exit viewer if file left/buffer changed, or make it configurable