UNPKG

2.8 kBJavaScriptView Raw
1'use strict'
2
3const escapeLatex = require('escape-latex')
4
5exports.symbols = {
6 // GREEK LETTERS
7 Alpha: 'A',
8 alpha: '\\alpha',
9 Beta: 'B',
10 beta: '\\beta',
11 Gamma: '\\Gamma',
12 gamma: '\\gamma',
13 Delta: '\\Delta',
14 delta: '\\delta',
15 Epsilon: 'E',
16 epsilon: '\\epsilon',
17 varepsilon: '\\varepsilon',
18 Zeta: 'Z',
19 zeta: '\\zeta',
20 Eta: 'H',
21 eta: '\\eta',
22 Theta: '\\Theta',
23 theta: '\\theta',
24 vartheta: '\\vartheta',
25 Iota: 'I',
26 iota: '\\iota',
27 Kappa: 'K',
28 kappa: '\\kappa',
29 varkappa: '\\varkappa',
30 Lambda: '\\Lambda',
31 lambda: '\\lambda',
32 Mu: 'M',
33 mu: '\\mu',
34 Nu: 'N',
35 nu: '\\nu',
36 Xi: '\\Xi',
37 xi: '\\xi',
38 Omicron: 'O',
39 omicron: 'o',
40 Pi: '\\Pi',
41 pi: '\\pi',
42 varpi: '\\varpi',
43 Rho: 'P',
44 rho: '\\rho',
45 varrho: '\\varrho',
46 Sigma: '\\Sigma',
47 sigma: '\\sigma',
48 varsigma: '\\varsigma',
49 Tau: 'T',
50 tau: '\\tau',
51 Upsilon: '\\Upsilon',
52 upsilon: '\\upsilon',
53 Phi: '\\Phi',
54 phi: '\\phi',
55 varphi: '\\varphi',
56 Chi: 'X',
57 chi: '\\chi',
58 Psi: '\\Psi',
59 psi: '\\psi',
60 Omega: '\\Omega',
61 omega: '\\omega',
62 // logic
63 'true': '\\mathrm{True}',
64 'false': '\\mathrm{False}',
65 // other
66 i: 'i', // TODO use \i ??
67 inf: '\\infty',
68 Inf: '\\infty',
69 infinity: '\\infty',
70 Infinity: '\\infty',
71 oo: '\\infty',
72 lim: '\\lim',
73 'undefined': '\\mathbf{?}'
74}
75
76exports.operators = {
77 'transpose': '^\\top',
78 'ctranspose': '^H',
79 'factorial': '!',
80 'pow': '^',
81 'dotPow': '.^\\wedge', // TODO find ideal solution
82 'unaryPlus': '+',
83 'unaryMinus': '-',
84 'bitNot': '\\~', // TODO find ideal solution
85 'not': '\\neg',
86 'multiply': '\\cdot',
87 'divide': '\\frac', // TODO how to handle that properly?
88 'dotMultiply': '.\\cdot', // TODO find ideal solution
89 'dotDivide': '.:', // TODO find ideal solution
90 'mod': '\\mod',
91 'add': '+',
92 'subtract': '-',
93 'to': '\\rightarrow',
94 'leftShift': '<<',
95 'rightArithShift': '>>',
96 'rightLogShift': '>>>',
97 'equal': '=',
98 'unequal': '\\neq',
99 'smaller': '<',
100 'larger': '>',
101 'smallerEq': '\\leq',
102 'largerEq': '\\geq',
103 'bitAnd': '\\&',
104 'bitXor': '\\underline{|}',
105 'bitOr': '|',
106 'and': '\\wedge',
107 'xor': '\\veebar',
108 'or': '\\vee'
109}
110
111exports.defaultTemplate = `\\mathrm{\${name}}\\left(\${args}\\right)`
112
113const units = {
114 deg: '^\\circ'
115}
116
117exports.escape = function (string) {
118 return escapeLatex(string, { 'preserveFormatting': true })
119}
120
121// @param {string} name
122// @param {boolean} isUnit
123exports.toSymbol = function (name, isUnit) {
124 isUnit = typeof isUnit === 'undefined' ? false : isUnit
125 if (isUnit) {
126 if (units.hasOwnProperty(name)) {
127 return units[name]
128 }
129
130 return '\\mathrm{' + exports.escape(name) + '}'
131 }
132
133 if (exports.symbols.hasOwnProperty(name)) {
134 return exports.symbols[name]
135 }
136
137 return exports.escape(name)
138}