77 lines
2.4 KiB
Lua
77 lines
2.4 KiB
Lua
-- Mostly Generated with Antigravity CLI Gemini 3.7 Flash
|
|
return {
|
|
"lervag/vimtex",
|
|
lazy = false,
|
|
init = function()
|
|
vim.g.vimtex_compiler_method = "tectonic"
|
|
vim.g.vimtex_quickfix_mode = 0
|
|
vim.g.vimtex_view_enabled = 0 -- Disable external GUI popup
|
|
end,
|
|
config = function()
|
|
local function open_pdf_split()
|
|
local pdf_path = vim.fn.expand("%:p:r") .. ".pdf"
|
|
if vim.fn.filereadable(pdf_path) == 1 then
|
|
vim.cmd("vsplit " .. vim.fn.fnameescape(pdf_path))
|
|
else
|
|
vim.notify("PDF not found: " .. pdf_path .. "\nCompile first with <Space>ll", vim.log.levels.WARN)
|
|
end
|
|
end
|
|
|
|
-- Provide user command :VimtexPreviewBuffer
|
|
vim.api.nvim_create_user_command("VimtexPreviewBuffer", open_pdf_split, { desc = "VimTeX: Open PDF in vertical split" })
|
|
|
|
-- Buffer-local keymaps for TeX files
|
|
vim.api.nvim_create_autocmd("FileType", {
|
|
pattern = { "tex", "latex" },
|
|
callback = function(ev)
|
|
local opts = { buffer = ev.buf, desc = "VimTeX: View PDF in Neovim split" }
|
|
vim.keymap.set("n", "<localleader>lv", open_pdf_split, opts)
|
|
vim.keymap.set("n", "<leader>lv", open_pdf_split, opts)
|
|
end,
|
|
})
|
|
|
|
-- Helper function to refresh and re-render all open PDF splits with image.nvim
|
|
local function reload_pdf_buffers()
|
|
local ok, image_api = pcall(require, "image")
|
|
for _, win in ipairs(vim.api.nvim_list_wins()) do
|
|
local buf = vim.api.nvim_win_get_buf(win)
|
|
local buf_name = vim.api.nvim_buf_get_name(buf)
|
|
if buf_name:match("%.pdf$") then
|
|
vim.api.nvim_win_call(win, function()
|
|
vim.cmd("edit!")
|
|
end)
|
|
if ok and image_api then
|
|
local imgs = image_api.get_images({ window = win, buffer = buf })
|
|
if #imgs > 0 then
|
|
for _, img in ipairs(imgs) do
|
|
img:clear()
|
|
img:render()
|
|
end
|
|
else
|
|
image_api.hijack_buffer(buf_name, win, buf)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Automatically trigger compilation on save (:w)
|
|
vim.api.nvim_create_autocmd("BufWritePost", {
|
|
pattern = "*.tex",
|
|
callback = function()
|
|
if vim.b.vimtex and vim.fn.exists(":VimtexCompileSS") == 2 then
|
|
vim.cmd("VimtexCompileSS")
|
|
end
|
|
end,
|
|
})
|
|
|
|
-- Automatically reload and re-render PDF splits when compilation finishes
|
|
vim.api.nvim_create_autocmd("User", {
|
|
pattern = { "VimtexEventCompileSuccess", "VimtexEventCompileStopped" },
|
|
callback = function()
|
|
reload_pdf_buffers()
|
|
end,
|
|
})
|
|
end,
|
|
}
|