From 88144f2c6ad3193194b9fecd6161ca5f18c198be Mon Sep 17 00:00:00 2001 From: Jake Ginesin Date: Sun, 16 Feb 2025 19:30:20 -0500 Subject: [PATCH] 342 current 2025-02-16 19:30:04 25.05.20241217.d3c42f1 6.6.66 * --- home/programs/nvim/default.nix | 4 + home/programs/nvim/plugins/vimtex.lua | 42 ++++++ home/programs/nvim/snippets/all.lua | 12 -- home/programs/nvim/snippets/tex.lua | 197 ++++++++++++++++++++++++++ 4 files changed, 243 insertions(+), 12 deletions(-) create mode 100644 home/programs/nvim/plugins/vimtex.lua create mode 100644 home/programs/nvim/snippets/tex.lua diff --git a/home/programs/nvim/default.nix b/home/programs/nvim/default.nix index 4984870..68206fd 100644 --- a/home/programs/nvim/default.nix +++ b/home/programs/nvim/default.nix @@ -39,6 +39,10 @@ plenary-nvim nvim-web-devicons # coc-nvim + { + plugin = vimtex; + config = toLuaFile ./plugins/vimtex.lua; + } { plugin = goyo-vim; config = toLuaFile ./plugins/goyo.lua; diff --git a/home/programs/nvim/plugins/vimtex.lua b/home/programs/nvim/plugins/vimtex.lua new file mode 100644 index 0000000..2dd9a4a --- /dev/null +++ b/home/programs/nvim/plugins/vimtex.lua @@ -0,0 +1,42 @@ +-- Enable filetype plugins, indent, and syntax highlighting. +vim.cmd("filetype plugin indent on") +vim.cmd("syntax enable") + +-- Viewer options: either with a built-in viewer method or with a generic interface. +vim.g.vimtex_view_method = 'zathura' +vim.g.vimtex_view_general_viewer = 'zathura' +vim.g.vimtex_view_general_options = '--unique file:@pdf#src:@line@tex' + +-- Set the TeX flavor and quickfix mode. +vim.g.tex_flavor = 'latex' +vim.g.vimtex_quickfix_mode = 0 +vim.g.vimtex_quickfix_enabled = 0 + +-- Compiler backend. +vim.g.vimtex_compiler_method = 'latexrun' + +-- Set the local leader (default is "\"; here we change it to comma). +vim.g.maplocalleader = ',' + +-- Configure warnings to ignore. +vim.g.Tex_IgnoredWarnings = [[ +Package hyperref Warning +Token not allowed in a PDF string (Unicode) +removing math shift +removing superscript +Underfull +Overfull +specifier changed to +You have requested +Missing number, treated as zero. +There were undefined references +Citation %.%# undefined +Double space found. +]] +vim.g.Tex_IgnoreLevel = 8 + +-- Delete extra compilation files when a TeX buffer is deleted. +vim.api.nvim_create_autocmd("BufDelete", { + pattern = "*.tex", + command = "silent! !latexmk -c > /dev/null 2>&1 %:p", +}) diff --git a/home/programs/nvim/snippets/all.lua b/home/programs/nvim/snippets/all.lua index 79b8b98..33aaf4e 100644 --- a/home/programs/nvim/snippets/all.lua +++ b/home/programs/nvim/snippets/all.lua @@ -43,15 +43,3 @@ ls.add_snippets("lua", { t(' end') }) }) - - - -ls.add_snippets("all", { - ms({ - common = {snippetType = "autosnippet"}, - "a", - "b" - }, { - t"a or b (but autotriggered!!)" - }) -}) diff --git a/home/programs/nvim/snippets/tex.lua b/home/programs/nvim/snippets/tex.lua new file mode 100644 index 0000000..26ce3f6 --- /dev/null +++ b/home/programs/nvim/snippets/tex.lua @@ -0,0 +1,197 @@ +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local events = require("luasnip.util.events") +local ai = require("luasnip.nodes.absolute_indexer") +local extras = require("luasnip.extras") +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require("luasnip.extras.fmt").fmt +local fmta = require("luasnip.extras.fmt").fmta +local conds = require("luasnip.extras.expand_conditions") +local postfix = require("luasnip.extras.postfix").postfix +local types = require("luasnip.util.types") +local parse = require("luasnip.util.parser").parse_snippet +local ms = ls.multi_snippet +local k = require("luasnip.nodes.key_indexer").new_key +local line_begin = require("luasnip.extras.expand_conditions").line_begin + +ls.filetype_extend("plaintex", {"tex"}) + +local get_visual = function(args, parent) + if (#parent.snippet.env.LS_SELECT_RAW > 0) then + return sn(nil, i(1, parent.snippet.env.LS_SELECT_RAW)) + else -- If LS_SELECT_RAW is empty, return a blank insert node + return sn(nil, i(1)) + end +end + +local in_mathzone = function() + -- The `in_mathzone` function requires the VimTeX plugin + return vim.fn['vimtex#syntax#in_mathzone']() == 1 +end + +-- exampe of a multiline snippet + +-- ls.add_snippets("tex", { + -- s("template", fmta([[ + -- <> <> + -- ]], {i(1), i(0)}, { + -- indent_string = "" + -- })) +-- }) + + +ls.add_snippets("tex", { + s("template", fmta([[ +\documentclass[11pt]{article} +\usepackage{amssymb} +\usepackage{amsmath} +\usepackage{listings} +\usepackage[utf8]{inputenc} +\usepackage{parskip} +\usepackage{hyperref} +\usepackage{bookmark} +\usepackage[linguistics]{forest} +\usepackage{tikz} + +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage{amssymb} +\usepackage{enumitem} + +\usepackage{import} +\usepackage{pdfpages} +\usepackage{transparent} +\usepackage{xcolor} + +\newtheorem{all}{Theorem}[section] +\newtheorem{corollary}[all]{Corollary} +\newtheorem{lemma}[all]{Lemma} +\newtheorem{definition}[all]{Definition} +\newtheorem{exercise}[all]{Exercise} +\newtheorem{proposition}[all]{Proposition} +\newtheorem{example}[all]{Example} +\newtheorem{theorem}{Theorem} + +\newenvironment{lecture}[1]{ +\t\section{\MakeUppercase{#1}} +\t\vspace{-0.5em} +\t\hrule +\t\vspace{1em} +\t\begin{list}{}{ +\t\t\setlength{\leftmargin}{1.5em} +\t} +\t\item[] +}{ +\t\end{list} +} + +\title{<>} +\author{Jake Ginesin} +\date{} + +\begin{document} +\maketitle +<> +\end{document} + ]], {i(1), i(0)}, { + indent_string = "" + })) +}) + +ls.add_snippets("tex", { + s("template-math", fmta([[ +\documentclass[11pt]{article} +\usepackage{amssymb} +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage{fullpage} +\usepackage{listings} +\usepackage[utf8]{inputenc} +\usepackage{parskip} +\usepackage{hyperref} +\usepackage{bookmark} +\usepackage[linguistics]{forest} +\usepackage{tikz} + +\usepackage{enumitem} +\usepackage{euler} +\usepackage{libertine} + +\usepackage{import} +\usepackage{pdfpages} +\usepackage{transparent} +\usepackage{xcolor} + +\newtheoremstyle{definitionstyle} +{} +{} +{\normalfont} +{} +{\bfseries} +{:} +{0.5em} +{} + +\theoremstyle{definitionstyle} +\newtheorem{definition}{Definition}[section] + +\newtheorem{all}{Theorem}[section] +\newtheorem{corollary}[all]{Corollary} +\newtheorem{lemma}[all]{Lemma} +\newtheorem{exercise}[all]{Exercise} +\newtheorem{proposition}[all]{Proposition} +\newtheorem{example}[all]{Example} +\newtheorem{theorem}{Theorem} + +\title{<>} +\author{Jake Ginesin} +\date{} + +\begin{document} +\maketitle + <> +\end{document} + ]], {i(1), i(0)}, { + indent_string = "" + })) +}) + +-- ---- + + +ls.add_snippets("tex", { + s({trig = "ita", dscr = "Expands 'tii' into LaTeX's textit{} command."}, + fmta("\\textit{<>}", + { + d(1, get_visual), + } + ) + ), + + + -- s({trig = "ff"}, + -- fmta( + -- "\\frac{<>}{<>}", + -- { + -- i(1), + -- i(2), + -- } + -- ), + -- {condition = in_mathzone} -- `condition` option passed in the snippet `opts` table +-- ), + +}) +