10
0
mirror of https://github.com/LCPQ/QUESTDB_website.git synced 2024-12-25 13:53:48 +01:00

Support LaTex in molecule name

This commit is contained in:
Mickaël Véril 2021-11-09 10:37:33 +01:00 committed by Anthony Scemama
parent c3b19c8f7a
commit e0e3bb1597
6 changed files with 1293 additions and 7 deletions

View File

@ -31,6 +31,9 @@ draft: false
<script src="/js/GeometriesLoader.js"></script> <script src="/js/GeometriesLoader.js"></script>
<script src="/js/GeometryParseMetadataExtension.js"></script> <script src="/js/GeometryParseMetadataExtension.js"></script>
<script src="/js/tableToCSV.js"></script> <script src="/js/tableToCSV.js"></script>
<script src="/js/texparser.js"></script>
<script src="/js/unicodetable.js"></script>
<script src="/js/MoleculeFormater.js"></script>
<script> <script>
function adjustSticky() { function adjustSticky() {
const height = $("nav").height() const height = $("nav").height()
@ -320,7 +323,7 @@ draft: false
return "Unnamed set" return "Unnamed set"
} }
case "molecule": case "molecule":
return mhchemCE.extract(value) return moleculeFormater.toUnicode(value)
break; break;
default: default:
return value.toString() return value.toString()
@ -642,7 +645,7 @@ draft: false
Reflect.setPrototypeOf(ex[3], VertExcitationKind.prototype) Reflect.setPrototypeOf(ex[3], VertExcitationKind.prototype)
var tr = $("<tr/>") var tr = $("<tr/>")
if (printmol) { if (printmol) {
$("<th/>", { scope: "row", rowspan: moldat.size }).text((mhchemCE.test(molecule) ? MathJaxUtils.getMathJaxString(molecule.toString()) : molecule)).appendTo(tr) $("<th/>", { scope: "row", rowspan: moldat.size }).text(moleculeFormater.toWebLatex(molecule)).appendTo(tr)
printmol = false printmol = false
} }
var Vertkindtext = "" var Vertkindtext = ""

View File

