UNPKG

11.7 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.escapeLatex = escapeLatex;
7exports.toSymbol = toSymbol;
8exports.defaultTemplate = exports.latexFunctions = exports.latexOperators = exports.latexSymbols = void 0;
9
10var _escapeLatex = _interopRequireDefault(require("escape-latex"));
11
12var _object = require("./object.js");
13
14function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
16/* eslint no-template-curly-in-string: "off" */
17var latexSymbols = {
18 // GREEK LETTERS
19 Alpha: 'A',
20 alpha: '\\alpha',
21 Beta: 'B',
22 beta: '\\beta',
23 Gamma: '\\Gamma',
24 gamma: '\\gamma',
25 Delta: '\\Delta',
26 delta: '\\delta',
27 Epsilon: 'E',
28 epsilon: '\\epsilon',
29 varepsilon: '\\varepsilon',
30 Zeta: 'Z',
31 zeta: '\\zeta',
32 Eta: 'H',
33 eta: '\\eta',
34 Theta: '\\Theta',
35 theta: '\\theta',
36 vartheta: '\\vartheta',
37 Iota: 'I',
38 iota: '\\iota',
39 Kappa: 'K',
40 kappa: '\\kappa',
41 varkappa: '\\varkappa',
42 Lambda: '\\Lambda',
43 lambda: '\\lambda',
44 Mu: 'M',
45 mu: '\\mu',
46 Nu: 'N',
47 nu: '\\nu',
48 Xi: '\\Xi',
49 xi: '\\xi',
50 Omicron: 'O',
51 omicron: 'o',
52 Pi: '\\Pi',
53 pi: '\\pi',
54 varpi: '\\varpi',
55 Rho: 'P',
56 rho: '\\rho',
57 varrho: '\\varrho',
58 Sigma: '\\Sigma',
59 sigma: '\\sigma',
60 varsigma: '\\varsigma',
61 Tau: 'T',
62 tau: '\\tau',
63 Upsilon: "\\Upsilon",
64 upsilon: "\\upsilon",
65 Phi: '\\Phi',
66 phi: '\\phi',
67 varphi: '\\varphi',
68 Chi: 'X',
69 chi: '\\chi',
70 Psi: '\\Psi',
71 psi: '\\psi',
72 Omega: '\\Omega',
73 omega: '\\omega',
74 // logic
75 "true": '\\mathrm{True}',
76 "false": '\\mathrm{False}',
77 // other
78 i: 'i',
79 // TODO use \i ??
80 inf: '\\infty',
81 Inf: '\\infty',
82 infinity: '\\infty',
83 Infinity: '\\infty',
84 oo: '\\infty',
85 lim: '\\lim',
86 undefined: '\\mathbf{?}'
87};
88exports.latexSymbols = latexSymbols;
89var latexOperators = {
90 transpose: '^\\top',
91 ctranspose: '^H',
92 factorial: '!',
93 pow: '^',
94 dotPow: '.^\\wedge',
95 // TODO find ideal solution
96 unaryPlus: '+',
97 unaryMinus: '-',
98 bitNot: '\\~',
99 // TODO find ideal solution
100 not: '\\neg',
101 multiply: '\\cdot',
102 divide: '\\frac',
103 // TODO how to handle that properly?
104 dotMultiply: '.\\cdot',
105 // TODO find ideal solution
106 dotDivide: '.:',
107 // TODO find ideal solution
108 mod: '\\mod',
109 add: '+',
110 subtract: '-',
111 to: '\\rightarrow',
112 leftShift: '<<',
113 rightArithShift: '>>',
114 rightLogShift: '>>>',
115 equal: '=',
116 unequal: '\\neq',
117 smaller: '<',
118 larger: '>',
119 smallerEq: '\\leq',
120 largerEq: '\\geq',
121 bitAnd: '\\&',
122 bitXor: "\\underline{|}",
123 bitOr: '|',
124 and: '\\wedge',
125 xor: '\\veebar',
126 or: '\\vee'
127};
128exports.latexOperators = latexOperators;
129var latexFunctions = {
130 // arithmetic
131 abs: {
132 1: '\\left|${args[0]}\\right|'
133 },
134 add: {
135 2: "\\left(${args[0]}".concat(latexOperators.add, "${args[1]}\\right)")
136 },
137 cbrt: {
138 1: '\\sqrt[3]{${args[0]}}'
139 },
140 ceil: {
141 1: '\\left\\lceil${args[0]}\\right\\rceil'
142 },
143 cube: {
144 1: '\\left(${args[0]}\\right)^3'
145 },
146 divide: {
147 2: '\\frac{${args[0]}}{${args[1]}}'
148 },
149 dotDivide: {
150 2: "\\left(${args[0]}".concat(latexOperators.dotDivide, "${args[1]}\\right)")
151 },
152 dotMultiply: {
153 2: "\\left(${args[0]}".concat(latexOperators.dotMultiply, "${args[1]}\\right)")
154 },
155 dotPow: {
156 2: "\\left(${args[0]}".concat(latexOperators.dotPow, "${args[1]}\\right)")
157 },
158 exp: {
159 1: '\\exp\\left(${args[0]}\\right)'
160 },
161 expm1: "\\left(e".concat(latexOperators.pow, "{${args[0]}}-1\\right)"),
162 fix: {
163 1: '\\mathrm{${name}}\\left(${args[0]}\\right)'
164 },
165 floor: {
166 1: '\\left\\lfloor${args[0]}\\right\\rfloor'
167 },
168 gcd: '\\gcd\\left(${args}\\right)',
169 hypot: '\\hypot\\left(${args}\\right)',
170 log: {
171 1: '\\ln\\left(${args[0]}\\right)',
172 2: '\\log_{${args[1]}}\\left(${args[0]}\\right)'
173 },
174 log10: {
175 1: '\\log_{10}\\left(${args[0]}\\right)'
176 },
177 log1p: {
178 1: '\\ln\\left(${args[0]}+1\\right)',
179 2: '\\log_{${args[1]}}\\left(${args[0]}+1\\right)'
180 },
181 log2: '\\log_{2}\\left(${args[0]}\\right)',
182 mod: {
183 2: "\\left(${args[0]}".concat(latexOperators.mod, "${args[1]}\\right)")
184 },
185 multiply: {
186 2: "\\left(${args[0]}".concat(latexOperators.multiply, "${args[1]}\\right)")
187 },
188 norm: {
189 1: '\\left\\|${args[0]}\\right\\|',
190 2: undefined // use default template
191
192 },
193 nthRoot: {
194 2: '\\sqrt[${args[1]}]{${args[0]}}'
195 },
196 nthRoots: {
197 2: '\\{y : $y^{args[1]} = {${args[0]}}\\}'
198 },
199 pow: {
200 2: "\\left(${args[0]}\\right)".concat(latexOperators.pow, "{${args[1]}}")
201 },
202 round: {
203 1: '\\left\\lfloor${args[0]}\\right\\rceil',
204 2: undefined // use default template
205
206 },
207 sign: {
208 1: '\\mathrm{${name}}\\left(${args[0]}\\right)'
209 },
210 sqrt: {
211 1: '\\sqrt{${args[0]}}'
212 },
213 square: {
214 1: '\\left(${args[0]}\\right)^2'
215 },
216 subtract: {
217 2: "\\left(${args[0]}".concat(latexOperators.subtract, "${args[1]}\\right)")
218 },
219 unaryMinus: {
220 1: "".concat(latexOperators.unaryMinus, "\\left(${args[0]}\\right)")
221 },
222 unaryPlus: {
223 1: "".concat(latexOperators.unaryPlus, "\\left(${args[0]}\\right)")
224 },
225 // bitwise
226 bitAnd: {
227 2: "\\left(${args[0]}".concat(latexOperators.bitAnd, "${args[1]}\\right)")
228 },
229 bitNot: {
230 1: latexOperators.bitNot + '\\left(${args[0]}\\right)'
231 },
232 bitOr: {
233 2: "\\left(${args[0]}".concat(latexOperators.bitOr, "${args[1]}\\right)")
234 },
235 bitXor: {
236 2: "\\left(${args[0]}".concat(latexOperators.bitXor, "${args[1]}\\right)")
237 },
238 leftShift: {
239 2: "\\left(${args[0]}".concat(latexOperators.leftShift, "${args[1]}\\right)")
240 },
241 rightArithShift: {
242 2: "\\left(${args[0]}".concat(latexOperators.rightArithShift, "${args[1]}\\right)")
243 },
244 rightLogShift: {
245 2: "\\left(${args[0]}".concat(latexOperators.rightLogShift, "${args[1]}\\right)")
246 },
247 // combinatorics
248 bellNumbers: {
249 1: '\\mathrm{B}_{${args[0]}}'
250 },
251 catalan: {
252 1: '\\mathrm{C}_{${args[0]}}'
253 },
254 stirlingS2: {
255 2: '\\mathrm{S}\\left(${args}\\right)'
256 },
257 // complex
258 arg: {
259 1: '\\arg\\left(${args[0]}\\right)'
260 },
261 conj: {
262 1: '\\left(${args[0]}\\right)^*'
263 },
264 im: {
265 1: '\\Im\\left\\lbrace${args[0]}\\right\\rbrace'
266 },
267 re: {
268 1: '\\Re\\left\\lbrace${args[0]}\\right\\rbrace'
269 },
270 // logical
271 and: {
272 2: "\\left(${args[0]}".concat(latexOperators.and, "${args[1]}\\right)")
273 },
274 not: {
275 1: latexOperators.not + '\\left(${args[0]}\\right)'
276 },
277 or: {
278 2: "\\left(${args[0]}".concat(latexOperators.or, "${args[1]}\\right)")
279 },
280 xor: {
281 2: "\\left(${args[0]}".concat(latexOperators.xor, "${args[1]}\\right)")
282 },
283 // matrix
284 cross: {
285 2: '\\left(${args[0]}\\right)\\times\\left(${args[1]}\\right)'
286 },
287 ctranspose: {
288 1: "\\left(${args[0]}\\right)".concat(latexOperators.ctranspose)
289 },
290 det: {
291 1: '\\det\\left(${args[0]}\\right)'
292 },
293 dot: {
294 2: '\\left(${args[0]}\\cdot${args[1]}\\right)'
295 },
296 expm: {
297 1: '\\exp\\left(${args[0]}\\right)'
298 },
299 inv: {
300 1: '\\left(${args[0]}\\right)^{-1}'
301 },
302 sqrtm: {
303 1: "{${args[0]}}".concat(latexOperators.pow, "{\\frac{1}{2}}")
304 },
305 trace: {
306 1: '\\mathrm{tr}\\left(${args[0]}\\right)'
307 },
308 transpose: {
309 1: "\\left(${args[0]}\\right)".concat(latexOperators.transpose)
310 },
311 // probability
312 combinations: {
313 2: '\\binom{${args[0]}}{${args[1]}}'
314 },
315 combinationsWithRep: {
316 2: '\\left(\\!\\!{\\binom{${args[0]}}{${args[1]}}}\\!\\!\\right)'
317 },
318 factorial: {
319 1: "\\left(${args[0]}\\right)".concat(latexOperators.factorial)
320 },
321 gamma: {
322 1: '\\Gamma\\left(${args[0]}\\right)'
323 },
324 // relational
325 equal: {
326 2: "\\left(${args[0]}".concat(latexOperators.equal, "${args[1]}\\right)")
327 },
328 larger: {
329 2: "\\left(${args[0]}".concat(latexOperators.larger, "${args[1]}\\right)")
330 },
331 largerEq: {
332 2: "\\left(${args[0]}".concat(latexOperators.largerEq, "${args[1]}\\right)")
333 },
334 smaller: {
335 2: "\\left(${args[0]}".concat(latexOperators.smaller, "${args[1]}\\right)")
336 },
337 smallerEq: {
338 2: "\\left(${args[0]}".concat(latexOperators.smallerEq, "${args[1]}\\right)")
339 },
340 unequal: {
341 2: "\\left(${args[0]}".concat(latexOperators.unequal, "${args[1]}\\right)")
342 },
343 // special
344 erf: {
345 1: 'erf\\left(${args[0]}\\right)'
346 },
347 // statistics
348 max: '\\max\\left(${args}\\right)',
349 min: '\\min\\left(${args}\\right)',
350 variance: '\\mathrm{Var}\\left(${args}\\right)',
351 // trigonometry
352 acos: {
353 1: '\\cos^{-1}\\left(${args[0]}\\right)'
354 },
355 acosh: {
356 1: '\\cosh^{-1}\\left(${args[0]}\\right)'
357 },
358 acot: {
359 1: '\\cot^{-1}\\left(${args[0]}\\right)'
360 },
361 acoth: {
362 1: '\\coth^{-1}\\left(${args[0]}\\right)'
363 },
364 acsc: {
365 1: '\\csc^{-1}\\left(${args[0]}\\right)'
366 },
367 acsch: {
368 1: '\\mathrm{csch}^{-1}\\left(${args[0]}\\right)'
369 },
370 asec: {
371 1: '\\sec^{-1}\\left(${args[0]}\\right)'
372 },
373 asech: {
374 1: '\\mathrm{sech}^{-1}\\left(${args[0]}\\right)'
375 },
376 asin: {
377 1: '\\sin^{-1}\\left(${args[0]}\\right)'
378 },
379 asinh: {
380 1: '\\sinh^{-1}\\left(${args[0]}\\right)'
381 },
382 atan: {
383 1: '\\tan^{-1}\\left(${args[0]}\\right)'
384 },
385 atan2: {
386 2: '\\mathrm{atan2}\\left(${args}\\right)'
387 },
388 atanh: {
389 1: '\\tanh^{-1}\\left(${args[0]}\\right)'
390 },
391 cos: {
392 1: '\\cos\\left(${args[0]}\\right)'
393 },
394 cosh: {
395 1: '\\cosh\\left(${args[0]}\\right)'
396 },
397 cot: {
398 1: '\\cot\\left(${args[0]}\\right)'
399 },
400 coth: {
401 1: '\\coth\\left(${args[0]}\\right)'
402 },
403 csc: {
404 1: '\\csc\\left(${args[0]}\\right)'
405 },
406 csch: {
407 1: '\\mathrm{csch}\\left(${args[0]}\\right)'
408 },
409 sec: {
410 1: '\\sec\\left(${args[0]}\\right)'
411 },
412 sech: {
413 1: '\\mathrm{sech}\\left(${args[0]}\\right)'
414 },
415 sin: {
416 1: '\\sin\\left(${args[0]}\\right)'
417 },
418 sinh: {
419 1: '\\sinh\\left(${args[0]}\\right)'
420 },
421 tan: {
422 1: '\\tan\\left(${args[0]}\\right)'
423 },
424 tanh: {
425 1: '\\tanh\\left(${args[0]}\\right)'
426 },
427 // unit
428 to: {
429 2: "\\left(${args[0]}".concat(latexOperators.to, "${args[1]}\\right)")
430 },
431 // utils
432 numeric: function numeric(node, options) {
433 // Not sure if this is strictly right but should work correctly for the vast majority of use cases.
434 return node.args[0].toTex();
435 },
436 // type
437 number: {
438 0: '0',
439 1: '\\left(${args[0]}\\right)',
440 2: '\\left(\\left(${args[0]}\\right)${args[1]}\\right)'
441 },
442 string: {
443 0: '\\mathtt{""}',
444 1: '\\mathrm{string}\\left(${args[0]}\\right)'
445 },
446 bignumber: {
447 0: '0',
448 1: '\\left(${args[0]}\\right)'
449 },
450 complex: {
451 0: '0',
452 1: '\\left(${args[0]}\\right)',
453 2: "\\left(\\left(${args[0]}\\right)+".concat(latexSymbols.i, "\\cdot\\left(${args[1]}\\right)\\right)")
454 },
455 matrix: {
456 0: '\\begin{bmatrix}\\end{bmatrix}',
457 1: '\\left(${args[0]}\\right)',
458 2: '\\left(${args[0]}\\right)'
459 },
460 sparse: {
461 0: '\\begin{bsparse}\\end{bsparse}',
462 1: '\\left(${args[0]}\\right)'
463 },
464 unit: {
465 1: '\\left(${args[0]}\\right)',
466 2: '\\left(\\left(${args[0]}\\right)${args[1]}\\right)'
467 }
468};
469exports.latexFunctions = latexFunctions;
470var defaultTemplate = '\\mathrm{${name}}\\left(${args}\\right)';
471exports.defaultTemplate = defaultTemplate;
472var latexUnits = {
473 deg: '^\\circ'
474};
475
476function escapeLatex(string) {
477 return (0, _escapeLatex["default"])(string, {
478 preserveFormatting: true
479 });
480} // @param {string} name
481// @param {boolean} isUnit
482
483
484function toSymbol(name, isUnit) {
485 isUnit = typeof isUnit === 'undefined' ? false : isUnit;
486
487 if (isUnit) {
488 if ((0, _object.hasOwnProperty)(latexUnits, name)) {
489 return latexUnits[name];
490 }
491
492 return '\\mathrm{' + escapeLatex(name) + '}';
493 }
494
495 if ((0, _object.hasOwnProperty)(latexSymbols, name)) {
496 return latexSymbols[name];
497 }
498
499 return escapeLatex(name);
500}
\No newline at end of file