nixos-config/home-manager/modules/neovim/snippets/tex/environments.lua
2024-11-25 11:57:38 -05:00

221 lines
3.4 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
local line_begin = require("luasnip.extras.expand_conditions").line_begin
-- Return snippet tables
return {
-- GENERIC ENVIRONMENT
s(
{ trig = "new", snippetType = "autosnippet" },
fmta(
[[
\begin{<>}
<>
\end{<>}
]],
{
i(1),
d(2, get_visual),
rep(1),
}
),
{ condition = line_begin }
),
s(
{ trig = "def", snippetType = "autosnippet" },
fmta(
[[
\begin{definition}[<>]
<>
\end{definition}
]],
{
i(1),
d(2, get_visual),
}
),
{ condition = line_begin }
),
-- ENVIRONMENT WITH ONE EXTRA ARGUMENT
s(
{ trig = "n2", snippetType = "autosnippet" },
fmta(
[[
\begin{<>}{<>}
<>
\end{<>}
]],
{
i(1),
i(2),
d(3, get_visual),
rep(1),
}
),
{ condition = line_begin }
),
-- ENVIRONMENT WITH TWO EXTRA ARGUMENTS
s(
{ trig = "n3", snippetType = "autosnippet" },
fmta(
[[
\begin{<>}{<>}{<>}
<>
\end{<>}
]],
{
i(1),
i(2),
i(3),
d(4, get_visual),
rep(1),
}
),
{ condition = line_begin }
),
-- TOPIC ENVIRONMENT (my custom tcbtheorem environment)
s(
{ trig = "nt", snippetType = "autosnippet" },
fmta(
[[
\begin{topic}{<>}{<>}
<>
\end{topic}
]],
{
i(1),
i(2),
d(3, get_visual),
}
),
{ condition = line_begin }
),
-- EQUATION
s(
{ trig = "nn", snippetType = "autosnippet" },
fmta(
[[
\begin{equation*}
<>
\end{equation*}
]],
{
i(1),
}
),
{ condition = line_begin }
),
-- SPLIT EQUATION
s(
{ trig = "ss", snippetType = "autosnippet" },
fmta(
[[
\begin{equation*}
\begin{split}
<>
\end{split}
\end{equation*}
]],
{
d(1, get_visual),
}
),
{ condition = line_begin }
),
-- ALIGN
s(
{ trig = "all", snippetType = "autosnippet" },
fmta(
[[
\begin{align*}
<>
\end{align*}
]],
{
i(1),
}
),
{ condition = line_begin }
),
-- ITEMIZE
s(
{ trig = "itt", snippetType = "autosnippet" },
fmta(
[[
\begin{itemize}
\item <>
\end{itemize}
]],
{
i(0),
}
),
{ condition = line_begin }
),
-- ENUMERATE
s(
{ trig = "enn", snippetType = "autosnippet" },
fmta(
[[
\begin{enumerate}
\item <>
\end{enumerate}
]],
{
i(0),
}
)
),
-- INLINE MATH
s(
{ trig = "([^%l])mm", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("<>$<>$", {
f(function(_, snip)
return snip.captures[1]
end),
d(1, get_visual),
})
),
-- INLINE MATH ON NEW LINE
s(
{ trig = "^mm", regTrig = true, wordTrig = false, snippetType = "autosnippet" },
fmta("$<>$", {
i(1),
})
),
-- FIGURE
s(
{ trig = "fig" },
fmta(
[[
\begin{figure}[htb!]
\centering
\includegraphics[width=<>\linewidth]{<>}
\caption{<>}
\label{fig:<>}
\end{figure}
]],
{
i(1),
i(2),
i(3),
i(4),
}
),
{ condition = line_begin }
),
}