dotfiles/nvim/snippets/tex/math.lua

403 lines
7.5 KiB
Lua

----------------
-- Abbreviations
----------------
local ls = require("luasnip")
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local f = ls.function_node
local d = ls.dynamic_node
local fmt = require("luasnip.extras.fmt").fmt
local fmta = require("luasnip.extras.fmt").fmta
local rep = require("luasnip.extras").rep
---------------
-- Environments
---------------
local tex_utils = {}
tex_utils.in_mathzone = function() -- math context detection
return vim.fn['vimtex#syntax#in_mathzone']() == 1
end
tex_utils.in_text = function()
return not tex_utils.in_mathzone()
end
tex_utils.in_comment = function() -- comment detection
return vim.fn['vimtex#syntax#in_comment']() == 1
end
tex_utils.in_env = function(name) -- generic environment detection
local is_inside = vim.fn['vimtex#env#is_inside'](name)
return (is_inside[1] > 0 and is_inside[2] > 0)
end
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
return sn(nil, i(1))
end
end
-----------
-- Snippets
-----------
return {
s({trig="ali", snippetType="autosnippet"},
fmta(
[[
\begin{align*}
<>
<>%
\end{align*}
]],
{
i(0),
i(1, "."),
}
)
),
s({trig="cases"},
fmta(
[[
\begin{cases}
<>
\end{cases}
]],
{
i(0),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="matb"},
fmta(
[[
\begin{bmatrix}
<>
\end{bmatrix}
]],
{
i(0),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="matp"},
fmta(
[[
\begin{pmatrix}
<>
\end{pmatrix}
]],
{
i(0),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig='([^%a])int', regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\int_{<>}^{<>} <> d<> ]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1, "-\\infty"),
i(2, "\\infty"),
i(4),
i(3, "x"),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig='([^%a])prod', regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\prod_{<>}^{<>} ]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1, "-\\infty"),
i(2, "\\infty"),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig='([^%a])sum', regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\sum_{<>}^{<>} ]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1, "n=0"),
i(2, "N-1"),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig='([^%a])sqrt', regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\sqrt{<>} ]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig='([^%a])log', regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\log_{<>} ]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1, "2"),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig='([^%a])ln', regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\ln ]],
{
f( function(_, snip) return snip.captures[1] end ),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig = '([^%a])ff', regTrig = true, wordTrig = false, snippetType = "autosnippet"},
fmta(
[[<>\frac{<>}{<>} ]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
i(2)
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([^%a])mcal", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\mathcal{<>}]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([^%a])mbb", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\mathbb{<>}]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([^%a])tt", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\text{<>}]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig=".", snippetType="autosnippet"},
fmta(
[[\cdot ]],
{}
),
{condition = tex_utils.in_mathzone}
),
s({trig="$$", snippetType="autosnippet"},
fmta(
[[$<>$]],
{
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([^%a])bm", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\bm{<>}]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="__", wordTrig=false, snippetType="autosnippet"},
fmta(
[[_{<>}]],
{
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="^^", wordTrig=false, snippetType="autosnippet"},
fmta(
[[^{<>}]],
{
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([^%a])oo", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\infty]],
{
f( function(_, snip) return snip.captures[1] end ),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="((", wordTrig=false, snippetType="autosnippet"},
fmta(
[[\mleft( <> \mright)]],
{
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="[[", wordTrig=false, snippetType="autosnippet"},
fmta(
"\\mleft[ <> \\mright]",
{
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="{{", wordTrig=false, snippetType="autosnippet"},
fmta(
"\\mleft\\{ <> \\mright\\}",
{
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="||", wordTrig=false, snippetType="autosnippet"},
fmta(
"\\lvert <> \\rvert ",
{
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([^%a])hat", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\hat{<>}]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([^%a])tld", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\tilde{<>}]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([^%a])bar", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\overline{<>}]],
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([%a])([%d])", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>_<>]],
{
f( function(_, snip) return snip.captures[1] end ),
f( function(_, snip) return snip.captures[2] end ),
}
),
{condition = tex_utils.in_mathzone}
),
s({trig="=>", wordTrig=false, snippetType="autosnippet"},
fmta(
[[\Rightarrow ]],
{}
),
{condition = tex_utils.in_mathzone}
),
s({trig="->", wordTrig=false, snippetType="autosnippet"},
fmta(
[[\rightarrow ]],
{}
),
{condition = tex_utils.in_mathzone}
),
s({trig="([^%a])nab", regTrig=true, wordTrig=false, snippetType="autosnippet"},
fmta(
[[<>\nabla ]],
{
f( function(_, snip) return snip.captures[1] end ),
}
),
{condition = tex_utils.in_mathzone}
),
} -- return