nixos-config/home-manager/modules/neovim/snippets/tex/math.lua

492 lines
12 KiB
Lua

local helpers = require("personal.luasnip-helper-funcs")
local get_visual = helpers.get_visual
-- Math context detection
local tex = {}
tex.in_mathzone = function()
return vim.fn["vimtex#syntax#in_mathzone"]() == 1
end
tex.in_text = function()
return not tex.in_mathzone()
end
-- Return snippet tables
return {
-- SUPERSCRIPT
s(
{ trig = "([%w%)%]%}])'", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>^{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- SUBSCRIPT
s(
{ trig = "([%w%)%]%}]);", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>_{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- SUBSCRIPT AND SUPERSCRIPT
s(
{ trig = "([%w%)%]%}])__", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>^{<>}_{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
i(2),
}),
{ condition = tex.in_mathzone }
),
-- TEXT SUBSCRIPT
s(
{ trig = "sd", snippetType = "autosnippet", wordTrig = false },
fmta("_{\\mathrm{<>}}", { d(1, get_visual) }),
{ condition = tex.in_mathzone }
),
-- SUPERSCRIPT SHORTCUT
-- Places the first alphanumeric character after the trigger into a superscript.
s(
{ trig = '([%w%)%]%}])"([%w])', 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.in_mathzone }
),
-- SUBSCRIPT SHORTCUT
-- Places the first alphanumeric character after the trigger into a subscript.
s(
{ trig = "([%w%)%]%}]):([%w])", 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.in_mathzone }
),
-- EULER'S NUMBER SUPERSCRIPT SHORTCUT
s(
{ trig = "([^%a])ee", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("<>e^{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- ZERO SUBSCRIPT SHORTCUT
s(
{ trig = "([%a%)%]%}])00", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("<>_{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
t("0"),
}),
{ condition = tex.in_mathzone }
),
-- MINUS ONE SUPERSCRIPT SHORTCUT
s(
{ trig = "([%a%)%]%}])11", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("<>_{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
t("-1"),
}),
{ condition = tex.in_mathzone }
),
-- J SUBSCRIPT SHORTCUT (since jk triggers snippet jump forward)
s(
{ trig = "([%a%)%]%}])JJ", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>_{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
t("j"),
}),
{ condition = tex.in_mathzone }
),
-- PLUS SUPERSCRIPT SHORTCUT
s(
{ trig = "([%a%)%]%}])%+%+", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("<>^{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
t("+"),
}),
{ condition = tex.in_mathzone }
),
-- COMPLEMENT SUPERSCRIPT
s(
{ trig = "([%a%)%]%}])CC", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("<>^{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
t("\\complement"),
}),
{ condition = tex.in_mathzone }
),
-- CONJUGATE (STAR) SUPERSCRIPT SHORTCUT
s(
{ trig = "([%a%)%]%}])%*%*", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("<>^{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
t("*"),
}),
{ condition = tex.in_mathzone }
),
-- VECTOR, i.e. \vec
s(
{ trig = "([^%a])vv", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\vec{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- DEFAULT UNIT VECTOR WITH SUBSCRIPT, i.e. \unitvector_{}
s(
{ trig = "([^%a])ue", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\unitvector_{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- UNIT VECTOR WITH HAT, i.e. \uvec{}
s(
{ trig = "([^%a])uv", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\uvec{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- MATRIX, i.e. \vec
s(
{ trig = "([^%a])mt", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\mat{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- FRACTION
s(
{ trig = "([^%a])ff", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\frac{<>}{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
i(2),
}),
{ condition = tex.in_mathzone }
),
-- ANGLE
s(
{ trig = "([^%a])gg", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("<>\\ang{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- ABSOLUTE VALUE
s(
{ trig = "([^%a])aa", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("<>\\abs{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- SQUARE ROOT
s(
{ trig = "([^%\\])sq", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\sqrt{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- BINOMIAL SYMBOL
s(
{ trig = "([^%\\])bnn", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\binom{<>}{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
i(2),
}),
{ condition = tex.in_mathzone }
),
-- LOGARITHM WITH BASE SUBSCRIPT
s(
{ trig = "([^%a%\\])ll", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\log_{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
}),
{ condition = tex.in_mathzone }
),
-- DERIVATIVE with denominator only
s(
{ trig = "([^%a])dV", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\dvOne{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- DERIVATIVE with numerator and denominator
s(
{ trig = "([^%a])dvv", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\dv{<>}{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
i(2),
}),
{ condition = tex.in_mathzone }
),
-- DERIVATIVE with numerator, denominator, and higher-order argument
s(
{ trig = "([^%a])ddv", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\dvN{<>}{<>}{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
i(2),
i(3),
}),
{ condition = tex.in_mathzone }
),
-- PARTIAL DERIVATIVE with denominator only
s(
{ trig = "([^%a])pV", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\pdvOne{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
-- PARTIAL DERIVATIVE with numerator and denominator
s(
{ trig = "([^%a])pvv", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\pdv{<>}{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
i(2),
}),
{ condition = tex.in_mathzone }
),
-- PARTIAL DERIVATIVE with numerator, denominator, and higher-order argument
s(
{ trig = "([^%a])ppv", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\pdvN{<>}{<>}{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
i(2),
i(3),
}),
{ condition = tex.in_mathzone }
),
-- SUM with lower limit
s(
{ trig = "([^%a])sM", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\sum_{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
}),
{ condition = tex.in_mathzone }
),
-- SUM with upper and lower limit
s(
{ trig = "([^%a])smm", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\sum_{<>}^{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
i(2),
}),
{ condition = tex.in_mathzone }
),
-- INTEGRAL with upper and lower limit
s(
{ trig = "([^%a])intt", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\int_{<>}^{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
i(1),
i(2),
}),
{ condition = tex.in_mathzone }
),
-- INTEGRAL from positive to negative infinity
s(
{ trig = "([^%a])intf", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\int_{\\infty}^{\\infty}", {
f(function(_, snip)
return snip.captures[1]
end),
}),
{ condition = tex.in_mathzone }
),
-- BOXED command
s(
{ trig = "([^%a])bb", wordTrig = false, regTrig = true, snippetType = "autosnippet" },
fmta("<>\\boxed{<>}", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
}),
{ condition = tex.in_mathzone }
),
--
-- BEGIN STATIC SNIPPETS
--
-- DIFFERENTIAL, i.e. \diff
s({ trig = "df", snippetType = "autosnippet", priority = 2000, snippetType = "autosnippet" }, {
t("\\diff"),
}, { condition = tex.in_mathzone }),
-- BASIC INTEGRAL SYMBOL, i.e. \int
s({ trig = "in1", snippetType = "autosnippet" }, {
t("\\int"),
}, { condition = tex.in_mathzone }),
-- DOUBLE INTEGRAL, i.e. \iint
s({ trig = "in2", snippetType = "autosnippet" }, {
t("\\iint"),
}, { condition = tex.in_mathzone }),
-- TRIPLE INTEGRAL, i.e. \iiint
s({ trig = "in3", snippetType = "autosnippet" }, {
t("\\iiint"),
}, { condition = tex.in_mathzone }),
-- CLOSED SINGLE INTEGRAL, i.e. \oint
s({ trig = "oi1", snippetType = "autosnippet" }, {
t("\\oint"),
}, { condition = tex.in_mathzone }),
-- CLOSED DOUBLE INTEGRAL, i.e. \oiint
s({ trig = "oi2", snippetType = "autosnippet" }, {
t("\\oiint"),
}, { condition = tex.in_mathzone }),
-- GRADIENT OPERATOR, i.e. \grad
s({ trig = "gdd", snippetType = "autosnippet" }, {
t("\\grad "),
}, { condition = tex.in_mathzone }),
-- CURL OPERATOR, i.e. \curl
s({ trig = "cll", snippetType = "autosnippet" }, {
t("\\curl "),
}, { condition = tex.in_mathzone }),
-- DIVERGENCE OPERATOR, i.e. \divergence
s({ trig = "DI", snippetType = "autosnippet" }, {
t("\\div "),
}, { condition = tex.in_mathzone }),
-- LAPLACIAN OPERATOR, i.e. \laplacian
s({ trig = "laa", snippetType = "autosnippet" }, {
t("\\laplacian "),
}, { condition = tex.in_mathzone }),
-- PARALLEL SYMBOL, i.e. \parallel
s({ trig = "||", snippetType = "autosnippet" }, {
t("\\parallel"),
}),
-- CDOTS, i.e. \cdots
s({ trig = "cdd", snippetType = "autosnippet" }, {
t("\\cdots"),
}),
-- LDOTS, i.e. \ldots
s({ trig = "ldd", snippetType = "autosnippet" }, {
t("\\ldots"),
}),
-- EQUIV, i.e. \equiv
s({ trig = "eqq", snippetType = "autosnippet" }, {
t("\\equiv "),
}),
-- SETMINUS, i.e. \setminus
s({ trig = "stm", snippetType = "autosnippet" }, {
t("\\setminus "),
}),
-- SUBSET, i.e. \subset
s({ trig = "sbb", snippetType = "autosnippet" }, {
t("\\subset "),
}),
-- APPROX, i.e. \approx
s({ trig = "px", snippetType = "autosnippet" }, {
t("\\approx "),
}, { condition = tex.in_mathzone }),
-- PROPTO, i.e. \propto
s({ trig = "pt", snippetType = "autosnippet" }, {
t("\\propto "),
}, { condition = tex.in_mathzone }),
-- COLON, i.e. \colon
s({ trig = "::", snippetType = "autosnippet" }, {
t("\\colon "),
}),
-- IMPLIES, i.e. \implies
s({ trig = ">>", snippetType = "autosnippet" }, {
t("\\implies "),
}),
-- DOT PRODUCT, i.e. \cdot
s({ trig = ",.", snippetType = "autosnippet" }, {
t("\\cdot "),
}),
-- CROSS PRODUCT, i.e. \times
s({ trig = "xx", snippetType = "autosnippet" }, {
t("\\times "),
}),
}