@ -2,13 +2,13 @@ class GeometriesLoader{
static async loadForAsync(array){ static async loadForAsync(array){
var xyzs=[] var xyzs=[]
for (const item of array) { for (const item of array) {
const mymol=mhchemCE.extract(item.molecule).toLowerCase().replace(" ","_") const mymol=moleculeFormater.toFileName(item.molecule)
const myset=item.set.split("#").join("") const myset=item.set.replace('#','')
try { try {
const mol=await Geometry.loadXYZAsync(`/${myset}/${mymol}.xyz`) const mol=await Geometry.loadXYZAsync(`/${myset}/${mymol}.xyz`)
xyzs.push(mol) xyzs.push(mol)
} catch (error) { } catch (error) {
console.error("Geometry not found",item) console.error("Geometry not found",item,error)
} }
} }
return xyzs.flat() return xyzs.flat()

View File

@ -0,0 +1,35 @@
class moleculeFormater{
static get __mathRegEx() {
return /(?:(?<!\\)|(?<=\\{2}))\$(.*?)(?:(?<!\\)|(?<=\\{2}))\$/gi
}
static toWebLatex(string) {
if(mhchemCE.test(string)) {
return MathJaxUtils.getMathJaxString(string)
}
else {
return string.replace(moleculeFormater.__mathRegEx,(v,p1)=>MathJaxUtils.getMathJaxString(p1))
}
}
static toUnicode(string) {
if (mhchemCE.test(string)) {
return mhchemCE.extract(string)
}
else {
return string.replace(moleculeFormater.__mathRegEx,(v,p1)=>{
return texparser.parse_str(p1,0).text
})
}
}
static toFileName(string) {
var molpart = string
if (mhchemCE.test(molpart)) {
molpart = mhchemCE.extract(molpart)
}
else {
molpart = molpart.replace(moleculeFormater.__mathRegEx,(v,p1)=>{
return p1.replace('\\','')
})
}
return molpart.toLowerCase().replace(' ','_')
}
}

385
static/js/texparser.js Normal file
View File

@ -0,0 +1,385 @@
// source: https://github.com/kercl/LaTeX-to-Unicode/tree/master
texparser = {
replace_chars: function(x, table) {
var res = "";
for(i in x)
if(x[i] in table)
res = res + table[x[i]];
else
res = res + x[i];
return res;
},
trim_tokens: function(tokens) {
var beg = 0, end = tokens.length - 1;
for(; beg < tokens.length; beg++)
if(!this.whitespace(tokens[beg].object))
break;
for(; end >= 0; end--)
if(!this.whitespace(tokens[end].object))
break;
return tokens.slice(beg, end);
},
strings_disjoint: function(x, y) {
if(x.length != y.length)
return false;
for(var i = 0; i < x.length; i++)
if(x[i] == y[i])
return false;
return true;
},
optimize: function(tokens) {
var single = "";
var sliceat = -1;
for(var i = 0; i < tokens.length; i++) {
if((tokens[i].object.length == 1 &&
"_^{}$".indexOf(tokens[i].object) == -1) || this.whitespace(tokens[i].object))
single = single + tokens[i].object;
else {
sliceat = i;
break;
}
}
if(sliceat == -1)
return [{object:single}];
return [{object:single}].concat(tokens.slice(sliceat));
},
tokenize: function(str) {
var ret = [];
str = str.replace(/\u200B/g, "\\");
while(str != "") {
var s = "";
if("_^{}$".indexOf(str[0]) > -1) {
s = str[0];
}else if(str[0] == '\\') {
s = str.match(/^\\([a-zA-Z]+|\$|\\|\{|\}| |\_|\^)/g);
if(s != null)
s = s[0];
else
s = str[0];
}else {
var s1 = str.match(/^[^_\\\$\^\{\}\s]/g),
s2 = str.match(/^[^_\\\$\^\{\}\S]+/g);
if(s1 == null) {
s = s2[0];
}else if(s2 == null) { // not whitespace
s = s1[0];
}else {
s = s[0];
}
}
ret.push({object:s});
str = str.substring(Math.max(1,s.length));
}
var ret2 = this.optimize(ret);
return ret2;
},
whitespace: function(str) {
return str.match(/^\s+/g) != null;
},
tag: function(tok) {
return (tok.object[0] == "\\" && tok.object.length > 1) || tok.object == "^" || tok.object == "_";
},
extract_block: function(tokens, begin, start_token, end_token) {
start_token = typeof start_token !== 'undefined' ? start_token : "{";
end_token = typeof end_token !== 'undefined' ? end_token : "}";
if(tokens[begin] == undefined)
return [];
if((this.tag(tokens[begin]) || tokens[begin].object == "\\") && tokens[begin].caret != undefined)
return [];
if(tokens[begin].object != start_token)
return [tokens[begin]];
if(tokens[begin].closed != true)
return [];
var bc = 1;
var res = [tokens[begin]];
for(var i = begin+1; i < tokens.length; i++) {
if(tokens[i].object == start_token)
bc++;
else if(tokens[i].object == end_token) {
bc--;
if(bc == 0) {
res.push(tokens[i]);
return res;
}
}
res.push(tokens[i]);
}
return [];
},
finish: function(str) {
return str;
},
reformat_math: function(str) {
var res = tag_table["\\textit"].value(str.replace(/\\ /g, "\u00A0"));
res = res.replace(/ /g, "");
return res.replace(/[><=≌≊≆≈⋍∽≅⋞⋟⪖⪕⩵≡≧⩾≥⟵≫⪊≩⪈≳⪆⋛⪌≷⇔↔≦⩽⪅⋚⪋≲≤⪉≨⪇≴←⟵⇐↔⇔→⟶⇒↦≹∈∋∌∉≸≮≯≠≾≼≼⪹⪵⇒≿⫅⊆⫋⊊⊂≽≽⪺⪶⋩≻⫆⊇⫌⊋⊃⋑⋐]|:./g, function(x) {
if(x.match(/:./g))
return ": " + x[1];
return "\u2009" + x + "\u2009";
}).trim();
},
parse_str: function(str, cursorpos) {
var bracketstack = [], beginstack = [];
var tokens = this.tokenize(str);
var carettrace = 0;
var mathmodebegin = -1;
for(var i = 0; i < tokens.length; i++) {
if(tokens[i].object == "{") {
bracketstack.push(i);
}else if(tokens[i].object == "}" && bracketstack.length > 0) {
tokens[bracketstack[bracketstack.length-1]].closed = true;
tokens[i].closed = true;
bracketstack.pop();
}
if(tokens[i].object == "\\begin") {
beginstack.push(i);
}else if(tokens[i].object == "\\end" && beginstack.length > 0) {
tokens[beginstack[beginstack.length-1]].closed = true;
tokens[i].closed = true;
beginstack.pop();
}
if(tokens[i].object == "$") {
if(mathmodebegin != -1) {
tokens[mathmodebegin].closed = true;
tokens[i].closed = true;
}else {
mathmodebegin = i;
}
}
if(cursorpos > carettrace && cursorpos <= carettrace + tokens[i].object.length)
tokens[i].caret = cursorpos - carettrace;
carettrace = carettrace + tokens[i].object.length;
}
for(var i = 0; i < bracketstack.length; i++)
tokens[bracketstack[i]].closed = false;
for(var i = 0; i < beginstack.length; i++)
tokens[beginstack[i]].closed = false;
var res = this.parse(tokens);
return res;
},
"itemize": function(tokens) {
console.log("itemize");
var tmp_tokens = [];
for(var i = 0; i < tokens.length - 1; i++) {
if(tokens[i].object == "\\item" && this.whitespace(tokens[i + 1].object)) {
tmp_tokens.push(tokens[i]);
i = i + 1;
}else if(tokens[i + 1].object == "\\item" && this.whitespace(tokens[i].object)) {
}else if(tokens[i].object.indexOf("\n") > -1) {
tmp_tokens.push({object:"\n"});
}else {
tmp_tokens.push(tokens[i]);
}
}
console.log(tmp_tokens);
tag_table["\\item"] = {type:"symbol",value:"\n • "};
var res = this.parse(tmp_tokens);
tag_table["\\item"] = undefined;
res.text = res.text.replace(/\n( • )?/g, function(x) { if(x.length == 1) return "\n "; else return x; }) + "\n\n";
return res;
},
"theorem": function(tokens) {
var res = this.parse(this.trim_tokens(tokens));
res.text = tag_table["\\textbf"].value("Theorem: ") + res.text + "\n";
return res;
},
"proof": function(tokens) {
var res = this.parse(this.trim_tokens(tokens));
res.text = tag_table["\\textbf"].value("Proof: ") + res.text + "\n\u200F□\u200F\n";
return res;
},
"align*": function(tokens) {
var res = this.parse( [{object:"$",closed:true}].concat(this.trim_tokens(tokens)).concat([{object:"$",closed:true}]) );
res.text = "\n " + res.text.replace(/\n/g, "\n ") + "\n\n";
return res;
},
parse_depth:0,
parse: function(tokens) {
this.parse_depth++;
var res = "", mathmode = null;
var cursorpos = -1;
var decorator_stack = [];
for(var i = 0; i < tokens.length; i++) {
if(tokens[i].caret != undefined && tokens[i].closed == undefined) {
if(tokens[i].object != "\\\\"
&& tokens[i].object != "\\_"
&& tokens[i].object != "\\}"
&& tokens[i].object != "\\{"
&& tokens[i].object != "\\$"
&& tokens[i].object != "\\^"
&& tokens[i].object != "\\$") {
cursorpos = res.length + tokens[i].caret;
res = res + tokens[i].object;
continue;
}
}
if(tokens[i].object == "{" || tokens[i].object == "}") {
if(tokens[i].closed != true)
res = res + tokens[i].object;
if(tokens[i].caret != undefined && tokens[i].object == "}") {
cursorpos = cursorpos + res.length + 1;
}
}else if(tokens[i].object == "$" && tokens[i].closed == true) {
if(mathmode == null) {
mathmode = res;
res = "";
}else {
res = mathmode + this.reformat_math(res);
mathmode = null;
}
}else {
if(this.tag(tokens[i])) {
if(tag_table[tokens[i].object] != undefined) {
if(tag_table[tokens[i].object].type == "symbol") {
var val = tag_table[tokens[i].object].value;
res = res + val;
if(tokens[i].caret != undefined && cursorpos == -1)
cursorpos = res.length + val.length - 1;
}else if(tag_table[tokens[i].object].type == "decorator" && i < tokens.length - 1) {
var subblock = this.extract_block(tokens, i+1);
if(subblock.length > 0) {
sret = this.parse(subblock);
var subs = tag_table[tokens[i].object].value(sret.text);
res = res + subs;
if(sret.caret != -1 && cursorpos == -1) {
cursorpos = res.length;
}
i = i + subblock.length;
}else {
res = res + tokens[i].object;
}
}else if(tag_table[tokens[i].object].type == "decorator2" && i < tokens.length - 1) {
var subblock = this.extract_block(tokens, i+1);
var init_i = i;
if(subblock.length > 0) {
i = i + subblock.length;
var subblock2 = this.extract_block(tokens, i+1);
if(subblock2.length > 0) {
var sret1 = this.parse(subblock);
var sret2 = this.parse(subblock2);
if(cursorpos == -1)
cursorpos = sret1.caret + res.length;
if(cursorpos == -1)
cursorpos = sret2.caret + res.length;
var subs = tag_table[tokens[init_i].object].value(sret1.text, sret2.text);
res = res + subs;
i = i + subblock2.length;
if((sret1.caret != -1 || sret2.caret != -1) && cursorpos == -1) {
cursorpos = res.length + subs.length + 2;
}else if(tokens[i].caret != undefined) {
cursorpos = res.length + subs.length + 1;
}
}else {
res = res + tokens[init_i].object;
i = init_i;
if(tokens[i + 1].object == "{") {
tokens[i + 1].closed = undefined;
console.log(tokens[i + subblock.length]);
tokens[i + subblock.length].closed = undefined;
}
console.log("frac not finished:");
console.log(tokens);
}
}else {
res = res + tokens[i].object;
}
}else
res = res + tokens[i].object;
}else if(tokens[i].object == "\\begin" && i+1 < tokens.length) {
if(tokens[i+1].object == "{") {
var subblock = this.extract_block(tokens, i, "\\begin", "\\end");
var argument = this.extract_block(tokens, i+1);
if(argument.length > 0) {
tokens[i+1].closed = false;
tokens[i+argument.length].closed = false;
if(subblock.length > 0) {
var argument_parsed = this.parse(argument.slice(1,argument.length-1));
if(argument_parsed.text != this.parse(this.extract_block(tokens, i + subblock.length)).text) {
res = res + tokens[i].object;
continue;
}
if(argument_parsed.text in this) {
i = i + subblock.length + argument.length;
var parsed_block = this[argument_parsed.text](subblock.slice(argument.length + 1, subblock.length));
res = res + parsed_block.text;
}else {
res = res + tokens[i].object;
}
}else
res = res + tokens[i].object;
}else {
res = res + tokens[i].object;
}
}else
res = res + tokens[i].object;
}else if(tokens[i].object == "\\end" && i+1 < tokens.length) {
if(tokens[i+1].object == "{") {
var argument = this.extract_block(tokens, i+1);
if(argument.length > 0) {
tokens[i+1].closed = false;
tokens[i+argument.length].closed = false;
res = res + tokens[i].object;
}else {
res = res + tokens[i].object;
}
}else
res = res + tokens[i].object;
}else {
res = res + tokens[i].object;
}
}else {
res = res + tokens[i].object;
}
}
}
this.parse_depth--;
return {text:res, caret:cursorpos};
}
}

864
static/js/unicodetable.js Normal file
View File

@ -0,0 +1,864 @@
tag_table = {
"\\{": {type:"symbol",value:"\u200B{"},
"\\$": {type:"symbol",value:"\u200B$"},
"\\\\": {type:"symbol",value:"\u200B\\"},
"\\}": {type:"symbol",value:"\u200B}"},
"\\_": {type:"symbol",value:"\u200B_"},
"\\^": {type:"symbol",value:"\u200B^"},
"\\AA": {type:"symbol",value:"Å"},
"\\aa": {type:"symbol",value:"å"},
"\\AA": {type:"symbol",value:"Å"},
"\\ae": {type:"symbol",value:"æ"},
"\\AE": {type:"symbol",value:"Æ"},
"\\aleph": {type:"symbol",value:"ℵ"},
"\\allequal": {type:"symbol",value:"≌"},
"\\alpha": {type:"symbol",value:"α"},
"\\Alpha": {type:"symbol",value:"Α"},
"\\amalg": {type:"symbol",value:"⨿"},
"\\angle": {type:"symbol",value:"∠"},
"\\Angle": {type:"symbol",value:"⦜"},
"\\approxeq": {type:"symbol",value:"≊"},
"\\approxnotequal": {type:"symbol",value:"≆"},
"\\approx": {type:"symbol",value:"≈"},
"\\aquarius": {type:"symbol",value:"♒"},
"\\arccos": {type:"symbol",value:"arccos"},
"\\arccot": {type:"symbol",value:"arccot"},
"\\arcsin": {type:"symbol",value:"arcsin"},
"\\arctan": {type:"symbol",value:"arctan"},
"\\aries": {type:"symbol",value:"♈"},
"\\arrowwaveright": {type:"symbol",value:"↜"},
"\\ast": {type:"symbol",value:"*"},
"\\ast": {type:"symbol",value:""},
"\\asymp": {type:"symbol",value:"≍"},
"\\backepsilon": {type:"symbol",value:"϶"},
"\\backprime": {type:"symbol",value:""},
"\\backsimeq": {type:"symbol",value:"⋍"},
"\\backsim": {type:"symbol",value:"∽"},
"\\backslash": {type:"symbol",value:""},
"\\barwedge": {type:"symbol",value:"⌅"},
"\\because": {type:"symbol",value:"∵"},
"\\beta": {type:"symbol",value:"β"},
"\\Beta": {type:"symbol",value:"Β"},
"\\beth": {type:"symbol",value:"ℶ"},
"\\between": {type:"symbol",value:"≬"},
"\\bigcap": {type:"symbol",value:"⋂"},
"\\bigcirc": {type:"symbol",value:"○"},
"\\bigcup": {type:"symbol",value:""},
"\\bigtriangledown": {type:"symbol",value:"▽"},
"\\bigtriangleup": {type:"symbol",value:"△"},
"\\blacklozenge": {type:"symbol",value:"⧫"},
"\\blacksquare": {type:"symbol",value:"■"},
"\\blacktriangledown": {type:"symbol",value:"▾"},
"\\blacktriangleleft": {type:"symbol",value:"◂"},
"\\blacktriangleright": {type:"symbol",value:"▸"},
"\\blacktriangle": {type:"symbol",value:"▴"},
"\\bot": {type:"symbol",value:"⊥"},
"\\bowtie": {type:"symbol",value:"⋈"},
"\\boxdot": {type:"symbol",value:"⊡"},
"\\boxminus": {type:"symbol",value:"⊟"},
"\\boxplus": {type:"symbol",value:"⊞"},
"\\boxtimes": {type:"symbol",value:"⊠"},
"\\Box": {type:"symbol",value:"□"},
"\\bullet": {type:"symbol",value:"∙"},
"\\bumpeq": {type:"symbol",value:"≏"},
"\\Bumpeq": {type:"symbol",value:"≎"},
"\\cancer": {type:"symbol",value:"♋"},
"\\capricornus": {type:"symbol",value:"♑"},
"\\cap": {type:"symbol",value:"∩"},
"\\Cap": {type:"symbol",value:"⋒"},
"\\cdots": {type:"symbol",value:"⋯"},
"\\cdot": {type:"symbol",value:"·"},
"\\cdot": {type:"symbol",value:"⋅"},
"\\chi": {type:"symbol",value:"χ"},
"\\Chi": {type:"symbol",value:"Χ"},
"\\circeq": {type:"symbol",value:"≗"},
"\\circlearrowleft": {type:"symbol",value:"↺"},
"\\circlearrowright": {type:"symbol",value:"↻"},
"\\circledast": {type:"symbol",value:"⊛"},
"\\circledcirc": {type:"symbol",value:"⊚"},
"\\circleddash": {type:"symbol",value:"⊝"},
"\\circledS": {type:"symbol",value:"Ⓢ"},
"\\circ": {type:"symbol",value:"∘"},
"\\clockoint": {type:"symbol",value:"⨏"},
"\\clubsuit": {type:"symbol",value:"♣"},
"\\clwintegral": {type:"symbol",value:"∱"},
"\\Colon": {type:"symbol",value:"∷"},
"\\complement": {type:"symbol",value:"∁"},
"\\cong": {type:"symbol",value:"≅"},
"\\coprod": {type:"symbol",value:"∐"},
"\\copyright": {type:"symbol",value:"©"},
"\\cosh": {type:"symbol",value:"cosh"},
"\\cos": {type:"symbol",value:"cos"},
"\\coth": {type:"symbol",value:"coth"},
"\\cot": {type:"symbol",value:"cot"},
"\\csc": {type:"symbol",value:"csc"},
"\\c": {type:"symbol",value:"̧"},
"\\cup": {type:"symbol",value:""},
"\\Cup": {type:"symbol",value:"⋓"},
"\\curlyeqprec": {type:"symbol",value:"⋞"},
"\\curlyeqsucc": {type:"symbol",value:"⋟"},
"\\curlyvee": {type:"symbol",value:"⋎"},
"\\curlywedge": {type:"symbol",value:"⋏"},
"\\curvearrowleft": {type:"symbol",value:"↶"},
"\\curvearrowright": {type:"symbol",value:"↷"},
"\\dagger": {type:"symbol",value:"†"},
"\\daleth": {type:"symbol",value:"ℸ"},
"\\dashv": {type:"symbol",value:"⊣"},
"\\dblarrowupdown": {type:"symbol",value:"⇅"},
"\\ddagger": {type:"symbol",value:"‡"},
"\\ddddot": {type:"symbol",value:"⃜"},
"\\dddot": {type:"symbol",value:"⃛"},
"\\delta": {type:"symbol",value:"δ"},
"\\Delta": {type:"symbol",value:"Δ"},
"\\dh": {type:"symbol",value:"ð"},
"\\DH": {type:"symbol",value:"Ð"},
"\\diagup": {type:"symbol",value:""},
"\\diamondsuit": {type:"symbol",value:"♢"},
"\\diamond": {type:"symbol",value:"⋄"},
"\\Diamond": {type:"symbol",value:"◇"},
"\\digamma": {type:"symbol",value:"ϝ"},
"\\Digamma": {type:"symbol",value:"Ϝ"},
"\\divideontimes": {type:"symbol",value:"⋇"},
"\\div": {type:"symbol",value:"÷"},
"\\dj": {type:"symbol",value:"đ"},
"\\DJ": {type:"symbol",value:"Đ"},
"\\doteqdot": {type:"symbol",value:"≑"},
"\\doteq": {type:"symbol",value:"≐"},
"\\dotplus": {type:"symbol",value:"∔"},
"\\dots": {type:"symbol",value:"…"},
"\\DownArrowBar": {type:"symbol",value:"⤓"},
"\\downarrow": {type:"symbol",value:"↓"},
"\\Downarrow": {type:"symbol",value:"⇓"},
"\\DownArrowUpArrow": {type:"symbol",value:"⇵"},
"\\downdownarrows": {type:"symbol",value:"⇊"},
"\\downharpoonleft": {type:"symbol",value:"⇃"},
"\\downharpoonright": {type:"symbol",value:"⇂"},
"\\DownLeftRightVector": {type:"symbol",value:"⥐"},
"\\DownLeftTeeVector": {type:"symbol",value:"⥞"},
"\\DownLeftVectorBar": {type:"symbol",value:"⥖"},
"\\DownRightTeeVector": {type:"symbol",value:"⥟"},
"\\DownRightVectorBar": {type:"symbol",value:"⥗"},
"\\downslopeellipsis": {type:"symbol",value:"⋱"},
"\\eighthnote": {type:"symbol",value:"♪"},
"\\ell": {type:"symbol",value:""},
"\\Elolarr": {type:"symbol",value:"⥀"},
"\\Elorarr": {type:"symbol",value:"⥁"},
"\\ElOr": {type:"symbol",value:"⩖"},
"\\Elroang": {type:"symbol",value:"⦆"},
"\\Elxsqcup": {type:"symbol",value:"⨆"},
"\\Elxuplus": {type:"symbol",value:"⨄"},
"\\ElzAnd": {type:"symbol",value:"⩓"},
"\\Elzbar": {type:"symbol",value:"̶"},
"\\Elzbtdl": {type:"symbol",value:"ɬ"},
"\\ElzCint": {type:"symbol",value:"⨍"},
"\\Elzcirfb": {type:"symbol",value:"◒"},
"\\Elzcirfl": {type:"symbol",value:"◐"},
"\\Elzcirfr": {type:"symbol",value:"◑"},
"\\Elzclomeg": {type:"symbol",value:"ɷ"},
"\\Elzddfnc": {type:"symbol",value:"⦙"},
"\\Elzdefas": {type:"symbol",value:"⧋"},
"\\Elzdlcorn": {type:"symbol",value:"⎣"},
"\\Elzdshfnc": {type:"symbol",value:"┆"},
"\\Elzdyogh": {type:"symbol",value:"ʤ"},
"\\Elzesh": {type:"symbol",value:"ʃ"},
"\\Elzfhr": {type:"symbol",value:"ɾ"},
"\\Elzglst": {type:"symbol",value:"ʔ"},
"\\Elzhlmrk": {type:"symbol",value:"ˑ"},
"\\ElzInf": {type:"symbol",value:"⨇"},
"\\Elzinglst": {type:"symbol",value:"ʖ"},
"\\Elzinvv": {type:"symbol",value:"ʌ"},
"\\Elzinvw": {type:"symbol",value:"ʍ"},
"\\ElzLap": {type:"symbol",value:"⧊"},
"\\Elzlmrk": {type:"symbol",value:"ː"},
"\\Elzlow": {type:"symbol",value:"˕"},
"\\Elzlpargt": {type:"symbol",value:"⦠"},
"\\Elzltlmr": {type:"symbol",value:"ɱ"},
"\\Elzltln": {type:"symbol",value:"ɲ"},
"\\Elzminhat": {type:"symbol",value:"⩟"},
"\\Elzopeno": {type:"symbol",value:"ɔ"},
"\\ElzOr": {type:"symbol",value:"⩔"},
"\\Elzpalh": {type:"symbol",value:"̡"},
"\\Elzpbgam": {type:"symbol",value:"ɤ"},
"\\Elzpgamma": {type:"symbol",value:"ɣ"},
"\\Elzpscrv": {type:"symbol",value:"ʋ"},
"\\Elzpupsil": {type:"symbol",value:"ʊ"},
"\\Elzrais": {type:"symbol",value:"˔"},
"\\Elzrarrx": {type:"symbol",value:"⥇"},
"\\Elzreapos": {type:"symbol",value:""},
"\\Elzreglst": {type:"symbol",value:"ʕ"},
"\\Elzrh": {type:"symbol",value:"̢"},
"\\ElzrLarr": {type:"symbol",value:"⥄"},
"\\ElzRlarr": {type:"symbol",value:"⥂"},
"\\Elzrl": {type:"symbol",value:"ɼ"},
"\\Elzrtld": {type:"symbol",value:"ɖ"},
"\\Elzrtll": {type:"symbol",value:"ɭ"},
"\\Elzrtln": {type:"symbol",value:"ɳ"},
"\\Elzrtlr": {type:"symbol",value:"ɽ"},
"\\Elzrtls": {type:"symbol",value:"ʂ"},
"\\Elzrtlt": {type:"symbol",value:"ʈ"},
"\\Elzrtlz": {type:"symbol",value:"ʐ"},
"\\Elzrttrnr": {type:"symbol",value:"ɻ"},
"\\Elzrvbull": {type:"symbol",value:"◘"},
"\\Elzsbbrg": {type:"symbol",value:"̪"},
"\\Elzsblhr": {type:"symbol",value:"˓"},
"\\Elzsbrhr": {type:"symbol",value:"˒"},
"\\Elzschwa": {type:"symbol",value:"ə"},
"\\Elzsqfl": {type:"symbol",value:"◧"},
"\\Elzsqfnw": {type:"symbol",value:"┙"},
"\\Elzsqfr": {type:"symbol",value:"◨"},
"\\Elzsqfse": {type:"symbol",value:"◪"},
"\\Elzsqspne": {type:"symbol",value:"⋥"},
"\\ElzSup": {type:"symbol",value:"⨈"},
"\\Elztdcol": {type:"symbol",value:"⫶"},
"\\Elztesh": {type:"symbol",value:"ʧ"},
"\\Elztfnc": {type:"symbol",value:"⦀"},
"\\ElzThr": {type:"symbol",value:"⨅"},
"\\ElzTimes": {type:"symbol",value:""},
"\\Elztrna": {type:"symbol",value:"ɐ"},
"\\Elztrnh": {type:"symbol",value:"ɥ"},
"\\Elztrnmlr": {type:"symbol",value:"ɰ"},
"\\Elztrnm": {type:"symbol",value:"ɯ"},
"\\Elztrnrl": {type:"symbol",value:"ɺ"},
"\\Elztrnr": {type:"symbol",value:"ɹ"},
"\\Elztrnsa": {type:"symbol",value:"ɒ"},
"\\Elztrnt": {type:"symbol",value:"ʇ"},
"\\Elztrny": {type:"symbol",value:"ʎ"},
"\\Elzverti": {type:"symbol",value:"ˌ"},
"\\Elzverts": {type:"symbol",value:"ˈ"},
"\\Elzvrecto": {type:"symbol",value:"▯"},
"\\Elzxh": {type:"symbol",value:"ħ"},
"\\Elzxl": {type:"symbol",value:"̵"},
"\\Elzxrat": {type:"symbol",value:"℞"},
"\\Elzyogh": {type:"symbol",value:"ʒ"},
"\\emptyset": {type:"symbol",value:"∅"},
"\\epsilon": {type:"symbol",value:"∊"},
"\\epsilon": {type:"symbol",value:"ε"},
"\\Epsilon": {type:"symbol",value:"Ε"},
"\\eqcirc": {type:"symbol",value:"≖"},
"\\eqslantgtr": {type:"symbol",value:"⪖"},
"\\eqslantless": {type:"symbol",value:"⪕"},
"\\Equal": {type:"symbol",value:"⩵"},
"\\equiv": {type:"symbol",value:"≡"},
"\\estimates": {type:"symbol",value:"≙"},
"\\eta": {type:"symbol",value:"η"},
"\\Eta": {type:"symbol",value:"Η"},
"\\eth": {type:"symbol",value:"ƪ"},
"\\eth": {type:"symbol",value:"ð"},
"\\exists": {type:"symbol",value:"∃"},
"\\fallingdotseq": {type:"symbol",value:"≒"},
"\\flat": {type:"symbol",value:"♭"},
"\\forall": {type:"symbol",value:"∀"},
"\\forcesextra": {type:"symbol",value:"⊨"},
"\\frown": {type:"symbol",value:"⌢"},
"\\gamma": {type:"symbol",value:"γ"},
"\\Gamma": {type:"symbol",value:"Γ"},
"\\gemini": {type:"symbol",value:"♊"},
"\\geqq": {type:"symbol",value:"≧"},
"\\geqslant": {type:"symbol",value:"⩾"},
"\\geq": {type:"symbol",value:"≥"},
"\\gets": {type:"symbol",value:"⟵"},
"\\ge": {type:"symbol",value:"≥"},
"\\gg": {type:"symbol",value:"≫"},
"\\gimel": {type:"symbol",value:"ℷ"},
"\\gnapprox": {type:"symbol",value:"⪊"},
"\\gneqq": {type:"symbol",value:"≩"},
"\\gneq": {type:"symbol",value:"⪈"},
"\\gnsim": {type:"symbol",value:"⋧"},
"\\greaterequivlnt": {type:"symbol",value:"≳"},
"\\gtrapprox": {type:"symbol",value:"⪆"},
"\\gtrdot": {type:"symbol",value:"⋗"},
"\\gtreqless": {type:"symbol",value:"⋛"},
"\\gtreqqless": {type:"symbol",value:"⪌"},
"\\gtrless": {type:"symbol",value:"≷"},
"\\guillemotleft": {type:"symbol",value:"«"},
"\\guillemotright": {type:"symbol",value:"»"},
"\\guilsinglleft": {type:"symbol",value:""},
"\\guilsinglright": {type:"symbol",value:""},
"\\hbar": {type:"symbol",value:"ℏ"},
"\\heartsuit": {type:"symbol",value:"♡"},
"\\hermitconjmatrix": {type:"symbol",value:"⊹"},
"\\homothetic": {type:"symbol",value:"∻"},
"\\hookleftarrow": {type:"symbol",value:"↩"},
"\\hookrightarrow": {type:"symbol",value:"↪"},
"\\hslash": {type:"symbol",value:"ℏ"},
"\\H": {type:"symbol",value:"̋"},
"\\idotsint": {type:"symbol",value:"∫⋯∫"},
"\\iff": {type:"symbol",value:"⟺"},
"\\iiint": {type:"symbol",value:"∭"},
"\\iint": {type:"symbol",value:"∬"},
"\\image": {type:"symbol",value:"⊷"},
"\\imath": {type:"symbol",value:"ı"},
"\\implies": {type:"symbol",value:"⇒"},
"\\Im": {type:"symbol",value:""},
"\\infty": {type:"symbol",value:"∞"},
"\\intercal": {type:"symbol",value:"⊺"},
"\\int": {type:"symbol",value:"∫"},
"\\in": {type:"symbol",value:"∈"},
"\\varin": {type:"symbol",value:"𝛜"},
"\\iota": {type:"symbol",value:"ι"},
"\\Iota": {type:"symbol",value:"Ι"},
"\\i": {type:"symbol",value:"ı"},
"\\jmath": {type:"symbol",value:"ȷ"},
"\\Join": {type:"symbol",value:"⋈"},
"\\jupiter": {type:"symbol",value:"♃"},
"\\kappa": {type:"symbol",value:"κ"},
"\\Kappa": {type:"symbol",value:"Κ"},
"\\Koppa": {type:"symbol",value:"Ϟ"},
"\\k": {type:"symbol",value:"̨"},
"\\lambda": {type:"symbol",value:"λ"},
"\\Lambda": {type:"symbol",value:"Λ"},
"\\land": {type:"symbol",value:"∧"},
"\\langle": {type:"symbol",value:"〈"},
"\\lazysinv": {type:"symbol",value:"∾"},
"\\lbrace": {type:"symbol",value:"{"},
"\\lceil": {type:"symbol",value:"⌈"},
"\\ldots": {type:"symbol",value:"…"},
"\\leadsto": {type:"symbol",value:"↝"},
"\\leftarrowtail": {type:"symbol",value:"↢"},
"\\leftarrow": {type:"symbol",value:"←"},
"\\Leftarrow": {type:"symbol",value:"⇐"},
"\\LeftDownTeeVector": {type:"symbol",value:"⥡"},
"\\LeftDownVectorBar": {type:"symbol",value:"⥙"},
"\\leftharpoondown": {type:"symbol",value:"↽"},
"\\leftharpoonup": {type:"symbol",value:"↼"},
"\\leftleftarrows": {type:"symbol",value:"⇇"},
"\\leftrightarrows": {type:"symbol",value:"⇆"},
"\\leftrightarrow": {type:"symbol",value:"↔"},
"\\Leftrightarrow": {type:"symbol",value:"⇔"},
"\\leftrightharpoons": {type:"symbol",value:"⇋"},
"\\leftrightsquigarrow": {type:"symbol",value:"↭"},
"\\LeftRightVector": {type:"symbol",value:"⥎"},
"\\LeftTeeVector": {type:"symbol",value:"⥚"},
"\\leftthreetimes": {type:"symbol",value:"⋋"},
"\\LeftTriangleBar": {type:"symbol",value:"⧏"},
"\\LeftUpDownVector": {type:"symbol",value:"⥑"},
"\\LeftUpTeeVector": {type:"symbol",value:"⥠"},
"\\LeftUpVectorBar": {type:"symbol",value:"⥘"},
"\\LeftVectorBar": {type:"symbol",value:"⥒"},
"\\leo": {type:"symbol",value:"♌"},
"\\leqq": {type:"symbol",value:"≦"},
"\\leqslant": {type:"symbol",value:"⩽"},
"\\leq": {type:"symbol",value:"≤"},
"\\lessapprox": {type:"symbol",value:"⪅"},
"\\lessdot": {type:"symbol",value:"⋖"},
"\\lesseqgtr": {type:"symbol",value:"⋚"},
"\\lesseqqgtr": {type:"symbol",value:"⪋"},
"\\lessequivlnt": {type:"symbol",value:"≲"},
"\\lessgtr": {type:"symbol",value:"≶"},
"\\le": {type:"symbol",value:"≤"},
"\\lfloor": {type:"symbol",value:"⌊"},
"\\lhd": {type:"symbol",value:"⊲"},
"\\libra": {type:"symbol",value:"♎"},
"\\llcorner": {type:"symbol",value:"⌞"},
"\\Lleftarrow": {type:"symbol",value:"⇚"},
"\\ll": {type:"symbol",value:"≪"},
"\\lmoustache": {type:"symbol",value:"⎰"},
"\\lnapprox": {type:"symbol",value:"⪉"},
"\\lneqq": {type:"symbol",value:"≨"},
"\\lneq": {type:"symbol",value:"⪇"},
"\\lnot": {type:"symbol",value:"¬"},
"\\lnsim": {type:"symbol",value:"≴"},
"\\longleftarrow": {type:"symbol",value:"←"},
"\\longleftarrow": {type:"symbol",value:"⟵"},
"\\Longleftarrow": {type:"symbol",value:"⇐"},
"\\longleftrightarrow": {type:"symbol",value:"↔"},
"\\Longleftrightarrow": {type:"symbol",value:"⇔"},
"\\longmapsto": {type:"symbol",value:"⇖"},
"\\longrightarrow": {type:"symbol",value:"→"},
"\\longrightarrow": {type:"symbol",value:"⟶"},
"\\Longrightarrow": {type:"symbol",value:"⇒"},
"\\looparrowleft": {type:"symbol",value:"↫"},
"\\looparrowright": {type:"symbol",value:"↬"},
"\\lor": {type:"symbol",value:""},
"\\lozenge": {type:"symbol",value:"◊"},
"\\lrcorner": {type:"symbol",value:"⌟"},
"\\Lsh": {type:"symbol",value:"↰"},
"\\ltimes": {type:"symbol",value:"⋉"},
"\\l": {type:"symbol",value:"ł"},
"\\L": {type:"symbol",value:"Ł"},
"\\male": {type:"symbol",value:"♂"},
"\\mapsto": {type:"symbol",value:"↦"},
"\\measuredangle": {type:"symbol",value:"∡"},
"\\mercury": {type:"symbol",value:"☿"},
"\\mho": {type:"symbol",value:"℧"},
"\\mid": {type:"symbol",value:""},
"\\mkern1mu": {type:"symbol",value:""},
"\\mkern4mu": {type:"symbol",value:""},
"\\models": {type:"symbol",value:"⊨"},
"\\mp": {type:"symbol",value:"∓"},
"\\multimap": {type:"symbol",value:"⊸"},
"\\mu": {type:"symbol",value:"μ"},
"\\nabla": {type:"symbol",value:"∇"},
"\\natural": {type:"symbol",value:"♮"},
"\\nearrow": {type:"symbol",value:"↗"},
"\\neg": {type:"symbol",value:"¬"},
"\\neptune": {type:"symbol",value:"♆"},
"\\neq": {type:"symbol",value:"≠"},
"\\NestedGreaterGreater": {type:"symbol",value:"⪢"},
"\\NestedLessLess": {type:"symbol",value:"⪡"},
"\\nexists": {type:"symbol",value:"∄"},
"\\ngeq": {type:"symbol",value:"≠"},
"\\ngtr": {type:"symbol",value:"≯"},
"\\ng": {type:"symbol",value:"ŋ"},
"\\NG": {type:"symbol",value:"Ŋ"},
"\\ni": {type:"symbol",value:"∋"},
"\\nleftarrow": {type:"symbol",value:"↚"},
"\\nLeftarrow": {type:"symbol",value:"⇍"},
"\\nleftrightarrow": {type:"symbol",value:"↮"},
"\\nLeftrightarrow": {type:"symbol",value:"⇎"},
"\\nleq": {type:"symbol",value:"≰"},
"\\nless": {type:"symbol",value:"≮"},
"\\nmid": {type:"symbol",value:"∤"},
"\\nolinebreak": {type:"symbol",value:""},
"\\notgreaterless": {type:"symbol",value:"≹"},
"\\notin": {type:"symbol",value:"∉"},
"\\notlessgreater": {type:"symbol",value:"≸"},
"\\nparallel": {type:"symbol",value:"∦"},
"\\nrightarrow": {type:"symbol",value:"↛"},
"\\nRightarrow": {type:"symbol",value:"⇏"},
"\\nsubseteq": {type:"symbol",value:"⊊"},
"\\nsupseteq": {type:"symbol",value:"⊋"},
"\\ntrianglelefteq": {type:"symbol",value:"⋬"},
"\\ntriangleleft": {type:"symbol",value:"⋪"},
"\\ntrianglerighteq": {type:"symbol",value:"⋭"},
"\\ntriangleright": {type:"symbol",value:"⋫"},
"\\nu": {type:"symbol",value:"ν"},
"\\nu": {type:"symbol",value:"ν"},
"\\nvdash": {type:"symbol",value:"⊬"},
"\\nvDash": {type:"symbol",value:"⊭"},
"\\nVdash": {type:"symbol",value:"⊮"},
"\\nVDash": {type:"symbol",value:"⊯"},
"\\nwarrow": {type:"symbol",value:"↖"},
"\\odot": {type:"symbol",value:"⊙"},
"\\oe": {type:"symbol",value:"œ"},
"\\OE": {type:"symbol",value:"Œ"},
"\\oiiint": {type:"symbol",value:"∰"},
"\\oiint": {type:"symbol",value:"∯"},
"\\oint": {type:"symbol",value:"∮"},
"\\Omega": {type:"symbol",value:"Ω"},
"\\omega": {type:"symbol",value:"ω"},
"\\Omega": {type:"symbol",value:"Ω"},
"\\ominus": {type:"symbol",value:"⊖"},
"\\openbracketleft": {type:"symbol",value:"〚"},
"\\openbracketright": {type:"symbol",value:"〛"},
"\\oplus": {type:"symbol",value:"⊕"},
"\\original": {type:"symbol",value:"⊶"},
"\\oslash": {type:"symbol",value:"⊘"},
"\\otimes": {type:"symbol",value:"⊗"},
"\\o": {type:"symbol",value:"ø"},
"\\O": {type:"symbol",value:"Ø"},
"\\parallel": {type:"symbol",value:"∥"},
"\\partial": {type:"symbol",value:"∂"},
"\\partial": {type:"symbol",value:"𝛛"},
"\\perp": {type:"symbol",value:"⊥"},
"\\perspcorrespond": {type:"symbol",value:"⌆"},
"\\phi": {type:"symbol",value:"φ"},
"\\Phi": {type:"symbol",value:"Φ"},
"\\phi": {type:"symbol",value:"ϕ"},
"\\pisces": {type:"symbol",value:"♓"},
"\\pitchfork": {type:"symbol",value:"⋔"},
"\\pi": {type:"symbol",value:"π"},
"\\pi": {type:"symbol",value:"π"},
"\\Pi": {type:"symbol",value:"Π"},
"\\pluto": {type:"symbol",value:"♇"},
"\\pm": {type:"symbol",value:"±"},
"\\precapprox": {type:"symbol",value:"≾"},
"\\preccurlyeq": {type:"symbol",value:"≼"},
"\\precedesnotsimilar": {type:"symbol",value:"⋨"},
"\\preceq": {type:"symbol",value:"≼"},
"\\precnapprox": {type:"symbol",value:"⪹"},
"\\precneqq": {type:"symbol",value:"⪵"},
"\\prec": {type:"symbol",value:""},
"\\prime": {type:"symbol",value:""},
"\\prod": {type:"symbol",value:"∏"},
"\\propto": {type:"symbol",value:"∝"},
"\\psi": {type:"symbol",value:"ψ"},
"\\Psi": {type:"symbol",value:"Ψ"},
"\\P": {type:"symbol",value:"¶"},
"\\quarternote": {type:"symbol",value:"♩"},
"\\rangle": {type:"symbol",value:"〉"},
"\\rbrace": {type:"symbol",value:"}"},
"\\rceil": {type:"symbol",value:"⌉"},
"\\recorder": {type:"symbol",value:"⌕"},
"\\Re": {type:"symbol",value:""},
"\\ReverseUpEquilibrium": {type:"symbol",value:"⥯"},
"\\rfloor": {type:"symbol",value:"⌋"},
"\\rhd": {type:"symbol",value:"⊳"},
"\\rho": {type:"symbol",value:"ρ"},
"\\Rho": {type:"symbol",value:"Ρ"},
"\\rightanglearc": {type:"symbol",value:"⊾"},
"\\rightangle": {type:"symbol",value:"∟"},
"\\rightarrowtail": {type:"symbol",value:"↣"},
"\\rightarrow": {type:"symbol",value:"→"},
"\\Rightarrow": {type:"symbol",value:"⇒"},
"\\RightDownTeeVector": {type:"symbol",value:"⥝"},
"\\RightDownVectorBar": {type:"symbol",value:"⥕"},
"\\rightharpoondown": {type:"symbol",value:"⇁"},
"\\rightharpoonup": {type:"symbol",value:"⇀"},
"\\rightleftarrows": {type:"symbol",value:"⇄"},
"\\rightleftharpoons": {type:"symbol",value:"⇌"},
"\\rightmoon": {type:"symbol",value:"☾"},
"\\rightrightarrows": {type:"symbol",value:"⇉"},
"\\rightsquigarrow": {type:"symbol",value:"⇝"},
"\\RightTeeVector": {type:"symbol",value:"⥛"},
"\\rightthreetimes": {type:"symbol",value:"⋌"},
"\\RightTriangleBar": {type:"symbol",value:"⧐"},
"\\RightUpDownVector": {type:"symbol",value:"⥏"},
"\\RightUpTeeVector": {type:"symbol",value:"⥜"},
"\\RightUpVectorBar": {type:"symbol",value:"⥔"},
"\\RightVectorBar": {type:"symbol",value:"⥓"},
"\\risingdotseq": {type:"symbol",value:"≓"},
"\\rmoustache": {type:"symbol",value:"⎱"},
"\\RoundImplies": {type:"symbol",value:"⥰"},
"\\Rrightarrow": {type:"symbol",value:"⇛"},
"\\Rsh": {type:"symbol",value:"↱"},
"\\rtimes": {type:"symbol",value:"⋊"},
"\\r": {type:"symbol",value:"̊"},
"\\RuleDelayed": {type:"symbol",value:"⧴"},
"\\sagittarius": {type:"symbol",value:"♐"},
"\\Sampi": {type:"symbol",value:"Ϡ"},
"\\saturn": {type:"symbol",value:"♄"},
"\\scorpio": {type:"symbol",value:"♏"},
"\\searrow": {type:"symbol",value:"↘"},
"\\sec": {type:"symbol",value:"sec"},
"\\setminus": {type:"symbol",value:""},
"\\sharp": {type:"symbol",value:"♯"},
"\\sigma": {type:"symbol",value:"σ"},
"\\Sigma": {type:"symbol",value:"Σ"},
"\\simeq": {type:"symbol",value:"≃"},
"\\sim": {type:"symbol",value:""},
"\\sinh": {type:"symbol",value:"sinh"},
"\\sin": {type:"symbol",value:"sin"},
"\\smile": {type:"symbol",value:"⌣"},
"\\space": {type:"symbol",value:" "},
"\\spadesuit": {type:"symbol",value:"♠"},
"\\sphericalangle": {type:"symbol",value:"∢"},
"\\sqcap": {type:"symbol",value:"⊓"},
"\\sqcup": {type:"symbol",value:"⊔"},
"\\sqrint": {type:"symbol",value:"⨖"},
"\\sqsubseteq": {type:"symbol",value:"⊑"},
"\\sqsubset": {type:"symbol",value:"⊏"},
"\\sqsupseteq": {type:"symbol",value:"⊒"},
"\\sqsupset": {type:"symbol",value:"⊐"},
"\\square": {type:"symbol",value:"□"},
"\\ss": {type:"symbol",value:"ß"},
"\\starequal": {type:"symbol",value:"≛"},
"\\star": {type:"symbol",value:"⋆"},
"\\Stigma": {type:"symbol",value:"Ϛ"},
"\\S": {type:"symbol",value:"§"},
"\\subseteqq": {type:"symbol",value:"⫅"},
"\\subseteq": {type:"symbol",value:"⊆"},
"\\subsetneqq": {type:"symbol",value:"⫋"},
"\\subsetneq": {type:"symbol",value:"⊊"},
"\\subset": {type:"symbol",value:"⊂"},
"\\Subset": {type:"symbol",value:"⋐"},
"\\succapprox": {type:"symbol",value:"≿"},
"\\succcurlyeq": {type:"symbol",value:"≽"},
"\\succeq": {type:"symbol",value:"≽"},
"\\succnapprox": {type:"symbol",value:"⪺"},
"\\succneqq": {type:"symbol",value:"⪶"},
"\\succnsim": {type:"symbol",value:"⋩"},
"\\succ": {type:"symbol",value:"≻"},
"\\sum": {type:"symbol",value:"∑"},
"\\supseteqq": {type:"symbol",value:"⫆"},
"\\supseteq": {type:"symbol",value:"⊇"},
"\\supsetneqq": {type:"symbol",value:"⫌"},
"\\supsetneq": {type:"symbol",value:"⊋"},
"\\supset": {type:"symbol",value:"⊃"},
"\\Supset": {type:"symbol",value:"⋑"},
"\\surd": {type:"symbol",value:"√"},
"\\surfintegral": {type:"symbol",value:"∯"},
"\\swarrow": {type:"symbol",value:"↙"},
"\\tanh": {type:"symbol",value:"tanh"},
"\\tan": {type:"symbol",value:"tan"},
"\\taurus": {type:"symbol",value:"♉"},
"\\tau": {type:"symbol",value:"τ"},
"\\Tau": {type:"symbol",value:"Τ"},
"\\textasciiacute": {type:"symbol",value:"´"},
"\\textasciibreve": {type:"symbol",value:"˘"},
"\\textasciicaron": {type:"symbol",value:"ˇ"},
"\\textasciidieresis": {type:"symbol",value:"¨"},
"\\textasciigrave": {type:"symbol",value:"`"},
"\\textasciimacron": {type:"symbol",value:"¯"},
"\\textasciitilde": {type:"symbol",value:"~"},
"\\textbackslash": {type:"symbol",value:"\\"},
"\\textbrokenbar": {type:"symbol",value:"¦"},
"\\textbullet": {type:"symbol",value:"•"},
"\\textcent": {type:"symbol",value:"¢"},
"\\textcopyright": {type:"symbol",value:"©"},
"\\textcurrency": {type:"symbol",value:"¤"},
"\\textdaggerdbl": {type:"symbol",value:"‡"},
"\\textdagger": {type:"symbol",value:"†"},
"\\textdegree": {type:"symbol",value:"°"},
"\\textdollar": {type:"symbol",value:"$"},
"\\textdoublepipe": {type:"symbol",value:"ǂ"},
"\\textemdash": {type:"symbol",value:"—"},
"\\textendash": {type:"symbol",value:""},
"\\textexclamdown": {type:"symbol",value:"¡"},
"\\texthvlig": {type:"symbol",value:"ƕ"},
"\\textnrleg": {type:"symbol",value:"ƞ"},
"\\textonehalf": {type:"symbol",value:"½"},
"\\textonequarter": {type:"symbol",value:"¼"},
"\\textordfeminine": {type:"symbol",value:"ª"},
"\\textordmasculine": {type:"symbol",value:"º"},
"\\textparagraph": {type:"symbol",value:"¶"},
"\\textperiodcentered": {type:"symbol",value:"˙"},
"\\textpertenthousand": {type:"symbol",value:"‱"},
"\\textperthousand": {type:"symbol",value:"‰"},
"\\textphi": {type:"symbol",value:"ɸ"},
"\\textquestiondown": {type:"symbol",value:"¿"},
"\\textquotedblleft": {type:"symbol",value:"“"},
"\\textquotedblright": {type:"symbol",value:"”"},
"\\textquotesingle": {type:"symbol",value:"'"},
"\\textregistered": {type:"symbol",value:"®"},
"\\textsection": {type:"symbol",value:"§"},
"\\textsterling": {type:"symbol",value:"£"},
"\\textTheta": {type:"symbol",value:"ϴ"},
"\\texttheta": {type:"symbol",value:"θ"},
"\\textthreequarters": {type:"symbol",value:"¾"},
"\\texttildelow": {type:"symbol",value:"˜"},
"\\texttimes": {type:"symbol",value:"×"},
"\\texttrademark": {type:"symbol",value:"™"},
"\\textturnk": {type:"symbol",value:"ʞ"},
"\\textvartheta": {type:"symbol",value:"ϑ"},
"\\textvisiblespace": {type:"symbol",value:"␣"},
"\\textyen": {type:"symbol",value:"¥"},
"\\therefore": {type:"symbol",value:"∴"},
"\\theta": {type:"symbol",value:"θ"},
"\\Theta": {type:"symbol",value:"Θ"},
"\\th": {type:"symbol",value:"þ"},
"\\TH": {type:"symbol",value:"Þ"},
"\\tildetrpl": {type:"symbol",value:"≋"},
"\\times": {type:"symbol",value:"×"},
"\\top": {type:"symbol",value:""},
"\\triangledown": {type:"symbol",value:"▿"},
"\\trianglelefteq": {type:"symbol",value:"⊴"},
"\\triangleleft": {type:"symbol",value:"◁"},
"\\triangleq": {type:"symbol",value:"≜"},
"\\trianglerighteq": {type:"symbol",value:"⊵"},
"\\triangleright": {type:"symbol",value:"▷"},
"\\triangle": {type:"symbol",value:"△"},
"\\truestate": {type:"symbol",value:"⊧"},
"\\twoheadleftarrow": {type:"symbol",value:"↞"},
"\\twoheadrightarrow": {type:"symbol",value:"↠"},
"\\ulcorner": {type:"symbol",value:"⌜"},
"\\unlhd": {type:"symbol",value:"⊴"},
"\\unrhd": {type:"symbol",value:"⊵"},
"\\UpArrowBar": {type:"symbol",value:"⤒"},
"\\uparrow": {type:"symbol",value:"↑"},
"\\Uparrow": {type:"symbol",value:"⇑"},
"\\updownarrow": {type:"symbol",value:"↕"},
"\\Updownarrow": {type:"symbol",value:"⇕"},
"\\UpEquilibrium": {type:"symbol",value:"⥮"},
"\\upharpoonleft": {type:"symbol",value:"↿"},
"\\upharpoonright": {type:"symbol",value:"↾"},
"\\uplus": {type:"symbol",value:"⊎"},
"\\upsilon": {type:"symbol",value:"υ"},
"\\Upsilon": {type:"symbol",value:"Υ"},
"\\Upsilon": {type:"symbol",value:"ϒ"},
"\\upslopeellipsis": {type:"symbol",value:"⋰"},
"\\upuparrows": {type:"symbol",value:"⇈"},
"\\uranus": {type:"symbol",value:"♅"},
"\\urcorner": {type:"symbol",value:"⌝"},
"\\u": {type:"symbol",value:"̆"},
"\\varepsilon": {type:"symbol",value:"ɛ"},
"\\varkappa": {type:"symbol",value:"ϰ"},
"\\varnothing": {type:"symbol",value:"∅"},
"\\varphi": {type:"symbol",value:"φ"},
"\\varpi": {type:"symbol",value:"ϖ"},
"\\varrho": {type:"symbol",value:"ϱ"},
"\\varsigma": {type:"symbol",value:"ς"},
"\\vartheta": {type:"symbol",value:"ϑ"},
"\\vartriangleleft": {type:"symbol",value:"⊲"},
"\\vartriangleright": {type:"symbol",value:"⊳"},
"\\vartriangle": {type:"symbol",value:"▵"},
"\\vdash": {type:"symbol",value:"⊢"},
"\\Vdash": {type:"symbol",value:"⊩"},
"\\VDash": {type:"symbol",value:"⊫"},
"\\vdots": {type:"symbol",value:"⋮"},
"\\veebar": {type:"symbol",value:"⊻"},
"\\vee": {type:"symbol",value:""},
"\\venus": {type:"symbol",value:"♀"},
"\\vert": {type:"symbol",value:"|"},
"\\Vert": {type:"symbol",value:"‖"},
"\\verymuchgreater": {type:"symbol",value:"⋙"},
"\\verymuchless": {type:"symbol",value:"⋘"},
"\\virgo": {type:"symbol",value:"♍"},
"\\volintegral": {type:"symbol",value:"∰"},
"\\v": {type:"symbol",value:"̌"},
"\\Vvdash": {type:"symbol",value:"⊪"},
"\\wedge": {type:"symbol",value:"∧"},
"\\wp": {type:"symbol",value:"℘"},
"\\wr": {type:"symbol",value:"≀"},
"\\xi": {type:"symbol",value:"ξ"},
"\\Xi": {type:"symbol",value:"Ξ"},
"\\zeta": {type:"symbol",value:"ζ"},
"\\Zeta": {type:"symbol",value:"Ζ"},
"\\sqrt": {type: "decorator", value: function(x) {return "√(" + x +")"}},
"\\bar": {type: "decorator", value: function(x) { return x.replace(/(.{1})/g,"$1\u0305"); }},
"\\vec": {type: "decorator", value: function(x) { return x.replace(/(.{1})/g,"$1\u20D7"); }},
"\\dot": {type: "decorator", value: function(x) { return x.replace(/(.{1})/g,"$1\u0307"); }},
"\\not": {type: "decorator", value: function(x) {
var table = {"=":"≠", "<":"≮", ">":"≯", "≤":"≰", "≥":"≱", "∃":"∄",
"≈":"≉", "≅":"≇", "≡":"≢", "∈":"∉", "∋":"∌", "⊃":"⊅",
"≺":"⊀", "≃":"≄", "":"≁", "⊑":"⋢", "⊒":"⋣", "⊆":"⊈",
"⊂":"⊄", "≻":"⊁", "⊇":"⊉"};
return texparser.replace_chars(x, table);
}},
"\\mathfrak": {type: "decorator", value: function(x) {
var table = {"A": "𝔄", "N": "𝔑", "a": "𝔞", "n": "𝔫",
"B": "𝔅", "O": "𝔒", "b": "𝔟", "o": "𝔬",
"C": "𝕮", "P": "𝔓", "c": "𝔠", "p": "𝔭",
"D": "𝔇", "Q": "𝔔", "d": "𝔡", "q": "𝔮",
"E": "𝔈", "R": "𝕽", "e": "𝔢", "r": "𝔯",
"F": "𝔉", "S": "𝔖", "f": "𝔣", "s": "𝔰",
"G": "𝔊", "T": "𝔗", "g": "𝔤", "t": "𝔱",
"H": "𝕳", "U": "𝔘", "h": "𝔥", "u": "𝔲",
"I": "𝕴", "V": "𝔙", "I": "𝔦", "v": "𝔳",
"J": "𝔍", "W": "𝔚", "j": "𝔧", "w": "𝔴",
"K": "𝔎", "X": "𝔛", "k": "𝔨", "x": "𝔵",
"L": "𝔏", "Y": "𝔜", "l": "𝔩", "y": "𝔶",
"M": "𝕸", "Z": "𝖅", "m": "𝔪", "z": "𝔷"};
return texparser.replace_chars(x, table);
}},
"\\frac": {type: "decorator2", value: function(x,y) {
var table = {"1/4": "¼", "1/2": "½", "3/4": "¾", "1/3": "⅓",
"2/3": "⅔", "1/5": "⅕", "2/5": "⅖", "3/5": "⅗",
"4/5": "⅘", "1/6": "⅙", "5/6": "⅚", "1/8": "⅛",
"3/8": "⅜", "5/8": "⅝", "7/8": "⅞", "1/7": "⅐",
"1/9": "⅑","1/10": "⅒","a/c": "℀", "a/s": "℁",
"c/u": "℆"};
if(x+"/"+y in table)
return table[x+"/"+y];
var ssx = tag_table["^"].value(x),
ssy = tag_table["_"].value(y);
if(texparser.strings_disjoint(ssx, x) && texparser.strings_disjoint(ssy, y))
return "(" + ssx + "" + ssy + ")";
console.log(x + " == " + x.match(/[_0-9a-zA-Z⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽᵂᵅᵝᵞᵟᵋᶿᶥᶲᵠᵡ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀvwxʏz]+/g));
console.log(y + " == " + y.match(/[_0-9a-zA-Z⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽᵂᵅᵝᵞᵟᵋᶿᶥᶲᵠᵡ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀvwxʏz]+/g));
if(x.match(/[_0-9a-zA-Z⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽᵂᵅᵝᵞᵟᵋᶿᶥᶲᵠᵡ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀvwxʏz]+/g) != x
&& x.length != 1)
x = "(" + x + ")";
if(y.match(/[_0-9a-zA-Z⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽᵂᵅᵝᵞᵟᵋᶿᶥᶲᵠᵡ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀvwxʏz]+/g) != y
&& y.length != 1)
y = "(" + y + ")";
return "(" + x + "" + y + ")";
}},
"\\mathcal": {type: "decorator", value: function(x) {
var table = {"A": "𝓐", "N": "𝓝", "a": "𝓪", "n": "𝓷",
"B": "𝓑", "O": "𝓞", "b": "𝓫", "o": "𝓸",
"C": "𝓒", "P": "𝓟", "c": "𝓬", "p": "𝓹",
"D": "𝓓", "Q": "𝓠", "d": "𝓭", "q": "𝓺",
"E": "𝓔", "R": "𝓡", "e": "𝓮", "r": "𝓻",
"F": "𝓕", "S": "𝓢", "f": "𝓯", "s": "𝓼",
"G": "𝓖", "T": "𝓣", "g": "𝓰", "t": "𝓽",
"H": "𝓗", "U": "𝓤", "h": "𝓱", "u": "𝓾",
"I": "𝓘", "V": "𝓥", "I": "𝓲", "v": "𝓿",
"J": "𝓙", "W": "𝓦", "j": "𝓳", "w": "𝔀",
"K": "𝓚", "X": "𝓧", "k": "𝓴", "x": "𝔁",
"L": "𝓛", "Y": "𝓨", "l": "𝓵", "y": "𝔂",
"M": "𝓜", "Z": "𝓩", "m": "𝓶", "z": "𝔃"};
return texparser.replace_chars(x, table);
}},
"\\mathbb": {type: "decorator", value: function(x) {
var table = {"A": "𝔸", "N": "", "a": "𝕒", "n": "𝕟",
"B": "𝔹", "O": "𝕆", "b": "𝕓", "o": "𝕠",
"C": "", "P": "", "c": "𝕔", "p": "𝕡",
"D": "𝔻", "Q": "", "d": "𝕕", "q": "𝕢",
"E": "𝔼", "R": "", "e": "𝕖", "r": "𝕣",
"F": "𝔽", "S": "𝕊", "f": "𝕗", "s": "𝕤",
"G": "𝔾", "T": "𝕋", "g": "𝕘", "t": "𝕥",
"H": "", "U": "𝕌", "h": "𝕙", "u": "𝕦",
"I": "𝕀", "V": "𝕍", "I": "𝕚", "v": "𝕧",
"J": "𝕁", "W": "𝕎", "j": "𝕛", "w": "𝕨",
"K": "𝕂", "X": "𝕏", "k": "𝕜", "x": "𝕩",
"L": "𝕃", "Y": "𝕐", "l": "𝕝", "y": "𝕪",
"M": "𝕄", "Z": "", "m": "𝕞", "z": "𝕫",
"0": "𝟘", "3": "𝟛", "6": "𝟞", "9": "𝟡",
"1": "𝟙", "4": "𝟜", "7": "𝟟",
"2": "𝟚", "5": "𝟝", "8": "𝟠"};
return texparser.replace_chars(x, table);
}},
"\\textbf": {type: "decorator",
value: function(x){
var table = {"a": "𝐚", "h": "𝐡", "o": "𝐨", "v": "𝐯",
"b": "𝐛", "i": "𝐢", "p": "𝐩", "w": "𝐰",
"c": "𝐜", "j": "𝐣", "q": "𝐪", "x": "𝐱",
"d": "𝐝", "k": "𝐤", "r": "𝐫", "y": "𝐲",
"e": "𝐞", "l": "𝐥", "s": "𝐬", "z": "𝐳",
"f": "𝐟", "m": "𝐦", "t": "𝐭",
"g": "𝐠", "n": "𝐧", "u": "𝐮",
"A": "𝐀", "H": "𝐇", "O": "𝐎", "V": "𝐕",
"B": "𝐁", "I": "𝐈", "P": "𝐏", "W": "𝐖",
"C": "𝐂", "J": "𝐉", "Q": "𝐐", "X": "𝐗",
"D": "𝐃", "K": "𝐊", "R": "𝐑", "Y": "𝐘",
"E": "𝐄", "L": "𝐋", "S": "𝐒", "Z": "𝐙",
"F": "𝐅", "M": "𝐌", "T": "𝐓",
"G": "𝐆", "N": "𝐍", "U": "𝐔"};
return texparser.replace_chars(x, table);
}
},
"\\textit": {type: "decorator",
value: function(x){
var table = {"A": "𝘈", "N": "𝘕", "a": "𝘢", "n": "𝘯",
"B": "𝘉", "O": "𝘖", "b": "𝘣", "o": "𝘰",
"C": "𝘊", "P": "𝘗", "c": "𝘤", "p": "𝘱",
"D": "𝘋", "Q": "𝘘", "d": "𝘥", "q": "𝘲",
"E": "𝘌", "R": "𝘙", "e": "𝘦", "r": "𝘳",
"F": "𝘍", "S": "𝘚", "f": "𝘧", "s": "𝘴",
"G": "𝘎", "T": "𝘛", "g": "𝘨", "t": "𝘵",
"H": "𝘏", "U": "𝘜", "h": "𝘩", "u": "𝘶",
"I": "𝘐", "V": "𝘝", "I": "𝘪", "v": "𝘷",
"J": "𝘑", "W": "𝘞", "j": "𝘫", "w": "𝘸",
"K": "𝘒", "X": "𝘟", "k": "𝘬", "x": "𝘹",
"L": "𝘓", "Y": "𝘠", "l": "𝘭", "y": "𝘺",
"M": "𝘔", "Z": "𝘡", "m": "𝘮", "z": "𝘻"
};
return texparser.replace_chars(x, table);
}
},
"^": {type: "decorator",
value: function(x) {
var table = {"0":"⁰", "1":"¹", "2":"²", "3":"³", "4":"⁴", "5":"⁵",
"6":"⁶", "7":"⁷", "8":"⁸", "9":"⁹", "+":"⁺", "-":"⁻",
"=":"⁼", "(":"⁽", ")":"⁾", "a":"ᵃ", "b":"ᵇ", "c":"ᶜ",
"d":"ᵈ", "e":"ᵉ", "f":"ᶠ", "g":"ᵍ", "h":"ʰ", "i":"ⁱ",
"j":"ʲ", "k":"ᵏ", "l":"ˡ", "m":"ᵐ", "n":"ⁿ", "o":"ᵒ",
"p":"ᵖ", "r":"ʳ", "s":"ˢ", "t":"ᵗ", "u":"ᵘ", "v":"ᵛ",
"w":"ʷ", "x":"ˣ", "y":"ʸ", "z":"ᶻ", "A":"ᴬ", "B":"ᴮ",
"D":"ᴰ", "E":"ᴱ", "G":"ᴳ", "H":"ᴴ", "I":"ᴵ", "J":"ᴶ",
"K":"ᴷ", "L":"ᴸ", "M":"ᴹ", "N":"ᴺ", "O":"ᴼ", "P":"ᴾ",
"R":"ᴿ", "T":"ᵀ", "U":"ᵁ", "V":"ⱽ", "W":"ᵂ", "α":"ᵅ",
"β":"ᵝ", "γ":"ᵞ", "δ":"ᵟ", "ε":"ᵋ", "θ":"ᶿ", "ι":"ᶥ",
"ϕ":"ᶲ", "φ":"ᵠ", "χ":"ᵡ"};
return texparser.replace_chars(x, table);
}},
"_": {type: "decorator",
value: function(x) {
var table = {"0":"₀", "1":"₁", "2":"₂", "3":"₃", "4":"₄", "5":"₅",
"6":"₆", "7":"₇", "8":"₈", "9":"₉", "+":"₊", "-":"₋",
"=":"₌", "(":"₍", ")":"₎", "a":"ₐ", "e":"ₑ", "h":"ₕ",
"i":"ᵢ", "j":"ⱼ", "k":"ₖ", "l":"ₗ", "m":"ₘ", "n":"ₙ",
"o":"ₒ", "p":"ₚ", "r":"ᵣ", "s":"ₛ", "t":"ₜ", "u":"ᵤ",
"v":"ᵥ", "x":"ₓ", "β":"ᵦ", "γ":"ᵧ", "ρ":"ᵨ", "φ":"ᵩ",
"A":"ᴀ", "B":"ʙ", "C":"c", "D":"ᴅ", "E":"ᴇ", "F":"ꜰ",
"G":"ɢ", "H":"ʜ", "I":"ı", "J":"ᴊ ", "K":"ᴋ", "L":"ʟ",
"M":"ᴍ", "N":"ɴ", "O":"o", "P":"ᴘ", "R":"ʀ", "S":"",
"T":"ᴛ", "U":"", "V":"v", "W":"w", "X":"x", "Y":"ʏ",
"Z":"z", "χ":"ᵪ"};
console.log("subdecorator: " + x);
return texparser.replace_chars(x, table);
}}
};
tag_table["\\bf"] = {type: "decorator", value: tag_table["\\textbf"].value};
tag_table["\\it"] = {type: "decorator", value: tag_table["\\textit"].value};

View File

@ -210,8 +210,7 @@ class dataFileBase(object):
if not subpath.exists(): if not subpath.exists():
os.makedirs(str(subpath)) os.makedirs(str(subpath))
molsoup=TexSoup(self.molecule) molsoup=TexSoup(self.molecule)
molcomp=list(molsoup.contents)[0] molfilename="".join(molsoup.text).replace("\\","")
molfilename=self.molecule if isinstance(molcomp,str) else molcomp.args[0].value
molfilename=molfilename.lower() molfilename=molfilename.lower()
fileNameComp=[molfilename,self.method.name] fileNameComp=[molfilename,self.method.name]
if self.method.basis: if self.method.basis: