├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── demo_media
└── demo.gif
├── lib
├── index.css
├── index.d.ts
├── index.js
├── index.js.map
└── macros.json
├── package-lock.json
├── package.json
├── src
├── index.css
├── index.ts
└── macros.json
└── tsconfig.json
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 jun-sheaf
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | > This hinter is no longer required in CodeMirror 6. Please see [lezer-tex](https://github.com/mu-io/lezer-tex) for a grammar plugin for CodeMirror 6.
2 | > Since CodeMirror 6 is in beta, this repository is deprecated.
3 |
4 | # LaTeX Snippet Hinter for CodeMirror
5 |
6 | This is a hinter function for use with [CodeMirror](https://codemirror.net)'s [showHint.js](https://codemirror.net/doc/manual.html#addon_show-hint) plugin. This is based on [TeXStudio](https://github.com/texstudio-org/texstudio)'s autocompletion mechanism.
7 |
8 | # Features
9 | Pressing `tab` allows users to move to the next argument of a macro. It also highlights user input in the list of matched hints.
10 |
11 |
12 |
13 | # Installation
14 | ```
15 | npm install codemirror-latex-hint codemirror
16 | ```
17 |
18 | # To Use
19 | ```javascript
20 | import LaTeXHint from "codemirror-latex-hint";
21 | import macros from "codemirror-latex-hint/lib/macros.json";
22 | import "codemirror-latex-hint/lib/index.css";
23 |
24 | CodeMirror.registerHelper("hint", "stex", (cm) => LaTeXHint(cm, macros));
25 | ```
26 |
27 | # Customization
28 | The list of macros in the package contains all MathJaX macros and environments. You can import your own list of macros (with the format given in `macros.json`) rather than the packaged one.
29 |
--------------------------------------------------------------------------------
/demo_media/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jrandolf/codemirror-latex-hint/98261442eb9c8f7161f62d28b590ebec5f9f9d49/demo_media/demo.gif
--------------------------------------------------------------------------------
/lib/index.css:
--------------------------------------------------------------------------------
1 | .CodeMirror-hints {
2 | position: absolute;
3 | z-index: 10;
4 | overflow: hidden;
5 | list-style: none;
6 |
7 | margin: 0;
8 | padding: 0;
9 |
10 | border: 1px solid silver;
11 |
12 | background: white;
13 | font-size: 90%;
14 | font-family: "Fira Code";
15 |
16 | max-height: 20em;
17 | overflow-y: auto;
18 | }
19 |
20 | .CodeMirror-hint {
21 | margin: 0;
22 | padding: 0 4px;
23 | border-radius: 2px;
24 | white-space: pre;
25 | color: black;
26 | cursor: pointer;
27 | }
28 | .CodeMirror-hint-entered {
29 | color: #170;
30 | }
31 | .CodeMirror-hint-arg {
32 | color: gray;
33 | }
34 | li.CodeMirror-hint-active {
35 | background: rgb(201, 233, 195);
36 | }
37 |
--------------------------------------------------------------------------------
/lib/index.d.ts:
--------------------------------------------------------------------------------
1 | import CodeMirror from "codemirror";
2 | import "codemirror/addon/hint/show-hint";
3 | interface LaTeXMacro {
4 | text: string;
5 | snippet: string;
6 | }
7 | /**
8 | * The hinter function
9 | * @param cm CodeMirror instance
10 | * @param macros A list of LaTeX macros
11 | */
12 | declare const LaTeXHint: (cm: CodeMirror.Editor, macros: LaTeXMacro[]) => CodeMirror.Hints;
13 | export default LaTeXHint;
14 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const codemirror_1 = __importDefault(require("codemirror"));
7 | require("codemirror/addon/hint/show-hint");
8 | /**
9 | * Binary operation that compares Positions by library order
10 | * @param left Left Position
11 | * @param right Right Position
12 | */
13 | const comparePos = (left, right) => {
14 | if (left.line < right.line) {
15 | return true;
16 | }
17 | else if (left.line > right.line) {
18 | return false;
19 | }
20 | else if (left.ch < right.ch) {
21 | return true;
22 | }
23 | else if (left.ch > right.ch) {
24 | return false;
25 | }
26 | else
27 | return false;
28 | };
29 | /**
30 | * The rendering function for when the hint IS chosen.
31 | * @param cm CodeMirror instance
32 | * @param self The list of LaTeX macros closest to user input
33 | * @param data A LaTeX macro
34 | */
35 | const intelliSense = (cm, self, data) => {
36 | const { text } = data;
37 | const dissectedSnippet = [];
38 | let snipPart = "";
39 | for (let i = 0; i < text.length; i++) {
40 | if (text[i] === "#") {
41 | dissectedSnippet.push(snipPart);
42 | snipPart = "";
43 | i++;
44 | }
45 | else {
46 | snipPart += text[i];
47 | }
48 | }
49 | dissectedSnippet.push(snipPart);
50 | const start = {
51 | line: self.from.line + (dissectedSnippet[0].match(/\n/g) || []).length,
52 | ch: self.from.ch + dissectedSnippet[0].length,
53 | };
54 | let content = [start.ch];
55 | const calculateEnd = () => {
56 | return {
57 | line: start.line + content.length - 1,
58 | ch: content[content.length - 1],
59 | };
60 | };
61 | const checkCursorPosition = (cm) => {
62 | const cursorPos = cm.getCursor();
63 | if (comparePos(calculateEnd(), cursorPos) || comparePos(cursorPos, start)) {
64 | stopSnippet();
65 | }
66 | };
67 | const stopSnippet = () => {
68 | cm.removeKeyMap(moveToNextLocation);
69 | cm.off("change", setCurrentPosition);
70 | cm.off("cursorActivity", checkCursorPosition);
71 | };
72 | const setCurrentPosition = (cm, { from, text, removed }) => {
73 | let origin = from.line - start.line;
74 | if (removed) {
75 | let len = removed.length - 1;
76 | if (len > 0) {
77 | content[origin + len] -= removed[len].length;
78 | content[origin] += content[origin + len] - removed[0].length;
79 | content.splice(origin + 1, len);
80 | }
81 | else {
82 | content[origin] -= removed[0].length;
83 | }
84 | }
85 | if (text) {
86 | let len = text.length - 1;
87 | if (len > 0) {
88 | const diff = content[origin] - from.ch;
89 | content[origin] = content[origin] + text[0].length - diff;
90 | for (let i = 1; i < len; i++) {
91 | content.splice(origin + i, 0, 0);
92 | content[origin + i] = content[origin + i] + text[i].length;
93 | }
94 | content.splice(origin + len, 0, 0);
95 | content[origin + len] = content[origin + len] + text[len].length + diff;
96 | }
97 | else {
98 | content[origin] += text[0].length;
99 | }
100 | }
101 | };
102 | const moveToNextLocation = {
103 | Tab: (cm) => {
104 | if (dissectedSnippet.length > 0) {
105 | let end = calculateEnd();
106 | start.line = end.line + (dissectedSnippet[0].match(/\n/g) || []).length;
107 | start.ch = end.ch + dissectedSnippet[0].length;
108 | content = [start.ch];
109 | cm.setCursor(start);
110 | }
111 | dissectedSnippet.shift();
112 | if (dissectedSnippet.length === 0) {
113 | return stopSnippet();
114 | }
115 | },
116 | };
117 | cm.replaceRange(dissectedSnippet.join(""), data.from || self.from, data.to || self.to, "complete");
118 | cm.setCursor(calculateEnd());
119 | if (text.includes("#1")) {
120 | cm.addKeyMap(moveToNextLocation);
121 | cm.on("change", setCurrentPosition);
122 | cm.on("cursorActivity", checkCursorPosition);
123 | }
124 | dissectedSnippet.shift();
125 | };
126 | /**
127 | * The hinter function
128 | * @param cm CodeMirror instance
129 | * @param macros A list of LaTeX macros
130 | */
131 | const LaTeXHint = (cm, macros) => {
132 | let cur = cm.getCursor();
133 | let token = cm.getTokenAt(cur);
134 | let start = token.start;
135 | let end = cur.ch;
136 | let word = token.string.slice(0, end - start);
137 | if (word === "\\\\") {
138 | cm.state.completionActive.close();
139 | return {
140 | list: [],
141 | from: codemirror_1.default.Pos(cur.line, start),
142 | to: codemirror_1.default.Pos(cur.line, end),
143 | };
144 | }
145 | if (/[^\w\\]/.test(word)) {
146 | word = "";
147 | start = end = cur.ch;
148 | }
149 | const hints = {
150 | list: [],
151 | from: codemirror_1.default.Pos(cur.line, start),
152 | to: codemirror_1.default.Pos(cur.line, end),
153 | };
154 | if (token.type == "tag") {
155 | for (const macro of macros) {
156 | if (!word || macro.text.lastIndexOf(word, 0) === 0) {
157 | hints.list.push({
158 | displayText: macro.text,
159 | text: macro.snippet,
160 | render: (element, data, cur) => {
161 | let entered = element.appendChild(document.createElement("span"));
162 | entered.classList.add("CodeMirror-hint-entered");
163 | entered.textContent = word;
164 | element.appendChild(document.createElement("span")).innerHTML = cur.displayText
165 | .slice(word.length)
166 | .replace(/(\#[1-9])/g, (_, arg) => `${arg}`);
167 | },
168 | hint: intelliSense,
169 | });
170 | }
171 | }
172 | }
173 | return hints;
174 | };
175 | exports.default = LaTeXHint;
176 | //# sourceMappingURL=index.js.map
--------------------------------------------------------------------------------
/lib/index.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/lib/macros.json:
--------------------------------------------------------------------------------
1 | [
2 | { "text": "\\Arrowvert", "snippet": "\\Arrowvert" },
3 | { "text": "\\Bbbk", "snippet": "\\Bbbk" },
4 | { "text": "\\Big", "snippet": "\\Big" },
5 | { "text": "\\Bigg", "snippet": "\\Bigg" },
6 | { "text": "\\Biggl", "snippet": "\\Biggl" },
7 | { "text": "\\Biggr", "snippet": "\\Biggr" },
8 | { "text": "\\Bigl", "snippet": "\\Bigl" },
9 | { "text": "\\Bigm", "snippet": "\\Bigm" },
10 | { "text": "\\Bigr", "snippet": "\\Bigr" },
11 | { "text": "\\Box", "snippet": "\\Box" },
12 | { "text": "\\Bumpeq", "snippet": "\\Bumpeq" },
13 | { "text": "\\Cap", "snippet": "\\Cap" },
14 | { "text": "\\cite[#1]{#2}", "snippet": "\\cite[#1]{#2}" },
15 | { "text": "\\cite{#1}", "snippet": "\\cite{#1}" },
16 | { "text": "\\Cup", "snippet": "\\Cup" },
17 | { "text": "\\DeclareMathOperator{#1}{#2}", "snippet": "\\DeclareMathOperator{#1}{#2}" },
18 | { "text": "\\Delta", "snippet": "\\Delta" },
19 | { "text": "\\Downarrow", "snippet": "\\Downarrow" },
20 | { "text": "\\Finv", "snippet": "\\Finv" },
21 | { "text": "\\Game", "snippet": "\\Game" },
22 | { "text": "\\Gamma", "snippet": "\\Gamma" },
23 | { "text": "\\Im", "snippet": "\\Im" },
24 | { "text": "\\Lambda", "snippet": "\\Lambda" },
25 | { "text": "\\Leftarrow", "snippet": "\\Leftarrow" },
26 | { "text": "\\Leftrightarrow", "snippet": "\\Leftrightarrow" },
27 | { "text": "\\Lleftarrow", "snippet": "\\Lleftarrow" },
28 | { "text": "\\Longleftarrow", "snippet": "\\Longleftarrow" },
29 | { "text": "\\Longleftrightarrow", "snippet": "\\Longleftrightarrow" },
30 | { "text": "\\Longrightarrow", "snippet": "\\Longrightarrow" },
31 | { "text": "\\Lsh", "snippet": "\\Lsh" },
32 | { "text": "\\Omega", "snippet": "\\Omega" },
33 | { "text": "\\Phi", "snippet": "\\Phi" },
34 | { "text": "\\Pi", "snippet": "\\Pi" },
35 | { "text": "\\Pr", "snippet": "\\Pr" },
36 | { "text": "\\Psi", "snippet": "\\Psi" },
37 | { "text": "\\Re", "snippet": "\\Re" },
38 | { "text": "\\Rightarrow", "snippet": "\\Rightarrow" },
39 | { "text": "\\Rrightarrow", "snippet": "\\Rrightarrow" },
40 | { "text": "\\Rsh", "snippet": "\\Rsh" },
41 | { "text": "\\S", "snippet": "\\S" },
42 | { "text": "\\Sigma", "snippet": "\\Sigma" },
43 | { "text": "\\Subset", "snippet": "\\Subset" },
44 | { "text": "\\Supset", "snippet": "\\Supset" },
45 | { "text": "\\TeX", "snippet": "\\TeX" },
46 | { "text": "\\Theta", "snippet": "\\Theta" },
47 | { "text": "\\Uparrow", "snippet": "\\Uparrow" },
48 | { "text": "\\Updownarrow", "snippet": "\\Updownarrow" },
49 | { "text": "\\Upsilon", "snippet": "\\Upsilon" },
50 | { "text": "\\Vdash", "snippet": "\\Vdash" },
51 | { "text": "\\Vert", "snippet": "\\Vert" },
52 | { "text": "\\Vvdash", "snippet": "\\Vvdash" },
53 | { "text": "\\Xi", "snippet": "\\Xi" },
54 | { "text": "\\above", "snippet": "\\above" },
55 | { "text": "\\abovewithdelims", "snippet": "\\abovewithdelims" },
56 | { "text": "\\acute{#1}", "snippet": "\\acute{#1}" },
57 | { "text": "\\aleph", "snippet": "\\aleph" },
58 | { "text": "\\alpha", "snippet": "\\alpha" },
59 | { "text": "\\amalg", "snippet": "\\amalg" },
60 | { "text": "\\angle", "snippet": "\\angle" },
61 | { "text": "\\approx", "snippet": "\\approx" },
62 | { "text": "\\approxeq", "snippet": "\\approxeq" },
63 | { "text": "\\arccos", "snippet": "\\arccos" },
64 | { "text": "\\arcsin", "snippet": "\\arcsin" },
65 | { "text": "\\arctan", "snippet": "\\arctan" },
66 | { "text": "\\arg", "snippet": "\\arg" },
67 | { "text": "\\arrowvert", "snippet": "\\arrowvert" },
68 | { "text": "\\ast", "snippet": "\\ast" },
69 | { "text": "\\asymp", "snippet": "\\asymp" },
70 | { "text": "\\atop", "snippet": "\\atop" },
71 | { "text": "\\atopwithdelims", "snippet": "\\atopwithdelims" },
72 | { "text": "\\backepsilon", "snippet": "\\backepsilon" },
73 | { "text": "\\backprime", "snippet": "\\backprime" },
74 | { "text": "\\backsim", "snippet": "\\backsim" },
75 | { "text": "\\backsimeq", "snippet": "\\backsimeq" },
76 | { "text": "\\backslash", "snippet": "\\backslash" },
77 | { "text": "\\bar{#1}", "snippet": "\\bar{#1}" },
78 | { "text": "\\barwedge", "snippet": "\\barwedge" },
79 | { "text": "\\because", "snippet": "\\because" },
80 | { "text": "\\beta", "snippet": "\\beta" },
81 | { "text": "\\beth", "snippet": "\\beth" },
82 | { "text": "\\between", "snippet": "\\between" },
83 | { "text": "\\bf", "snippet": "\\bf" },
84 | { "text": "\\big", "snippet": "\\big" },
85 | { "text": "\\bigcap", "snippet": "\\bigcap" },
86 | { "text": "\\bigcirc", "snippet": "\\bigcirc" },
87 | { "text": "\\bigcup", "snippet": "\\bigcup" },
88 | { "text": "\\bigg", "snippet": "\\bigg" },
89 | { "text": "\\biggl", "snippet": "\\biggl" },
90 | { "text": "\\biggm", "snippet": "\\biggm" },
91 | { "text": "\\biggr", "snippet": "\\biggr" },
92 | { "text": "\\bigl", "snippet": "\\bigl" },
93 | { "text": "\\bigm", "snippet": "\\bigm" },
94 | { "text": "\\bigodot", "snippet": "\\bigodot" },
95 | { "text": "\\bigoplus", "snippet": "\\bigoplus" },
96 | { "text": "\\bigotimes", "snippet": "\\bigotimes" },
97 | { "text": "\\bigr\\}", "snippet": "\\bigr\\}" },
98 | { "text": "\\bigsqcup", "snippet": "\\bigsqcup" },
99 | { "text": "\\bigstar", "snippet": "\\bigstar" },
100 | { "text": "\\bigtriangledown", "snippet": "\\bigtriangledown" },
101 | { "text": "\\bigtriangleup", "snippet": "\\bigtriangleup" },
102 | { "text": "\\biguplus", "snippet": "\\biguplus" },
103 | { "text": "\\bigvee", "snippet": "\\bigvee" },
104 | { "text": "\\bigwedge", "snippet": "\\bigwedge" },
105 | { "text": "\\binom{#1}{#2}", "snippet": "\\binom{#1}{#2}" },
106 | { "text": "\\blacklozenge", "snippet": "\\blacklozenge" },
107 | { "text": "\\blacksquare", "snippet": "\\blacksquare" },
108 | { "text": "\\blacktriangle", "snippet": "\\blacktriangle" },
109 | { "text": "\\blacktriangledown", "snippet": "\\blacktriangledown" },
110 | { "text": "\\blacktriangleleft", "snippet": "\\blacktriangleleft" },
111 | { "text": "\\blacktriangleright", "snippet": "\\blacktriangleright" },
112 | { "text": "\\bmod", "snippet": "\\bmod" },
113 | { "text": "\\boldsymbol{#1}", "snippet": "\\boldsymbol{#1}" },
114 | { "text": "\\bot", "snippet": "\\bot" },
115 | { "text": "\\bowtie", "snippet": "\\bowtie" },
116 | { "text": "\\boxdot", "snippet": "\\boxdot" },
117 | { "text": "\\boxed{#1}", "snippet": "\\boxed{#1}" },
118 | { "text": "\\boxminus", "snippet": "\\boxminus" },
119 | { "text": "\\boxplus", "snippet": "\\boxplus" },
120 | { "text": "\\boxtimes", "snippet": "\\boxtimes" },
121 | { "text": "\\brace", "snippet": "\\brace" },
122 | { "text": "\\bracevert", "snippet": "\\bracevert" },
123 | { "text": "\\brack", "snippet": "\\brack" },
124 | { "text": "\\breve{#1}", "snippet": "\\breve{#1}" },
125 | { "text": "\\buildrel", "snippet": "\\buildrel" },
126 | { "text": "\\bullet", "snippet": "\\bullet" },
127 | { "text": "\\bumpeq", "snippet": "\\bumpeq" },
128 | { "text": "\\cal", "snippet": "\\cal" },
129 | { "text": "\\cap", "snippet": "\\cap" },
130 | { "text": "\\cases{#1}", "snippet": "\\cases{#1}" },
131 | { "text": "\\cdot", "snippet": "\\cdot" },
132 | { "text": "\\cdotp", "snippet": "\\cdotp" },
133 | { "text": "\\cdots", "snippet": "\\cdots" },
134 | { "text": "\\centerdot", "snippet": "\\centerdot" },
135 | { "text": "\\cfrac{#1}{#2}", "snippet": "\\cfrac{#1}{#2}" },
136 | { "text": "\\check{#1}", "snippet": "\\check{#1}" },
137 | { "text": "\\checkmark", "snippet": "\\checkmark" },
138 | { "text": "\\chi", "snippet": "\\chi" },
139 | { "text": "\\choose", "snippet": "\\choose" },
140 | { "text": "\\circ", "snippet": "\\circ" },
141 | { "text": "\\circeq", "snippet": "\\circeq" },
142 | { "text": "\\circlearrowleft", "snippet": "\\circlearrowleft" },
143 | { "text": "\\circlearrowright", "snippet": "\\circlearrowright" },
144 | { "text": "\\circledS", "snippet": "\\circledS" },
145 | { "text": "\\circledast", "snippet": "\\circledast" },
146 | { "text": "\\circledcirc", "snippet": "\\circledcirc" },
147 | { "text": "\\circleddash", "snippet": "\\circleddash" },
148 | { "text": "\\clubsuit", "snippet": "\\clubsuit" },
149 | { "text": "\\colon", "snippet": "\\colon" },
150 | { "text": "\\complement", "snippet": "\\complement" },
151 | { "text": "\\cong", "snippet": "\\cong" },
152 | { "text": "\\coprod", "snippet": "\\coprod" },
153 | { "text": "\\cos", "snippet": "\\cos" },
154 | { "text": "\\cosh", "snippet": "\\cosh" },
155 | { "text": "\\cot", "snippet": "\\cot" },
156 | { "text": "\\coth", "snippet": "\\coth" },
157 | { "text": "\\cr", "snippet": "\\cr" },
158 | { "text": "\\csc", "snippet": "\\csc" },
159 | { "text": "\\cup", "snippet": "\\cup" },
160 | { "text": "\\curlyeqprec", "snippet": "\\curlyeqprec" },
161 | { "text": "\\curlyeqsucc", "snippet": "\\curlyeqsucc" },
162 | { "text": "\\curlyvee", "snippet": "\\curlyvee" },
163 | { "text": "\\curlywedge", "snippet": "\\curlywedge" },
164 | { "text": "\\curvearrowleft", "snippet": "\\curvearrowleft" },
165 | { "text": "\\curvearrowright", "snippet": "\\curvearrowright" },
166 | { "text": "\\dagger", "snippet": "\\dagger" },
167 | { "text": "\\daleth", "snippet": "\\daleth" },
168 | { "text": "\\dashleftarrow", "snippet": "\\dashleftarrow" },
169 | { "text": "\\dashrightarrow", "snippet": "\\dashrightarrow" },
170 | { "text": "\\dashv", "snippet": "\\dashv" },
171 | { "text": "\\dbinom{#1}{#2}", "snippet": "\\dbinom{#1}{#2}" },
172 | { "text": "\\ddagger", "snippet": "\\ddagger" },
173 | { "text": "\\ddddot{#1}", "snippet": "\\ddddot{#1}" },
174 | { "text": "\\dddot{#1}", "snippet": "\\dddot{#1}" },
175 | { "text": "\\ddot{#1}", "snippet": "\\ddot{#1}" },
176 | { "text": "\\ddots", "snippet": "\\ddots" },
177 | { "text": "\\def", "snippet": "\\def" },
178 | { "text": "\\deg", "snippet": "\\deg" },
179 | { "text": "\\delta", "snippet": "\\delta" },
180 | { "text": "\\det", "snippet": "\\det" },
181 | { "text": "\\dfrac{#1}{#2}", "snippet": "\\dfrac{#1}{#2}" },
182 | { "text": "\\diagdown", "snippet": "\\diagdown" },
183 | { "text": "\\diagup", "snippet": "\\diagup" },
184 | { "text": "\\diamond", "snippet": "\\diamond" },
185 | { "text": "\\diamondsuit", "snippet": "\\diamondsuit" },
186 | { "text": "\\digamma", "snippet": "\\digamma" },
187 | { "text": "\\dim", "snippet": "\\dim" },
188 | { "text": "\\displaylines", "snippet": "\\displaylines" },
189 | { "text": "\\displaystyle", "snippet": "\\displaystyle" },
190 | { "text": "\\div", "snippet": "\\div" },
191 | { "text": "\\divideontimes", "snippet": "\\divideontimes" },
192 | { "text": "\\dot{#1}", "snippet": "\\dot{#1}" },
193 | { "text": "\\doteq", "snippet": "\\doteq" },
194 | { "text": "\\doteqdot", "snippet": "\\doteqdot" },
195 | { "text": "\\dotplus", "snippet": "\\dotplus" },
196 | { "text": "\\dots", "snippet": "\\dots" },
197 | { "text": "\\dotsb", "snippet": "\\dotsb" },
198 | { "text": "\\dotsc", "snippet": "\\dotsc" },
199 | { "text": "\\dotsi", "snippet": "\\dotsi" },
200 | { "text": "\\dotsm", "snippet": "\\dotsm" },
201 | { "text": "\\dotso", "snippet": "\\dotso" },
202 | { "text": "\\doublebarwedge", "snippet": "\\doublebarwedge" },
203 | { "text": "\\downarrow", "snippet": "\\downarrow" },
204 | { "text": "\\downdownarrows", "snippet": "\\downdownarrows" },
205 | { "text": "\\downharpoonleft", "snippet": "\\downharpoonleft" },
206 | { "text": "\\downharpoonright", "snippet": "\\downharpoonright" },
207 | { "text": "\\ell", "snippet": "\\ell" },
208 | { "text": "\\emptyset", "snippet": "\\emptyset" },
209 | { "text": "\\enspace", "snippet": "\\enspace" },
210 | { "text": "\\epsilon", "snippet": "\\epsilon" },
211 | { "text": "\\eqalign{#1}", "snippet": "\\eqalign{#1}" },
212 | { "text": "\\eqalignno{#1}", "snippet": "\\eqalignno{#1}" },
213 | { "text": "\\eqcirc", "snippet": "\\eqcirc" },
214 | { "text": "\\eqref{#1}", "snippet": "\\eqref{#1}" },
215 | { "text": "\\eqsim", "snippet": "\\eqsim" },
216 | { "text": "\\eqslantgtr", "snippet": "\\eqslantgtr" },
217 | { "text": "\\eqslantless", "snippet": "\\eqslantless" },
218 | { "text": "\\equiv", "snippet": "\\equiv" },
219 | { "text": "\\eta", "snippet": "\\eta" },
220 | { "text": "\\eth", "snippet": "\\eth" },
221 | { "text": "\\exists", "snippet": "\\exists" },
222 | { "text": "\\exp", "snippet": "\\exp" },
223 | { "text": "\\fallingdotseq", "snippet": "\\fallingdotseq" },
224 | { "text": "\\flat", "snippet": "\\flat" },
225 | { "text": "\\forall", "snippet": "\\forall" },
226 | { "text": "\\frown", "snippet": "\\frown" },
227 | { "text": "\\gamma", "snippet": "\\gamma" },
228 | { "text": "\\gcd", "snippet": "\\gcd" },
229 | { "text": "\\ge", "snippet": "\\ge" },
230 | { "text": "\\geq", "snippet": "\\geq" },
231 | { "text": "\\geqq", "snippet": "\\geqq" },
232 | { "text": "\\geqslant", "snippet": "\\geqslant" },
233 | { "text": "\\gets", "snippet": "\\gets" },
234 | { "text": "\\gg", "snippet": "\\gg" },
235 | { "text": "\\ggg", "snippet": "\\ggg" },
236 | { "text": "\\gimel", "snippet": "\\gimel" },
237 | { "text": "\\gnapprox", "snippet": "\\gnapprox" },
238 | { "text": "\\gneq", "snippet": "\\gneq" },
239 | { "text": "\\gneqq", "snippet": "\\gneqq" },
240 | { "text": "\\gnsim", "snippet": "\\gnsim" },
241 | { "text": "\\grave{#1}", "snippet": "\\grave{#1}" },
242 | { "text": "\\gtrapprox", "snippet": "\\gtrapprox" },
243 | { "text": "\\gtrdot", "snippet": "\\gtrdot" },
244 | { "text": "\\gtreqless", "snippet": "\\gtreqless" },
245 | { "text": "\\gtreqqless", "snippet": "\\gtreqqless" },
246 | { "text": "\\gtrless", "snippet": "\\gtrless" },
247 | { "text": "\\gtrsim", "snippet": "\\gtrsim" },
248 | { "text": "\\gvertneqq", "snippet": "\\gvertneqq" },
249 | { "text": "\\hat{#1}", "snippet": "\\hat{#1}" },
250 | { "text": "\\hbar", "snippet": "\\hbar" },
251 | { "text": "\\hbox", "snippet": "\\hbox" },
252 | { "text": "\\heartsuit", "snippet": "\\heartsuit" },
253 | { "text": "\\hfil", "snippet": "\\hfil" },
254 | { "text": "\\hfill", "snippet": "\\hfill" },
255 | { "text": "\\hom", "snippet": "\\hom" },
256 | { "text": "\\hookleftarrow", "snippet": "\\hookleftarrow" },
257 | { "text": "\\hookrightarrow", "snippet": "\\hookrightarrow" },
258 | { "text": "\\hphantom{#1}", "snippet": "\\hphantom{#1}" },
259 | { "text": "\\hskip", "snippet": "\\hskip" },
260 | { "text": "\\hslash", "snippet": "\\hslash" },
261 | { "text": "\\idotsint", "snippet": "\\idotsint" },
262 | { "text": "\\iff", "snippet": "\\iff" },
263 | { "text": "\\iiiint", "snippet": "\\iiiint" },
264 | { "text": "\\iiint", "snippet": "\\iiint" },
265 | { "text": "\\iint", "snippet": "\\iint" },
266 | { "text": "\\imath", "snippet": "\\imath" },
267 | { "text": "\\impliedby", "snippet": "\\impliedby" },
268 | { "text": "\\implies", "snippet": "\\implies" },
269 | { "text": "\\in", "snippet": "\\in" },
270 | { "text": "\\inf", "snippet": "\\inf" },
271 | { "text": "\\infty", "snippet": "\\infty" },
272 | { "text": "\\injlim", "snippet": "\\injlim" },
273 | { "text": "\\int\\limits_{#1}^{#2}", "snippet": "\\int\\limits_{#1}^{#2}" },
274 | { "text": "\\intercal", "snippet": "\\intercal" },
275 | { "text": "\\iota", "snippet": "\\iota" },
276 | { "text": "\\it", "snippet": "\\it" },
277 | { "text": "\\jmath", "snippet": "\\jmath" },
278 | { "text": "\\kappa", "snippet": "\\kappa" },
279 | { "text": "\\ker", "snippet": "\\ker" },
280 | { "text": "\\kern", "snippet": "\\kern" },
281 | { "text": "\\lVert", "snippet": "\\lVert" },
282 | { "text": "\\lambda", "snippet": "\\lambda" },
283 | { "text": "\\land", "snippet": "\\land" },
284 | { "text": "\\langle", "snippet": "\\langle" },
285 | { "text": "\\lbrace", "snippet": "\\lbrace" },
286 | { "text": "\\lbrack", "snippet": "\\lbrack" },
287 | { "text": "\\lceil", "snippet": "\\lceil" },
288 | { "text": "\\ldotp", "snippet": "\\ldotp" },
289 | { "text": "\\ldots", "snippet": "\\ldots" },
290 | { "text": "\\le", "snippet": "\\le" },
291 | { "text": "\\left", "snippet": "\\left" },
292 | { "text": "\\leftarrow", "snippet": "\\leftarrow" },
293 | { "text": "\\leftarrowtail", "snippet": "\\leftarrowtail" },
294 | { "text": "\\leftharpoondown", "snippet": "\\leftharpoondown" },
295 | { "text": "\\leftharpoonup", "snippet": "\\leftharpoonup" },
296 | { "text": "\\leftleftarrows", "snippet": "\\leftleftarrows" },
297 | { "text": "\\leftrightarrow", "snippet": "\\leftrightarrow" },
298 | { "text": "\\leftrightarrows", "snippet": "\\leftrightarrows" },
299 | { "text": "\\leftrightharpoons", "snippet": "\\leftrightharpoons" },
300 | { "text": "\\leftrightsquigarrow", "snippet": "\\leftrightsquigarrow" },
301 | { "text": "\\leftroot{#1}", "snippet": "\\leftroot{#1}" },
302 | { "text": "\\leftthreetimes", "snippet": "\\leftthreetimes" },
303 | { "text": "\\leq", "snippet": "\\leq" },
304 | { "text": "\\leqalignno{#1}", "snippet": "\\leqalignno{#1}" },
305 | { "text": "\\leqq", "snippet": "\\leqq" },
306 | { "text": "\\leqslant", "snippet": "\\leqslant" },
307 | { "text": "\\lessapprox", "snippet": "\\lessapprox" },
308 | { "text": "\\lessdot", "snippet": "\\lessdot" },
309 | { "text": "\\lesseqgtr", "snippet": "\\lesseqgtr" },
310 | { "text": "\\lesseqqgtr", "snippet": "\\lesseqqgtr" },
311 | { "text": "\\lessgtr", "snippet": "\\lessgtr" },
312 | { "text": "\\lesssim", "snippet": "\\lesssim" },
313 | { "text": "\\let{#1}{#2}", "snippet": "\\let{#1}{#2}" },
314 | { "text": "\\lfloor", "snippet": "\\lfloor" },
315 | { "text": "\\lg", "snippet": "\\lg" },
316 | { "text": "\\lgroup", "snippet": "\\lgroup" },
317 | { "text": "\\lhd", "snippet": "\\lhd" },
318 | { "text": "\\lim", "snippet": "\\lim" },
319 | { "text": "\\liminf", "snippet": "\\liminf" },
320 | { "text": "\\limits_{#1}^{#b}", "snippet": "\\limits_{#1}^{#b}" },
321 | { "text": "\\limsup", "snippet": "\\limsup" },
322 | { "text": "\\ll", "snippet": "\\ll" },
323 | { "text": "\\llap{#1}", "snippet": "\\llap{#1}" },
324 | { "text": "\\llcorner", "snippet": "\\llcorner" },
325 | { "text": "\\lll", "snippet": "\\lll" },
326 | { "text": "\\lmoustache", "snippet": "\\lmoustache" },
327 | { "text": "\\ln", "snippet": "\\ln" },
328 | { "text": "\\lnapprox", "snippet": "\\lnapprox" },
329 | { "text": "\\lneq", "snippet": "\\lneq" },
330 | { "text": "\\lneqq", "snippet": "\\lneqq" },
331 | { "text": "\\lnot", "snippet": "\\lnot" },
332 | { "text": "\\lnsim", "snippet": "\\lnsim" },
333 | { "text": "\\log", "snippet": "\\log" },
334 | { "text": "\\longleftarrow", "snippet": "\\longleftarrow" },
335 | { "text": "\\longleftrightarrow", "snippet": "\\longleftrightarrow" },
336 | { "text": "\\longmapsto", "snippet": "\\longmapsto" },
337 | { "text": "\\longrightarrow", "snippet": "\\longrightarrow" },
338 | { "text": "\\looparrowleft", "snippet": "\\looparrowleft" },
339 | { "text": "\\looparrowright", "snippet": "\\looparrowright" },
340 | { "text": "\\lor", "snippet": "\\lor" },
341 | { "text": "\\lower", "snippet": "\\lower" },
342 | { "text": "\\lozenge", "snippet": "\\lozenge" },
343 | { "text": "\\lrcorner", "snippet": "\\lrcorner" },
344 | { "text": "\\ltimes", "snippet": "\\ltimes" },
345 | { "text": "\\lvert", "snippet": "\\lvert" },
346 | { "text": "\\lvertneqq", "snippet": "\\lvertneqq" },
347 | { "text": "\\maltese", "snippet": "\\maltese" },
348 | { "text": "\\mapsto", "snippet": "\\mapsto" },
349 | { "text": "\\mathbb{#1}", "snippet": "\\mathbb{#1}" },
350 | { "text": "\\mathbf{#1}", "snippet": "\\mathbf{#1}" },
351 | { "text": "\\mathbin", "snippet": "\\mathbin" },
352 | { "text": "\\mathchoice", "snippet": "\\mathchoice" },
353 | { "text": "\\mathclose", "snippet": "\\mathclose" },
354 | { "text": "\\mathfrak{#1}", "snippet": "\\mathfrak{#1}" },
355 | { "text": "\\mathinner", "snippet": "\\mathinner" },
356 | { "text": "\\mathop", "snippet": "\\mathop" },
357 | { "text": "\\mathopen", "snippet": "\\mathopen" },
358 | { "text": "\\mathord", "snippet": "\\mathord" },
359 | { "text": "\\mathpunct", "snippet": "\\mathpunct" },
360 | { "text": "\\mathrel", "snippet": "\\mathrel" },
361 | { "text": "\\mathstrut", "snippet": "\\mathstrut" },
362 | { "text": "\\matrix{#1}", "snippet": "\\matrix{#1}" },
363 | { "text": "\\max", "snippet": "\\max" },
364 | { "text": "\\measuredangle", "snippet": "\\measuredangle" },
365 | { "text": "\\mho", "snippet": "\\mho" },
366 | { "text": "\\mid", "snippet": "\\mid" },
367 | { "text": "\\middle", "snippet": "\\middle" },
368 | { "text": "\\min", "snippet": "\\min" },
369 | { "text": "\\mit", "snippet": "\\mit" },
370 | { "text": "\\mkern", "snippet": "\\mkern" },
371 | { "text": "\\mod", "snippet": "\\mod" },
372 | { "text": "\\models", "snippet": "\\models" },
373 | { "text": "\\moveleft", "snippet": "\\moveleft" },
374 | { "text": "\\moveright", "snippet": "\\moveright" },
375 | { "text": "\\mp", "snippet": "\\mp" },
376 | { "text": "\\mskip", "snippet": "\\mskip" },
377 | { "text": "\\mspace{#1}", "snippet": "\\mspace{#1}" },
378 | { "text": "\\mu", "snippet": "\\mu" },
379 | { "text": "\\multimap", "snippet": "\\multimap" },
380 | { "text": "\\nLeftarrow", "snippet": "\\nLeftarrow" },
381 | { "text": "\\nLeftrightarrow", "snippet": "\\nLeftrightarrow" },
382 | { "text": "\\nRightarrow", "snippet": "\\nRightarrow" },
383 | { "text": "\\nVDash", "snippet": "\\nVDash" },
384 | { "text": "\\nVdash", "snippet": "\\nVdash" },
385 | { "text": "\\nabla", "snippet": "\\nabla" },
386 | { "text": "\\natural", "snippet": "\\natural" },
387 | { "text": "\\ncong", "snippet": "\\ncong" },
388 | { "text": "\\ne", "snippet": "\\ne" },
389 | { "text": "\\nearrow", "snippet": "\\nearrow" },
390 | { "text": "\\neg", "snippet": "\\neg" },
391 | { "text": "\\negmedspace", "snippet": "\\negmedspace" },
392 | { "text": "\\negthickspace", "snippet": "\\negthickspace" },
393 | { "text": "\\negthinspace", "snippet": "\\negthinspace" },
394 | { "text": "\\neq", "snippet": "\\neq" },
395 | { "text": "\\nexists", "snippet": "\\nexists" },
396 | { "text": "\\ngeq", "snippet": "\\ngeq" },
397 | { "text": "\\ngeqq", "snippet": "\\ngeqq" },
398 | { "text": "\\ngeqslant", "snippet": "\\ngeqslant" },
399 | { "text": "\\ngtr", "snippet": "\\ngtr" },
400 | { "text": "\\ni", "snippet": "\\ni" },
401 | { "text": "\\nleftarrow", "snippet": "\\nleftarrow" },
402 | { "text": "\\nleftrightarrow", "snippet": "\\nleftrightarrow" },
403 | { "text": "\\nleq", "snippet": "\\nleq" },
404 | { "text": "\\nleqq", "snippet": "\\nleqq" },
405 | { "text": "\\nleqslant", "snippet": "\\nleqslant" },
406 | { "text": "\\nless", "snippet": "\\nless" },
407 | { "text": "\\nmid", "snippet": "\\nmid" },
408 | { "text": "\\nolimits_{#1}^{#2}", "snippet": "\\nolimits_{#1}^{#2}" },
409 | { "text": "\\not", "snippet": "\\not" },
410 | { "text": "\\notag", "snippet": "\\notag" },
411 | { "text": "\\notin", "snippet": "\\notin" },
412 | { "text": "\\nparallel", "snippet": "\\nparallel" },
413 | { "text": "\\nprec", "snippet": "\\nprec" },
414 | { "text": "\\npreceq", "snippet": "\\npreceq" },
415 | { "text": "\\nrightarrow", "snippet": "\\nrightarrow" },
416 | { "text": "\\nshortmid", "snippet": "\\nshortmid" },
417 | { "text": "\\nshortparallel", "snippet": "\\nshortparallel" },
418 | { "text": "\\nsim", "snippet": "\\nsim" },
419 | { "text": "\\nsubseteq", "snippet": "\\nsubseteq" },
420 | { "text": "\\nsubseteqq", "snippet": "\\nsubseteqq" },
421 | { "text": "\\nsucc", "snippet": "\\nsucc" },
422 | { "text": "\\nsucceq", "snippet": "\\nsucceq" },
423 | { "text": "\\nsupseteq", "snippet": "\\nsupseteq" },
424 | { "text": "\\nsupseteqq", "snippet": "\\nsupseteqq" },
425 | { "text": "\\ntriangleleft", "snippet": "\\ntriangleleft" },
426 | { "text": "\\ntrianglelefteq", "snippet": "\\ntrianglelefteq" },
427 | { "text": "\\ntriangleright", "snippet": "\\ntriangleright" },
428 | { "text": "\\ntrianglerighteq", "snippet": "\\ntrianglerighteq" },
429 | { "text": "\\nu", "snippet": "\\nu" },
430 | { "text": "\\nvDash", "snippet": "\\nvDash" },
431 | { "text": "\\nvdash", "snippet": "\\nvdash" },
432 | { "text": "\\nwarrow", "snippet": "\\nwarrow" },
433 | { "text": "\\odot", "snippet": "\\odot" },
434 | { "text": "\\oint", "snippet": "\\oint" },
435 | { "text": "\\oldstyle", "snippet": "\\oldstyle" },
436 | { "text": "\\omega", "snippet": "\\omega" },
437 | { "text": "\\ominus", "snippet": "\\ominus" },
438 | { "text": "\\operatorname{#1}", "snippet": "\\operatorname{#1}" },
439 | { "text": "\\oplus", "snippet": "\\oplus" },
440 | { "text": "\\oslash", "snippet": "\\oslash" },
441 | { "text": "\\otimes", "snippet": "\\otimes" },
442 | { "text": "\\over", "snippet": "\\over" },
443 | { "text": "\\overbrace{#1}", "snippet": "\\overbrace{#1}" },
444 | { "text": "\\overleftarrow{#1}", "snippet": "\\overleftarrow{#1}" },
445 | { "text": "\\overleftrightarrow{#1}", "snippet": "\\overleftrightarrow{#1}" },
446 | { "text": "\\overline{#1}", "snippet": "\\overline{#1}" },
447 | { "text": "\\overrightarrow{#1}", "snippet": "\\overrightarrow{#1}" },
448 | { "text": "\\overset{#1}{#2}", "snippet": "\\overset{#1}{#2}" },
449 | { "text": "\\overwithdelims", "snippet": "\\overwithdelims" },
450 | { "text": "\\owns", "snippet": "\\owns" },
451 | { "text": "\\parallel", "snippet": "\\parallel" },
452 | { "text": "\\partial", "snippet": "\\partial" },
453 | { "text": "\\perp", "snippet": "\\perp" },
454 | { "text": "\\phantom{#1}", "snippet": "\\phantom{#1}" },
455 | { "text": "\\phi", "snippet": "\\phi" },
456 | { "text": "\\pi", "snippet": "\\pi" },
457 | { "text": "\\pitchfork", "snippet": "\\pitchfork" },
458 | { "text": "\\pm", "snippet": "\\pm" },
459 | { "text": "\\pmatrix{#1}", "snippet": "\\pmatrix{#1}" },
460 | { "text": "\\pmb{#1}", "snippet": "\\pmb{#1}" },
461 | { "text": "\\pmod", "snippet": "\\pmod" },
462 | { "text": "\\pod", "snippet": "\\pod" },
463 | { "text": "\\prec", "snippet": "\\prec" },
464 | { "text": "\\precapprox", "snippet": "\\precapprox" },
465 | { "text": "\\preccurlyeq", "snippet": "\\preccurlyeq" },
466 | { "text": "\\preceq", "snippet": "\\preceq" },
467 | { "text": "\\precnapprox", "snippet": "\\precnapprox" },
468 | { "text": "\\precneqq", "snippet": "\\precneqq" },
469 | { "text": "\\precnsim", "snippet": "\\precnsim" },
470 | { "text": "\\precsim", "snippet": "\\precsim" },
471 | { "text": "\\prime", "snippet": "\\prime" },
472 | { "text": "\\prod\\limits_{#1}^{#2}", "snippet": "\\prod\\limits_{#1}^{#2}" },
473 | { "text": "\\projlim", "snippet": "\\projlim" },
474 | { "text": "\\propto", "snippet": "\\propto" },
475 | { "text": "\\psi", "snippet": "\\psi" },
476 | { "text": "\\qquad", "snippet": "\\qquad" },
477 | { "text": "\\quad", "snippet": "\\quad" },
478 | { "text": "\\rVert", "snippet": "\\rVert" },
479 | { "text": "\\raise", "snippet": "\\raise" },
480 | { "text": "\\rangle", "snippet": "\\rangle" },
481 | { "text": "\\rbrace", "snippet": "\\rbrace" },
482 | { "text": "\\rbrack", "snippet": "\\rbrack" },
483 | { "text": "\\rceil", "snippet": "\\rceil" },
484 | { "text": "\\rfloor", "snippet": "\\rfloor" },
485 | { "text": "\\rgroup", "snippet": "\\rgroup" },
486 | { "text": "\\rhd", "snippet": "\\rhd" },
487 | { "text": "\\rho", "snippet": "\\rho" },
488 | { "text": "\\right", "snippet": "\\right" },
489 | { "text": "\\rightarrow", "snippet": "\\rightarrow" },
490 | { "text": "\\rightarrowtail", "snippet": "\\rightarrowtail" },
491 | { "text": "\\rightharpoondown", "snippet": "\\rightharpoondown" },
492 | { "text": "\\rightharpoonup", "snippet": "\\rightharpoonup" },
493 | { "text": "\\rightleftarrows", "snippet": "\\rightleftarrows" },
494 | { "text": "\\rightleftharpoons", "snippet": "\\rightleftharpoons" },
495 | { "text": "\\rightrightarrows", "snippet": "\\rightrightarrows" },
496 | { "text": "\\rightsquigarrow", "snippet": "\\rightsquigarrow" },
497 | { "text": "\\rightthreetimes", "snippet": "\\rightthreetimes" },
498 | { "text": "\\risingdotseq", "snippet": "\\risingdotseq" },
499 | { "text": "\\rlap{#1}", "snippet": "\\rlap{#1}" },
500 | { "text": "\\rm", "snippet": "\\rm" },
501 | { "text": "\\rmoustache", "snippet": "\\rmoustache" },
502 | { "text": "\\root #1 \\of #2", "snippet": "\\root #1 \\of #2" },
503 | { "text": "\\rtimes", "snippet": "\\rtimes" },
504 | { "text": "\\rvert", "snippet": "\\rvert" },
505 | { "text": "\\scriptscriptstyle", "snippet": "\\scriptscriptstyle" },
506 | { "text": "\\scriptstyle", "snippet": "\\scriptstyle" },
507 | { "text": "\\searrow", "snippet": "\\searrow" },
508 | { "text": "\\sec", "snippet": "\\sec" },
509 | { "text": "\\setminus", "snippet": "\\setminus" },
510 | { "text": "\\sharp", "snippet": "\\sharp" },
511 | { "text": "\\shortmid", "snippet": "\\shortmid" },
512 | { "text": "\\shortparallel", "snippet": "\\shortparallel" },
513 | { "text": "\\sideset{#1}{#2}{#3}", "snippet": "\\sideset{#1}{#2}{#3}" },
514 | { "text": "\\sigma", "snippet": "\\sigma" },
515 | { "text": "\\sim", "snippet": "\\sim" },
516 | { "text": "\\simeq", "snippet": "\\simeq" },
517 | { "text": "\\sin", "snippet": "\\sin" },
518 | { "text": "\\sinh", "snippet": "\\sinh" },
519 | { "text": "\\skew{#1}{#2}{#3}", "snippet": "\\skew{#1}{#2}{#3}" },
520 | { "text": "\\smallfrown", "snippet": "\\smallfrown" },
521 | { "text": "\\smallint", "snippet": "\\smallint" },
522 | { "text": "\\smallsetminus", "snippet": "\\smallsetminus" },
523 | { "text": "\\smallsmile", "snippet": "\\smallsmile" },
524 | { "text": "\\smash{#1}", "snippet": "\\smash{#1}" },
525 | { "text": "\\smile", "snippet": "\\smile" },
526 | { "text": "\\space", "snippet": "\\space" },
527 | { "text": "\\spadesuit", "snippet": "\\spadesuit" },
528 | { "text": "\\sphericalangle", "snippet": "\\sphericalangle" },
529 | { "text": "\\sqcap", "snippet": "\\sqcap" },
530 | { "text": "\\sqcup", "snippet": "\\sqcup" },
531 | { "text": "\\sqrt{#1}", "snippet": "\\sqrt{#1}" },
532 | { "text": "\\sqsubset", "snippet": "\\sqsubset" },
533 | { "text": "\\sqsubseteq", "snippet": "\\sqsubseteq" },
534 | { "text": "\\sqsupset", "snippet": "\\sqsupset" },
535 | { "text": "\\sqsupseteq", "snippet": "\\sqsupseteq" },
536 | { "text": "\\square", "snippet": "\\square" },
537 | { "text": "\\star", "snippet": "\\star" },
538 | { "text": "\\strut", "snippet": "\\strut" },
539 | { "text": "\\subset", "snippet": "\\subset" },
540 | { "text": "\\subseteq", "snippet": "\\subseteq" },
541 | { "text": "\\subseteqq", "snippet": "\\subseteqq" },
542 | { "text": "\\subsetneq", "snippet": "\\subsetneq" },
543 | { "text": "\\subsetneqq", "snippet": "\\subsetneqq" },
544 | { "text": "\\substack{#1}", "snippet": "\\substack{#1}" },
545 | { "text": "\\succ", "snippet": "\\succ" },
546 | { "text": "\\succapprox", "snippet": "\\succapprox" },
547 | { "text": "\\succcurlyeq", "snippet": "\\succcurlyeq" },
548 | { "text": "\\succeq", "snippet": "\\succeq" },
549 | { "text": "\\succnapprox", "snippet": "\\succnapprox" },
550 | { "text": "\\succneqq", "snippet": "\\succneqq" },
551 | { "text": "\\succnsim", "snippet": "\\succnsim" },
552 | { "text": "\\succsim", "snippet": "\\succsim" },
553 | { "text": "\\sum\\limits_{#1}^{#2}", "snippet": "\\sum\\limits_{#1}^{#2}" },
554 | { "text": "\\sup", "snippet": "\\sup" },
555 | { "text": "\\supset", "snippet": "\\supset" },
556 | { "text": "\\supseteq", "snippet": "\\supseteq" },
557 | { "text": "\\supseteqq", "snippet": "\\supseteqq" },
558 | { "text": "\\supsetneq", "snippet": "\\supsetneq" },
559 | { "text": "\\supsetneqq", "snippet": "\\supsetneqq" },
560 | { "text": "\\surd", "snippet": "\\surd" },
561 | { "text": "\\swarrow", "snippet": "\\swarrow" },
562 | { "text": "\\tag{#1}", "snippet": "\\tag{#1}" },
563 | { "text": "\\tan", "snippet": "\\tan" },
564 | { "text": "\\tanh", "snippet": "\\tanh" },
565 | { "text": "\\tau", "snippet": "\\tau" },
566 | { "text": "\\tbinom{#1}{#2}", "snippet": "\\tbinom{#1}{#2}" },
567 | { "text": "\\text{#1}", "snippet": "\\text{#1}" },
568 | { "text": "\\textstyle", "snippet": "\\textstyle" },
569 | { "text": "\\tfrac{#1}{#2}", "snippet": "\\tfrac{#1}{#2}" },
570 | { "text": "\\therefore", "snippet": "\\therefore" },
571 | { "text": "\\theta", "snippet": "\\theta" },
572 | { "text": "\\thickapprox", "snippet": "\\thickapprox" },
573 | { "text": "\\thicksim", "snippet": "\\thicksim" },
574 | { "text": "\\thinspace", "snippet": "\\thinspace" },
575 | { "text": "\\tilde{#1}", "snippet": "\\tilde{#1}" },
576 | { "text": "\\times", "snippet": "\\times" },
577 | { "text": "\\to", "snippet": "\\to" },
578 | { "text": "\\top", "snippet": "\\top" },
579 | { "text": "\\triangle", "snippet": "\\triangle" },
580 | { "text": "\\triangledown", "snippet": "\\triangledown" },
581 | { "text": "\\triangleleft", "snippet": "\\triangleleft" },
582 | { "text": "\\trianglelefteq", "snippet": "\\trianglelefteq" },
583 | { "text": "\\triangleq", "snippet": "\\triangleq" },
584 | { "text": "\\triangleright", "snippet": "\\triangleright" },
585 | { "text": "\\trianglerighteq", "snippet": "\\trianglerighteq" },
586 | { "text": "\\tt", "snippet": "\\tt" },
587 | { "text": "\\twoheadleftarrow", "snippet": "\\twoheadleftarrow" },
588 | { "text": "\\twoheadrightarrow", "snippet": "\\twoheadrightarrow" },
589 | { "text": "\\ulcorner", "snippet": "\\ulcorner" },
590 | { "text": "\\underbrace{#1}", "snippet": "\\underbrace{#1}" },
591 | { "text": "\\underleftarrow{#1}", "snippet": "\\underleftarrow{#1}" },
592 | { "text": "\\underleftrightarrow{#1}", "snippet": "\\underleftrightarrow{#1}" },
593 | { "text": "\\underline{#1}", "snippet": "\\underline{#1}" },
594 | { "text": "\\underrightarrow{#1}", "snippet": "\\underrightarrow{#1}" },
595 | { "text": "\\underset{#1}{#2}", "snippet": "\\underset{#1}{#2}" },
596 | { "text": "\\unlhd", "snippet": "\\unlhd" },
597 | { "text": "\\unrhd", "snippet": "\\unrhd" },
598 | { "text": "\\uparrow", "snippet": "\\uparrow" },
599 | { "text": "\\updownarrow", "snippet": "\\updownarrow" },
600 | { "text": "\\upharpoonleft", "snippet": "\\upharpoonleft" },
601 | { "text": "\\upharpoonright", "snippet": "\\upharpoonright" },
602 | { "text": "\\uplus", "snippet": "\\uplus" },
603 | { "text": "\\uproot{#1}", "snippet": "\\uproot{#1}" },
604 | { "text": "\\upsilon", "snippet": "\\upsilon" },
605 | { "text": "\\upuparrows", "snippet": "\\upuparrows" },
606 | { "text": "\\urcorner", "snippet": "\\urcorner" },
607 | { "text": "\\vDash", "snippet": "\\vDash" },
608 | { "text": "\\varDelta", "snippet": "\\varDelta" },
609 | { "text": "\\varGamma", "snippet": "\\varGamma" },
610 | { "text": "\\varLambda", "snippet": "\\varLambda" },
611 | { "text": "\\varOmega", "snippet": "\\varOmega" },
612 | { "text": "\\varPhi", "snippet": "\\varPhi" },
613 | { "text": "\\varPi", "snippet": "\\varPi" },
614 | { "text": "\\varPsi", "snippet": "\\varPsi" },
615 | { "text": "\\varSigma", "snippet": "\\varSigma" },
616 | { "text": "\\varTheta", "snippet": "\\varTheta" },
617 | { "text": "\\varUpsilon", "snippet": "\\varUpsilon" },
618 | { "text": "\\varXi", "snippet": "\\varXi" },
619 | { "text": "\\varepsilon", "snippet": "\\varepsilon" },
620 | { "text": "\\varinjlim", "snippet": "\\varinjlim" },
621 | { "text": "\\varkappa", "snippet": "\\varkappa" },
622 | { "text": "\\varliminf", "snippet": "\\varliminf" },
623 | { "text": "\\varlimsup", "snippet": "\\varlimsup" },
624 | { "text": "\\varnothing", "snippet": "\\varnothing" },
625 | { "text": "\\varphi", "snippet": "\\varphi" },
626 | { "text": "\\varpi", "snippet": "\\varpi" },
627 | { "text": "\\varprojlim", "snippet": "\\varprojlim" },
628 | { "text": "\\varpropto", "snippet": "\\varpropto" },
629 | { "text": "\\varrho", "snippet": "\\varrho" },
630 | { "text": "\\varsigma", "snippet": "\\varsigma" },
631 | { "text": "\\varsubsetneq", "snippet": "\\varsubsetneq" },
632 | { "text": "\\varsubsetneqq", "snippet": "\\varsubsetneqq" },
633 | { "text": "\\varsupsetneq", "snippet": "\\varsupsetneq" },
634 | { "text": "\\varsupsetneqq", "snippet": "\\varsupsetneqq" },
635 | { "text": "\\vartheta", "snippet": "\\vartheta" },
636 | { "text": "\\vartriangle", "snippet": "\\vartriangle" },
637 | { "text": "\\vartriangleleft", "snippet": "\\vartriangleleft" },
638 | { "text": "\\vartriangleright", "snippet": "\\vartriangleright" },
639 | { "text": "\\vcenter", "snippet": "\\vcenter" },
640 | { "text": "\\vdash", "snippet": "\\vdash" },
641 | { "text": "\\vec{#1}", "snippet": "\\vec{#1}" },
642 | { "text": "\\vee", "snippet": "\\vee" },
643 | { "text": "\\veebar", "snippet": "\\veebar" },
644 | { "text": "\\vert", "snippet": "\\vert" },
645 | { "text": "\\vphantom{#1}", "snippet": "\\vphantom{#1}" },
646 | { "text": "\\wedge", "snippet": "\\wedge" },
647 | { "text": "\\widehat{#1}", "snippet": "\\widehat{#1}" },
648 | { "text": "\\widetilde{#1}", "snippet": "\\widetilde{#1}" },
649 | { "text": "\\wp", "snippet": "\\wp" },
650 | { "text": "\\wr", "snippet": "\\wr" },
651 | { "text": "\\xi", "snippet": "\\xi" },
652 | { "text": "\\xleftarrow{#1}", "snippet": "\\xleftarrow{#1}" },
653 | { "text": "\\xrightarrow{#1}", "snippet": "\\xrightarrow{#1}" },
654 | { "text": "\\zeta", "snippet": "\\zeta" },
655 | { "text": "\\begin{definition}", "snippet": "\\begin{definition}\n#1\n\\end{definition}" },
656 | { "text": "\\begin{tikzcd}", "snippet": "\\begin{tikzcd}[#1]\n#2\n\\end{tikzcd}" },
657 | { "text": "\\begin{tikzpicture}", "snippet": "\\begin{tikzpicture}[#1]\n#2\n\\end{tikzpicture}" },
658 | { "text": "\\begin{align}", "snippet": "\\begin{align}\n#1\n\\end{align}" },
659 | { "text": "\\begin{align*}", "snippet": "\\begin{align*}\n#1\n\\end{align*}" },
660 | { "text": "\\begin{alignat}", "snippet": "\\begin{alignat}\n#1\n\\end{alignat}" },
661 | { "text": "\\begin{alignat*}", "snippet": "\\begin{alignat*}\n#1\n\\end{alignat*}" },
662 | { "text": "\\begin{aligned}", "snippet": "\\begin{aligned}\n#1\n\\end{aligned}" },
663 | { "text": "\\begin{alignedat}", "snippet": "\\begin{alignedat}\n#1\n\\end{alignedat}" },
664 | { "text": "\\begin{array}", "snippet": "\\begin{array}\n#1\n\\end{array}" },
665 | { "text": "\\begin{Bmatrix}", "snippet": "\\begin{Bmatrix}\n#1\n\\end{Bmatrix}" },
666 | { "text": "\\begin{bmatrix}", "snippet": "\\begin{bmatrix}\n#1\n\\end{bmatrix}" },
667 | { "text": "\\begin{cases}", "snippet": "\\begin{cases}\n#1\n\\end{cases}" },
668 | { "text": "\\begin{CD}", "snippet": "\\begin{CD}\n#1\n\\end{CD}" },
669 | { "text": "\\begin{eqnarray}", "snippet": "\\begin{eqnarray}\n#1\n\\end{eqnarray}" },
670 | { "text": "\\begin{eqnarray*}", "snippet": "\\begin{eqnarray*}\n#1\n\\end{eqnarray*}" },
671 | { "text": "\\begin{equation}", "snippet": "\\begin{equation}\n#1\n\\end{equation}" },
672 | { "text": "\\begin{equation*}", "snippet": "\\begin{equation*}\n#1\n\\end{equation*}" },
673 | { "text": "\\begin{gather}", "snippet": "\\begin{gather}\n#1\n\\end{gather}" },
674 | { "text": "\\begin{gather*}", "snippet": "\\begin{gather*}\n#1\n\\end{gather*}" },
675 | { "text": "\\begin{gathered}", "snippet": "\\begin{gathered}\n#1\n\\end{gathered}" },
676 | { "text": "\\begin{matrix}", "snippet": "\\begin{matrix}\n#1\n\\end{matrix}" },
677 | { "text": "\\begin{multline}", "snippet": "\\begin{multline}\n#1\n\\end{multline}" },
678 | { "text": "\\begin{multline*}", "snippet": "\\begin{multline*}\n#1\n\\end{multline*}" },
679 | { "text": "\\begin{pmatrix}", "snippet": "\\begin{pmatrix}\n#1\n\\end{pmatrix}" },
680 | { "text": "\\begin{smallmatrix}", "snippet": "\\begin{smallmatrix}\n#1\n\\end{smallmatrix}" },
681 | { "text": "\\begin{split}", "snippet": "\\begin{split}\n#1\n\\end{split}" },
682 | { "text": "\\begin{subarray}", "snippet": "\\begin{subarray}\n#1\n\\end{subarray}" },
683 | { "text": "\\begin{Vmatrix}", "snippet": "\\begin{Vmatrix}\n#1\n\\end{Vmatrix}" },
684 | { "text": "\\begin{vmatrix}", "snippet": "\\begin{vmatrix}\n#1\n\\end{vmatrix}" }
685 | ]
686 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "codemirror-latex-hint",
3 | "version": "1.0.4",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/codemirror": {
8 | "version": "0.0.82",
9 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.82.tgz",
10 | "integrity": "sha512-EVlPrt1rB256CRTlhNCXXLYaN24n3qZNStM6dRWaV6sUYyJA1SC5hvDSCHEHDg1SB93X8TwAGWRjEVdmUWPHmQ==",
11 | "dev": true,
12 | "requires": {
13 | "@types/tern": "*"
14 | }
15 | },
16 | "@types/estree": {
17 | "version": "0.0.42",
18 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.42.tgz",
19 | "integrity": "sha512-K1DPVvnBCPxzD+G51/cxVIoc2X8uUVl1zpJeE6iKcgHMj4+tbat5Xu4TjV7v2QSDbIeAfLi2hIk+u2+s0MlpUQ==",
20 | "dev": true
21 | },
22 | "@types/tern": {
23 | "version": "0.23.3",
24 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.3.tgz",
25 | "integrity": "sha512-imDtS4TAoTcXk0g7u4kkWqedB3E4qpjXzCpD2LU5M5NAXHzCDsypyvXSaG7mM8DKYkCRa7tFp4tS/lp/Wo7Q3w==",
26 | "dev": true,
27 | "requires": {
28 | "@types/estree": "*"
29 | }
30 | },
31 | "codemirror": {
32 | "version": "5.51.0",
33 | "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.51.0.tgz",
34 | "integrity": "sha512-vyuYYRv3eXL0SCuZA4spRFlKNzQAewHcipRQCOKgRy7VNAvZxTKzbItdbCl4S5AgPZ5g3WkHp+ibWQwv9TLG7Q=="
35 | },
36 | "typescript": {
37 | "version": "3.7.5",
38 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz",
39 | "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==",
40 | "dev": true
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "codemirror-latex-hint",
3 | "version": "1.0.4",
4 | "description": "An IntelliSense-like hinter for CodeMirror",
5 | "main": "lib/index.js",
6 | "peerDependencies": {
7 | "codemirror": ">5.0.0"
8 | },
9 | "devDependencies": {
10 | "@types/codemirror": "0.0.82",
11 | "typescript": "^3.7.5"
12 | },
13 | "scripts": {
14 | "build": "tsc",
15 | "test": "echo \"Error: no test specified\" && exit 1"
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "git+https://github.com/jun-sheaf/codemirror-latex-hint.git"
20 | },
21 | "keywords": [
22 | "codemirror",
23 | "autocomplete",
24 | "hint",
25 | "snippet",
26 | "intellisense"
27 | ],
28 | "author": "jun-sheaf",
29 | "license": "MIT",
30 | "bugs": {
31 | "url": "https://github.com/jun-sheaf/codemirror-latex-hint/issues"
32 | },
33 | "homepage": "https://github.com/jun-sheaf/codemirror-latex-hint#readme",
34 | "dependencies": {
35 | "codemirror": "^5.51.0"
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | .CodeMirror-hints {
2 | position: absolute;
3 | z-index: 10;
4 | overflow: hidden;
5 | list-style: none;
6 |
7 | margin: 0;
8 | padding: 0;
9 |
10 | border: 1px solid silver;
11 |
12 | background: white;
13 | font-size: 90%;
14 |
15 | max-height: 20em;
16 | overflow-y: auto;
17 | }
18 |
19 | .CodeMirror-hint {
20 | margin: 0;
21 | padding: 0 4px;
22 | border-radius: 2px;
23 | white-space: pre;
24 | color: black;
25 | cursor: pointer;
26 | }
27 | .CodeMirror-hint-entered {
28 | color: #170;
29 | }
30 | .CodeMirror-hint-arg {
31 | color: gray;
32 | }
33 | li.CodeMirror-hint-active {
34 | background: rgb(201, 233, 195);
35 | }
36 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import CodeMirror, {
2 | Hints,
3 | Hint,
4 | Editor,
5 | EditorChangeLinkedList,
6 | Position
7 | } from "codemirror";
8 | import "codemirror/addon/hint/show-hint"
9 | import macros from "./macros.json";
10 |
11 | interface LaTeXMacro {
12 | text: string,
13 | snippet: string
14 | }
15 |
16 | /**
17 | * Binary operation that compares Positions by library order
18 | * @param left Left Position
19 | * @param right Right Position
20 | */
21 | const comparePos = (left: Position, right: Position) => {
22 | if (left.line < right.line) {
23 | return true;
24 | } else if (left.line > right.line) {
25 | return false;
26 | } else if (left.ch < right.ch) {
27 | return true;
28 | } else if (left.ch > right.ch) {
29 | return false;
30 | } else return false;
31 | };
32 |
33 | /**
34 | * The rendering function for when the hint IS chosen.
35 | * @param cm CodeMirror instance
36 | * @param self The list of LaTeX macros closest to user input
37 | * @param data A LaTeX macro
38 | */
39 | const intelliSense: Hint["hint"] = (cm, self, data) => {
40 | const { text } = data;
41 | const dissectedSnippet: string[] = [];
42 | let snipPart = "";
43 | for (let i = 0; i < text.length; i++) {
44 | if (text[i] === "#") {
45 | dissectedSnippet.push(snipPart);
46 | snipPart = "";
47 | i++;
48 | } else {
49 | snipPart += text[i];
50 | }
51 | }
52 | dissectedSnippet.push(snipPart);
53 | const start = {
54 | line: self.from.line + (dissectedSnippet[0].match(/\n/g) || []).length,
55 | ch: self.from.ch + dissectedSnippet[0].length,
56 | };
57 | let content = [start.ch];
58 | const calculateEnd = () => {
59 | return {
60 | line: start.line + content.length - 1,
61 | ch: content[content.length - 1],
62 | };
63 | };
64 | const checkCursorPosition = (cm: Editor) => {
65 | const cursorPos = cm.getCursor();
66 | if (comparePos(calculateEnd(), cursorPos) || comparePos(cursorPos, start)) {
67 | stopSnippet();
68 | }
69 | };
70 | const stopSnippet = () => {
71 | cm.removeKeyMap(moveToNextLocation);
72 | cm.off("change", setCurrentPosition);
73 | cm.off("cursorActivity", checkCursorPosition);
74 | };
75 | const setCurrentPosition = (cm: Editor, { from, text, removed }: EditorChangeLinkedList) => {
76 | let origin = from.line - start.line;
77 | if (removed) {
78 | let len = removed.length - 1;
79 | if (len > 0) {
80 | content[origin + len] -= removed[len].length;
81 | content[origin] += content[origin + len] - removed[0].length;
82 | content.splice(origin + 1, len);
83 | } else {
84 | content[origin] -= removed[0].length;
85 | }
86 | }
87 |
88 | if (text) {
89 | let len = text.length - 1;
90 | if (len > 0) {
91 | const diff = content[origin] - from.ch;
92 | content[origin] = content[origin] + text[0].length - diff;
93 | for (let i = 1; i < len; i++) {
94 | content.splice(origin + i, 0, 0);
95 | content[origin + i] = content[origin + i] + text[i].length;
96 | }
97 | content.splice(origin + len, 0, 0);
98 | content[origin + len] = content[origin + len] + text[len].length + diff;
99 | } else {
100 | content[origin] += text[0].length;
101 | }
102 | }
103 | };
104 | const moveToNextLocation = {
105 | Tab: (cm: Editor) => {
106 | if (dissectedSnippet.length > 0) {
107 | let end = calculateEnd();
108 | start.line = end.line + (dissectedSnippet[0].match(/\n/g) || []).length;
109 | start.ch = end.ch + dissectedSnippet[0].length;
110 | content = [start.ch];
111 | cm.setCursor(start);
112 | }
113 | dissectedSnippet.shift();
114 | if (dissectedSnippet.length === 0) {
115 | return stopSnippet();
116 | }
117 | },
118 | };
119 | cm.replaceRange(dissectedSnippet.join(""), data.from || self.from, data.to || self.to, "complete");
120 | cm.setCursor(calculateEnd());
121 | if (text.includes("#1")) {
122 | cm.addKeyMap(moveToNextLocation);
123 | cm.on("change", setCurrentPosition);
124 | cm.on("cursorActivity", checkCursorPosition);
125 | }
126 | dissectedSnippet.shift();
127 | };
128 |
129 | /**
130 | * The hinter function
131 | * @param cm CodeMirror instance
132 | * @param macros A list of LaTeX macros
133 | */
134 | const LaTeXHint = (cm: Editor, macros: LaTeXMacro[]) => {
135 | let cur = cm.getCursor();
136 | let token = cm.getTokenAt(cur);
137 |
138 | let start = token.start;
139 | let end = cur.ch;
140 | let word = token.string.slice(0, end - start);
141 | if (word === "\\\\") {
142 | cm.state.completionActive.close();
143 | return {
144 | list: [],
145 | from: CodeMirror.Pos(cur.line, start),
146 | to: CodeMirror.Pos(cur.line, end),
147 | };
148 | }
149 | if (/[^\w\\]/.test(word)) {
150 | word = "";
151 | start = end = cur.ch;
152 | }
153 |
154 | const hints: Hints = {
155 | list: [],
156 | from: CodeMirror.Pos(cur.line, start),
157 | to: CodeMirror.Pos(cur.line, end),
158 | };
159 |
160 | if (token.type == "tag") {
161 | for (const macro of macros) {
162 | if (!word || macro.text.lastIndexOf(word, 0) === 0) {
163 | hints.list.push({
164 | displayText: macro.text,
165 | text: macro.snippet,
166 | render: (element, data, cur) => {
167 | let entered = element.appendChild(document.createElement("span"));
168 | entered.classList.add("CodeMirror-hint-entered");
169 | entered.textContent = word;
170 |
171 | element.appendChild(
172 | document.createElement("span")
173 | ).innerHTML = (cur.displayText as string)
174 | .slice(word.length)
175 | .replace(/(\#[1-9])/g, (_, arg) => `${arg}`);
176 | },
177 | hint: intelliSense,
178 | });
179 | }
180 | }
181 | }
182 | return hints;
183 | };
184 |
185 | export default LaTeXHint;
--------------------------------------------------------------------------------
/src/macros.json:
--------------------------------------------------------------------------------
1 | [
2 | { "text": "\\Arrowvert", "snippet": "\\Arrowvert" },
3 | { "text": "\\Bbbk", "snippet": "\\Bbbk" },
4 | { "text": "\\Big", "snippet": "\\Big" },
5 | { "text": "\\Bigg", "snippet": "\\Bigg" },
6 | { "text": "\\Biggl", "snippet": "\\Biggl" },
7 | { "text": "\\Biggr", "snippet": "\\Biggr" },
8 | { "text": "\\Bigl", "snippet": "\\Bigl" },
9 | { "text": "\\Bigm", "snippet": "\\Bigm" },
10 | { "text": "\\Bigr", "snippet": "\\Bigr" },
11 | { "text": "\\Box", "snippet": "\\Box" },
12 | { "text": "\\Bumpeq", "snippet": "\\Bumpeq" },
13 | { "text": "\\Cap", "snippet": "\\Cap" },
14 | { "text": "\\cite[#1]{#2}", "snippet": "\\cite[#1]{#2}" },
15 | { "text": "\\cite{#1}", "snippet": "\\cite{#1}" },
16 | { "text": "\\Cup", "snippet": "\\Cup" },
17 | { "text": "\\DeclareMathOperator{#1}{#2}", "snippet": "\\DeclareMathOperator{#1}{#2}" },
18 | { "text": "\\Delta", "snippet": "\\Delta" },
19 | { "text": "\\Downarrow", "snippet": "\\Downarrow" },
20 | { "text": "\\Finv", "snippet": "\\Finv" },
21 | { "text": "\\Game", "snippet": "\\Game" },
22 | { "text": "\\Gamma", "snippet": "\\Gamma" },
23 | { "text": "\\Im", "snippet": "\\Im" },
24 | { "text": "\\Lambda", "snippet": "\\Lambda" },
25 | { "text": "\\Leftarrow", "snippet": "\\Leftarrow" },
26 | { "text": "\\Leftrightarrow", "snippet": "\\Leftrightarrow" },
27 | { "text": "\\Lleftarrow", "snippet": "\\Lleftarrow" },
28 | { "text": "\\Longleftarrow", "snippet": "\\Longleftarrow" },
29 | { "text": "\\Longleftrightarrow", "snippet": "\\Longleftrightarrow" },
30 | { "text": "\\Longrightarrow", "snippet": "\\Longrightarrow" },
31 | { "text": "\\Lsh", "snippet": "\\Lsh" },
32 | { "text": "\\Omega", "snippet": "\\Omega" },
33 | { "text": "\\Phi", "snippet": "\\Phi" },
34 | { "text": "\\Pi", "snippet": "\\Pi" },
35 | { "text": "\\Pr", "snippet": "\\Pr" },
36 | { "text": "\\Psi", "snippet": "\\Psi" },
37 | { "text": "\\Re", "snippet": "\\Re" },
38 | { "text": "\\Rightarrow", "snippet": "\\Rightarrow" },
39 | { "text": "\\Rrightarrow", "snippet": "\\Rrightarrow" },
40 | { "text": "\\Rsh", "snippet": "\\Rsh" },
41 | { "text": "\\S", "snippet": "\\S" },
42 | { "text": "\\Sigma", "snippet": "\\Sigma" },
43 | { "text": "\\Subset", "snippet": "\\Subset" },
44 | { "text": "\\Supset", "snippet": "\\Supset" },
45 | { "text": "\\TeX", "snippet": "\\TeX" },
46 | { "text": "\\Theta", "snippet": "\\Theta" },
47 | { "text": "\\Uparrow", "snippet": "\\Uparrow" },
48 | { "text": "\\Updownarrow", "snippet": "\\Updownarrow" },
49 | { "text": "\\Upsilon", "snippet": "\\Upsilon" },
50 | { "text": "\\Vdash", "snippet": "\\Vdash" },
51 | { "text": "\\Vert", "snippet": "\\Vert" },
52 | { "text": "\\Vvdash", "snippet": "\\Vvdash" },
53 | { "text": "\\Xi", "snippet": "\\Xi" },
54 | { "text": "\\above", "snippet": "\\above" },
55 | { "text": "\\abovewithdelims", "snippet": "\\abovewithdelims" },
56 | { "text": "\\acute{#1}", "snippet": "\\acute{#1}" },
57 | { "text": "\\aleph", "snippet": "\\aleph" },
58 | { "text": "\\alpha", "snippet": "\\alpha" },
59 | { "text": "\\amalg", "snippet": "\\amalg" },
60 | { "text": "\\angle", "snippet": "\\angle" },
61 | { "text": "\\approx", "snippet": "\\approx" },
62 | { "text": "\\approxeq", "snippet": "\\approxeq" },
63 | { "text": "\\arccos", "snippet": "\\arccos" },
64 | { "text": "\\arcsin", "snippet": "\\arcsin" },
65 | { "text": "\\arctan", "snippet": "\\arctan" },
66 | { "text": "\\arg", "snippet": "\\arg" },
67 | { "text": "\\arrowvert", "snippet": "\\arrowvert" },
68 | { "text": "\\ast", "snippet": "\\ast" },
69 | { "text": "\\asymp", "snippet": "\\asymp" },
70 | { "text": "\\atop", "snippet": "\\atop" },
71 | { "text": "\\atopwithdelims", "snippet": "\\atopwithdelims" },
72 | { "text": "\\backepsilon", "snippet": "\\backepsilon" },
73 | { "text": "\\backprime", "snippet": "\\backprime" },
74 | { "text": "\\backsim", "snippet": "\\backsim" },
75 | { "text": "\\backsimeq", "snippet": "\\backsimeq" },
76 | { "text": "\\backslash", "snippet": "\\backslash" },
77 | { "text": "\\bar{#1}", "snippet": "\\bar{#1}" },
78 | { "text": "\\barwedge", "snippet": "\\barwedge" },
79 | { "text": "\\because", "snippet": "\\because" },
80 | { "text": "\\beta", "snippet": "\\beta" },
81 | { "text": "\\beth", "snippet": "\\beth" },
82 | { "text": "\\between", "snippet": "\\between" },
83 | { "text": "\\bf", "snippet": "\\bf" },
84 | { "text": "\\big", "snippet": "\\big" },
85 | { "text": "\\bigcap", "snippet": "\\bigcap" },
86 | { "text": "\\bigcirc", "snippet": "\\bigcirc" },
87 | { "text": "\\bigcup", "snippet": "\\bigcup" },
88 | { "text": "\\bigg", "snippet": "\\bigg" },
89 | { "text": "\\biggl", "snippet": "\\biggl" },
90 | { "text": "\\biggm", "snippet": "\\biggm" },
91 | { "text": "\\biggr", "snippet": "\\biggr" },
92 | { "text": "\\bigl", "snippet": "\\bigl" },
93 | { "text": "\\bigm", "snippet": "\\bigm" },
94 | { "text": "\\bigodot", "snippet": "\\bigodot" },
95 | { "text": "\\bigoplus", "snippet": "\\bigoplus" },
96 | { "text": "\\bigotimes", "snippet": "\\bigotimes" },
97 | { "text": "\\bigr\\}", "snippet": "\\bigr\\}" },
98 | { "text": "\\bigsqcup", "snippet": "\\bigsqcup" },
99 | { "text": "\\bigstar", "snippet": "\\bigstar" },
100 | { "text": "\\bigtriangledown", "snippet": "\\bigtriangledown" },
101 | { "text": "\\bigtriangleup", "snippet": "\\bigtriangleup" },
102 | { "text": "\\biguplus", "snippet": "\\biguplus" },
103 | { "text": "\\bigvee", "snippet": "\\bigvee" },
104 | { "text": "\\bigwedge", "snippet": "\\bigwedge" },
105 | { "text": "\\binom{#1}{#2}", "snippet": "\\binom{#1}{#2}" },
106 | { "text": "\\blacklozenge", "snippet": "\\blacklozenge" },
107 | { "text": "\\blacksquare", "snippet": "\\blacksquare" },
108 | { "text": "\\blacktriangle", "snippet": "\\blacktriangle" },
109 | { "text": "\\blacktriangledown", "snippet": "\\blacktriangledown" },
110 | { "text": "\\blacktriangleleft", "snippet": "\\blacktriangleleft" },
111 | { "text": "\\blacktriangleright", "snippet": "\\blacktriangleright" },
112 | { "text": "\\bmod", "snippet": "\\bmod" },
113 | { "text": "\\boldsymbol{#1}", "snippet": "\\boldsymbol{#1}" },
114 | { "text": "\\bot", "snippet": "\\bot" },
115 | { "text": "\\bowtie", "snippet": "\\bowtie" },
116 | { "text": "\\boxdot", "snippet": "\\boxdot" },
117 | { "text": "\\boxed{#1}", "snippet": "\\boxed{#1}" },
118 | { "text": "\\boxminus", "snippet": "\\boxminus" },
119 | { "text": "\\boxplus", "snippet": "\\boxplus" },
120 | { "text": "\\boxtimes", "snippet": "\\boxtimes" },
121 | { "text": "\\brace", "snippet": "\\brace" },
122 | { "text": "\\bracevert", "snippet": "\\bracevert" },
123 | { "text": "\\brack", "snippet": "\\brack" },
124 | { "text": "\\breve{#1}", "snippet": "\\breve{#1}" },
125 | { "text": "\\buildrel", "snippet": "\\buildrel" },
126 | { "text": "\\bullet", "snippet": "\\bullet" },
127 | { "text": "\\bumpeq", "snippet": "\\bumpeq" },
128 | { "text": "\\cal", "snippet": "\\cal" },
129 | { "text": "\\cap", "snippet": "\\cap" },
130 | { "text": "\\cases{#1}", "snippet": "\\cases{#1}" },
131 | { "text": "\\cdot", "snippet": "\\cdot" },
132 | { "text": "\\cdotp", "snippet": "\\cdotp" },
133 | { "text": "\\cdots", "snippet": "\\cdots" },
134 | { "text": "\\centerdot", "snippet": "\\centerdot" },
135 | { "text": "\\cfrac{#1}{#2}", "snippet": "\\cfrac{#1}{#2}" },
136 | { "text": "\\check{#1}", "snippet": "\\check{#1}" },
137 | { "text": "\\checkmark", "snippet": "\\checkmark" },
138 | { "text": "\\chi", "snippet": "\\chi" },
139 | { "text": "\\choose", "snippet": "\\choose" },
140 | { "text": "\\circ", "snippet": "\\circ" },
141 | { "text": "\\circeq", "snippet": "\\circeq" },
142 | { "text": "\\circlearrowleft", "snippet": "\\circlearrowleft" },
143 | { "text": "\\circlearrowright", "snippet": "\\circlearrowright" },
144 | { "text": "\\circledS", "snippet": "\\circledS" },
145 | { "text": "\\circledast", "snippet": "\\circledast" },
146 | { "text": "\\circledcirc", "snippet": "\\circledcirc" },
147 | { "text": "\\circleddash", "snippet": "\\circleddash" },
148 | { "text": "\\clubsuit", "snippet": "\\clubsuit" },
149 | { "text": "\\colon", "snippet": "\\colon" },
150 | { "text": "\\complement", "snippet": "\\complement" },
151 | { "text": "\\cong", "snippet": "\\cong" },
152 | { "text": "\\coprod", "snippet": "\\coprod" },
153 | { "text": "\\cos", "snippet": "\\cos" },
154 | { "text": "\\cosh", "snippet": "\\cosh" },
155 | { "text": "\\cot", "snippet": "\\cot" },
156 | { "text": "\\coth", "snippet": "\\coth" },
157 | { "text": "\\cr", "snippet": "\\cr" },
158 | { "text": "\\csc", "snippet": "\\csc" },
159 | { "text": "\\cup", "snippet": "\\cup" },
160 | { "text": "\\curlyeqprec", "snippet": "\\curlyeqprec" },
161 | { "text": "\\curlyeqsucc", "snippet": "\\curlyeqsucc" },
162 | { "text": "\\curlyvee", "snippet": "\\curlyvee" },
163 | { "text": "\\curlywedge", "snippet": "\\curlywedge" },
164 | { "text": "\\curvearrowleft", "snippet": "\\curvearrowleft" },
165 | { "text": "\\curvearrowright", "snippet": "\\curvearrowright" },
166 | { "text": "\\dagger", "snippet": "\\dagger" },
167 | { "text": "\\daleth", "snippet": "\\daleth" },
168 | { "text": "\\dashleftarrow", "snippet": "\\dashleftarrow" },
169 | { "text": "\\dashrightarrow", "snippet": "\\dashrightarrow" },
170 | { "text": "\\dashv", "snippet": "\\dashv" },
171 | { "text": "\\dbinom{#1}{#2}", "snippet": "\\dbinom{#1}{#2}" },
172 | { "text": "\\ddagger", "snippet": "\\ddagger" },
173 | { "text": "\\ddddot{#1}", "snippet": "\\ddddot{#1}" },
174 | { "text": "\\dddot{#1}", "snippet": "\\dddot{#1}" },
175 | { "text": "\\ddot{#1}", "snippet": "\\ddot{#1}" },
176 | { "text": "\\ddots", "snippet": "\\ddots" },
177 | { "text": "\\def", "snippet": "\\def" },
178 | { "text": "\\deg", "snippet": "\\deg" },
179 | { "text": "\\delta", "snippet": "\\delta" },
180 | { "text": "\\det", "snippet": "\\det" },
181 | { "text": "\\dfrac{#1}{#2}", "snippet": "\\dfrac{#1}{#2}" },
182 | { "text": "\\diagdown", "snippet": "\\diagdown" },
183 | { "text": "\\diagup", "snippet": "\\diagup" },
184 | { "text": "\\diamond", "snippet": "\\diamond" },
185 | { "text": "\\diamondsuit", "snippet": "\\diamondsuit" },
186 | { "text": "\\digamma", "snippet": "\\digamma" },
187 | { "text": "\\dim", "snippet": "\\dim" },
188 | { "text": "\\displaylines", "snippet": "\\displaylines" },
189 | { "text": "\\displaystyle", "snippet": "\\displaystyle" },
190 | { "text": "\\div", "snippet": "\\div" },
191 | { "text": "\\divideontimes", "snippet": "\\divideontimes" },
192 | { "text": "\\dot{#1}", "snippet": "\\dot{#1}" },
193 | { "text": "\\doteq", "snippet": "\\doteq" },
194 | { "text": "\\doteqdot", "snippet": "\\doteqdot" },
195 | { "text": "\\dotplus", "snippet": "\\dotplus" },
196 | { "text": "\\dots", "snippet": "\\dots" },
197 | { "text": "\\dotsb", "snippet": "\\dotsb" },
198 | { "text": "\\dotsc", "snippet": "\\dotsc" },
199 | { "text": "\\dotsi", "snippet": "\\dotsi" },
200 | { "text": "\\dotsm", "snippet": "\\dotsm" },
201 | { "text": "\\dotso", "snippet": "\\dotso" },
202 | { "text": "\\doublebarwedge", "snippet": "\\doublebarwedge" },
203 | { "text": "\\downarrow", "snippet": "\\downarrow" },
204 | { "text": "\\downdownarrows", "snippet": "\\downdownarrows" },
205 | { "text": "\\downharpoonleft", "snippet": "\\downharpoonleft" },
206 | { "text": "\\downharpoonright", "snippet": "\\downharpoonright" },
207 | { "text": "\\ell", "snippet": "\\ell" },
208 | { "text": "\\emptyset", "snippet": "\\emptyset" },
209 | { "text": "\\enspace", "snippet": "\\enspace" },
210 | { "text": "\\epsilon", "snippet": "\\epsilon" },
211 | { "text": "\\eqalign{#1}", "snippet": "\\eqalign{#1}" },
212 | { "text": "\\eqalignno{#1}", "snippet": "\\eqalignno{#1}" },
213 | { "text": "\\eqcirc", "snippet": "\\eqcirc" },
214 | { "text": "\\eqref{#1}", "snippet": "\\eqref{#1}" },
215 | { "text": "\\eqsim", "snippet": "\\eqsim" },
216 | { "text": "\\eqslantgtr", "snippet": "\\eqslantgtr" },
217 | { "text": "\\eqslantless", "snippet": "\\eqslantless" },
218 | { "text": "\\equiv", "snippet": "\\equiv" },
219 | { "text": "\\eta", "snippet": "\\eta" },
220 | { "text": "\\eth", "snippet": "\\eth" },
221 | { "text": "\\exists", "snippet": "\\exists" },
222 | { "text": "\\exp", "snippet": "\\exp" },
223 | { "text": "\\fallingdotseq", "snippet": "\\fallingdotseq" },
224 | { "text": "\\flat", "snippet": "\\flat" },
225 | { "text": "\\forall", "snippet": "\\forall" },
226 | { "text": "\\frown", "snippet": "\\frown" },
227 | { "text": "\\gamma", "snippet": "\\gamma" },
228 | { "text": "\\gcd", "snippet": "\\gcd" },
229 | { "text": "\\ge", "snippet": "\\ge" },
230 | { "text": "\\geq", "snippet": "\\geq" },
231 | { "text": "\\geqq", "snippet": "\\geqq" },
232 | { "text": "\\geqslant", "snippet": "\\geqslant" },
233 | { "text": "\\gets", "snippet": "\\gets" },
234 | { "text": "\\gg", "snippet": "\\gg" },
235 | { "text": "\\ggg", "snippet": "\\ggg" },
236 | { "text": "\\gimel", "snippet": "\\gimel" },
237 | { "text": "\\gnapprox", "snippet": "\\gnapprox" },
238 | { "text": "\\gneq", "snippet": "\\gneq" },
239 | { "text": "\\gneqq", "snippet": "\\gneqq" },
240 | { "text": "\\gnsim", "snippet": "\\gnsim" },
241 | { "text": "\\grave{#1}", "snippet": "\\grave{#1}" },
242 | { "text": "\\gtrapprox", "snippet": "\\gtrapprox" },
243 | { "text": "\\gtrdot", "snippet": "\\gtrdot" },
244 | { "text": "\\gtreqless", "snippet": "\\gtreqless" },
245 | { "text": "\\gtreqqless", "snippet": "\\gtreqqless" },
246 | { "text": "\\gtrless", "snippet": "\\gtrless" },
247 | { "text": "\\gtrsim", "snippet": "\\gtrsim" },
248 | { "text": "\\gvertneqq", "snippet": "\\gvertneqq" },
249 | { "text": "\\hat{#1}", "snippet": "\\hat{#1}" },
250 | { "text": "\\hbar", "snippet": "\\hbar" },
251 | { "text": "\\hbox", "snippet": "\\hbox" },
252 | { "text": "\\heartsuit", "snippet": "\\heartsuit" },
253 | { "text": "\\hfil", "snippet": "\\hfil" },
254 | { "text": "\\hfill", "snippet": "\\hfill" },
255 | { "text": "\\hom", "snippet": "\\hom" },
256 | { "text": "\\hookleftarrow", "snippet": "\\hookleftarrow" },
257 | { "text": "\\hookrightarrow", "snippet": "\\hookrightarrow" },
258 | { "text": "\\hphantom{#1}", "snippet": "\\hphantom{#1}" },
259 | { "text": "\\hskip", "snippet": "\\hskip" },
260 | { "text": "\\hslash", "snippet": "\\hslash" },
261 | { "text": "\\idotsint", "snippet": "\\idotsint" },
262 | { "text": "\\iff", "snippet": "\\iff" },
263 | { "text": "\\iiiint", "snippet": "\\iiiint" },
264 | { "text": "\\iiint", "snippet": "\\iiint" },
265 | { "text": "\\iint", "snippet": "\\iint" },
266 | { "text": "\\imath", "snippet": "\\imath" },
267 | { "text": "\\impliedby", "snippet": "\\impliedby" },
268 | { "text": "\\implies", "snippet": "\\implies" },
269 | { "text": "\\in", "snippet": "\\in" },
270 | { "text": "\\inf", "snippet": "\\inf" },
271 | { "text": "\\infty", "snippet": "\\infty" },
272 | { "text": "\\injlim", "snippet": "\\injlim" },
273 | { "text": "\\int\\limits_{#1}^{#2}", "snippet": "\\int\\limits_{#1}^{#2}" },
274 | { "text": "\\intercal", "snippet": "\\intercal" },
275 | { "text": "\\iota", "snippet": "\\iota" },
276 | { "text": "\\it", "snippet": "\\it" },
277 | { "text": "\\jmath", "snippet": "\\jmath" },
278 | { "text": "\\kappa", "snippet": "\\kappa" },
279 | { "text": "\\ker", "snippet": "\\ker" },
280 | { "text": "\\kern", "snippet": "\\kern" },
281 | { "text": "\\lVert", "snippet": "\\lVert" },
282 | { "text": "\\lambda", "snippet": "\\lambda" },
283 | { "text": "\\land", "snippet": "\\land" },
284 | { "text": "\\langle", "snippet": "\\langle" },
285 | { "text": "\\lbrace", "snippet": "\\lbrace" },
286 | { "text": "\\lbrack", "snippet": "\\lbrack" },
287 | { "text": "\\lceil", "snippet": "\\lceil" },
288 | { "text": "\\ldotp", "snippet": "\\ldotp" },
289 | { "text": "\\ldots", "snippet": "\\ldots" },
290 | { "text": "\\le", "snippet": "\\le" },
291 | { "text": "\\left", "snippet": "\\left" },
292 | { "text": "\\leftarrow", "snippet": "\\leftarrow" },
293 | { "text": "\\leftarrowtail", "snippet": "\\leftarrowtail" },
294 | { "text": "\\leftharpoondown", "snippet": "\\leftharpoondown" },
295 | { "text": "\\leftharpoonup", "snippet": "\\leftharpoonup" },
296 | { "text": "\\leftleftarrows", "snippet": "\\leftleftarrows" },
297 | { "text": "\\leftrightarrow", "snippet": "\\leftrightarrow" },
298 | { "text": "\\leftrightarrows", "snippet": "\\leftrightarrows" },
299 | { "text": "\\leftrightharpoons", "snippet": "\\leftrightharpoons" },
300 | { "text": "\\leftrightsquigarrow", "snippet": "\\leftrightsquigarrow" },
301 | { "text": "\\leftroot{#1}", "snippet": "\\leftroot{#1}" },
302 | { "text": "\\leftthreetimes", "snippet": "\\leftthreetimes" },
303 | { "text": "\\leq", "snippet": "\\leq" },
304 | { "text": "\\leqalignno{#1}", "snippet": "\\leqalignno{#1}" },
305 | { "text": "\\leqq", "snippet": "\\leqq" },
306 | { "text": "\\leqslant", "snippet": "\\leqslant" },
307 | { "text": "\\lessapprox", "snippet": "\\lessapprox" },
308 | { "text": "\\lessdot", "snippet": "\\lessdot" },
309 | { "text": "\\lesseqgtr", "snippet": "\\lesseqgtr" },
310 | { "text": "\\lesseqqgtr", "snippet": "\\lesseqqgtr" },
311 | { "text": "\\lessgtr", "snippet": "\\lessgtr" },
312 | { "text": "\\lesssim", "snippet": "\\lesssim" },
313 | { "text": "\\let{#1}{#2}", "snippet": "\\let{#1}{#2}" },
314 | { "text": "\\lfloor", "snippet": "\\lfloor" },
315 | { "text": "\\lg", "snippet": "\\lg" },
316 | { "text": "\\lgroup", "snippet": "\\lgroup" },
317 | { "text": "\\lhd", "snippet": "\\lhd" },
318 | { "text": "\\lim", "snippet": "\\lim" },
319 | { "text": "\\liminf", "snippet": "\\liminf" },
320 | { "text": "\\limits_{#1}^{#b}", "snippet": "\\limits_{#1}^{#b}" },
321 | { "text": "\\limsup", "snippet": "\\limsup" },
322 | { "text": "\\ll", "snippet": "\\ll" },
323 | { "text": "\\llap{#1}", "snippet": "\\llap{#1}" },
324 | { "text": "\\llcorner", "snippet": "\\llcorner" },
325 | { "text": "\\lll", "snippet": "\\lll" },
326 | { "text": "\\lmoustache", "snippet": "\\lmoustache" },
327 | { "text": "\\ln", "snippet": "\\ln" },
328 | { "text": "\\lnapprox", "snippet": "\\lnapprox" },
329 | { "text": "\\lneq", "snippet": "\\lneq" },
330 | { "text": "\\lneqq", "snippet": "\\lneqq" },
331 | { "text": "\\lnot", "snippet": "\\lnot" },
332 | { "text": "\\lnsim", "snippet": "\\lnsim" },
333 | { "text": "\\log", "snippet": "\\log" },
334 | { "text": "\\longleftarrow", "snippet": "\\longleftarrow" },
335 | { "text": "\\longleftrightarrow", "snippet": "\\longleftrightarrow" },
336 | { "text": "\\longmapsto", "snippet": "\\longmapsto" },
337 | { "text": "\\longrightarrow", "snippet": "\\longrightarrow" },
338 | { "text": "\\looparrowleft", "snippet": "\\looparrowleft" },
339 | { "text": "\\looparrowright", "snippet": "\\looparrowright" },
340 | { "text": "\\lor", "snippet": "\\lor" },
341 | { "text": "\\lower", "snippet": "\\lower" },
342 | { "text": "\\lozenge", "snippet": "\\lozenge" },
343 | { "text": "\\lrcorner", "snippet": "\\lrcorner" },
344 | { "text": "\\ltimes", "snippet": "\\ltimes" },
345 | { "text": "\\lvert", "snippet": "\\lvert" },
346 | { "text": "\\lvertneqq", "snippet": "\\lvertneqq" },
347 | { "text": "\\maltese", "snippet": "\\maltese" },
348 | { "text": "\\mapsto", "snippet": "\\mapsto" },
349 | { "text": "\\mathbb{#1}", "snippet": "\\mathbb{#1}" },
350 | { "text": "\\mathbf{#1}", "snippet": "\\mathbf{#1}" },
351 | { "text": "\\mathbin", "snippet": "\\mathbin" },
352 | { "text": "\\mathchoice", "snippet": "\\mathchoice" },
353 | { "text": "\\mathclose", "snippet": "\\mathclose" },
354 | { "text": "\\mathfrak{#1}", "snippet": "\\mathfrak{#1}" },
355 | { "text": "\\mathinner", "snippet": "\\mathinner" },
356 | { "text": "\\mathop", "snippet": "\\mathop" },
357 | { "text": "\\mathopen", "snippet": "\\mathopen" },
358 | { "text": "\\mathord", "snippet": "\\mathord" },
359 | { "text": "\\mathpunct", "snippet": "\\mathpunct" },
360 | { "text": "\\mathrel", "snippet": "\\mathrel" },
361 | { "text": "\\mathstrut", "snippet": "\\mathstrut" },
362 | { "text": "\\matrix{#1}", "snippet": "\\matrix{#1}" },
363 | { "text": "\\max", "snippet": "\\max" },
364 | { "text": "\\measuredangle", "snippet": "\\measuredangle" },
365 | { "text": "\\mho", "snippet": "\\mho" },
366 | { "text": "\\mid", "snippet": "\\mid" },
367 | { "text": "\\middle", "snippet": "\\middle" },
368 | { "text": "\\min", "snippet": "\\min" },
369 | { "text": "\\mit", "snippet": "\\mit" },
370 | { "text": "\\mkern", "snippet": "\\mkern" },
371 | { "text": "\\mod", "snippet": "\\mod" },
372 | { "text": "\\models", "snippet": "\\models" },
373 | { "text": "\\moveleft", "snippet": "\\moveleft" },
374 | { "text": "\\moveright", "snippet": "\\moveright" },
375 | { "text": "\\mp", "snippet": "\\mp" },
376 | { "text": "\\mskip", "snippet": "\\mskip" },
377 | { "text": "\\mspace{#1}", "snippet": "\\mspace{#1}" },
378 | { "text": "\\mu", "snippet": "\\mu" },
379 | { "text": "\\multimap", "snippet": "\\multimap" },
380 | { "text": "\\nLeftarrow", "snippet": "\\nLeftarrow" },
381 | { "text": "\\nLeftrightarrow", "snippet": "\\nLeftrightarrow" },
382 | { "text": "\\nRightarrow", "snippet": "\\nRightarrow" },
383 | { "text": "\\nVDash", "snippet": "\\nVDash" },
384 | { "text": "\\nVdash", "snippet": "\\nVdash" },
385 | { "text": "\\nabla", "snippet": "\\nabla" },
386 | { "text": "\\natural", "snippet": "\\natural" },
387 | { "text": "\\ncong", "snippet": "\\ncong" },
388 | { "text": "\\ne", "snippet": "\\ne" },
389 | { "text": "\\nearrow", "snippet": "\\nearrow" },
390 | { "text": "\\neg", "snippet": "\\neg" },
391 | { "text": "\\negmedspace", "snippet": "\\negmedspace" },
392 | { "text": "\\negthickspace", "snippet": "\\negthickspace" },
393 | { "text": "\\negthinspace", "snippet": "\\negthinspace" },
394 | { "text": "\\neq", "snippet": "\\neq" },
395 | { "text": "\\nexists", "snippet": "\\nexists" },
396 | { "text": "\\ngeq", "snippet": "\\ngeq" },
397 | { "text": "\\ngeqq", "snippet": "\\ngeqq" },
398 | { "text": "\\ngeqslant", "snippet": "\\ngeqslant" },
399 | { "text": "\\ngtr", "snippet": "\\ngtr" },
400 | { "text": "\\ni", "snippet": "\\ni" },
401 | { "text": "\\nleftarrow", "snippet": "\\nleftarrow" },
402 | { "text": "\\nleftrightarrow", "snippet": "\\nleftrightarrow" },
403 | { "text": "\\nleq", "snippet": "\\nleq" },
404 | { "text": "\\nleqq", "snippet": "\\nleqq" },
405 | { "text": "\\nleqslant", "snippet": "\\nleqslant" },
406 | { "text": "\\nless", "snippet": "\\nless" },
407 | { "text": "\\nmid", "snippet": "\\nmid" },
408 | { "text": "\\nolimits_{#1}^{#2}", "snippet": "\\nolimits_{#1}^{#2}" },
409 | { "text": "\\not", "snippet": "\\not" },
410 | { "text": "\\notag", "snippet": "\\notag" },
411 | { "text": "\\notin", "snippet": "\\notin" },
412 | { "text": "\\nparallel", "snippet": "\\nparallel" },
413 | { "text": "\\nprec", "snippet": "\\nprec" },
414 | { "text": "\\npreceq", "snippet": "\\npreceq" },
415 | { "text": "\\nrightarrow", "snippet": "\\nrightarrow" },
416 | { "text": "\\nshortmid", "snippet": "\\nshortmid" },
417 | { "text": "\\nshortparallel", "snippet": "\\nshortparallel" },
418 | { "text": "\\nsim", "snippet": "\\nsim" },
419 | { "text": "\\nsubseteq", "snippet": "\\nsubseteq" },
420 | { "text": "\\nsubseteqq", "snippet": "\\nsubseteqq" },
421 | { "text": "\\nsucc", "snippet": "\\nsucc" },
422 | { "text": "\\nsucceq", "snippet": "\\nsucceq" },
423 | { "text": "\\nsupseteq", "snippet": "\\nsupseteq" },
424 | { "text": "\\nsupseteqq", "snippet": "\\nsupseteqq" },
425 | { "text": "\\ntriangleleft", "snippet": "\\ntriangleleft" },
426 | { "text": "\\ntrianglelefteq", "snippet": "\\ntrianglelefteq" },
427 | { "text": "\\ntriangleright", "snippet": "\\ntriangleright" },
428 | { "text": "\\ntrianglerighteq", "snippet": "\\ntrianglerighteq" },
429 | { "text": "\\nu", "snippet": "\\nu" },
430 | { "text": "\\nvDash", "snippet": "\\nvDash" },
431 | { "text": "\\nvdash", "snippet": "\\nvdash" },
432 | { "text": "\\nwarrow", "snippet": "\\nwarrow" },
433 | { "text": "\\odot", "snippet": "\\odot" },
434 | { "text": "\\oint", "snippet": "\\oint" },
435 | { "text": "\\oldstyle", "snippet": "\\oldstyle" },
436 | { "text": "\\omega", "snippet": "\\omega" },
437 | { "text": "\\ominus", "snippet": "\\ominus" },
438 | { "text": "\\operatorname{#1}", "snippet": "\\operatorname{#1}" },
439 | { "text": "\\oplus", "snippet": "\\oplus" },
440 | { "text": "\\oslash", "snippet": "\\oslash" },
441 | { "text": "\\otimes", "snippet": "\\otimes" },
442 | { "text": "\\over", "snippet": "\\over" },
443 | { "text": "\\overbrace{#1}", "snippet": "\\overbrace{#1}" },
444 | { "text": "\\overleftarrow{#1}", "snippet": "\\overleftarrow{#1}" },
445 | { "text": "\\overleftrightarrow{#1}", "snippet": "\\overleftrightarrow{#1}" },
446 | { "text": "\\overline{#1}", "snippet": "\\overline{#1}" },
447 | { "text": "\\overrightarrow{#1}", "snippet": "\\overrightarrow{#1}" },
448 | { "text": "\\overset{#1}{#2}", "snippet": "\\overset{#1}{#2}" },
449 | { "text": "\\overwithdelims", "snippet": "\\overwithdelims" },
450 | { "text": "\\owns", "snippet": "\\owns" },
451 | { "text": "\\parallel", "snippet": "\\parallel" },
452 | { "text": "\\partial", "snippet": "\\partial" },
453 | { "text": "\\perp", "snippet": "\\perp" },
454 | { "text": "\\phantom{#1}", "snippet": "\\phantom{#1}" },
455 | { "text": "\\phi", "snippet": "\\phi" },
456 | { "text": "\\pi", "snippet": "\\pi" },
457 | { "text": "\\pitchfork", "snippet": "\\pitchfork" },
458 | { "text": "\\pm", "snippet": "\\pm" },
459 | { "text": "\\pmatrix{#1}", "snippet": "\\pmatrix{#1}" },
460 | { "text": "\\pmb{#1}", "snippet": "\\pmb{#1}" },
461 | { "text": "\\pmod", "snippet": "\\pmod" },
462 | { "text": "\\pod", "snippet": "\\pod" },
463 | { "text": "\\prec", "snippet": "\\prec" },
464 | { "text": "\\precapprox", "snippet": "\\precapprox" },
465 | { "text": "\\preccurlyeq", "snippet": "\\preccurlyeq" },
466 | { "text": "\\preceq", "snippet": "\\preceq" },
467 | { "text": "\\precnapprox", "snippet": "\\precnapprox" },
468 | { "text": "\\precneqq", "snippet": "\\precneqq" },
469 | { "text": "\\precnsim", "snippet": "\\precnsim" },
470 | { "text": "\\precsim", "snippet": "\\precsim" },
471 | { "text": "\\prime", "snippet": "\\prime" },
472 | { "text": "\\prod\\limits_{#1}^{#2}", "snippet": "\\prod\\limits_{#1}^{#2}" },
473 | { "text": "\\projlim", "snippet": "\\projlim" },
474 | { "text": "\\propto", "snippet": "\\propto" },
475 | { "text": "\\psi", "snippet": "\\psi" },
476 | { "text": "\\qquad", "snippet": "\\qquad" },
477 | { "text": "\\quad", "snippet": "\\quad" },
478 | { "text": "\\rVert", "snippet": "\\rVert" },
479 | { "text": "\\raise", "snippet": "\\raise" },
480 | { "text": "\\rangle", "snippet": "\\rangle" },
481 | { "text": "\\rbrace", "snippet": "\\rbrace" },
482 | { "text": "\\rbrack", "snippet": "\\rbrack" },
483 | { "text": "\\rceil", "snippet": "\\rceil" },
484 | { "text": "\\rfloor", "snippet": "\\rfloor" },
485 | { "text": "\\rgroup", "snippet": "\\rgroup" },
486 | { "text": "\\rhd", "snippet": "\\rhd" },
487 | { "text": "\\rho", "snippet": "\\rho" },
488 | { "text": "\\right", "snippet": "\\right" },
489 | { "text": "\\rightarrow", "snippet": "\\rightarrow" },
490 | { "text": "\\rightarrowtail", "snippet": "\\rightarrowtail" },
491 | { "text": "\\rightharpoondown", "snippet": "\\rightharpoondown" },
492 | { "text": "\\rightharpoonup", "snippet": "\\rightharpoonup" },
493 | { "text": "\\rightleftarrows", "snippet": "\\rightleftarrows" },
494 | { "text": "\\rightleftharpoons", "snippet": "\\rightleftharpoons" },
495 | { "text": "\\rightrightarrows", "snippet": "\\rightrightarrows" },
496 | { "text": "\\rightsquigarrow", "snippet": "\\rightsquigarrow" },
497 | { "text": "\\rightthreetimes", "snippet": "\\rightthreetimes" },
498 | { "text": "\\risingdotseq", "snippet": "\\risingdotseq" },
499 | { "text": "\\rlap{#1}", "snippet": "\\rlap{#1}" },
500 | { "text": "\\rm", "snippet": "\\rm" },
501 | { "text": "\\rmoustache", "snippet": "\\rmoustache" },
502 | { "text": "\\root #1 \\of #2", "snippet": "\\root #1 \\of #2" },
503 | { "text": "\\rtimes", "snippet": "\\rtimes" },
504 | { "text": "\\rvert", "snippet": "\\rvert" },
505 | { "text": "\\scriptscriptstyle", "snippet": "\\scriptscriptstyle" },
506 | { "text": "\\scriptstyle", "snippet": "\\scriptstyle" },
507 | { "text": "\\searrow", "snippet": "\\searrow" },
508 | { "text": "\\sec", "snippet": "\\sec" },
509 | { "text": "\\setminus", "snippet": "\\setminus" },
510 | { "text": "\\sharp", "snippet": "\\sharp" },
511 | { "text": "\\shortmid", "snippet": "\\shortmid" },
512 | { "text": "\\shortparallel", "snippet": "\\shortparallel" },
513 | { "text": "\\sideset{#1}{#2}{#3}", "snippet": "\\sideset{#1}{#2}{#3}" },
514 | { "text": "\\sigma", "snippet": "\\sigma" },
515 | { "text": "\\sim", "snippet": "\\sim" },
516 | { "text": "\\simeq", "snippet": "\\simeq" },
517 | { "text": "\\sin", "snippet": "\\sin" },
518 | { "text": "\\sinh", "snippet": "\\sinh" },
519 | { "text": "\\skew{#1}{#2}{#3}", "snippet": "\\skew{#1}{#2}{#3}" },
520 | { "text": "\\smallfrown", "snippet": "\\smallfrown" },
521 | { "text": "\\smallint", "snippet": "\\smallint" },
522 | { "text": "\\smallsetminus", "snippet": "\\smallsetminus" },
523 | { "text": "\\smallsmile", "snippet": "\\smallsmile" },
524 | { "text": "\\smash{#1}", "snippet": "\\smash{#1}" },
525 | { "text": "\\smile", "snippet": "\\smile" },
526 | { "text": "\\space", "snippet": "\\space" },
527 | { "text": "\\spadesuit", "snippet": "\\spadesuit" },
528 | { "text": "\\sphericalangle", "snippet": "\\sphericalangle" },
529 | { "text": "\\sqcap", "snippet": "\\sqcap" },
530 | { "text": "\\sqcup", "snippet": "\\sqcup" },
531 | { "text": "\\sqrt{#1}", "snippet": "\\sqrt{#1}" },
532 | { "text": "\\sqsubset", "snippet": "\\sqsubset" },
533 | { "text": "\\sqsubseteq", "snippet": "\\sqsubseteq" },
534 | { "text": "\\sqsupset", "snippet": "\\sqsupset" },
535 | { "text": "\\sqsupseteq", "snippet": "\\sqsupseteq" },
536 | { "text": "\\square", "snippet": "\\square" },
537 | { "text": "\\star", "snippet": "\\star" },
538 | { "text": "\\strut", "snippet": "\\strut" },
539 | { "text": "\\subset", "snippet": "\\subset" },
540 | { "text": "\\subseteq", "snippet": "\\subseteq" },
541 | { "text": "\\subseteqq", "snippet": "\\subseteqq" },
542 | { "text": "\\subsetneq", "snippet": "\\subsetneq" },
543 | { "text": "\\subsetneqq", "snippet": "\\subsetneqq" },
544 | { "text": "\\substack{#1}", "snippet": "\\substack{#1}" },
545 | { "text": "\\succ", "snippet": "\\succ" },
546 | { "text": "\\succapprox", "snippet": "\\succapprox" },
547 | { "text": "\\succcurlyeq", "snippet": "\\succcurlyeq" },
548 | { "text": "\\succeq", "snippet": "\\succeq" },
549 | { "text": "\\succnapprox", "snippet": "\\succnapprox" },
550 | { "text": "\\succneqq", "snippet": "\\succneqq" },
551 | { "text": "\\succnsim", "snippet": "\\succnsim" },
552 | { "text": "\\succsim", "snippet": "\\succsim" },
553 | { "text": "\\sum\\limits_{#1}^{#2}", "snippet": "\\sum\\limits_{#1}^{#2}" },
554 | { "text": "\\sup", "snippet": "\\sup" },
555 | { "text": "\\supset", "snippet": "\\supset" },
556 | { "text": "\\supseteq", "snippet": "\\supseteq" },
557 | { "text": "\\supseteqq", "snippet": "\\supseteqq" },
558 | { "text": "\\supsetneq", "snippet": "\\supsetneq" },
559 | { "text": "\\supsetneqq", "snippet": "\\supsetneqq" },
560 | { "text": "\\surd", "snippet": "\\surd" },
561 | { "text": "\\swarrow", "snippet": "\\swarrow" },
562 | { "text": "\\tag{#1}", "snippet": "\\tag{#1}" },
563 | { "text": "\\tan", "snippet": "\\tan" },
564 | { "text": "\\tanh", "snippet": "\\tanh" },
565 | { "text": "\\tau", "snippet": "\\tau" },
566 | { "text": "\\tbinom{#1}{#2}", "snippet": "\\tbinom{#1}{#2}" },
567 | { "text": "\\text{#1}", "snippet": "\\text{#1}" },
568 | { "text": "\\textstyle", "snippet": "\\textstyle" },
569 | { "text": "\\tfrac{#1}{#2}", "snippet": "\\tfrac{#1}{#2}" },
570 | { "text": "\\therefore", "snippet": "\\therefore" },
571 | { "text": "\\theta", "snippet": "\\theta" },
572 | { "text": "\\thickapprox", "snippet": "\\thickapprox" },
573 | { "text": "\\thicksim", "snippet": "\\thicksim" },
574 | { "text": "\\thinspace", "snippet": "\\thinspace" },
575 | { "text": "\\tilde{#1}", "snippet": "\\tilde{#1}" },
576 | { "text": "\\times", "snippet": "\\times" },
577 | { "text": "\\to", "snippet": "\\to" },
578 | { "text": "\\top", "snippet": "\\top" },
579 | { "text": "\\triangle", "snippet": "\\triangle" },
580 | { "text": "\\triangledown", "snippet": "\\triangledown" },
581 | { "text": "\\triangleleft", "snippet": "\\triangleleft" },
582 | { "text": "\\trianglelefteq", "snippet": "\\trianglelefteq" },
583 | { "text": "\\triangleq", "snippet": "\\triangleq" },
584 | { "text": "\\triangleright", "snippet": "\\triangleright" },
585 | { "text": "\\trianglerighteq", "snippet": "\\trianglerighteq" },
586 | { "text": "\\tt", "snippet": "\\tt" },
587 | { "text": "\\twoheadleftarrow", "snippet": "\\twoheadleftarrow" },
588 | { "text": "\\twoheadrightarrow", "snippet": "\\twoheadrightarrow" },
589 | { "text": "\\ulcorner", "snippet": "\\ulcorner" },
590 | { "text": "\\underbrace{#1}", "snippet": "\\underbrace{#1}" },
591 | { "text": "\\underleftarrow{#1}", "snippet": "\\underleftarrow{#1}" },
592 | { "text": "\\underleftrightarrow{#1}", "snippet": "\\underleftrightarrow{#1}" },
593 | { "text": "\\underline{#1}", "snippet": "\\underline{#1}" },
594 | { "text": "\\underrightarrow{#1}", "snippet": "\\underrightarrow{#1}" },
595 | { "text": "\\underset{#1}{#2}", "snippet": "\\underset{#1}{#2}" },
596 | { "text": "\\unlhd", "snippet": "\\unlhd" },
597 | { "text": "\\unrhd", "snippet": "\\unrhd" },
598 | { "text": "\\uparrow", "snippet": "\\uparrow" },
599 | { "text": "\\updownarrow", "snippet": "\\updownarrow" },
600 | { "text": "\\upharpoonleft", "snippet": "\\upharpoonleft" },
601 | { "text": "\\upharpoonright", "snippet": "\\upharpoonright" },
602 | { "text": "\\uplus", "snippet": "\\uplus" },
603 | { "text": "\\uproot{#1}", "snippet": "\\uproot{#1}" },
604 | { "text": "\\upsilon", "snippet": "\\upsilon" },
605 | { "text": "\\upuparrows", "snippet": "\\upuparrows" },
606 | { "text": "\\urcorner", "snippet": "\\urcorner" },
607 | { "text": "\\vDash", "snippet": "\\vDash" },
608 | { "text": "\\varDelta", "snippet": "\\varDelta" },
609 | { "text": "\\varGamma", "snippet": "\\varGamma" },
610 | { "text": "\\varLambda", "snippet": "\\varLambda" },
611 | { "text": "\\varOmega", "snippet": "\\varOmega" },
612 | { "text": "\\varPhi", "snippet": "\\varPhi" },
613 | { "text": "\\varPi", "snippet": "\\varPi" },
614 | { "text": "\\varPsi", "snippet": "\\varPsi" },
615 | { "text": "\\varSigma", "snippet": "\\varSigma" },
616 | { "text": "\\varTheta", "snippet": "\\varTheta" },
617 | { "text": "\\varUpsilon", "snippet": "\\varUpsilon" },
618 | { "text": "\\varXi", "snippet": "\\varXi" },
619 | { "text": "\\varepsilon", "snippet": "\\varepsilon" },
620 | { "text": "\\varinjlim", "snippet": "\\varinjlim" },
621 | { "text": "\\varkappa", "snippet": "\\varkappa" },
622 | { "text": "\\varliminf", "snippet": "\\varliminf" },
623 | { "text": "\\varlimsup", "snippet": "\\varlimsup" },
624 | { "text": "\\varnothing", "snippet": "\\varnothing" },
625 | { "text": "\\varphi", "snippet": "\\varphi" },
626 | { "text": "\\varpi", "snippet": "\\varpi" },
627 | { "text": "\\varprojlim", "snippet": "\\varprojlim" },
628 | { "text": "\\varpropto", "snippet": "\\varpropto" },
629 | { "text": "\\varrho", "snippet": "\\varrho" },
630 | { "text": "\\varsigma", "snippet": "\\varsigma" },
631 | { "text": "\\varsubsetneq", "snippet": "\\varsubsetneq" },
632 | { "text": "\\varsubsetneqq", "snippet": "\\varsubsetneqq" },
633 | { "text": "\\varsupsetneq", "snippet": "\\varsupsetneq" },
634 | { "text": "\\varsupsetneqq", "snippet": "\\varsupsetneqq" },
635 | { "text": "\\vartheta", "snippet": "\\vartheta" },
636 | { "text": "\\vartriangle", "snippet": "\\vartriangle" },
637 | { "text": "\\vartriangleleft", "snippet": "\\vartriangleleft" },
638 | { "text": "\\vartriangleright", "snippet": "\\vartriangleright" },
639 | { "text": "\\vcenter", "snippet": "\\vcenter" },
640 | { "text": "\\vdash", "snippet": "\\vdash" },
641 | { "text": "\\vec{#1}", "snippet": "\\vec{#1}" },
642 | { "text": "\\vee", "snippet": "\\vee" },
643 | { "text": "\\veebar", "snippet": "\\veebar" },
644 | { "text": "\\vert", "snippet": "\\vert" },
645 | { "text": "\\vphantom{#1}", "snippet": "\\vphantom{#1}" },
646 | { "text": "\\wedge", "snippet": "\\wedge" },
647 | { "text": "\\widehat{#1}", "snippet": "\\widehat{#1}" },
648 | { "text": "\\widetilde{#1}", "snippet": "\\widetilde{#1}" },
649 | { "text": "\\wp", "snippet": "\\wp" },
650 | { "text": "\\wr", "snippet": "\\wr" },
651 | { "text": "\\xi", "snippet": "\\xi" },
652 | { "text": "\\xleftarrow{#1}", "snippet": "\\xleftarrow{#1}" },
653 | { "text": "\\xrightarrow{#1}", "snippet": "\\xrightarrow{#1}" },
654 | { "text": "\\zeta", "snippet": "\\zeta" },
655 | { "text": "\\begin{definition}", "snippet": "\\begin{definition}\n#1\n\\end{definition}" },
656 | { "text": "\\begin{tikzcd}", "snippet": "\\begin{tikzcd}[#1]\n#2\n\\end{tikzcd}" },
657 | { "text": "\\begin{tikzpicture}", "snippet": "\\begin{tikzpicture}[#1]\n#2\n\\end{tikzpicture}" },
658 | { "text": "\\begin{align}", "snippet": "\\begin{align}\n#1\n\\end{align}" },
659 | { "text": "\\begin{align*}", "snippet": "\\begin{align*}\n#1\n\\end{align*}" },
660 | { "text": "\\begin{alignat}", "snippet": "\\begin{alignat}\n#1\n\\end{alignat}" },
661 | { "text": "\\begin{alignat*}", "snippet": "\\begin{alignat*}\n#1\n\\end{alignat*}" },
662 | { "text": "\\begin{aligned}", "snippet": "\\begin{aligned}\n#1\n\\end{aligned}" },
663 | { "text": "\\begin{alignedat}", "snippet": "\\begin{alignedat}\n#1\n\\end{alignedat}" },
664 | { "text": "\\begin{array}", "snippet": "\\begin{array}\n#1\n\\end{array}" },
665 | { "text": "\\begin{Bmatrix}", "snippet": "\\begin{Bmatrix}\n#1\n\\end{Bmatrix}" },
666 | { "text": "\\begin{bmatrix}", "snippet": "\\begin{bmatrix}\n#1\n\\end{bmatrix}" },
667 | { "text": "\\begin{cases}", "snippet": "\\begin{cases}\n#1\n\\end{cases}" },
668 | { "text": "\\begin{CD}", "snippet": "\\begin{CD}\n#1\n\\end{CD}" },
669 | { "text": "\\begin{eqnarray}", "snippet": "\\begin{eqnarray}\n#1\n\\end{eqnarray}" },
670 | { "text": "\\begin{eqnarray*}", "snippet": "\\begin{eqnarray*}\n#1\n\\end{eqnarray*}" },
671 | { "text": "\\begin{equation}", "snippet": "\\begin{equation}\n#1\n\\end{equation}" },
672 | { "text": "\\begin{equation*}", "snippet": "\\begin{equation*}\n#1\n\\end{equation*}" },
673 | { "text": "\\begin{gather}", "snippet": "\\begin{gather}\n#1\n\\end{gather}" },
674 | { "text": "\\begin{gather*}", "snippet": "\\begin{gather*}\n#1\n\\end{gather*}" },
675 | { "text": "\\begin{gathered}", "snippet": "\\begin{gathered}\n#1\n\\end{gathered}" },
676 | { "text": "\\begin{matrix}", "snippet": "\\begin{matrix}\n#1\n\\end{matrix}" },
677 | { "text": "\\begin{multline}", "snippet": "\\begin{multline}\n#1\n\\end{multline}" },
678 | { "text": "\\begin{multline*}", "snippet": "\\begin{multline*}\n#1\n\\end{multline*}" },
679 | { "text": "\\begin{pmatrix}", "snippet": "\\begin{pmatrix}\n#1\n\\end{pmatrix}" },
680 | { "text": "\\begin{smallmatrix}", "snippet": "\\begin{smallmatrix}\n#1\n\\end{smallmatrix}" },
681 | { "text": "\\begin{split}", "snippet": "\\begin{split}\n#1\n\\end{split}" },
682 | { "text": "\\begin{subarray}", "snippet": "\\begin{subarray}\n#1\n\\end{subarray}" },
683 | { "text": "\\begin{Vmatrix}", "snippet": "\\begin{Vmatrix}\n#1\n\\end{Vmatrix}" },
684 | { "text": "\\begin{vmatrix}", "snippet": "\\begin{vmatrix}\n#1\n\\end{vmatrix}" }
685 | ]
686 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2016",
4 | "module": "commonjs",
5 | "moduleResolution": "node",
6 | "strictPropertyInitialization": true,
7 | "sourceMap": true,
8 | "noImplicitAny": true,
9 | "noImplicitThis": true,
10 | "noImplicitReturns": true,
11 | "declaration": true,
12 | "outDir": "./lib",
13 | "strict": true,
14 | "esModuleInterop": true,
15 | "resolveJsonModule": true,
16 | "allowSyntheticDefaultImports": true
17 | },
18 | "include": ["src"],
19 | "exclude": ["node_modules", "**/__tests__/*"]
20 | }
21 |
--------------------------------------------------------------------------------