tex2typst 0.2.15 → 0.3.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/map.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  declare const symbolMap: Map<string, string>;
2
- export { symbolMap };
2
+ declare const reverseSymbolMap: Map<string, string>;
3
+ export { symbolMap, reverseSymbolMap };
@@ -1,10 +1,4 @@
1
- import { TexNode, TexTokenType } from "./types";
2
- export declare class TexToken {
3
- type: TexTokenType;
4
- value: string;
5
- constructor(type: TexTokenType, value: string);
6
- eq(token: TexToken): boolean;
7
- }
1
+ import { TexNode, TexToken } from "./types";
8
2
  export declare function tokenize(latex: string): TexToken[];
9
3
  export declare class LatexParserError extends Error {
10
4
  constructor(message: string);
@@ -0,0 +1,11 @@
1
+ import { TexNode, TexToken, TypstNode } from "./types";
2
+ export declare class TexWriter {
3
+ protected buffer: string;
4
+ queue: TexToken[];
5
+ private writeBuffer;
6
+ append(node: TexNode): void;
7
+ protected flushQueue(): void;
8
+ finalize(): string;
9
+ }
10
+ export declare function convert_typst_node_to_tex(node: TypstNode): TexNode;
11
+ export declare function typst_token_to_tex(token: string): string;
@@ -1 +1 @@
1
- var H=new Map([["nonumber",""],["vec","arrow"],["neq","eq.not"],["dot","dot"],["ddot","dot.double"],["doteq","dot(eq)"],["dots","dots.h"],["ldots","dots.h"],["vdots","dots.v"],["ddots","dots.down"],["widehat","hat"],["widetilde","tilde"],["quad","quad"],["qquad","wide"],["overbrace","overbrace"],["underbrace","underbrace"],["overline","overline"],["underline","underline"],["bar","macron"],["dbinom","binom"],["tbinom","binom"],["dfrac","frac"],["tfrac","frac"],["boldsymbol","bold"],["mathbb","bb"],["mathbf","bold"],["mathcal","cal"],["mathit","italic"],["mathfrak","frak"],["mathrm","upright"],["mathsf","sans"],["mathtt","mono"],["rm","upright"],["pmb","bold"],["pm","plus.minus"],["mp","minus.plus"],["boxplus","plus.square"],["otimes","times.circle"],["boxtimes","times.square"],["approx","approx"],["cong","tilde.equiv"],["simeq","tilde.eq"],["asymp","\u224D"],["equiv","equiv"],["propto","prop"],["gets","arrow.l"],["hookleftarrow","arrow.l.hook"],["leftharpoonup","harpoon.lt"],["leftharpoondown","harpoon.lb"],["rightleftharpoons","harpoons.rtlb"],["longleftarrow","arrow.l.long"],["longrightarrow","arrow.r.long"],["longleftrightarrow","arrow.l.r.long"],["Longleftarrow","arrow.l.double.long"],["Longrightarrow","arrow.r.double.long"],["Longleftrightarrow","arrow.l.r.double.long"],["hookrightarrow","arrow.r.hook"],["rightharpoonup","harpoon.rt"],["rightharpoondown","harpoon.rb"],["iff","arrow.l.r.double.long"],["implies","arrow.r.double.long"],["uparrow","arrow.t"],["downarrow","arrow.b"],["updownarrow","arrow.t.b"],["Uparrow","arrow.t.double"],["Downarrow","arrow.b.double"],["Updownarrow","arrow.t.b.double"],["nearrow","arrow.tr"],["searrow","arrow.br"],["swarrow","arrow.bl"],["nwarrow","arrow.tl"],["leadsto","arrow.squiggly"],["leftleftarrows","arrows.ll"],["rightrightarrows","arrows.rr"],["Cap","sect.double"],["Cup","union.double"],["Delta","Delta"],["Gamma","Gamma"],["Join","join"],["Lambda","Lambda"],["Leftarrow","arrow.l.double"],["Leftrightarrow","arrow.l.r.double"],["Longrightarrow","arrow.r.double.long"],["Omega","Omega"],["P","pilcrow"],["Phi","Phi"],["Pi","Pi"],["Psi","Psi"],["Rightarrow","arrow.r.double"],["S","section"],["Sigma","Sigma"],["Theta","Theta"],["aleph","alef"],["alpha","alpha"],["angle","angle"],["approx","approx"],["approxeq","approx.eq"],["beta","beta"],["bigcap","sect.big"],["bigcirc","circle.big"],["bigcup","union.big"],["bigodot","dot.circle.big"],["bigotimes","times.circle.big"],["bigsqcup","union.sq.big"],["biguplus","union.plus.big"],["bigvee","or.big"],["bigwedge","and.big"],["bullet","bullet"],["cap","sect"],["cdot","dot.op"],["cdots","dots.c"],["checkmark","checkmark"],["chi","chi"],["circ","circle.small"],["colon","colon"],["cong","tilde.equiv"],["coprod","product.co"],["copyright","copyright"],["cup","union"],["curlyvee","or.curly"],["curlywedge","and.curly"],["dagger","dagger"],["dashv","tack.l"],["ddagger","dagger.double"],["delta","delta"],["ddots","dots.down"],["diamond","diamond"],["div","div"],["divideontimes","times.div"],["dotplus","plus.dot"],["downarrow","arrow.b"],["ell","ell"],["emptyset","nothing"],["epsilon","epsilon.alt"],["equiv","equiv"],["eta","eta"],["exists","exists"],["forall","forall"],["gamma","gamma"],["ge","gt.eq"],["geq","gt.eq"],["geqslant","gt.eq.slant"],["gg","gt.double"],["hbar","planck.reduce"],["imath","dotless.i"],["iiiint","integral.quad"],["iiint","integral.triple"],["iint","integral.double"],["in","in"],["infty","infinity"],["int","integral"],["intercal","top"],["iota","iota"],["jmath","dotless.j"],["kappa","kappa"],["lambda","lambda"],["land","and"],["langle","angle.l"],["lbrace","brace.l"],["lbrack","bracket.l"],["ldots","dots.l"],["le","lt.eq"],["leadsto","arrow.squiggly"],["leftarrow","arrow.l"],["leftthreetimes","times.three.l"],["leftrightarrow","arrow.l.r"],["leq","lt.eq"],["leqslant","lt.eq.slant"],["lhd","triangle.l"],["ll","lt.double"],["lor","or"],["ltimes","times.l"],["measuredangle","angle.arc"],["mid","divides"],["models","models"],["mp","minus.plus"],["mu","mu"],["nabla","nabla"],["ncong","tilde.equiv.not"],["ne","eq.not"],["neg","not"],["neq","eq.not"],["nexists","exists.not"],["ni","in.rev"],["nleftarrow","arrow.l.not"],["nleq","lt.eq.not"],["nparallel","parallel.not"],["ngeq","gt.eq.not"],["nmid","divides.not"],["notin","in.not"],["nsim","tilde.not"],["nsubseteq","subset.eq.not"],["nu","nu"],["ntriangleleft","lt.tri.not"],["ntriangleright","gt.tri.not"],["nwarrow","arrow.tl"],["odot","dot.circle"],["oint","integral.cont"],["oiint","integral.surf"],["oiiint","integral.vol"],["omega","omega"],["ominus","minus.circle"],["otimes","times.circle"],["parallel","parallel"],["partial","diff"],["perp","perp"],["phi","phi.alt"],["pi","pi"],["pm","plus.minus"],["pounds","pound"],["prec","prec"],["preceq","prec.eq"],["prime","prime"],["prod","product"],["propto","prop"],["psi","psi"],["rangle","angle.r"],["rbrace","brace.r"],["rbrack","bracket.r"],["rhd","triangle"],["rho","rho"],["rightarrow","arrow.r"],["rightthreetimes","times.three.r"],["rtimes","times.r"],["setminus","without"],["sigma","sigma"],["sim","tilde.op"],["simeq","tilde.eq"],["slash","slash"],["smallsetminus","without"],["spadesuit","suit.spade"],["sqcap","sect.sq"],["sqcup","union.sq"],["sqsubseteq","subset.eq.sq"],["sqsupseteq","supset.eq.sq"],["subset","subset"],["subseteq","subset.eq"],["subsetneq","subset.neq"],["succ","succ"],["succeq","succ.eq"],["sum","sum"],["supset","supset"],["supseteq","supset.eq"],["supsetneq","supset.neq"],["swarrow","arrow.bl"],["tau","tau"],["theta","theta"],["times","times"],["to","arrow.r"],["top","top"],["triangle","triangle.t"],["twoheadrightarrow","arrow.r.twohead"],["uparrow","arrow.t"],["updownarrow","arrow.t.b"],["upharpoonright","harpoon.tr"],["uplus","union.plus"],["upsilon","upsilon"],["varepsilon","epsilon"],["varnothing","diameter"],["varphi","phi"],["varpi","pi.alt"],["varrho","rho.alt"],["varsigma","sigma.alt"],["vartheta","theta.alt"],["vdash","tack.r"],["vdots","dots.v"],["vee","or"],["wedge","and"],["wr","wreath"],["xi","xi"],["yen","yen"],["zeta","zeta"],["mathscr","scr"],["LaTeX","#LaTeX"],["TeX","#TeX"]]),a=new Map([["lparen","paren.l"],["lParen","paren.l.double"],["rparen","paren.r"],["rParen","paren.r.double"],["overparen","paren.t"],["underparen","paren.b"],["lbrace","brace.l"],["lBrace","brace.l.double"],["rbrace","brace.r"],["rBrace","brace.r.double"],["underbrace","brace.b"],["lbrack","bracket.l"],["lBrack","bracket.l.double"],["rbrack","bracket.r"],["rBrack","bracket.r.double"],["overbracket","bracket.t"],["underbracket","bracket.b"],["lbrbrak","shell.l"],["Lbrbrak","shell.l.double"],["rbrbrak","shell.r"],["Rbrbrak","shell.r.double"],["obrbrak","shell.t"],["ubrbrak","shell.b"],["vert","bar.v"],["Vert","bar.v.double"],["Vvert","bar.v.triple"],["circledvert","bar.v.circle"],["horizbar","bar.h"],["lvzigzag","fence.l"],["Lvzigzag","fence.l.double"],["rvzigzag","fence.r"],["Rvzigzag","fence.r.double"],["fourvdots","fence.dotted"],["angle","angle"],["langle","angle.l"],["lcurvyangle","angle.l.curly"],["langledot","angle.l.dot"],["rangle","angle.r"],["rcurvyangle","angle.r.curly"],["rangledot","angle.r.dot"],["angdnr","angle.acute"],["measuredangle","angle.arc"],["measuredangleleft","angle.arc.rev"],["wideangledown","angle.oblique"],["revangle","angle.rev"],["rightangle","angle.right"],["measuredrightangle","angle.right.arc"],["rightanglemdot","angle.right.dot"],["rightanglesqr","angle.right.sq"],["angles","angle.s"],["threedangle","angle.spatial"],["sphericalangle","angle.spheric"],["gtlpar","angle.spheric.rev"],["sphericalangleup","angle.spheric.top"],["lceil","ceil.l"],["rceil","ceil.r"],["lfloor","floor.l"],["rfloor","floor.r"],["mathampersand","amp"],["upand","amp.inv"],["ast","ast.op"],["circledast","ast.circle"],["boxast","ast.square"],["mathatsign","at"],["backslash","backslash"],["obslash","backslash.circle"],["rsolbar","backslash.not"],["mathcolon","colon"],["Colon","colon.double"],["coloneq","colon.eq"],["Coloneq","colon.double.eq"],["mathcomma","comma"],["dagger","dagger"],["ddagger","dagger.double"],["dashcolon","dash.colon"],["circleddash","dash.circle"],["hzigzag","dash.wave.double"],["cdot","dot.op"],["mathperiod","dot.basic"],["cdotp","dot.c"],["odot","dot.circle"],["bigodot","dot.circle.big"],["boxdot","dot.square"],["dddot","dot.triple"],["ddddot","dot.quad"],["mathexclam","excl"],["Exclam","excl.double"],["mathquestion","quest"],["Question","quest.double"],["mathoctothorpe","hash"],["mathhyphen","hyph"],["mathpercent","percent"],["mathparagraph","pilcrow"],["mathsection","section"],["mathsemicolon","semi"],["mathslash","slash"],["sslash","slash.double"],["trslash","slash.triple"],["xsol","slash.big"],["unicodecdots","dots.h.c"],["unicodeellipsis","dots.h"],["vdots","dots.v"],["ddots","dots.down"],["adots","dots.up"],["sim","tilde.op"],["dotsim","tilde.dot"],["sime","tilde.eq"],["nsimeq","tilde.eq.not"],["backsimeq","tilde.eq.rev"],["cong","tilde.equiv"],["ncong","tilde.equiv.not"],["simneqq","tilde.nequiv"],["nsim","tilde.not"],["backsim","tilde.rev"],["backcong","tilde.rev.equiv"],["approxident","tilde.triple"],["caretinsert","caret"],["prime","prime"],["backprime","prime.rev"],["dprime","prime.double"],["backdprime","prime.double.rev"],["trprime","prime.triple"],["backtrprime","prime.triple.rev"],["qprime","prime.quad"],["mathplus","plus"],["oplus","plus.circle"],["rightarrowonoplus","plus.circle.arrow"],["bigoplus","plus.circle.big"],["dotplus","plus.dot"],["doubleplus","plus.double"],["pm","plus.minus"],["boxplus","plus.square"],["triangleplus","plus.triangle"],["tripleplus","plus.triple"],["minus","minus"],["ominus","minus.circle"],["dotminus","minus.dot"],["mp","minus.plus"],["boxminus","minus.square"],["eqsim","minus.tilde"],["triangleminus","minus.triangle"],["div","div"],["odiv","div.circle"],["times","times"],["bigtimes","times.big"],["otimes","times.circle"],["bigotimes","times.circle.big"],["divideontimes","times.div"],["leftthreetimes","times.three.l"],["rightthreetimes","times.three.r"],["ltimes","times.l"],["rtimes","times.r"],["boxtimes","times.square"],["triangletimes","times.triangle"],["mathratio","ratio"],["equal","eq"],["stareq","eq.star"],["circledequal","eq.circle"],["eqcolon","eq.colon"],["eqdef","eq.def"],["triangleq","eq.delta"],["veeeq","eq.equi"],["wedgeq","eq.est"],["eqgtr","eq.gt"],["eqless","eq.lt"],["measeq","eq.m"],["ne","eq.not"],["curlyeqprec","eq.prec"],["questeq","eq.quest"],["curlyeqsucc","eq.succ"],["equiv","eq.triple"],["Equiv","eq.quad"],["greater","gt"],["ogreaterthan","gt.circle"],["gtrdot","gt.dot"],["gtrapprox","gt.approx"],["gg","gt.double"],["geq","gt.eq"],["geqslant","gt.eq.slant"],["gtreqless","gt.eq.lt"],["ngeq","gt.eq.not"],["geqq","gt.equiv"],["gtrless","gt.lt"],["ngtrless","gt.lt.not"],["gneq","gt.neq"],["gnapprox","gt.napprox"],["gneqq","gt.nequiv"],["ngtr","gt.not"],["gnsim","gt.ntilde"],["gtrsim","gt.tilde"],["ngtrsim","gt.tilde.not"],["vartriangleright","gt.tri"],["trianglerighteq","gt.tri.eq"],["ntrianglerighteq","gt.tri.eq.not"],["nvartriangleright","gt.tri.not"],["ggg","gt.triple"],["gggnest","gt.triple.nested"],["less","lt"],["olessthan","lt.circle"],["lessdot","lt.dot"],["lessapprox","lt.approx"],["ll","lt.double"],["leq","lt.eq"],["leqslant","lt.eq.slant"],["lesseqgtr","lt.eq.gt"],["nleq","lt.eq.not"],["leqq","lt.equiv"],["lessgtr","lt.gt"],["nlessgtr","lt.gt.not"],["lneq","lt.neq"],["lnapprox","lt.napprox"],["lneqq","lt.nequiv"],["nless","lt.not"],["lnsim","lt.ntilde"],["lesssim","lt.tilde"],["nlesssim","lt.tilde.not"],["vartriangleleft","lt.tri"],["trianglelefteq","lt.tri.eq"],["ntrianglelefteq","lt.tri.eq.not"],["nvartriangleleft","lt.tri.not"],["lll","lt.triple"],["lllnest","lt.triple.nested"],["approx","approx"],["approxeq","approx.eq"],["napprox","approx.not"],["prec","prec"],["precapprox","prec.approx"],["preccurlyeq","prec.curly.eq"],["npreccurlyeq","prec.curly.eq.not"],["Prec","prec.double"],["preceq","prec.eq"],["preceqq","prec.equiv"],["precnapprox","prec.napprox"],["precneq","prec.neq"],["precneqq","prec.nequiv"],["nprec","prec.not"],["precnsim","prec.ntilde"],["precsim","prec.tilde"],["succ","succ"],["succapprox","succ.approx"],["succcurlyeq","succ.curly.eq"],["nsucccurlyeq","succ.curly.eq.not"],["Succ","succ.double"],["succeq","succ.eq"],["succeqq","succ.equiv"],["succnapprox","succ.napprox"],["succneq","succ.neq"],["succneqq","succ.nequiv"],["nsucc","succ.not"],["succnsim","succ.ntilde"],["succsim","succ.tilde"],["nequiv","equiv.not"],["propto","prop"],["origof","original"],["imageof","image"],["varnothing","emptyset"],["emptysetoarr","emptyset.arrow.r"],["emptysetoarrl","emptyset.arrow.l"],["emptysetobar","emptyset.bar"],["emptysetocirc","emptyset.circle"],["revemptyset","emptyset.rev"],["setminus","without"],["complement","complement"],["in","in"],["notin","in.not"],["ni","in.rev"],["nni","in.rev.not"],["smallni","in.rev.small"],["smallin","in.small"],["subset","subset"],["subsetdot","subset.dot"],["Subset","subset.double"],["subseteq","subset.eq"],["nsubseteq","subset.eq.not"],["sqsubseteq","subset.eq.sq"],["nsqsubseteq","subset.eq.sq.not"],["subsetneq","subset.neq"],["nsubset","subset.not"],["sqsubset","subset.sq"],["sqsubsetneq","subset.sq.neq"],["supset","supset"],["supsetdot","supset.dot"],["Supset","supset.double"],["supseteq","supset.eq"],["nsupseteq","supset.eq.not"],["sqsupseteq","supset.eq.sq"],["nsqsupseteq","supset.eq.sq.not"],["supsetneq","supset.neq"],["nsupset","supset.not"],["sqsupset","supset.sq"],["sqsupsetneq","supset.sq.neq"],["cup","union"],["cupleftarrow","union.arrow"],["bigcup","union.big"],["cupdot","union.dot"],["bigcupdot","union.dot.big"],["Cup","union.double"],["uminus","union.minus"],["cupvee","union.or"],["uplus","union.plus"],["biguplus","union.plus.big"],["sqcup","union.sq"],["bigsqcup","union.sq.big"],["Sqcup","union.sq.double"],["cap","sect"],["capwedge","sect.and"],["bigcap","sect.big"],["capdot","sect.dot"],["Cap","sect.double"],["sqcap","sect.sq"],["bigsqcap","sect.sq.big"],["Sqcap","sect.sq.double"],["infty","infinity"],["nvinfty","infinity.bar"],["iinfin","infinity.incomplete"],["tieinfty","infinity.tie"],["partial","diff"],["nabla","gradient"],["sum","sum"],["sumint","sum.integral"],["prod","product"],["coprod","product.co"],["int","integral"],["intlarhk","integral.arrow.hook"],["awint","integral.ccw"],["oint","integral.cont"],["ointctrclockwise","integral.cont.ccw"],["varointclockwise","integral.cont.cw"],["intclockwise","integral.cw"],["intbar","integral.dash"],["intBar","integral.dash.double"],["iint","integral.double"],["iiiint","integral.quad"],["intcap","integral.sect"],["fint","integral.slash"],["sqint","integral.square"],["oiint","integral.surf"],["intx","integral.times"],["iiint","integral.triple"],["intcup","integral.union"],["oiiint","integral.vol"],["increment","laplace"],["forall","forall"],["exists","exists"],["nexists","exists.not"],["top","top"],["bot","bot"],["neg","not"],["wedge","and"],["bigwedge","and.big"],["curlywedge","and.curly"],["wedgedot","and.dot"],["Wedge","and.double"],["vee","or"],["bigvee","or.big"],["curlyvee","or.curly"],["veedot","or.dot"],["Vee","or.double"],["models","models"],["Vdash","forces"],["nVdash","forces.not"],["therefore","therefore"],["because","because"],["QED","qed"],["vysmwhtcircle","compose"],["multimap","multimap"],["dualmap","multimap.double"],["tplus","tiny"],["tminus","miny"],["mid","divides"],["nmid","divides.not"],["wr","wreath"],["parallel","parallel"],["nhpar","parallel.struck"],["circledparallel","parallel.circle"],["equalparallel","parallel.eq"],["equivVert","parallel.equiv"],["nparallel","parallel.not"],["eparsl","parallel.slanted.eq"],["smeparsl","parallel.slanted.eq.tilde"],["eqvparsl","parallel.slanted.equiv"],["parsim","parallel.tilde"],["perp","perp"],["operp","perp.circle"],["diameter","diameter"],["Join","join"],["rightouterjoin","join.r"],["leftouterjoin","join.l"],["fullouterjoin","join.l.r"],["smashtimes","smash"],["mathdollar","dollar"],["euro","euro"],["mathsterling","pound"],["mathyen","yen"],["checkmark","checkmark"],["maltese","maltese"],["clubsuit","suit.club.filled"],["varclubsuit","suit.club.stroked"],["vardiamondsuit","suit.diamond.filled"],["diamondsuit","suit.diamond.stroked"],["varheartsuit","suit.heart.filled"],["heartsuit","suit.heart.stroked"],["spadesuit","suit.spade.filled"],["varspadesuit","suit.spade.stroked"],["quarternote","note.quarter.alt"],["eighthnote","note.eighth.alt"],["twonotes","note.eighth.beamed"],["natural","natural"],["flat","flat"],["sharp","sharp"],["smblkcircle","bullet"],["mdlgwhtcircle","circle.stroked"],["mdsmwhtcircle","circle.stroked.small"],["lgwhtcircle","circle.stroked.big"],["mdlgblkcircle","circle.filled"],["mdsmblkcircle","circle.filled.tiny"],["vysmblkcircle","circle.filled.small"],["lgblkcircle","circle.filled.big"],["dottedcircle","circle.dotted"],["circledcirc","circle.nested"],["whthorzoval","ellipse.stroked.h"],["whtvertoval","ellipse.stroked.v"],["blkhorzoval","ellipse.filled.h"],["blkvertoval","ellipse.filled.v"],["bigtriangleup","triangle.stroked.t"],["bigtriangledown","triangle.stroked.b"],["triangleright","triangle.stroked.r"],["triangleleft","triangle.stroked.l"],["lltriangle","triangle.stroked.bl"],["lrtriangle","triangle.stroked.br"],["ultriangle","triangle.stroked.tl"],["urtriangle","triangle.stroked.tr"],["vartriangle","triangle.stroked.small.t"],["triangledown","triangle.stroked.small.b"],["smalltriangleright","triangle.stroked.small.r"],["smalltriangleleft","triangle.stroked.small.l"],["whiteinwhitetriangle","triangle.stroked.nested"],["trianglecdot","triangle.stroked.dot"],["bigblacktriangleup","triangle.filled.t"],["bigblacktriangledown","triangle.filled.b"],["blacktriangleright","triangle.filled.r"],["blacktriangleleft","triangle.filled.l"],["llblacktriangle","triangle.filled.bl"],["lrblacktriangle","triangle.filled.br"],["ulblacktriangle","triangle.filled.tl"],["urblacktriangle","triangle.filled.tr"],["blacktriangle","triangle.filled.small.t"],["blacktriangledown","triangle.filled.small.b"],["smallblacktriangleright","triangle.filled.small.r"],["smallblacktriangleleft","triangle.filled.small.l"],["mdlgwhtsquare","square.stroked"],["smwhtsquare","square.stroked.tiny"],["mdsmwhtsquare","square.stroked.small"],["mdwhtsquare","square.stroked.medium"],["lgwhtsquare","square.stroked.big"],["dottedsquare","square.stroked.dotted"],["squoval","square.stroked.rounded"],["mdlgblksquare","square.filled"],["smblksquare","square.filled.tiny"],["mdsmblksquare","square.filled.small"],["mdblksquare","square.filled.medium"],["lgblksquare","square.filled.big"],["hrectangle","rect.stroked.h"],["vrectangle","rect.stroked.v"],["hrectangleblack","rect.filled.h"],["vrectangleblack","rect.filled.v"],["pentagon","penta.stroked"],["pentagonblack","penta.filled"],["varhexagon","hexa.stroked"],["varhexagonblack","hexa.filled"],["mdlgwhtdiamond","diamond.stroked"],["smwhtdiamond","diamond.stroked.small"],["mdwhtdiamond","diamond.stroked.medium"],["diamondcdot","diamond.stroked.dot"],["mdlgblkdiamond","diamond.filled"],["mdblkdiamond","diamond.filled.medium"],["smblkdiamond","diamond.filled.small"],["mdlgwhtlozenge","lozenge.stroked"],["smwhtlozenge","lozenge.stroked.small"],["mdwhtlozenge","lozenge.stroked.medium"],["mdlgblklozenge","lozenge.filled"],["smblklozenge","lozenge.filled.small"],["mdblklozenge","lozenge.filled.medium"],["parallelogram","parallelogram.stroked"],["parallelogramblack","parallelogram.filled"],["star","star.op"],["bigwhitestar","star.stroked"],["bigstar","star.filled"],["rightarrow","arrow.r"],["longmapsto","arrow.r.long.bar"],["mapsto","arrow.r.bar"],["rightdowncurvedarrow","arrow.r.curve"],["rightdasharrow","arrow.r.dashed"],["rightdotarrow","arrow.r.dotted"],["Rightarrow","arrow.r.double"],["Mapsto","arrow.r.double.bar"],["Longrightarrow","arrow.r.double.long"],["Longmapsto","arrow.r.double.long.bar"],["nRightarrow","arrow.r.double.not"],["hookrightarrow","arrow.r.hook"],["longrightarrow","arrow.r.long"],["longrightsquigarrow","arrow.r.long.squiggly"],["looparrowright","arrow.r.loop"],["nrightarrow","arrow.r.not"],["RRightarrow","arrow.r.quad"],["rightsquigarrow","arrow.r.squiggly"],["rightarrowbar","arrow.r.stop"],["rightwhitearrow","arrow.r.stroked"],["rightarrowtail","arrow.r.tail"],["similarrightarrow","arrow.r.tilde"],["Rrightarrow","arrow.r.triple"],["twoheadmapsto","arrow.r.twohead.bar"],["twoheadrightarrow","arrow.r.twohead"],["rightwavearrow","arrow.r.wave"],["leftarrow","arrow.l"],["mapsfrom","arrow.l.bar"],["leftdowncurvedarrow","arrow.l.curve"],["leftdasharrow","arrow.l.dashed"],["leftdotarrow","arrow.l.dotted"],["Leftarrow","arrow.l.double"],["Mapsfrom","arrow.l.double.bar"],["Longleftarrow","arrow.l.double.long"],["Longmapsfrom","arrow.l.double.long.bar"],["nLeftarrow","arrow.l.double.not"],["hookleftarrow","arrow.l.hook"],["longleftarrow","arrow.l.long"],["longmapsfrom","arrow.l.long.bar"],["longleftsquigarrow","arrow.l.long.squiggly"],["looparrowleft","arrow.l.loop"],["nleftarrow","arrow.l.not"],["LLeftarrow","arrow.l.quad"],["leftsquigarrow","arrow.l.squiggly"],["barleftarrow","arrow.l.stop"],["leftwhitearrow","arrow.l.stroked"],["leftarrowtail","arrow.l.tail"],["similarleftarrow","arrow.l.tilde"],["Lleftarrow","arrow.l.triple"],["twoheadmapsfrom","arrow.l.twohead.bar"],["twoheadleftarrow","arrow.l.twohead"],["leftwavearrow","arrow.l.wave"],["uparrow","arrow.t"],["mapsup","arrow.t.bar"],["uprightcurvearrow","arrow.t.curve"],["updasharrow","arrow.t.dashed"],["Uparrow","arrow.t.double"],["UUparrow","arrow.t.quad"],["baruparrow","arrow.t.stop"],["upwhitearrow","arrow.t.stroked"],["Uuparrow","arrow.t.triple"],["twoheaduparrow","arrow.t.twohead"],["downarrow","arrow.b"],["mapsdown","arrow.b.bar"],["downrightcurvedarrow","arrow.b.curve"],["downdasharrow","arrow.b.dashed"],["Downarrow","arrow.b.double"],["DDownarrow","arrow.b.quad"],["downarrowbar","arrow.b.stop"],["downwhitearrow","arrow.b.stroked"],["Ddownarrow","arrow.b.triple"],["twoheaddownarrow","arrow.b.twohead"],["leftrightarrow","arrow.l.r"],["Leftrightarrow","arrow.l.r.double"],["Longleftrightarrow","arrow.l.r.double.long"],["nLeftrightarrow","arrow.l.r.double.not"],["longleftrightarrow","arrow.l.r.long"],["nleftrightarrow","arrow.l.r.not"],["leftrightsquigarrow","arrow.l.r.wave"],["updownarrow","arrow.t.b"],["Updownarrow","arrow.t.b.double"],["nearrow","arrow.tr"],["Nearrow","arrow.tr.double"],["hknearrow","arrow.tr.hook"],["searrow","arrow.br"],["Searrow","arrow.br.double"],["hksearrow","arrow.br.hook"],["nwarrow","arrow.tl"],["Nwarrow","arrow.tl.double"],["hknwarrow","arrow.tl.hook"],["swarrow","arrow.bl"],["Swarrow","arrow.bl.double"],["hkswarrow","arrow.bl.hook"],["nwsearrow","arrow.tl.br"],["neswarrow","arrow.tr.bl"],["acwopencirclearrow","arrow.ccw"],["curvearrowleft","arrow.ccw.half"],["cwopencirclearrow","arrow.cw"],["curvearrowright","arrow.cw.half"],["downzigzagarrow","arrow.zigzag"],["rightrightarrows","arrows.rr"],["leftleftarrows","arrows.ll"],["upuparrows","arrows.tt"],["downdownarrows","arrows.bb"],["leftrightarrows","arrows.lr"],["barleftarrowrightarrowbar","arrows.lr.stop"],["rightleftarrows","arrows.rl"],["updownarrows","arrows.tb"],["downuparrows","arrows.bt"],["rightthreearrows","arrows.rrr"],["leftthreearrows","arrows.lll"],["rightharpoonup","harpoon.rt"],["barrightharpoonup","harpoon.rt.bar"],["rightharpoonupbar","harpoon.rt.stop"],["rightharpoondown","harpoon.rb"],["barrightharpoondown","harpoon.rb.bar"],["rightharpoondownbar","harpoon.rb.stop"],["leftharpoonup","harpoon.lt"],["leftharpoonupbar","harpoon.lt.bar"],["barleftharpoonup","harpoon.lt.stop"],["leftharpoondown","harpoon.lb"],["leftharpoondownbar","harpoon.lb.bar"],["barleftharpoondown","harpoon.lb.stop"],["upharpoonleft","harpoon.tl"],["upharpoonleftbar","harpoon.tl.bar"],["barupharpoonleft","harpoon.tl.stop"],["upharpoonright","harpoon.tr"],["upharpoonrightbar","harpoon.tr.bar"],["barupharpoonright","harpoon.tr.stop"],["downharpoonleft","harpoon.bl"],["bardownharpoonleft","harpoon.bl.bar"],["downharpoonleftbar","harpoon.bl.stop"],["downharpoonright","harpoon.br"],["bardownharpoonright","harpoon.br.bar"],["downharpoonrightbar","harpoon.br.stop"],["leftrightharpoonupup","harpoon.lt.rt"],["leftrightharpoondowndown","harpoon.lb.rb"],["leftrightharpoondownup","harpoon.lb.rt"],["leftrightharpoonupdown","harpoon.lt.rb"],["updownharpoonleftleft","harpoon.tl.bl"],["updownharpoonrightright","harpoon.tr.br"],["updownharpoonleftright","harpoon.tl.br"],["updownharpoonrightleft","harpoon.tr.bl"],["rightharpoonsupdown","harpoons.rtrb"],["downharpoonsleftright","harpoons.blbr"],["downupharpoonsleftright","harpoons.bltr"],["leftrightharpoonsdown","harpoons.lbrb"],["leftharpoonsupdown","harpoons.ltlb"],["leftrightharpoons","harpoons.ltrb"],["leftrightharpoonsup","harpoons.ltrt"],["rightleftharpoonsdown","harpoons.rblb"],["rightleftharpoons","harpoons.rtlb"],["rightleftharpoonsup","harpoons.rtlt"],["updownharpoonsleftright","harpoons.tlbr"],["upharpoonsleftright","harpoons.tltr"],["vdash","tack.r"],["nvdash","tack.r.not"],["vlongdash","tack.r.long"],["assert","tack.r.short"],["vDash","tack.r.double"],["nvDash","tack.r.double.not"],["dashv","tack.l"],["longdashv","tack.l.long"],["shortlefttack","tack.l.short"],["Dashv","tack.l.double"],["bigbot","tack.t.big"],["Vbar","tack.t.double"],["shortuptack","tack.t.short"],["bigtop","tack.b.big"],["barV","tack.b.double"],["shortdowntack","tack.b.short"],["dashVdash","tack.l.r"],["mupalpha","alpha"],["mupbeta","beta"],["mupchi","chi"],["mupdelta","delta"],["mupvarepsilon","epsilon"],["mupepsilon","epsilon.alt"],["mupeta","eta"],["mupgamma","gamma"],["mupiota","iota"],["mupkappa","kappa"],["mupvarkappa","kappa.alt"],["muplambda","lambda"],["mupmu","mu"],["mupnu","nu"],["mho","ohm.inv"],["mupomega","omega"],["mupomicron","omicron"],["mupvarphi","phi"],["mupphi","phi.alt"],["muppi","pi"],["mupvarpi","pi.alt"],["muppsi","psi"],["muprho","rho"],["mupvarrho","rho.alt"],["mupsigma","sigma"],["mupvarsigma","sigma.alt"],["muptau","tau"],["muptheta","theta"],["mupvartheta","theta.alt"],["mupupsilon","upsilon"],["mupxi","xi"],["mupzeta","zeta"],["mupAlpha","Alpha"],["mupBeta","Beta"],["mupChi","Chi"],["mupDelta","Delta"],["mupEpsilon","Epsilon"],["mupEta","Eta"],["mupGamma","Gamma"],["mupIota","Iota"],["mupKappa","Kappa"],["mupLambda","Lambda"],["mupMu","Mu"],["mupNu","Nu"],["mupOmega","Omega"],["mupOmicron","Omicron"],["mupPhi","Phi"],["mupPi","Pi"],["mupPsi","Psi"],["mupRho","Rho"],["mupSigma","Sigma"],["mupTau","Tau"],["mupTheta","Theta"],["mupUpsilon","Upsilon"],["mupXi","Xi"],["mupZeta","Zeta"],["BbbA","AA"],["BbbB","BB"],["BbbC","CC"],["BbbD","DD"],["BbbE","EE"],["BbbF","FF"],["BbbG","GG"],["BbbH","HH"],["BbbI","II"],["BbbJ","JJ"],["BbbK","KK"],["BbbL","LL"],["BbbM","MM"],["BbbN","NN"],["BbbO","OO"],["BbbP","PP"],["BbbQ","QQ"],["BbbR","RR"],["BbbS","SS"],["BbbT","TT"],["BbbU","UU"],["BbbV","VV"],["BbbW","WW"],["BbbX","XX"],["BbbY","YY"],["BbbZ","ZZ"],["ell","ell"],["Planckconst","planck"],["hslash","planck.reduce"],["Angstrom","angstrom"],["Re","Re"],["Im","Im"],["imath","dotless.i"],["jmath","dotless.j"]]);for(let[z,V]of a)if(!H.has(z))H.set(z,V);class Q{type;content;args;data;constructor(z,V,J,X){this.type=z,this.content=V,this.args=J,this.data=X}eq_shallow(z){return this.type===z.type&&this.content===z.content}toString(){switch(this.type){case"text":return`\\text{${this.content}}`;default:throw new Error(`toString() is not implemented for type ${this.type}`)}}}class K{type;content;constructor(z,V){this.type=z,this.content=V}eq(z){return this.type===z.type&&this.content===z.content}isOneOf(z){let V=!1;for(let J of z)if(this.eq(J)){V=!0;break}return V}}class q{type;content;args;data;options;constructor(z,V,J,X){this.type=z,this.content=V,this.args=J,this.data=X}setOptions(z){this.options=z}eq_shallow(z){return this.type===z.type&&this.content===z.content}}function D(z,V=""){if(!z)throw new F(V)}function r(z){if(p.includes(z))return 1;else if(k.includes(z))return 2;else return 0}function T(z,V){D(z[V].eq(M));let J=1,X=V+1;while(J>0){if(X>=z.length)throw new F("Unmatched curly brackets");if(z[X].eq(M))J+=1;else if(z[X].eq(h))J-=1;X+=1}return X-1}function t(z,V){D(z[V].eq(g));let J=1,X=V+1;while(J>0){if(X>=z.length)throw new F("Unmatched square brackets");if(z[X].eq(g))J+=1;else if(z[X].eq(n))J-=1;X+=1}return X-1}function l(z){return"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".includes(z)}function E(z){return"0123456789".includes(z)}function R(z,V){let J=V;while(J<z.length&&[4,5].includes(z[J].type))J++;return z.slice(V,J)}function c(z,V){const J=z[V];if(J.type===0&&["(",")","[","]","|","\\{","\\}"].includes(J.value))return J;else if(J.type===1&&["lfloor","rfloor","lceil","rceil","langle","rangle"].includes(J.value.slice(1)))return J;else return null}function f(z,V){let J=V;while(J<z.length&&z[J].eq(new G(0,"'")))J+=1;return J-V}function s(z,V){let J=V;while(J<z.length&&l(z[J]))J+=1;return z.substring(V,J)}function e(z,V){let J=1,X=V;while(J>0){if(X>=z.length)return-1;if(z[X].eq(L))J+=1;else if(z[X].eq(o))J-=1;X+=1}return X-1}function Jz(z,V){let J=1,X=V;while(J>0){if(X>=z.length)return-1;if(z[X].eq(P))J+=1;else if(z[X].eq(zz))J-=1;X+=1}return X-1}function Vz(z,V){D(z[V]==="{");let J=1,X=V+1;while(J>0){if(X>=z.length)throw new F("Unmatched curly brackets");if(X+1<z.length&&["\\{","\\}"].includes(z.substring(X,X+2))){X+=2;continue}if(z[X]==="{")J+=1;else if(z[X]==="}")J-=1;X+=1}return X-1}function _(z){const V=[];let J=0;while(J<z.length){const X=z[J];let $;switch(X){case"%":{let Z=J+1;while(Z<z.length&&z[Z]!=="\n")Z+=1;$=new G(3,z.slice(J+1,Z)),J=Z;break}case"{":case"}":case"_":case"^":case"&":$=new G(6,X),J++;break;case"\n":$=new G(5,X),J++;break;case"\r":{if(J+1<z.length&&z[J+1]==="\n")$=new G(5,"\n"),J+=2;else $=new G(5,"\n"),J++;break}case" ":{let Z=J;while(Z<z.length&&z[Z]===" ")Z+=1;$=new G(4,z.slice(J,Z)),J=Z;break}case"\\":{if(J+1>=z.length)throw new F("Expecting command name after \\");const Z=z.slice(J,J+2);if(["\\\\","\\,"].includes(Z))$=new G(6,Z);else if(["\\{","\\}","\\%","\\$","\\&","\\#","\\_","\\|"].includes(Z))$=new G(0,Z);else{const j=s(z,J+1);$=new G(1,"\\"+j)}J+=$.value.length;break}default:{if(E(X)){let Z=J;while(Z<z.length&&E(z[Z]))Z+=1;$=new G(0,z.slice(J,Z))}else if(l(X))$=new G(0,X);else if("+-*/=\'<>!.,;?()[]|".includes(X))$=new G(0,X);else $=new G(7,X);J+=$.value.length}}if(V.push($),$.type===1&&["\\text","\\operatorname","\\begin","\\end"].includes($.value)){if(J>=z.length||z[J]!=="{")throw new F(`No content for ${$.value} command`);V.push(new G(6,"{"));const Z=Vz(z,J);J++;let j=z.slice(J,Z);const W=["{","}","\\","$","&","#","_","%"];for(let O of W)j=j.replaceAll("\\"+O,O);V.push(new G(2,j)),V.push(new G(6,"}")),J=Z+1}}return V}function Xz(z){const V=(X)=>X.eq(N)||X.eq(m);let J=[];for(let X=0;X<z.length;X++){if(z[X].type===4&&X+1<z.length&&V(z[X+1]))continue;if(z[X].type===4&&X-1>=0&&V(z[X-1]))continue;J.push(z[X])}return J}function Zz(z,V){let J=[];for(let X of z)if(X.type===1&&V[X.value]){const $=_(V[X.value]);J=J.concat($)}else J.push(X);return J}function y(z,V){const J=new i;let X=_(z);return X=Xz(X),X=Zz(X,V),J.parse(X)}var p=["sqrt","text","bar","bold","boldsymbol","ddot","dot","hat","mathbb","mathbf","mathcal","mathfrak","mathit","mathrm","mathscr","mathsf","mathtt","operatorname","overbrace","overline","pmb","rm","tilde","underbrace","underline","vec","widehat","widetilde"],k=["frac","tfrac","binom","dbinom","dfrac","tbinom","overset"];class G{type;value;constructor(z,V){this.type=z,this.value=V}eq(z){return this.type===z.type&&this.value===z.value}}var I=new Q("empty",""),M=new G(6,"{"),h=new G(6,"}"),g=new G(0,"["),n=new G(0,"]"),L=new G(1,"\\left"),o=new G(1,"\\right"),P=new G(1,"\\begin"),zz=new G(1,"\\end");class F extends Error{constructor(z){super(z);this.name="LatexParserError"}}var N=new G(6,"_"),m=new G(6,"^");class i{space_sensitive;newline_sensitive;constructor(z=!1,V=!0){this.space_sensitive=z,this.newline_sensitive=V}parse(z){const V=[];let J=0;while(J<z.length){const X=[];let $=0;while($<z.length){const[Z,j]=this.parseNextExpr(z,$);if($=j,Z.type==="whitespace"){if(!this.space_sensitive&&Z.content.replace(/ /g,"").length===0)continue;if(!this.newline_sensitive&&Z.content==="\n")continue}if(Z.type==="control"&&Z.content==="&")throw new F("Unexpected & outside of an alignment");X.push(Z)}if(X.length===0)return I;else if(X.length===1)return X[0];else return new Q("ordgroup","",X)}if(V.length===0)return I;else if(V.length===1)return V[0];else return new Q("ordgroup","",V)}parseNextExpr(z,V){let[J,X]=this.parseNextExprWithoutSupSub(z,V),$=null,Z=null,j=0;if(j+=f(z,X),X+=j,X<z.length&&z[X].eq(N)){if([$,X]=this.parseNextExprWithoutSupSub(z,X+1),j+=f(z,X),X+=j,X<z.length&&z[X].eq(m)){if([Z,X]=this.parseNextExprWithoutSupSub(z,X+1),f(z,X)>0)throw new F("Double superscript")}}else if(X<z.length&&z[X].eq(m)){if([Z,X]=this.parseNextExprWithoutSupSub(z,X+1),f(z,X)>0)throw new F("Double superscript");if(X<z.length&&z[X].eq(N)){if([$,X]=this.parseNextExprWithoutSupSub(z,X+1),f(z,X)>0)throw new F("Double superscript")}}if($!==null||Z!==null||j>0){const W={base:J};if($)W.sub=$;if(j>0){W.sup=new Q("ordgroup","",[]);for(let O=0;O<j;O++)W.sup.args.push(new Q("element","'"));if(Z)W.sup.args.push(Z);if(W.sup.args.length===1)W.sup=W.sup.args[0]}else if(Z)W.sup=Z;return[new Q("supsub","",[],W),X]}else return[J,X]}parseNextExprWithoutSupSub(z,V){const J=z[V];switch(J.type){case 0:return[new Q("element",J.value),V+1];case 2:return[new Q("text",J.value),V+1];case 3:return[new Q("comment",J.value),V+1];case 4:case 5:return[new Q("whitespace",J.value),V+1];case 1:if(J.eq(P))return this.parseBeginEndExpr(z,V);else if(J.eq(L))return this.parseLeftRightExpr(z,V);else return this.parseCommandExpr(z,V);case 6:switch(J.value){case"{":const Z=T(z,V),j=z.slice(V+1,Z);return[this.parse(j),Z+1];case"}":throw new F("Unmatched '}'");case"\\\\":return[new Q("control","\\\\"),V+1];case"\\,":return[new Q("control","\\,"),V+1];case"_":return[I,V];case"^":return[I,V];case"&":return[new Q("control","&"),V+1];default:throw new F("Unknown control sequence")}default:throw new F("Unknown token type")}}parseCommandExpr(z,V){D(z[V].type===1);const J=z[V].value;let X=V+1;if(["left","right","begin","end"].includes(J.slice(1)))throw new F("Unexpected command: "+J);switch(r(J.slice(1))){case 0:if(!H.has(J.slice(1)))return[new Q("unknownMacro",J),X];return[new Q("symbol",J),X];case 1:{if(J==="\\sqrt"&&X<z.length&&z[X].eq(g)){const W=X,O=t(z,X),B=z.slice(W+1,O),v=this.parse(B),[b,C]=this.parseNextExprWithoutSupSub(z,O+1);return[new Q("unaryFunc",J,[b],v),C]}else if(J==="\\text"){if(X+2>=z.length)throw new F("Expecting content for \\text command");D(z[X].eq(M)),D(z[X+1].type===2),D(z[X+2].eq(h));const W=z[X+1].value;return[new Q("text",W),X+3]}let[Z,j]=this.parseNextExprWithoutSupSub(z,X);return[new Q("unaryFunc",J,[Z]),j]}case 2:{const[Z,j]=this.parseNextExprWithoutSupSub(z,X),[W,O]=this.parseNextExprWithoutSupSub(z,j);return[new Q("binaryFunc",J,[Z,W]),O]}default:throw new Error("Invalid number of parameters")}}parseLeftRightExpr(z,V){D(z[V].eq(L));let J=V+1;if(J+=R(z,J).length,J>=z.length)throw new F("Expecting delimiter after \\left");const X=c(z,J);if(X===null)throw new F("Invalid delimiter after \\left");J++;const $=J,Z=e(z,J);if(Z===-1)throw new F("No matching \\right");const j=Z;if(J=Z+1,J+=R(z,J).length,J>=z.length)throw new F("Expecting \\right after \\left");const W=c(z,J);if(W===null)throw new F("Invalid delimiter after \\right");J++;const O=z.slice($,j),B=this.parse(O),v=[new Q("element",X.value),B,new Q("element",W.value)];return[new Q("leftright","",v),J]}parseBeginEndExpr(z,V){D(z[V].eq(P));let J=V+1;D(z[J].eq(M)),D(z[J+1].type===2),D(z[J+2].eq(h));const X=z[J+1].value;J+=3,J+=R(z,J).length;const $=J,Z=Jz(z,J);if(Z===-1)throw new F("No matching \\end");const j=Z;if(J=Z+1,D(z[J].eq(M)),D(z[J+1].type===2),D(z[J+2].eq(h)),z[J+1].value!==X)throw new F("Mismatched \\begin and \\end environments");J+=3;const W=z.slice($,j);while(W.length>0&&[4,5].includes(W[W.length-1].type))W.pop();const O=this.parseAligned(W);return[new Q("beginend",X,[],O),J]}parseAligned(z){let V=0;const J=[];let X=[];J.push(X);let $=new Q("ordgroup","",[]);X.push($);while(V<z.length){const[Z,j]=this.parseNextExpr(z,V);if(V=j,Z.type==="whitespace"){if(!this.space_sensitive&&Z.content.replace(/ /g,"").length===0)continue;if(!this.newline_sensitive&&Z.content==="\n")continue}if(Z.type==="control"&&Z.content==="\\\\")X=[],$=new Q("ordgroup","",[]),X.push($),J.push(X);else if(Z.type==="control"&&Z.content==="&")$=new Q("ordgroup","",[]),X.push($);else $.args.push(Z)}return J}}function x(z){return z.type==="atom"&&["(",")","[","]","{","}","|","\u230A","\u230B","\u2308","\u2309"].includes(z.content)}function jz(z){const[V,J]=z.args,X=(j)=>{if(j.eq_shallow(new Q("text","def")))return!0;if(j.type==="ordgroup"&&j.args.length===3){const[W,O,B]=j.args,v=new Q("element","d"),b=new Q("element","e"),C=new Q("element","f");if(W.eq_shallow(v)&&O.eq_shallow(b)&&B.eq_shallow(C))return!0}return!1},$=(j)=>j.eq_shallow(new Q("element","="));if(X(V)&&$(J))return new q("symbol","eq.def");const Z=new q("unaryFunc","op",[U(J)]);return Z.setOptions({limits:"#true"}),new q("supsub","",[],{base:Z,sup:U(V)})}function U(z){switch(z.type){case"empty":return new q("empty","");case"whitespace":return new q("whitespace",z.content);case"ordgroup":return new q("group","",z.args.map(U));case"element":return new q("atom",w(z.content));case"symbol":return new q("symbol",w(z.content));case"text":return new q("text",z.content);case"comment":return new q("comment",z.content);case"supsub":{let{base:V,sup:J,sub:X}=z.data;if(V&&V.type==="unaryFunc"&&V.content==="\\overbrace"&&J)return new q("binaryFunc","overbrace",[U(V.args[0]),U(J)]);else if(V&&V.type==="unaryFunc"&&V.content==="\\underbrace"&&X)return new q("binaryFunc","underbrace",[U(V.args[0]),U(X)]);const $={base:U(V)};if($.base.type==="empty")$.base=new q("text","");if(J)$.sup=U(J);if(X)$.sub=U(X);return new q("supsub","",[],$)}case"leftright":{const[V,J,X]=z.args,$=new q("group","",z.args.map(U));if(["[]","()","\\{\\}","\\lfloor\\rfloor","\\lceil\\rceil","\\lfloor\\rceil"].includes(V.content+X.content))return $;return new q("unaryFunc","lr",[$])}case"binaryFunc":{if(z.content==="\\overset")return jz(z);return new q("binaryFunc",w(z.content),z.args.map(U))}case"unaryFunc":{const V=U(z.args[0]);if(z.content==="\\sqrt"&&z.data){const J=U(z.data);return new q("binaryFunc","root",[J,V])}if(z.content==="\\mathbf"){const J=new q("unaryFunc","bold",[V]);return new q("unaryFunc","upright",[J])}if(z.content==="\\mathbb"&&V.type==="atom"&&/^[A-Z]$/.test(V.content))return new q("symbol",V.content+V.content);if(z.content==="\\operatorname"){const J=z.args;if(J.length!==1||J[0].type!=="text")throw new Y("Expecting body of \\operatorname to be text but got",z);const X=J[0].content;if($z.includes(X))return new q("symbol",X);else return new q("unaryFunc","op",[new q("text",X)])}return new q("unaryFunc",w(z.content),z.args.map(U))}case"beginend":{const J=z.data.map((X)=>X.map(U));if(z.content.startsWith("align"))return new q("align","",[],J);else{const X=new q("matrix","",[],J);return X.setOptions({delim:"#none"}),X}}case"unknownMacro":return new q("unknown",w(z.content));case"control":if(z.content==="\\\\")return new q("symbol","\\");else if(z.content==="\\,")return new q("symbol","thin");else throw new Y(`Unknown control sequence: ${z.content}`,z);default:throw new Y(`Unimplemented node type: ${z.type}`,z)}}function w(z){if(/^[a-zA-Z0-9]$/.test(z))return z;else if(z==="/")return"\\/";else if(z==="\\|")return"parallel";else if(z==="\\colon")return":";else if(z==="\\\\")return"\\";else if(["\\$","\\#","\\&","\\_"].includes(z))return z;else if(z.startsWith("\\")){const V=z.slice(1);if(H.has(V))return H.get(V);else return V}return z}var $z=["dim","id","im","mod","Pr","sech","csch"],S=new K(1,"("),A=new K(1,")"),Qz=new K(1,","),qz=new K(0,"\n");class Y extends Error{node;constructor(z,V){super(z);this.name="TypstWriterError",this.node=V}}class u{nonStrict;preferTypstIntrinsic;keepSpaces;buffer="";queue=[];insideFunctionDepth=0;constructor(z,V,J){this.nonStrict=z,this.preferTypstIntrinsic=V,this.keepSpaces=J}writeBuffer(z){const V=z.content;if(V==="")return;let J=!1;if(J||=/[\(\|]$/.test(this.buffer)&&/^\w/.test(V),J||=/^[}()_^,;!\|]$/.test(V),J||=V==="'",J||=/[0-9]$/.test(this.buffer)&&/^[0-9]/.test(V),J||=/[\(\[{]\s*(-|\+)$/.test(this.buffer)||this.buffer==="-"||this.buffer==="+",J||=V.startsWith("\n"),J||=this.buffer==="",J||=/^\s/.test(V),J||=/[\s_^{\(]$/.test(this.buffer),!J)this.buffer+=" ";this.buffer+=V}serialize(z){switch(z.type){case"empty":break;case"atom":{if(z.content===","&&this.insideFunctionDepth>0)this.queue.push(new K(0,"comma"));else this.queue.push(new K(1,z.content));break}case"symbol":this.queue.push(new K(0,z.content));break;case"text":this.queue.push(new K(2,`"${z.content}"`));break;case"comment":this.queue.push(new K(3,`//${z.content}`));break;case"whitespace":for(let V of z.content)if(V===" "){if(this.keepSpaces)this.queue.push(new K(4,V))}else if(V==="\n")this.queue.push(new K(0,V));else throw new Y(`Unexpected whitespace character: ${V}`,z);break;case"group":for(let V of z.args)this.serialize(V);break;case"supsub":{let{base:V,sup:J,sub:X}=z.data;this.appendWithBracketsIfNeeded(V);let $=!1;const Z=J&&J.type==="atom"&&J.content==="\'";if(Z)this.queue.push(new K(1,"\'")),$=!1;if(X)this.queue.push(new K(1,"_")),$=this.appendWithBracketsIfNeeded(X);if(J&&!Z)this.queue.push(new K(1,"^")),$=this.appendWithBracketsIfNeeded(J);if($)this.queue.push(new K(6," "));break}case"binaryFunc":{const V=new K(0,z.content),[J,X]=z.args;this.queue.push(V),this.insideFunctionDepth++,this.queue.push(S),this.serialize(J),this.queue.push(new K(1,",")),this.serialize(X),this.queue.push(A),this.insideFunctionDepth--;break}case"unaryFunc":{const V=new K(0,z.content),J=z.args[0];if(this.queue.push(V),this.insideFunctionDepth++,this.queue.push(S),this.serialize(J),z.options)for(let[X,$]of Object.entries(z.options))this.queue.push(new K(0,`, ${X}: ${$}`));this.queue.push(A),this.insideFunctionDepth--;break}case"align":{const V=z.data;V.forEach((J,X)=>{if(J.forEach(($,Z)=>{if(Z>0)this.queue.push(new K(1,"&"));this.serialize($)}),X<V.length-1)this.queue.push(new K(0,"\\"))});break}case"matrix":{const V=z.data;if(this.queue.push(new K(0,"mat")),this.insideFunctionDepth++,this.queue.push(S),z.options)for(let[J,X]of Object.entries(z.options))this.queue.push(new K(0,`${J}: ${X}, `));V.forEach((J,X)=>{J.forEach(($,Z)=>{if(this.serialize($),Z<J.length-1)this.queue.push(new K(1,","));else if(X<V.length-1)this.queue.push(new K(1,";"))})}),this.queue.push(A),this.insideFunctionDepth--;break}case"unknown":{if(this.nonStrict)this.queue.push(new K(0,z.content));else throw new Y(`Unknown macro: ${z.content}`,z);break}default:throw new Y(`Unimplemented node type to append: ${z.type}`,z)}}appendWithBracketsIfNeeded(z){let V=["group","supsub","empty"].includes(z.type);if(z.type==="group"){const J=z.args[0],X=z.args[z.args.length-1];if(x(J)&&x(X))V=!1}if(V)this.queue.push(S),this.serialize(z),this.queue.push(A);else this.serialize(z);return!V}flushQueue(){const z=new K(6," ");for(let V=0;V<this.queue.length;V++)if(this.queue[V].eq(z)){if(V===this.queue.length-1)this.queue[V].content="";else if(this.queue[V+1].isOneOf([A,Qz,qz]))this.queue[V].content=""}this.queue.forEach((V)=>{this.writeBuffer(V)}),this.queue=[]}finalize(){this.flushQueue();const X=[function($){let Z=$.replace(/floor\.l\s*(.*?)\s*floor\.r/g,"floor($1)");return Z=Z.replace(/floor\(\)/g,'floor("")'),Z},function($){let Z=$.replace(/ceil\.l\s*(.*?)\s*ceil\.r/g,"ceil($1)");return Z=Z.replace(/ceil\(\)/g,'ceil("")'),Z},function($){let Z=$.replace(/floor\.l\s*(.*?)\s*ceil\.r/g,"round($1)");return Z=Z.replace(/round\(\)/g,'round("")'),Z}];for(let $ of X)this.buffer=$(this.buffer);return this.buffer}}function d(z,V){const J={nonStrict:!0,preferTypstIntrinsic:!0,keepSpaces:!1,customTexMacros:{}};if(V){if(V.nonStrict)J.nonStrict=V.nonStrict;if(V.preferTypstIntrinsic)J.preferTypstIntrinsic=V.preferTypstIntrinsic;if(V.customTexMacros)J.customTexMacros=V.customTexMacros}const X=y(z,J.customTexMacros),$=U(X),Z=new u(J.nonStrict,J.preferTypstIntrinsic,J.keepSpaces);return Z.serialize($),Z.finalize()}if(typeof window!=="undefined")window.tex2typst=d;
1
+ var A=new Map([["nonumber",""],["vec","arrow"],["neq","eq.not"],["dot","dot"],["ddot","dot.double"],["doteq","dot(eq)"],["dots","dots.h"],["vdots","dots.v"],["ddots","dots.down"],["widehat","hat"],["widetilde","tilde"],["quad","quad"],["qquad","wide"],["overbrace","overbrace"],["underbrace","underbrace"],["overline","overline"],["underline","underline"],["bar","macron"],["dbinom","binom"],["tbinom","binom"],["dfrac","frac"],["tfrac","frac"],["operatorname","op"],["boldsymbol","bold"],["mathbb","bb"],["mathbf","bold"],["mathcal","cal"],["mathit","italic"],["mathfrak","frak"],["mathrm","upright"],["mathsf","sans"],["mathtt","mono"],["rm","upright"],["pmb","bold"],["pm","plus.minus"],["mp","minus.plus"],["boxplus","plus.square"],["otimes","times.circle"],["boxtimes","times.square"],["approx","approx"],["cong","tilde.equiv"],["simeq","tilde.eq"],["asymp","\u224D"],["equiv","equiv"],["propto","prop"],["gets","arrow.l"],["hookleftarrow","arrow.l.hook"],["leftharpoonup","harpoon.lt"],["leftharpoondown","harpoon.lb"],["rightleftharpoons","harpoons.rtlb"],["longleftarrow","arrow.l.long"],["longrightarrow","arrow.r.long"],["longleftrightarrow","arrow.l.r.long"],["Longleftarrow","arrow.l.double.long"],["Longrightarrow","arrow.r.double.long"],["Longleftrightarrow","arrow.l.r.double.long"],["hookrightarrow","arrow.r.hook"],["rightharpoonup","harpoon.rt"],["rightharpoondown","harpoon.rb"],["iff","arrow.l.r.double.long"],["implies","arrow.r.double.long"],["uparrow","arrow.t"],["downarrow","arrow.b"],["updownarrow","arrow.t.b"],["Uparrow","arrow.t.double"],["Downarrow","arrow.b.double"],["Updownarrow","arrow.t.b.double"],["nearrow","arrow.tr"],["searrow","arrow.br"],["swarrow","arrow.bl"],["nwarrow","arrow.tl"],["leadsto","arrow.squiggly"],["leftleftarrows","arrows.ll"],["rightrightarrows","arrows.rr"],["Cap","sect.double"],["Cup","union.double"],["Delta","Delta"],["Gamma","Gamma"],["Join","join"],["Lambda","Lambda"],["Leftarrow","arrow.l.double"],["Leftrightarrow","arrow.l.r.double"],["Longrightarrow","arrow.r.double.long"],["Omega","Omega"],["P","pilcrow"],["Phi","Phi"],["Pi","Pi"],["Psi","Psi"],["Rightarrow","arrow.r.double"],["S","section"],["Sigma","Sigma"],["Theta","Theta"],["aleph","alef"],["alpha","alpha"],["angle","angle"],["approx","approx"],["approxeq","approx.eq"],["beta","beta"],["bigcap","sect.big"],["bigcirc","circle.big"],["bigcup","union.big"],["bigodot","dot.circle.big"],["bigotimes","times.circle.big"],["bigsqcup","union.sq.big"],["biguplus","union.plus.big"],["bigvee","or.big"],["bigwedge","and.big"],["bullet","bullet"],["cap","sect"],["cdot","dot.op"],["cdots","dots.c"],["checkmark","checkmark"],["chi","chi"],["circ","circle.small"],["colon","colon"],["cong","tilde.equiv"],["coprod","product.co"],["copyright","copyright"],["cup","union"],["curlyvee","or.curly"],["curlywedge","and.curly"],["dagger","dagger"],["dashv","tack.l"],["ddagger","dagger.double"],["delta","delta"],["ddots","dots.down"],["diamond","diamond"],["div","div"],["divideontimes","times.div"],["dotplus","plus.dot"],["downarrow","arrow.b"],["ell","ell"],["emptyset","nothing"],["epsilon","epsilon.alt"],["equiv","equiv"],["eta","eta"],["exists","exists"],["forall","forall"],["gamma","gamma"],["ge","gt.eq"],["geq","gt.eq"],["geqslant","gt.eq.slant"],["gg","gt.double"],["hbar","planck.reduce"],["imath","dotless.i"],["iiiint","integral.quad"],["iiint","integral.triple"],["iint","integral.double"],["in","in"],["infty","infinity"],["int","integral"],["intercal","top"],["iota","iota"],["jmath","dotless.j"],["kappa","kappa"],["lambda","lambda"],["land","and"],["langle","angle.l"],["lbrace","brace.l"],["lbrack","bracket.l"],["ldots","dots.h"],["le","lt.eq"],["leadsto","arrow.squiggly"],["leftarrow","arrow.l"],["leftthreetimes","times.three.l"],["leftrightarrow","arrow.l.r"],["leq","lt.eq"],["leqslant","lt.eq.slant"],["lhd","triangle.l"],["ll","lt.double"],["lor","or"],["ltimes","times.l"],["measuredangle","angle.arc"],["mid","divides"],["models","models"],["mp","minus.plus"],["mu","mu"],["nabla","nabla"],["ncong","tilde.equiv.not"],["ne","eq.not"],["neg","not"],["neq","eq.not"],["nexists","exists.not"],["ni","in.rev"],["nleftarrow","arrow.l.not"],["nleq","lt.eq.not"],["nparallel","parallel.not"],["ngeq","gt.eq.not"],["nmid","divides.not"],["notin","in.not"],["nsim","tilde.not"],["nsubseteq","subset.eq.not"],["nu","nu"],["ntriangleleft","lt.tri.not"],["ntriangleright","gt.tri.not"],["nwarrow","arrow.tl"],["odot","dot.circle"],["oint","integral.cont"],["oiint","integral.surf"],["oiiint","integral.vol"],["omega","omega"],["ominus","minus.circle"],["otimes","times.circle"],["parallel","parallel"],["partial","diff"],["perp","perp"],["phi","phi.alt"],["pi","pi"],["pm","plus.minus"],["pounds","pound"],["prec","prec"],["preceq","prec.eq"],["prime","prime"],["prod","product"],["propto","prop"],["psi","psi"],["rangle","angle.r"],["rbrace","brace.r"],["rbrack","bracket.r"],["rhd","triangle"],["rho","rho"],["rightarrow","arrow.r"],["rightthreetimes","times.three.r"],["rtimes","times.r"],["setminus","without"],["sigma","sigma"],["sim","tilde.op"],["simeq","tilde.eq"],["slash","slash"],["smallsetminus","without"],["spadesuit","suit.spade"],["sqcap","sect.sq"],["sqcup","union.sq"],["sqsubseteq","subset.eq.sq"],["sqsupseteq","supset.eq.sq"],["subset","subset"],["subseteq","subset.eq"],["subsetneq","subset.neq"],["succ","succ"],["succeq","succ.eq"],["sum","sum"],["supset","supset"],["supseteq","supset.eq"],["supsetneq","supset.neq"],["swarrow","arrow.bl"],["tau","tau"],["theta","theta"],["times","times"],["to","arrow.r"],["top","top"],["triangle","triangle.t"],["twoheadrightarrow","arrow.r.twohead"],["uparrow","arrow.t"],["updownarrow","arrow.t.b"],["upharpoonright","harpoon.tr"],["uplus","union.plus"],["upsilon","upsilon"],["varepsilon","epsilon"],["varnothing","diameter"],["varphi","phi"],["varpi","pi.alt"],["varrho","rho.alt"],["varsigma","sigma.alt"],["vartheta","theta.alt"],["vdash","tack.r"],["vdots","dots.v"],["vee","or"],["wedge","and"],["wr","wreath"],["xi","xi"],["yen","yen"],["zeta","zeta"],["mathscr","scr"],["LaTeX","#LaTeX"],["TeX","#TeX"]]),D2=new Map([["lparen","paren.l"],["lParen","paren.l.double"],["rparen","paren.r"],["rParen","paren.r.double"],["overparen","paren.t"],["underparen","paren.b"],["lbrace","brace.l"],["lBrace","brace.l.double"],["rbrace","brace.r"],["rBrace","brace.r.double"],["underbrace","brace.b"],["lbrack","bracket.l"],["lBrack","bracket.l.double"],["rbrack","bracket.r"],["rBrack","bracket.r.double"],["overbracket","bracket.t"],["underbracket","bracket.b"],["lbrbrak","shell.l"],["Lbrbrak","shell.l.double"],["rbrbrak","shell.r"],["Rbrbrak","shell.r.double"],["obrbrak","shell.t"],["ubrbrak","shell.b"],["vert","bar.v"],["Vert","bar.v.double"],["Vvert","bar.v.triple"],["circledvert","bar.v.circle"],["horizbar","bar.h"],["lvzigzag","fence.l"],["Lvzigzag","fence.l.double"],["rvzigzag","fence.r"],["Rvzigzag","fence.r.double"],["fourvdots","fence.dotted"],["angle","angle"],["langle","angle.l"],["lcurvyangle","angle.l.curly"],["langledot","angle.l.dot"],["rangle","angle.r"],["rcurvyangle","angle.r.curly"],["rangledot","angle.r.dot"],["angdnr","angle.acute"],["measuredangle","angle.arc"],["measuredangleleft","angle.arc.rev"],["wideangledown","angle.oblique"],["revangle","angle.rev"],["rightangle","angle.right"],["measuredrightangle","angle.right.arc"],["rightanglemdot","angle.right.dot"],["rightanglesqr","angle.right.sq"],["angles","angle.s"],["threedangle","angle.spatial"],["sphericalangle","angle.spheric"],["gtlpar","angle.spheric.rev"],["sphericalangleup","angle.spheric.top"],["lceil","ceil.l"],["rceil","ceil.r"],["lfloor","floor.l"],["rfloor","floor.r"],["mathampersand","amp"],["upand","amp.inv"],["ast","ast.op"],["circledast","ast.circle"],["boxast","ast.square"],["mathatsign","at"],["backslash","backslash"],["obslash","backslash.circle"],["rsolbar","backslash.not"],["mathcolon","colon"],["Colon","colon.double"],["coloneq","colon.eq"],["Coloneq","colon.double.eq"],["mathcomma","comma"],["dagger","dagger"],["ddagger","dagger.double"],["dashcolon","dash.colon"],["circleddash","dash.circle"],["hzigzag","dash.wave.double"],["cdot","dot.op"],["mathperiod","dot.basic"],["cdotp","dot.c"],["odot","dot.circle"],["bigodot","dot.circle.big"],["boxdot","dot.square"],["dddot","dot.triple"],["ddddot","dot.quad"],["mathexclam","excl"],["Exclam","excl.double"],["mathquestion","quest"],["Question","quest.double"],["mathoctothorpe","hash"],["mathhyphen","hyph"],["mathpercent","percent"],["mathparagraph","pilcrow"],["mathsection","section"],["mathsemicolon","semi"],["mathslash","slash"],["sslash","slash.double"],["trslash","slash.triple"],["xsol","slash.big"],["unicodecdots","dots.h.c"],["unicodeellipsis","dots.h"],["vdots","dots.v"],["ddots","dots.down"],["adots","dots.up"],["sim","tilde.op"],["dotsim","tilde.dot"],["sime","tilde.eq"],["nsimeq","tilde.eq.not"],["backsimeq","tilde.eq.rev"],["cong","tilde.equiv"],["ncong","tilde.equiv.not"],["simneqq","tilde.nequiv"],["nsim","tilde.not"],["backsim","tilde.rev"],["backcong","tilde.rev.equiv"],["approxident","tilde.triple"],["caretinsert","caret"],["prime","prime"],["backprime","prime.rev"],["dprime","prime.double"],["backdprime","prime.double.rev"],["trprime","prime.triple"],["backtrprime","prime.triple.rev"],["qprime","prime.quad"],["mathplus","plus"],["oplus","plus.circle"],["rightarrowonoplus","plus.circle.arrow"],["bigoplus","plus.circle.big"],["dotplus","plus.dot"],["doubleplus","plus.double"],["pm","plus.minus"],["boxplus","plus.square"],["triangleplus","plus.triangle"],["tripleplus","plus.triple"],["minus","minus"],["ominus","minus.circle"],["dotminus","minus.dot"],["mp","minus.plus"],["boxminus","minus.square"],["eqsim","minus.tilde"],["triangleminus","minus.triangle"],["div","div"],["odiv","div.circle"],["times","times"],["bigtimes","times.big"],["otimes","times.circle"],["bigotimes","times.circle.big"],["divideontimes","times.div"],["leftthreetimes","times.three.l"],["rightthreetimes","times.three.r"],["ltimes","times.l"],["rtimes","times.r"],["boxtimes","times.square"],["triangletimes","times.triangle"],["mathratio","ratio"],["equal","eq"],["stareq","eq.star"],["circledequal","eq.circle"],["eqcolon","eq.colon"],["eqdef","eq.def"],["triangleq","eq.delta"],["veeeq","eq.equi"],["wedgeq","eq.est"],["eqgtr","eq.gt"],["eqless","eq.lt"],["measeq","eq.m"],["ne","eq.not"],["curlyeqprec","eq.prec"],["questeq","eq.quest"],["curlyeqsucc","eq.succ"],["equiv","eq.triple"],["Equiv","eq.quad"],["greater","gt"],["ogreaterthan","gt.circle"],["gtrdot","gt.dot"],["gtrapprox","gt.approx"],["gg","gt.double"],["geq","gt.eq"],["geqslant","gt.eq.slant"],["gtreqless","gt.eq.lt"],["ngeq","gt.eq.not"],["geqq","gt.equiv"],["gtrless","gt.lt"],["ngtrless","gt.lt.not"],["gneq","gt.neq"],["gnapprox","gt.napprox"],["gneqq","gt.nequiv"],["ngtr","gt.not"],["gnsim","gt.ntilde"],["gtrsim","gt.tilde"],["ngtrsim","gt.tilde.not"],["vartriangleright","gt.tri"],["trianglerighteq","gt.tri.eq"],["ntrianglerighteq","gt.tri.eq.not"],["nvartriangleright","gt.tri.not"],["ggg","gt.triple"],["gggnest","gt.triple.nested"],["less","lt"],["olessthan","lt.circle"],["lessdot","lt.dot"],["lessapprox","lt.approx"],["ll","lt.double"],["leq","lt.eq"],["leqslant","lt.eq.slant"],["lesseqgtr","lt.eq.gt"],["nleq","lt.eq.not"],["leqq","lt.equiv"],["lessgtr","lt.gt"],["nlessgtr","lt.gt.not"],["lneq","lt.neq"],["lnapprox","lt.napprox"],["lneqq","lt.nequiv"],["nless","lt.not"],["lnsim","lt.ntilde"],["lesssim","lt.tilde"],["nlesssim","lt.tilde.not"],["vartriangleleft","lt.tri"],["trianglelefteq","lt.tri.eq"],["ntrianglelefteq","lt.tri.eq.not"],["nvartriangleleft","lt.tri.not"],["lll","lt.triple"],["lllnest","lt.triple.nested"],["approx","approx"],["approxeq","approx.eq"],["napprox","approx.not"],["prec","prec"],["precapprox","prec.approx"],["preccurlyeq","prec.curly.eq"],["npreccurlyeq","prec.curly.eq.not"],["Prec","prec.double"],["preceq","prec.eq"],["preceqq","prec.equiv"],["precnapprox","prec.napprox"],["precneq","prec.neq"],["precneqq","prec.nequiv"],["nprec","prec.not"],["precnsim","prec.ntilde"],["precsim","prec.tilde"],["succ","succ"],["succapprox","succ.approx"],["succcurlyeq","succ.curly.eq"],["nsucccurlyeq","succ.curly.eq.not"],["Succ","succ.double"],["succeq","succ.eq"],["succeqq","succ.equiv"],["succnapprox","succ.napprox"],["succneq","succ.neq"],["succneqq","succ.nequiv"],["nsucc","succ.not"],["succnsim","succ.ntilde"],["succsim","succ.tilde"],["nequiv","equiv.not"],["propto","prop"],["origof","original"],["imageof","image"],["varnothing","emptyset"],["emptysetoarr","emptyset.arrow.r"],["emptysetoarrl","emptyset.arrow.l"],["emptysetobar","emptyset.bar"],["emptysetocirc","emptyset.circle"],["revemptyset","emptyset.rev"],["setminus","without"],["complement","complement"],["in","in"],["notin","in.not"],["ni","in.rev"],["nni","in.rev.not"],["smallni","in.rev.small"],["smallin","in.small"],["subset","subset"],["subsetdot","subset.dot"],["Subset","subset.double"],["subseteq","subset.eq"],["nsubseteq","subset.eq.not"],["sqsubseteq","subset.eq.sq"],["nsqsubseteq","subset.eq.sq.not"],["subsetneq","subset.neq"],["nsubset","subset.not"],["sqsubset","subset.sq"],["sqsubsetneq","subset.sq.neq"],["supset","supset"],["supsetdot","supset.dot"],["Supset","supset.double"],["supseteq","supset.eq"],["nsupseteq","supset.eq.not"],["sqsupseteq","supset.eq.sq"],["nsqsupseteq","supset.eq.sq.not"],["supsetneq","supset.neq"],["nsupset","supset.not"],["sqsupset","supset.sq"],["sqsupsetneq","supset.sq.neq"],["cup","union"],["cupleftarrow","union.arrow"],["bigcup","union.big"],["cupdot","union.dot"],["bigcupdot","union.dot.big"],["Cup","union.double"],["uminus","union.minus"],["cupvee","union.or"],["uplus","union.plus"],["biguplus","union.plus.big"],["sqcup","union.sq"],["bigsqcup","union.sq.big"],["Sqcup","union.sq.double"],["cap","sect"],["capwedge","sect.and"],["bigcap","sect.big"],["capdot","sect.dot"],["Cap","sect.double"],["sqcap","sect.sq"],["bigsqcap","sect.sq.big"],["Sqcap","sect.sq.double"],["infty","infinity"],["nvinfty","infinity.bar"],["iinfin","infinity.incomplete"],["tieinfty","infinity.tie"],["partial","diff"],["nabla","gradient"],["sum","sum"],["sumint","sum.integral"],["prod","product"],["coprod","product.co"],["int","integral"],["intlarhk","integral.arrow.hook"],["awint","integral.ccw"],["oint","integral.cont"],["ointctrclockwise","integral.cont.ccw"],["varointclockwise","integral.cont.cw"],["intclockwise","integral.cw"],["intbar","integral.dash"],["intBar","integral.dash.double"],["iint","integral.double"],["iiiint","integral.quad"],["intcap","integral.sect"],["fint","integral.slash"],["sqint","integral.square"],["oiint","integral.surf"],["intx","integral.times"],["iiint","integral.triple"],["intcup","integral.union"],["oiiint","integral.vol"],["increment","laplace"],["forall","forall"],["exists","exists"],["nexists","exists.not"],["top","top"],["bot","bot"],["neg","not"],["wedge","and"],["bigwedge","and.big"],["curlywedge","and.curly"],["wedgedot","and.dot"],["Wedge","and.double"],["vee","or"],["bigvee","or.big"],["curlyvee","or.curly"],["veedot","or.dot"],["Vee","or.double"],["models","models"],["Vdash","forces"],["nVdash","forces.not"],["therefore","therefore"],["because","because"],["QED","qed"],["vysmwhtcircle","compose"],["multimap","multimap"],["dualmap","multimap.double"],["tplus","tiny"],["tminus","miny"],["mid","divides"],["nmid","divides.not"],["wr","wreath"],["parallel","parallel"],["nhpar","parallel.struck"],["circledparallel","parallel.circle"],["equalparallel","parallel.eq"],["equivVert","parallel.equiv"],["nparallel","parallel.not"],["eparsl","parallel.slanted.eq"],["smeparsl","parallel.slanted.eq.tilde"],["eqvparsl","parallel.slanted.equiv"],["parsim","parallel.tilde"],["perp","perp"],["operp","perp.circle"],["diameter","diameter"],["Join","join"],["rightouterjoin","join.r"],["leftouterjoin","join.l"],["fullouterjoin","join.l.r"],["smashtimes","smash"],["mathdollar","dollar"],["euro","euro"],["mathsterling","pound"],["mathyen","yen"],["checkmark","checkmark"],["maltese","maltese"],["clubsuit","suit.club.filled"],["varclubsuit","suit.club.stroked"],["vardiamondsuit","suit.diamond.filled"],["diamondsuit","suit.diamond.stroked"],["varheartsuit","suit.heart.filled"],["heartsuit","suit.heart.stroked"],["spadesuit","suit.spade.filled"],["varspadesuit","suit.spade.stroked"],["quarternote","note.quarter.alt"],["eighthnote","note.eighth.alt"],["twonotes","note.eighth.beamed"],["natural","natural"],["flat","flat"],["sharp","sharp"],["smblkcircle","bullet"],["mdlgwhtcircle","circle.stroked"],["mdsmwhtcircle","circle.stroked.small"],["lgwhtcircle","circle.stroked.big"],["mdlgblkcircle","circle.filled"],["mdsmblkcircle","circle.filled.tiny"],["vysmblkcircle","circle.filled.small"],["lgblkcircle","circle.filled.big"],["dottedcircle","circle.dotted"],["circledcirc","circle.nested"],["whthorzoval","ellipse.stroked.h"],["whtvertoval","ellipse.stroked.v"],["blkhorzoval","ellipse.filled.h"],["blkvertoval","ellipse.filled.v"],["bigtriangleup","triangle.stroked.t"],["bigtriangledown","triangle.stroked.b"],["triangleright","triangle.stroked.r"],["triangleleft","triangle.stroked.l"],["lltriangle","triangle.stroked.bl"],["lrtriangle","triangle.stroked.br"],["ultriangle","triangle.stroked.tl"],["urtriangle","triangle.stroked.tr"],["vartriangle","triangle.stroked.small.t"],["triangledown","triangle.stroked.small.b"],["smalltriangleright","triangle.stroked.small.r"],["smalltriangleleft","triangle.stroked.small.l"],["whiteinwhitetriangle","triangle.stroked.nested"],["trianglecdot","triangle.stroked.dot"],["bigblacktriangleup","triangle.filled.t"],["bigblacktriangledown","triangle.filled.b"],["blacktriangleright","triangle.filled.r"],["blacktriangleleft","triangle.filled.l"],["llblacktriangle","triangle.filled.bl"],["lrblacktriangle","triangle.filled.br"],["ulblacktriangle","triangle.filled.tl"],["urblacktriangle","triangle.filled.tr"],["blacktriangle","triangle.filled.small.t"],["blacktriangledown","triangle.filled.small.b"],["smallblacktriangleright","triangle.filled.small.r"],["smallblacktriangleleft","triangle.filled.small.l"],["mdlgwhtsquare","square.stroked"],["smwhtsquare","square.stroked.tiny"],["mdsmwhtsquare","square.stroked.small"],["mdwhtsquare","square.stroked.medium"],["lgwhtsquare","square.stroked.big"],["dottedsquare","square.stroked.dotted"],["squoval","square.stroked.rounded"],["mdlgblksquare","square.filled"],["smblksquare","square.filled.tiny"],["mdsmblksquare","square.filled.small"],["mdblksquare","square.filled.medium"],["lgblksquare","square.filled.big"],["hrectangle","rect.stroked.h"],["vrectangle","rect.stroked.v"],["hrectangleblack","rect.filled.h"],["vrectangleblack","rect.filled.v"],["pentagon","penta.stroked"],["pentagonblack","penta.filled"],["varhexagon","hexa.stroked"],["varhexagonblack","hexa.filled"],["mdlgwhtdiamond","diamond.stroked"],["smwhtdiamond","diamond.stroked.small"],["mdwhtdiamond","diamond.stroked.medium"],["diamondcdot","diamond.stroked.dot"],["mdlgblkdiamond","diamond.filled"],["mdblkdiamond","diamond.filled.medium"],["smblkdiamond","diamond.filled.small"],["mdlgwhtlozenge","lozenge.stroked"],["smwhtlozenge","lozenge.stroked.small"],["mdwhtlozenge","lozenge.stroked.medium"],["mdlgblklozenge","lozenge.filled"],["smblklozenge","lozenge.filled.small"],["mdblklozenge","lozenge.filled.medium"],["parallelogram","parallelogram.stroked"],["parallelogramblack","parallelogram.filled"],["star","star.op"],["bigwhitestar","star.stroked"],["bigstar","star.filled"],["rightarrow","arrow.r"],["longmapsto","arrow.r.long.bar"],["mapsto","arrow.r.bar"],["rightdowncurvedarrow","arrow.r.curve"],["rightdasharrow","arrow.r.dashed"],["rightdotarrow","arrow.r.dotted"],["Rightarrow","arrow.r.double"],["Mapsto","arrow.r.double.bar"],["Longrightarrow","arrow.r.double.long"],["Longmapsto","arrow.r.double.long.bar"],["nRightarrow","arrow.r.double.not"],["hookrightarrow","arrow.r.hook"],["longrightarrow","arrow.r.long"],["longrightsquigarrow","arrow.r.long.squiggly"],["looparrowright","arrow.r.loop"],["nrightarrow","arrow.r.not"],["RRightarrow","arrow.r.quad"],["rightsquigarrow","arrow.r.squiggly"],["rightarrowbar","arrow.r.stop"],["rightwhitearrow","arrow.r.stroked"],["rightarrowtail","arrow.r.tail"],["similarrightarrow","arrow.r.tilde"],["Rrightarrow","arrow.r.triple"],["twoheadmapsto","arrow.r.twohead.bar"],["twoheadrightarrow","arrow.r.twohead"],["rightwavearrow","arrow.r.wave"],["leftarrow","arrow.l"],["mapsfrom","arrow.l.bar"],["leftdowncurvedarrow","arrow.l.curve"],["leftdasharrow","arrow.l.dashed"],["leftdotarrow","arrow.l.dotted"],["Leftarrow","arrow.l.double"],["Mapsfrom","arrow.l.double.bar"],["Longleftarrow","arrow.l.double.long"],["Longmapsfrom","arrow.l.double.long.bar"],["nLeftarrow","arrow.l.double.not"],["hookleftarrow","arrow.l.hook"],["longleftarrow","arrow.l.long"],["longmapsfrom","arrow.l.long.bar"],["longleftsquigarrow","arrow.l.long.squiggly"],["looparrowleft","arrow.l.loop"],["nleftarrow","arrow.l.not"],["LLeftarrow","arrow.l.quad"],["leftsquigarrow","arrow.l.squiggly"],["barleftarrow","arrow.l.stop"],["leftwhitearrow","arrow.l.stroked"],["leftarrowtail","arrow.l.tail"],["similarleftarrow","arrow.l.tilde"],["Lleftarrow","arrow.l.triple"],["twoheadmapsfrom","arrow.l.twohead.bar"],["twoheadleftarrow","arrow.l.twohead"],["leftwavearrow","arrow.l.wave"],["uparrow","arrow.t"],["mapsup","arrow.t.bar"],["uprightcurvearrow","arrow.t.curve"],["updasharrow","arrow.t.dashed"],["Uparrow","arrow.t.double"],["UUparrow","arrow.t.quad"],["baruparrow","arrow.t.stop"],["upwhitearrow","arrow.t.stroked"],["Uuparrow","arrow.t.triple"],["twoheaduparrow","arrow.t.twohead"],["downarrow","arrow.b"],["mapsdown","arrow.b.bar"],["downrightcurvedarrow","arrow.b.curve"],["downdasharrow","arrow.b.dashed"],["Downarrow","arrow.b.double"],["DDownarrow","arrow.b.quad"],["downarrowbar","arrow.b.stop"],["downwhitearrow","arrow.b.stroked"],["Ddownarrow","arrow.b.triple"],["twoheaddownarrow","arrow.b.twohead"],["leftrightarrow","arrow.l.r"],["Leftrightarrow","arrow.l.r.double"],["Longleftrightarrow","arrow.l.r.double.long"],["nLeftrightarrow","arrow.l.r.double.not"],["longleftrightarrow","arrow.l.r.long"],["nleftrightarrow","arrow.l.r.not"],["leftrightsquigarrow","arrow.l.r.wave"],["updownarrow","arrow.t.b"],["Updownarrow","arrow.t.b.double"],["nearrow","arrow.tr"],["Nearrow","arrow.tr.double"],["hknearrow","arrow.tr.hook"],["searrow","arrow.br"],["Searrow","arrow.br.double"],["hksearrow","arrow.br.hook"],["nwarrow","arrow.tl"],["Nwarrow","arrow.tl.double"],["hknwarrow","arrow.tl.hook"],["swarrow","arrow.bl"],["Swarrow","arrow.bl.double"],["hkswarrow","arrow.bl.hook"],["nwsearrow","arrow.tl.br"],["neswarrow","arrow.tr.bl"],["acwopencirclearrow","arrow.ccw"],["curvearrowleft","arrow.ccw.half"],["cwopencirclearrow","arrow.cw"],["curvearrowright","arrow.cw.half"],["downzigzagarrow","arrow.zigzag"],["rightrightarrows","arrows.rr"],["leftleftarrows","arrows.ll"],["upuparrows","arrows.tt"],["downdownarrows","arrows.bb"],["leftrightarrows","arrows.lr"],["barleftarrowrightarrowbar","arrows.lr.stop"],["rightleftarrows","arrows.rl"],["updownarrows","arrows.tb"],["downuparrows","arrows.bt"],["rightthreearrows","arrows.rrr"],["leftthreearrows","arrows.lll"],["rightharpoonup","harpoon.rt"],["barrightharpoonup","harpoon.rt.bar"],["rightharpoonupbar","harpoon.rt.stop"],["rightharpoondown","harpoon.rb"],["barrightharpoondown","harpoon.rb.bar"],["rightharpoondownbar","harpoon.rb.stop"],["leftharpoonup","harpoon.lt"],["leftharpoonupbar","harpoon.lt.bar"],["barleftharpoonup","harpoon.lt.stop"],["leftharpoondown","harpoon.lb"],["leftharpoondownbar","harpoon.lb.bar"],["barleftharpoondown","harpoon.lb.stop"],["upharpoonleft","harpoon.tl"],["upharpoonleftbar","harpoon.tl.bar"],["barupharpoonleft","harpoon.tl.stop"],["upharpoonright","harpoon.tr"],["upharpoonrightbar","harpoon.tr.bar"],["barupharpoonright","harpoon.tr.stop"],["downharpoonleft","harpoon.bl"],["bardownharpoonleft","harpoon.bl.bar"],["downharpoonleftbar","harpoon.bl.stop"],["downharpoonright","harpoon.br"],["bardownharpoonright","harpoon.br.bar"],["downharpoonrightbar","harpoon.br.stop"],["leftrightharpoonupup","harpoon.lt.rt"],["leftrightharpoondowndown","harpoon.lb.rb"],["leftrightharpoondownup","harpoon.lb.rt"],["leftrightharpoonupdown","harpoon.lt.rb"],["updownharpoonleftleft","harpoon.tl.bl"],["updownharpoonrightright","harpoon.tr.br"],["updownharpoonleftright","harpoon.tl.br"],["updownharpoonrightleft","harpoon.tr.bl"],["rightharpoonsupdown","harpoons.rtrb"],["downharpoonsleftright","harpoons.blbr"],["downupharpoonsleftright","harpoons.bltr"],["leftrightharpoonsdown","harpoons.lbrb"],["leftharpoonsupdown","harpoons.ltlb"],["leftrightharpoons","harpoons.ltrb"],["leftrightharpoonsup","harpoons.ltrt"],["rightleftharpoonsdown","harpoons.rblb"],["rightleftharpoons","harpoons.rtlb"],["rightleftharpoonsup","harpoons.rtlt"],["updownharpoonsleftright","harpoons.tlbr"],["upharpoonsleftright","harpoons.tltr"],["vdash","tack.r"],["nvdash","tack.r.not"],["vlongdash","tack.r.long"],["assert","tack.r.short"],["vDash","tack.r.double"],["nvDash","tack.r.double.not"],["dashv","tack.l"],["longdashv","tack.l.long"],["shortlefttack","tack.l.short"],["Dashv","tack.l.double"],["bigbot","tack.t.big"],["Vbar","tack.t.double"],["shortuptack","tack.t.short"],["bigtop","tack.b.big"],["barV","tack.b.double"],["shortdowntack","tack.b.short"],["dashVdash","tack.l.r"],["BbbA","AA"],["BbbB","BB"],["BbbC","CC"],["BbbD","DD"],["BbbE","EE"],["BbbF","FF"],["BbbG","GG"],["BbbH","HH"],["BbbI","II"],["BbbJ","JJ"],["BbbK","KK"],["BbbL","LL"],["BbbM","MM"],["BbbN","NN"],["BbbO","OO"],["BbbP","PP"],["BbbQ","QQ"],["BbbR","RR"],["BbbS","SS"],["BbbT","TT"],["BbbU","UU"],["BbbV","VV"],["BbbW","WW"],["BbbX","XX"],["BbbY","YY"],["BbbZ","ZZ"],["ell","ell"],["Planckconst","planck"],["hslash","planck.reduce"],["Angstrom","angstrom"],["Re","Re"],["Im","Im"],["imath","dotless.i"],["jmath","dotless.j"]]);for(let[q,J]of D2)if(!A.has(q))A.set(q,J);var R=new Map;for(let[q,J]of Array.from(A.entries()).reverse())R.set(J,q);R.set("dif","mathrm{d}");var U2=new Map([["top","top"],["frac","frac"],["tilde","tilde"],["hat","hat"],["upright","mathrm"],["bold","boldsymbol"]]);for(let[q,J]of U2)R.set(q,J);function t(q,J,z=0){for(let V=z;V<q.length;V++)if(q[V].eq(J))return V;return-1}function b(q,J){for(let z of q)if(z.eq(J))return!0;return!1}function c(q,J){const z=[];let V=[];for(let Z of q)if(Z.eq(J))z.push(V),V=[];else V.push(Z);return z.push(V),z}function O2(q){if(["{","}","%"].includes(q))return"\\"+q;return q}class j{type;value;constructor(q,J){this.type=q,this.value=J}eq(q){return this.type===q.type&&this.value===q.value}toString(){switch(this.type){case 2:return`\\text{${this.value}}`;case 3:return`%${this.value}`;default:return this.value}}}class ${type;content;args;data;constructor(q,J,z,V){this.type=q,this.content=J,this.args=z,this.data=V}eq(q){return this.type===q.type&&this.content===q.content}toString(){switch(this.type){case"text":return`\\text{${this.content}}`;default:throw new Error(`toString() is not implemented for type ${this.type}`)}}serialize(){switch(this.type){case"empty":return[];case"element":{let q=this.content;return q=O2(q),[new j(0,q)]}case"symbol":return[new j(1,this.content)];case"text":return[new j(2,this.content)];case"comment":return[new j(3,this.content)];case"whitespace":{const q=[];for(let J of this.content){const z=J===" "?4:5;q.push(new j(z,J))}return q}case"ordgroup":return this.args.map((q)=>q.serialize()).flat();case"unaryFunc":{let q=[];if(q.push(new j(1,this.content)),this.content==="\\sqrt"&&this.data)q.push(new j(0,"[")),q=q.concat(this.data.serialize()),q.push(new j(0,"]"));if(this.content==="\\operatorname"&&this.args.length===1&&this.args[0].type==="text"){const J=this.args[0].content;return q.push(new j(0,"{")),q.push(new j(1,J)),q.push(new j(0,"}")),q}return q.push(new j(0,"{")),q=q.concat(this.args[0].serialize()),q.push(new j(0,"}")),q}case"binaryFunc":{let q=[];return q.push(new j(1,this.content)),q.push(new j(0,"{")),q=q.concat(this.args[0].serialize()),q.push(new j(0,"}")),q.push(new j(0,"{")),q=q.concat(this.args[1].serialize()),q.push(new j(0,"}")),q}case"supsub":{let q=[];const{base:J,sup:z,sub:V}=this.data;if(q=q.concat(J.serialize()),V)if(q.push(new j(6,"_")),V.type==="ordgroup"||V.type==="supsub"||V.type==="empty")q.push(new j(0,"{")),q=q.concat(V.serialize()),q.push(new j(0,"}"));else q=q.concat(V.serialize());if(z)if(q.push(new j(6,"^")),z.type==="ordgroup"||z.type==="supsub"||z.type==="empty")q.push(new j(0,"{")),q=q.concat(z.serialize()),q.push(new j(0,"}"));else q=q.concat(z.serialize());return q}case"control":return[new j(6,this.content)];case"beginend":{let q=[];const J=this.data;q.push(new j(1,`\\begin{${this.content}}`)),q.push(new j(5,"\n"));for(let z=0;z<J.length;z++){const V=J[z];for(let Z=0;Z<V.length;Z++){const X=V[Z];if(q=q.concat(X.serialize()),Z!==V.length-1)q.push(new j(6,"&"))}if(z!==J.length-1)q.push(new j(6,"\\\\"))}return q.push(new j(5,"\n")),q.push(new j(1,`\\end{${this.content}}`)),q}default:throw new Error("[TexNode.serialize] Unimplemented type: "+this.type)}}}class G{type;value;constructor(q,J){this.type=q,this.value=J}eq(q){return this.type===q.type&&this.value===q.value}isOneOf(q){return b(q,this)}toNode(){switch(this.type){case 2:return new W("text",this.value);case 3:return new W("comment",this.value);case 4:case 7:return new W("whitespace",this.value);case 1:return new W("atom",this.value);case 0:return new W("symbol",this.value);case 6:{const q=this.value;switch(q){case"":case"_":case"^":return new W("empty","");case"&":return new W("control","&");case"\\":return new W("control","\\");default:throw new Error(`Unexpected control character ${q}`)}}default:throw new Error(`Unexpected token type ${this.type}`)}}toString(){switch(this.type){case 2:return`"${this.value}"`;case 3:return`//${this.value}`;default:return this.value}}}class W{type;content;args;data;options;constructor(q,J,z,V){this.type=q,this.content=J,this.args=z,this.data=V}setOptions(q){this.options=q}eq(q){return this.type===q.type&&this.content===q.content}}function I(q){return"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".includes(q)}function f(q){return"0123456789".includes(q)}function D(q,J=""){if(!q)throw new Error(J)}function I2(q){if(B2.includes(q))return 1;else if(A2.includes(q))return 2;else return 0}function _(q,J){let z=J;while(z<q.length&&[4,5].includes(q[z].type))z++;return q.slice(J,z)}function o(q,J){const z=q[J];if(z.type===0&&["(",")","[","]","|","\\{","\\}"].includes(z.value))return z;else if(z.type===1&&["lfloor","rfloor","lceil","rceil","langle","rangle"].includes(z.value.slice(1)))return z;else return null}function S(q,J){let z=J;while(z<q.length&&q[z].eq(new j(0,"'")))z+=1;return z-J}function R2(q,J){let z=J;while(z<q.length&&I(q[z]))z+=1;return q.substring(J,z)}function g(q,J,z,V){D(q[J].eq(z));let Z=1,X=J+1;while(Z>0){if(X>=q.length)return-1;if(q[X].eq(z))Z+=1;else if(q[X].eq(V))Z-=1;X+=1}return X-1}function S2(q,J){return g(q,J,x,f2)}function C2(q,J){return g(q,J,y,v2)}function L2(q,J){D(q[J]==="{");let z=1,V=J+1;while(z>0){if(V>=q.length)throw new H("Unmatched curly brackets");if(V+1<q.length&&["\\{","\\}"].includes(q.substring(V,V+2))){V+=2;continue}if(q[V]==="{")z+=1;else if(q[V]==="}")z-=1;V+=1}return V-1}function e(q){const J=[];let z=0;while(z<q.length){const V=q[z];let Z;switch(V){case"%":{let X=z+1;while(X<q.length&&q[X]!=="\n")X+=1;Z=new j(3,q.slice(z+1,X)),z=X;break}case"{":case"}":case"_":case"^":case"&":Z=new j(6,V),z++;break;case"\n":Z=new j(5,V),z++;break;case"\r":{if(z+1<q.length&&q[z+1]==="\n")Z=new j(5,"\n"),z+=2;else Z=new j(5,"\n"),z++;break}case" ":{let X=z;while(X<q.length&&q[X]===" ")X+=1;Z=new j(4,q.slice(z,X)),z=X;break}case"\\":{if(z+1>=q.length)throw new H("Expecting command name after \\");const X=q.slice(z,z+2);if(["\\\\","\\,"].includes(X))Z=new j(6,X);else if(["\\{","\\}","\\%","\\$","\\&","\\#","\\_","\\|"].includes(X))Z=new j(0,X);else{const Q=R2(q,z+1);Z=new j(1,"\\"+Q)}z+=Z.value.length;break}default:{if(f(V)){let X=z;while(X<q.length&&f(q[X]))X+=1;Z=new j(0,q.slice(z,X))}else if(I(V))Z=new j(0,V);else if("+-*/=\'<>!.,;?()[]|".includes(V))Z=new j(0,V);else Z=new j(7,V);z+=Z.value.length}}if(J.push(Z),Z.type===1&&["\\text","\\operatorname","\\begin","\\end"].includes(Z.value)){if(z>=q.length||q[z]!=="{")throw new H(`No content for ${Z.value} command`);J.push(new j(6,"{"));const X=L2(q,z);z++;let Q=q.slice(z,X);const K=["{","}","\\","$","&","#","_","%"];for(let F of K)Q=Q.replaceAll("\\"+F,F);J.push(new j(2,Q)),J.push(new j(6,"}")),z=X+1}}return J}function b2(q){const J=(V)=>V.eq(d)||V.eq(a);let z=[];for(let V=0;V<q.length;V++){if(q[V].type===4&&V+1<q.length&&J(q[V+1]))continue;if(q[V].type===4&&V-1>=0&&J(q[V-1]))continue;z.push(q[V])}return z}function w2(q,J){let z=[];for(let V of q)if(V.type===1&&J[V.value]){const Z=e(J[V.value]);z=z.concat(Z)}else z.push(V);return z}function z2(q,J){const z=new q2;let V=e(q);return V=b2(V),V=w2(V,J),z.parse(V)}var B2=["sqrt","text","bar","bold","boldsymbol","ddot","dot","hat","mathbb","mathbf","mathcal","mathfrak","mathit","mathrm","mathscr","mathsf","mathtt","operatorname","overbrace","overline","pmb","rm","tilde","underbrace","underline","vec","widehat","widetilde"],A2=["frac","tfrac","binom","dbinom","dfrac","tbinom","overset"],i=new $("empty",""),w=new j(6,"{"),h=new j(6,"}"),s=new j(0,"["),M2=new j(0,"]"),x=new j(1,"\\left"),f2=new j(1,"\\right"),y=new j(1,"\\begin"),v2=new j(1,"\\end");class H extends Error{constructor(q){super(q);this.name="LatexParserError"}}var d=new j(6,"_"),a=new j(6,"^");class q2{space_sensitive;newline_sensitive;constructor(q=!1,J=!0){this.space_sensitive=q,this.newline_sensitive=J}parse(q){const J=[];let z=0;while(z<q.length){const V=[];let Z=0;while(Z<q.length){const[X,Q]=this.parseNextExpr(q,Z);if(Z=Q,X.type==="whitespace"){if(!this.space_sensitive&&X.content.replace(/ /g,"").length===0)continue;if(!this.newline_sensitive&&X.content==="\n")continue}if(X.type==="control"&&X.content==="&")throw new H("Unexpected & outside of an alignment");V.push(X)}if(V.length===0)return i;else if(V.length===1)return V[0];else return new $("ordgroup","",V)}if(J.length===0)return i;else if(J.length===1)return J[0];else return new $("ordgroup","",J)}parseNextExpr(q,J){let[z,V]=this.parseNextExprWithoutSupSub(q,J),Z=null,X=null,Q=0;if(Q+=S(q,V),V+=Q,V<q.length&&q[V].eq(d)){if([Z,V]=this.parseNextExprWithoutSupSub(q,V+1),Q+=S(q,V),V+=Q,V<q.length&&q[V].eq(a)){if([X,V]=this.parseNextExprWithoutSupSub(q,V+1),S(q,V)>0)throw new H("Double superscript")}}else if(V<q.length&&q[V].eq(a)){if([X,V]=this.parseNextExprWithoutSupSub(q,V+1),S(q,V)>0)throw new H("Double superscript");if(V<q.length&&q[V].eq(d)){if([Z,V]=this.parseNextExprWithoutSupSub(q,V+1),S(q,V)>0)throw new H("Double superscript")}}if(Z!==null||X!==null||Q>0){const K={base:z};if(Z)K.sub=Z;if(Q>0){K.sup=new $("ordgroup","",[]);for(let F=0;F<Q;F++)K.sup.args.push(new $("element","'"));if(X)K.sup.args.push(X);if(K.sup.args.length===1)K.sup=K.sup.args[0]}else if(X)K.sup=X;return[new $("supsub","",[],K),V]}else return[z,V]}parseNextExprWithoutSupSub(q,J){const z=q[J];switch(z.type){case 0:return[new $("element",z.value),J+1];case 2:return[new $("text",z.value),J+1];case 3:return[new $("comment",z.value),J+1];case 4:case 5:return[new $("whitespace",z.value),J+1];case 1:if(z.eq(y))return this.parseBeginEndExpr(q,J);else if(z.eq(x))return this.parseLeftRightExpr(q,J);else return this.parseCommandExpr(q,J);case 6:switch(z.value){case"{":const X=g(q,J,w,h),Q=q.slice(J+1,X);return[this.parse(Q),X+1];case"}":throw new H("Unmatched '}'");case"\\\\":return[new $("control","\\\\"),J+1];case"\\,":return[new $("control","\\,"),J+1];case"_":case"^":return[i,J];case"&":return[new $("control","&"),J+1];default:throw new H("Unknown control sequence")}default:throw new H("Unknown token type")}}parseCommandExpr(q,J){D(q[J].type===1);const z=q[J].value;let V=J+1;if(["left","right","begin","end"].includes(z.slice(1)))throw new H("Unexpected command: "+z);switch(I2(z.slice(1))){case 0:if(!A.has(z.slice(1)))return[new $("unknownMacro",z),V];return[new $("symbol",z),V];case 1:{if(z==="\\sqrt"&&V<q.length&&q[V].eq(s)){const K=V,F=g(q,V,s,M2),Y=q.slice(K+1,F),B=this.parse(Y),[L,l]=this.parseNextExprWithoutSupSub(q,F+1);return[new $("unaryFunc",z,[L],B),l]}else if(z==="\\text"){if(V+2>=q.length)throw new H("Expecting content for \\text command");D(q[V].eq(w)),D(q[V+1].type===2),D(q[V+2].eq(h));const K=q[V+1].value;return[new $("text",K),V+3]}let[X,Q]=this.parseNextExprWithoutSupSub(q,V);return[new $("unaryFunc",z,[X]),Q]}case 2:{const[X,Q]=this.parseNextExprWithoutSupSub(q,V),[K,F]=this.parseNextExprWithoutSupSub(q,Q);return[new $("binaryFunc",z,[X,K]),F]}default:throw new Error("Invalid number of parameters")}}parseLeftRightExpr(q,J){D(q[J].eq(x));let z=J+1;if(z+=_(q,z).length,z>=q.length)throw new H("Expecting delimiter after \\left");const V=o(q,z);if(V===null)throw new H("Invalid delimiter after \\left");z++;const Z=z,X=S2(q,J);if(X===-1)throw new H("No matching \\right");const Q=X;if(z=X+1,z+=_(q,z).length,z>=q.length)throw new H("Expecting \\right after \\left");const K=o(q,z);if(K===null)throw new H("Invalid delimiter after \\right");z++;const F=q.slice(Z,Q),Y=this.parse(F),B=[new $("element",V.value),Y,new $("element",K.value)];return[new $("leftright","",B),z]}parseBeginEndExpr(q,J){D(q[J].eq(y));let z=J+1;D(q[z].eq(w)),D(q[z+1].type===2),D(q[z+2].eq(h));const V=q[z+1].value;z+=3,z+=_(q,z).length;const Z=z,X=C2(q,J);if(X===-1)throw new H("No matching \\end");const Q=X;if(z=X+1,D(q[z].eq(w)),D(q[z+1].type===2),D(q[z+2].eq(h)),q[z+1].value!==V)throw new H("Mismatched \\begin and \\end environments");z+=3;const K=q.slice(Z,Q);while(K.length>0&&[4,5].includes(K[K.length-1].type))K.pop();const F=this.parseAligned(K);return[new $("beginend",V,[],F),z]}parseAligned(q){let J=0;const z=[];let V=[];z.push(V);let Z=new $("ordgroup","",[]);V.push(Z);while(J<q.length){const[X,Q]=this.parseNextExpr(q,J);if(J=Q,X.type==="whitespace"){if(!this.space_sensitive&&X.content.replace(/ /g,"").length===0)continue;if(!this.newline_sensitive&&X.content==="\n")continue}if(X.type==="control"&&X.content==="\\\\")V=[],Z=new $("ordgroup","",[]),V.push(Z),z.push(V);else if(X.type==="control"&&X.content==="&")Z=new $("ordgroup","",[]),V.push(Z);else Z.args.push(X)}return z}}function J2(q){return q.type==="atom"&&["(",")","[","]","{","}","|","\u230A","\u230B","\u2308","\u2309"].includes(q.content)}function E2(q){const[J,z]=q.args,V=(Q)=>{if(Q.eq(new $("text","def")))return!0;if(Q.type==="ordgroup"&&Q.args.length===3){const[K,F,Y]=Q.args,B=new $("element","d"),L=new $("element","e"),l=new $("element","f");if(K.eq(B)&&F.eq(L)&&Y.eq(l))return!0}return!1},Z=(Q)=>Q.eq(new $("element","="));if(V(J)&&Z(z))return new W("symbol","eq.def");const X=new W("funcCall","op",[U(z)]);return X.setOptions({limits:"#true"}),new W("supsub","",[],{base:X,sup:U(J)})}function U(q){switch(q.type){case"empty":return new W("empty","");case"whitespace":return new W("whitespace",q.content);case"ordgroup":return new W("group","",q.args.map(U));case"element":return new W("atom",v(q.content));case"symbol":return new W("symbol",v(q.content));case"text":return new W("text",q.content);case"comment":return new W("comment",q.content);case"supsub":{let{base:J,sup:z,sub:V}=q.data;if(J&&J.type==="unaryFunc"&&J.content==="\\overbrace"&&z)return new W("funcCall","overbrace",[U(J.args[0]),U(z)]);else if(J&&J.type==="unaryFunc"&&J.content==="\\underbrace"&&V)return new W("funcCall","underbrace",[U(J.args[0]),U(V)]);const Z={base:U(J)};if(Z.base.type==="empty")Z.base=new W("text","");if(z)Z.sup=U(z);if(V)Z.sub=U(V);return new W("supsub","",[],Z)}case"leftright":{const[J,z,V]=q.args,Z=new W("group","",q.args.map(U));if(["[]","()","\\{\\}","\\lfloor\\rfloor","\\lceil\\rceil","\\lfloor\\rceil"].includes(J.content+V.content))return Z;return new W("funcCall","lr",[Z])}case"binaryFunc":{if(q.content==="\\overset")return E2(q);return new W("funcCall",v(q.content),q.args.map(U))}case"unaryFunc":{const J=U(q.args[0]);if(q.content==="\\sqrt"&&q.data){const z=U(q.data);return new W("funcCall","root",[z,J])}if(q.content==="\\mathbf"){const z=new W("funcCall","bold",[J]);return new W("funcCall","upright",[z])}if(q.content==="\\mathbb"&&J.type==="atom"&&/^[A-Z]$/.test(J.content))return new W("symbol",J.content+J.content);if(q.content==="\\operatorname"){const z=q.args;if(z.length!==1||z[0].type!=="text")throw new M("Expecting body of \\operatorname to be text but got",q);const V=z[0].content;if(g2.includes(V))return new W("symbol",V);else return new W("funcCall","op",[new W("text",V)])}return new W("funcCall",v(q.content),q.args.map(U))}case"beginend":{const z=q.data.map((V)=>V.map(U));if(q.content.startsWith("align"))return new W("align","",[],z);else{const V=new W("matrix","",[],z);return V.setOptions({delim:"#none"}),V}}case"unknownMacro":return new W("unknown",v(q.content));case"control":if(q.content==="\\\\")return new W("symbol","\\");else if(q.content==="\\,")return new W("symbol","thin");else throw new M(`Unknown control sequence: ${q.content}`,q);default:throw new M(`Unimplemented node type: ${q.type}`,q)}}function v(q){if(/^[a-zA-Z0-9]$/.test(q))return q;else if(q==="/")return"\\/";else if(q==="\\|")return"parallel";else if(q==="\\colon")return":";else if(q==="\\\\")return"\\";else if(["\\$","\\#","\\&","\\_"].includes(q))return q;else if(q.startsWith("\\")){const J=q.slice(1);if(A.has(J))return A.get(J);else return J}return q}var g2=["dim","id","im","mod","Pr","sech","csch"],k=new G(1,"("),E=new G(1,")"),P2=new G(1,","),u2=new G(0,"\n");class M extends Error{node;constructor(q,J){super(q);this.name="TypstWriterError",this.node=J}}class p{nonStrict;preferTypstIntrinsic;keepSpaces;buffer="";queue=[];insideFunctionDepth=0;constructor(q,J,z){this.nonStrict=q,this.preferTypstIntrinsic=J,this.keepSpaces=z}writeBuffer(q){const J=q.toString();if(J==="")return;let z=!1;if(z||=/[\(\[\|]$/.test(this.buffer)&&/^\w/.test(J),z||=/^[})\]\|]$/.test(J),z||=/^[(_^,;!]$/.test(J),z||=J==="'",z||=/[0-9]$/.test(this.buffer)&&/^[0-9]/.test(J),z||=/[\(\[{]\s*(-|\+)$/.test(this.buffer)||this.buffer==="-"||this.buffer==="+",z||=J.startsWith("\n"),z||=this.buffer==="",z||=/^\s/.test(J),z||=this.buffer.endsWith("&")&&J==="=",z||=/[\s_^{\(]$/.test(this.buffer),!z)this.buffer+=" ";this.buffer+=J}serialize(q){switch(q.type){case"empty":break;case"atom":{if(q.content===","&&this.insideFunctionDepth>0)this.queue.push(new G(0,"comma"));else this.queue.push(new G(1,q.content));break}case"symbol":this.queue.push(new G(0,q.content));break;case"text":this.queue.push(new G(2,q.content));break;case"comment":this.queue.push(new G(3,q.content));break;case"whitespace":for(let J of q.content)if(J===" "){if(this.keepSpaces)this.queue.push(new G(4,J))}else if(J==="\n")this.queue.push(new G(0,J));else throw new M(`Unexpected whitespace character: ${J}`,q);break;case"group":for(let J of q.args)this.serialize(J);break;case"supsub":{let{base:J,sup:z,sub:V}=q.data;this.appendWithBracketsIfNeeded(J);let Z=!1;const X=z&&z.type==="atom"&&z.content==="\'";if(X)this.queue.push(new G(1,"\'")),Z=!1;if(V)this.queue.push(new G(1,"_")),Z=this.appendWithBracketsIfNeeded(V);if(z&&!X)this.queue.push(new G(1,"^")),Z=this.appendWithBracketsIfNeeded(z);if(Z)this.queue.push(new G(6," "));break}case"funcCall":{const J=new G(0,q.content);this.queue.push(J),this.insideFunctionDepth++,this.queue.push(k);for(let z=0;z<q.args.length;z++)if(this.serialize(q.args[z]),z<q.args.length-1)this.queue.push(new G(1,","));if(q.options)for(let[z,V]of Object.entries(q.options))this.queue.push(new G(0,`, ${z}: ${V}`));this.queue.push(E),this.insideFunctionDepth--;break}case"align":{const J=q.data;J.forEach((z,V)=>{if(z.forEach((Z,X)=>{if(X>0)this.queue.push(new G(1,"&"));this.serialize(Z)}),V<J.length-1)this.queue.push(new G(0,"\\"))});break}case"matrix":{const J=q.data;if(this.queue.push(new G(0,"mat")),this.insideFunctionDepth++,this.queue.push(k),q.options)for(let[z,V]of Object.entries(q.options))this.queue.push(new G(0,`${z}: ${V}, `));J.forEach((z,V)=>{z.forEach((Z,X)=>{if(this.serialize(Z),X<z.length-1)this.queue.push(new G(1,","));else if(V<J.length-1)this.queue.push(new G(1,";"))})}),this.queue.push(E),this.insideFunctionDepth--;break}case"unknown":{if(this.nonStrict)this.queue.push(new G(0,q.content));else throw new M(`Unknown macro: ${q.content}`,q);break}default:throw new M(`Unimplemented node type to append: ${q.type}`,q)}}appendWithBracketsIfNeeded(q){let J=["group","supsub","empty"].includes(q.type);if(q.type==="group"){const z=q.args[0],V=q.args[q.args.length-1];if(J2(z)&&J2(V))J=!1}if(J)this.queue.push(k),this.serialize(q),this.queue.push(E);else this.serialize(q);return!J}flushQueue(){const q=new G(6," ");for(let J=0;J<this.queue.length;J++)if(this.queue[J].eq(q)){if(J===this.queue.length-1)this.queue[J].value="";else if(this.queue[J+1].isOneOf([E,P2,u2]))this.queue[J].value=""}this.queue.forEach((J)=>{this.writeBuffer(J)}),this.queue=[]}finalize(){this.flushQueue();const V=[function(Z){let X=Z.replace(/floor\.l\s*(.*?)\s*floor\.r/g,"floor($1)");return X=X.replace(/floor\(\)/g,'floor("")'),X},function(Z){let X=Z.replace(/ceil\.l\s*(.*?)\s*ceil\.r/g,"ceil($1)");return X=X.replace(/ceil\(\)/g,'ceil("")'),X},function(Z){let X=Z.replace(/floor\.l\s*(.*?)\s*ceil\.r/g,"round($1)");return X=X.replace(/round\(\)/g,'round("")'),X}];for(let Z of V)this.buffer=Z(this.buffer);return this.buffer}}function V2(q,J){let z=J;while(z<q.length&&q[z].eq(new G(1,"'")))z+=1;return z-J}function m2(q,J){let z=J;while(z<q.length&&(I(q[z])||q[z]==="."))z+=1;return q.substring(J,z)}function N2(q){const J=[];let z=0;while(z<q.length){const V=q[z];let Z;switch(V){case"_":case"^":case"&":Z=new G(6,V),z++;break;case"\n":Z=new G(7,V),z++;break;case"\r":{if(z+1<q.length&&q[z+1]==="\n")Z=new G(7,"\n"),z+=2;else Z=new G(7,"\n"),z++;break}case" ":{let X=z;while(X<q.length&&q[X]===" ")X++;Z=new G(4,q.substring(z,X)),z=X;break}case"/":{if(z<q.length&&q[z+1]==="/"){let X=z+2;while(X<q.length&&q[X]!=="\n")X++;Z=new G(3,q.slice(z+2,X)),z=X}else Z=new G(1,"/"),z++;break}case"\\":{if(z+1>=q.length)throw new Error("Expecting a character after \\");const X=q.substring(z,z+2);if(["\\$","\\&","\\#","\\_"].includes(X))Z=new G(1,X),z+=2;else if(X==="\\\n")Z=new G(6,"\\"),z+=1;else Z=new G(6,""),z++;break}case'"':{let X=z+1;while(X<q.length){if(q[X]==='"'&&q[X-1]!=="\\")break;X++}let Q=q.substring(z+1,X);const K=['"',"\\"];for(let F of K)Q=Q.replaceAll("\\"+F,F);Z=new G(2,Q),z=X+1;break}default:{if(f(V)){let X=z;while(X<q.length&&f(q[X]))X+=1;Z=new G(1,q.slice(z,X))}else if("+-*/=\'<>!.,;?()[]|".includes(V))Z=new G(1,V);else if(I(V)){const X=m2(q,z),Q=X.length===1?1:0;Z=new G(Q,X)}else Z=new G(1,V);z+=Z.value.length}}J.push(Z)}return J}function P(q,J){D(q[J].isOneOf([C,Q2,j2]));let z=1,V=J+1;while(z>0){if(V>=q.length)throw new Error("Unmatched brackets");if(q[V].isOneOf([C,Q2,j2]))z+=1;else if(q[V].isOneOf([_2,x2,y2]))z-=1;V+=1}return V-1}function l2(q,J){const z=new W("atom","("),V=new W("atom",")");D(q[J].eq(z));let Z=1,X=J+1;while(Z>0){if(X>=q.length)throw new Error("Unmatched brackets");if(q[X].eq(z))Z+=1;else if(q[X].eq(V))Z-=1;X+=1}return X-1}function X2(q){const J=[];for(let z=0;z<q;z++)J.push(new W("atom","'"));return J}function c2(q,J){let z=J;while(z<q.length&&q[z].type==="whitespace")z++;return z===q.length?u:q[z]}function i2(q){let J=!1;const z=[];for(let V=0;V<q.length;V++){const Z=q[V];if(Z.type==="whitespace"){if(J)continue;if(c2(q,V+1).eq(m))continue}if(Z.eq(m))J=!0;else J=!1;z.push(Z)}return z}function r(q,J=!1){q=i2(q);const z=new W("atom","("),V=new W("atom",")"),Z=[],X=[];let Q=0;while(Q<q.length){const K=q[Q];if(K.eq(V))throw new T("Unexpected ')'");else if(K.eq(m))Z.push(K),Q++;else{let F;if(K.eq(z)){const Y=l2(q,Q);F=r(q.slice(Q+1,Y),!0),Q=Y+1}else F=K,Q++;if(Z.length>0&&Z[Z.length-1].eq(m)){const Y=F;if(X.length===0)throw new T("Unexpected '/' operator, no numerator before it");const B=X.pop();if(Y.type==="group"&&Y.content==="parenthesis")Y.content="";if(B.type==="group"&&B.content==="parenthesis")B.content="";X.push(new W("fraction","",[B,Y])),Z.pop()}else X.push(F)}}if(J)return new W("group","parenthesis",X);else if(X.length===0)return u;else if(X.length===1)return X[0];else return new W("group","",X)}function G2(q){const J=new W2;let z=N2(q);return J.parse(z)}var u=new W("empty",""),m=new W("atom","/");class T extends Error{constructor(q){super(q);this.name="TypstParserError"}}var Z2=new G(6,"_"),$2=new G(6,"^"),C=new G(1,"("),_2=new G(1,")"),Q2=new G(1,"["),x2=new G(1,"]"),j2=new G(1,"{"),y2=new G(1,"}"),d2=new G(1,","),a2=new G(1,";"),k2=new G(4," ");class W2{space_sensitive;newline_sensitive;constructor(q=!0,J=!0){this.space_sensitive=q,this.newline_sensitive=J}parse(q){const[J,z]=this.parseGroup(q,0,q.length);return J}parseGroup(q,J,z,V=!1){const Z=[];let X=J;while(X<z){const[K,F]=this.parseNextExpr(q,X);if(X=F,K.type==="whitespace"){if(!this.space_sensitive&&K.content.replace(/ /g,"").length===0)continue;if(!this.newline_sensitive&&K.content==="\n")continue}Z.push(K)}let Q;if(V)Q=r(Z,!0);else if(Z.length===0)Q=u;else if(Z.length===1)Q=Z[0];else Q=r(Z);return[Q,z+1]}parseNextExpr(q,J){let[z,V]=this.parseNextExprWithoutSupSub(q,J),Z=null,X=null;const Q=V2(q,V);if(Q>0)z=new W("group","",[z].concat(X2(Q))),V+=Q;if(V<q.length&&q[V].eq(Z2)){if([Z,V]=this.parseSupOrSub(q,V+1),V<q.length&&q[V].eq($2))[X,V]=this.parseSupOrSub(q,V+1)}else if(V<q.length&&q[V].eq($2)){if([X,V]=this.parseSupOrSub(q,V+1),V<q.length&&q[V].eq(Z2))[Z,V]=this.parseSupOrSub(q,V+1)}if(Z!==null||X!==null){const K={base:z};if(Z)K.sub=Z;if(X)K.sup=X;return[new W("supsub","",[],K),V]}else return[z,V]}parseSupOrSub(q,J){let z,V;if(q[J].eq(C)){const X=P(q,J);[z,V]=this.parseGroup(q,J+1,X)}else[z,V]=this.parseNextExprWithoutSupSub(q,J);const Z=V2(q,V);if(Z>0)z=new W("group","",[z].concat(X2(Z))),V+=Z;return[z,V]}parseNextExprWithoutSupSub(q,J){const z=q[J],V=z.toNode();if(z.eq(C)){const Z=P(q,J);return this.parseGroup(q,J+1,Z,!0)}if(z.type===1&&!I(z.value[0]))return[V,J+1];if([1,0].includes(z.type)){if(J+1<q.length&&q[J+1].eq(C)){if(z.value==="mat"){const[K,F]=this.parseGroupsOfArguments(q,J+1);return[new W("matrix","",[],K),F]}const[Z,X]=this.parseArguments(q,J+1),Q=new W("funcCall",z.value);return Q.args=Z,[Q,X]}}return[V,J+1]}parseArguments(q,J){const z=P(q,J);return[this.parseCommaSeparatedArguments(q,J+1,z),z+1]}parseGroupsOfArguments(q,J){const z=P(q,J),V=[];let Z=J+1;while(Z<z)while(Z<z){let X=t(q,a2,Z);if(X===-1)X=z;const Q=this.parseCommaSeparatedArguments(q,Z,X);V.push(Q),Z=X+1}return[V,z+1]}parseCommaSeparatedArguments(q,J,z){const V=[];let Z=J;while(Z<z){let X=new W("group","",[]);while(Z<z){if(q[Z].eq(d2)){Z+=1;break}else if(q[Z].eq(k2)){Z+=1;continue}const[Q,K]=this.parseNextExpr(q,Z);Z=K,X.args.push(Q)}if(X.args.length===0)X=u;else if(X.args.length===1)X=X.args[0];V.push(X)}return V}}function K2(q){if(["{","}","%"].includes(q))return"\\"+q;return q}function O(q){if(q.eq(new W("symbol","eq.def")))return new $("binaryFunc","\\overset",[new $("text","def"),new $("element","=")]);switch(q.type){case"empty":return new $("empty","");case"whitespace":return new $("whitespace",q.content);case"atom":if(q.content===":")return new $("symbol","\\colon");return new $("element",q.content);case"symbol":if(q.content==="comma")return new $("element",",");return new $("symbol",N(q.content));case"text":return new $("text",q.content);case"comment":return new $("comment",q.content);case"group":{const J=q.args.map(O);if(q.content==="parenthesis")J.unshift(new $("element","(")),J.push(new $("element",")"));return new $("ordgroup","",J)}case"funcCall":if(p2.includes(q.content)){if(q.content==="lr"){const z=q.args[0];if(z.type==="group"){let V=z.args[0].content,Z=z.args[z.args.length-1].content;return V=K2(V),Z=K2(Z),new $("ordgroup","",[new $("element","\\left"+V),...z.args.slice(1,z.args.length-1).map(O),new $("element","\\right"+Z)])}}const J=N(q.content);return new $("unaryFunc",J,q.args.map(O))}else if(r2.includes(q.content)){if(q.content==="root"){const[z,V]=q.args,Z=O(z);return new $("unaryFunc","\\sqrt",[O(V)],Z)}if(q.content==="overbrace"||q.content==="underbrace"){const[z,V]=q.args,Z=new $("unaryFunc","\\"+q.content,[O(z)]),X=O(V),Q=q.content==="overbrace"?{base:Z,sup:X}:{base:Z,sub:X};return new $("supsub","",[],Q)}const J=N(q.content);return new $("binaryFunc",J,q.args.map(O))}else return new $("ordgroup","",[new $("symbol",N(q.content)),new $("element","("),...q.args.map(O),new $("element",")")]);case"supsub":{const{base:J,sup:z,sub:V}=q.data,Z=O(J);let X,Q;if(z)X=O(z);if(V)Q=O(V);return new $("supsub","",[],{base:Z,sup:X,sub:Q})}case"matrix":{const z=q.data.map((Z)=>Z.map(O)),V=new $("beginend","matrix",[],z);return new $("ordgroup","",[new $("element","\\left("),V,new $("element","\\right)")])}case"control":switch(q.content){case"\\":return new $("control","\\\\");case"&":return new $("control","&");default:throw new Error("[convert_typst_node_to_tex] Unimplemented control: "+q.content)}case"fraction":{const[J,z]=q.args,V=O(J),Z=O(z);return new $("binaryFunc","\\frac",[V,Z])}default:throw new Error("[convert_typst_node_to_tex] Unimplemented type: "+q.type)}}function N(q){if(/^[a-zA-Z0-9]$/.test(q))return q;else if(q==="thin")return"\\,";else if(R.has(q))return"\\"+R.get(q);return"\\"+q}var p2=["sqrt","bold","arrow","upright","lr","op","macron","dot","dot.double","hat","tilde","overline","underline","bb","cal","frak"],r2=["frac","root","overbrace","underbrace"];class n{buffer="";queue=[];writeBuffer(q){const J=q.toString();let z=!1;if(q.type===4)z=!0;else z||=/[{\(\[\|]$/.test(this.buffer),z||=/\\\w+$/.test(this.buffer)&&J==="[",z||=/^[\.,;:!\?\(\)\]{}_^]$/.test(J),z||=["\\{","\\}"].includes(J),z||=J==="'",z||=this.buffer.endsWith("_")||this.buffer.endsWith("^"),z||=/\s$/.test(this.buffer),z||=/^\s/.test(J),z||=this.buffer==="",z||=/[\(\[{]\s*(-|\+)$/.test(this.buffer)||this.buffer==="-"||this.buffer==="+",z||=this.buffer.endsWith("&")&&J==="=";if(!z)this.buffer+=" ";this.buffer+=J}append(q){const J=new $("control","&"),z=new $("control","\\\\");if(q.type==="ordgroup"&&b(q.args,J)){const V=c(q.args,z),Z=[];for(let X of V){const Q=c(X,J);Z.push(Q.map((K)=>new $("ordgroup","",K)))}q=new $("beginend","aligned",[],Z)}this.queue=this.queue.concat(q.serialize())}flushQueue(){for(let q=0;q<this.queue.length;q++)this.writeBuffer(this.queue[q]);this.queue=[]}finalize(){return this.flushQueue(),this.buffer}}function F2(q,J){const z={nonStrict:!0,preferTypstIntrinsic:!0,keepSpaces:!1,customTexMacros:{}};if(J){if(J.nonStrict)z.nonStrict=J.nonStrict;if(J.preferTypstIntrinsic)z.preferTypstIntrinsic=J.preferTypstIntrinsic;if(J.customTexMacros)z.customTexMacros=J.customTexMacros}const V=z2(q,z.customTexMacros),Z=U(V),X=new p(z.nonStrict,z.preferTypstIntrinsic,z.keepSpaces);return X.serialize(Z),X.finalize()}function H2(q){const J=G2(q),z=O(J),V=new n;return V.append(z),V.finalize()}if(typeof window!=="undefined")window.tex2typst=F2,window.typst2tex=H2;
package/dist/types.d.ts CHANGED
@@ -8,6 +8,13 @@ export declare enum TexTokenType {
8
8
  CONTROL = 6,
9
9
  UNKNOWN = 7
10
10
  }
11
+ export declare class TexToken {
12
+ type: TexTokenType;
13
+ value: string;
14
+ constructor(type: TexTokenType, value: string);
15
+ eq(token: TexToken): boolean;
16
+ toString(): string;
17
+ }
11
18
  export interface TexSupsubData {
12
19
  base: TexNode;
13
20
  sup?: TexNode;
@@ -31,12 +38,13 @@ export declare class TexNode {
31
38
  args?: TexNode[];
32
39
  data?: TexSqrtData | TexSupsubData | TexArrayData;
33
40
  constructor(type: TexNodeType, content: string, args?: TexNode[], data?: TexSqrtData | TexSupsubData | TexArrayData);
34
- eq_shallow(other: TexNode): boolean;
41
+ eq(other: TexNode): boolean;
35
42
  toString(): string;
43
+ serialize(): TexToken[];
36
44
  }
37
45
  export declare enum TypstTokenType {
38
46
  SYMBOL = 0,
39
- ATOM = 1,
47
+ ELEMENT = 1,
40
48
  TEXT = 2,
41
49
  COMMENT = 3,
42
50
  SPACE = 4,
@@ -46,10 +54,12 @@ export declare enum TypstTokenType {
46
54
  }
47
55
  export declare class TypstToken {
48
56
  type: TypstTokenType;
49
- content: string;
57
+ value: string;
50
58
  constructor(type: TypstTokenType, content: string);
51
59
  eq(other: TypstToken): boolean;
52
60
  isOneOf(tokens: TypstToken[]): boolean;
61
+ toNode(): TypstNode;
62
+ toString(): string;
53
63
  }
54
64
  export interface TypstSupsubData {
55
65
  base: TypstNode;
@@ -57,7 +67,7 @@ export interface TypstSupsubData {
57
67
  sub?: TypstNode;
58
68
  }
59
69
  export type TypstArrayData = TypstNode[][];
60
- type TypstNodeType = 'atom' | 'symbol' | 'text' | 'softSpace' | 'comment' | 'whitespace' | 'empty' | 'group' | 'supsub' | 'unaryFunc' | 'binaryFunc' | 'align' | 'matrix' | 'unknown';
70
+ type TypstNodeType = 'atom' | 'symbol' | 'text' | 'control' | 'comment' | 'whitespace' | 'empty' | 'group' | 'supsub' | 'funcCall' | 'fraction' | 'align' | 'matrix' | 'unknown';
61
71
  export declare class TypstNode {
62
72
  type: TypstNodeType;
63
73
  content: string;
@@ -70,7 +80,7 @@ export declare class TypstNode {
70
80
  setOptions(options: {
71
81
  [key: string]: string;
72
82
  }): void;
73
- eq_shallow(other: TypstNode): boolean;
83
+ eq(other: TypstNode): boolean;
74
84
  }
75
85
  export interface Tex2TypstOptions {
76
86
  nonStrict?: boolean;
@@ -0,0 +1,21 @@
1
+ import { TypstNode, TypstToken } from "./types";
2
+ export declare function tokenize_typst(typst: string): TypstToken[];
3
+ export declare class TypstParserError extends Error {
4
+ constructor(message: string);
5
+ }
6
+ type TypstParseResult = [TypstNode, number];
7
+ export declare class TypstParser {
8
+ space_sensitive: boolean;
9
+ newline_sensitive: boolean;
10
+ constructor(space_sensitive?: boolean, newline_sensitive?: boolean);
11
+ parse(tokens: TypstToken[]): TypstNode;
12
+ parseGroup(tokens: TypstToken[], start: number, end: number, parentheses?: boolean): TypstParseResult;
13
+ parseNextExpr(tokens: TypstToken[], start: number): TypstParseResult;
14
+ parseSupOrSub(tokens: TypstToken[], start: number): TypstParseResult;
15
+ parseNextExprWithoutSupSub(tokens: TypstToken[], start: number): TypstParseResult;
16
+ parseArguments(tokens: TypstToken[], start: number): [TypstNode[], number];
17
+ parseGroupsOfArguments(tokens: TypstToken[], start: number): [TypstNode[][], number];
18
+ parseCommaSeparatedArguments(tokens: TypstToken[], start: number, end: number): TypstNode[];
19
+ }
20
+ export declare function parseTypst(typst: string): TypstNode;
21
+ export {};
package/dist/util.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare function isalpha(char: string): boolean;
2
+ export declare function isdigit(char: string): boolean;
3
+ export declare function assert(condition: boolean, message?: string): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tex2typst",
3
- "version": "0.2.15",
3
+ "version": "0.3.0-alpha",
4
4
  "description": "JavaScript library for converting TeX code to Typst",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/generic.ts ADDED
@@ -0,0 +1,37 @@
1
+ interface IEquatable {
2
+ eq(other: IEquatable): boolean;
3
+ }
4
+
5
+
6
+ export function array_find<T extends IEquatable>(array: T[], item: T, start: number = 0): number {
7
+ for (let i = start; i < array.length; i++) {
8
+ if (array[i].eq(item)) {
9
+ return i;
10
+ }
11
+ }
12
+ return -1;
13
+ }
14
+
15
+ export function array_includes<T extends IEquatable>(array: T[], item: T): boolean {
16
+ for (const i of array) {
17
+ if (i.eq(item)) {
18
+ return true;
19
+ }
20
+ }
21
+ return false;
22
+ }
23
+
24
+ export function array_split<T extends IEquatable>(array: T[], sep: T): T[][] {
25
+ const res: T[][] = [];
26
+ let current_slice: T[] = [];
27
+ for (const i of array) {
28
+ if (i.eq(sep)) {
29
+ res.push(current_slice);
30
+ current_slice = [];
31
+ } else {
32
+ current_slice.push(i);
33
+ }
34
+ }
35
+ res.push(current_slice);
36
+ return res;
37
+ }
package/src/index.ts CHANGED
@@ -2,6 +2,8 @@ import { parseTex } from "./tex-parser";
2
2
  import { Tex2TypstOptions } from "./types";
3
3
  import { convertTree, TypstWriter } from "./writer";
4
4
  import { symbolMap } from "./map";
5
+ import { parseTypst } from "./typst-parser";
6
+ import { convert_typst_node_to_tex, TexWriter } from "./tex-writer";
5
7
 
6
8
 
7
9
  export function tex2typst(tex: string, options?: Tex2TypstOptions): string {
@@ -29,4 +31,12 @@ export function tex2typst(tex: string, options?: Tex2TypstOptions): string {
29
31
  return writer.finalize();
30
32
  }
31
33
 
34
+ export function typst2tex(typst: string): string {
35
+ const typstTree = parseTypst(typst);
36
+ const texTree = convert_typst_node_to_tex(typstTree);
37
+ const writer = new TexWriter();
38
+ writer.append(texTree);
39
+ return writer.finalize();
40
+ }
41
+
32
42
  export { symbolMap, Tex2TypstOptions };
package/src/map.ts CHANGED
@@ -6,7 +6,6 @@ const symbolMap = new Map<string, string>([
6
6
  ['ddot', 'dot.double'],
7
7
  ['doteq', 'dot(eq)'],
8
8
  ['dots', 'dots.h'],
9
- ['ldots', 'dots.h'],
10
9
  ['vdots', 'dots.v'],
11
10
  ['ddots', 'dots.down'],
12
11
  ['widehat', 'hat'], // Ideally, the result of \widehat should be longer than \hat. But it is not implemented now.
@@ -23,6 +22,8 @@ const symbolMap = new Map<string, string>([
23
22
  ['dfrac', 'frac'],
24
23
  ['tfrac', 'frac'],
25
24
 
25
+ ['operatorname', 'op'],
26
+
26
27
  ['boldsymbol', 'bold'],
27
28
  ['mathbb', 'bb'],
28
29
  ['mathbf', 'bold'],
@@ -183,7 +184,7 @@ const symbolMap = new Map<string, string>([
183
184
  ['langle', 'angle.l'],
184
185
  ['lbrace', 'brace.l'],
185
186
  ['lbrack', 'bracket.l'],
186
- ['ldots', 'dots.l'],
187
+ ['ldots', 'dots.h'],
187
188
  ['le', 'lt.eq'],
188
189
  ['leadsto', 'arrow.squiggly'],
189
190
  ['leftarrow', 'arrow.l'],
@@ -476,6 +477,8 @@ const map_from_official_docs: Map<string, string> = new Map([
476
477
  ['stareq', 'eq.star'],
477
478
  ['circledequal', 'eq.circle'],
478
479
  ['eqcolon', 'eq.colon'],
480
+ // \usepackage{mathtools} defines \eqdef
481
+ // https://tex.stackexchange.com/questions/28836/typesetting-the-define-equals-symbol
479
482
  ['eqdef', 'eq.def'],
480
483
  ['triangleq', 'eq.delta'],
481
484
  ['veeeq', 'eq.equi'],
@@ -977,6 +980,7 @@ const map_from_official_docs: Map<string, string> = new Map([
977
980
  ['barV', 'tack.b.double'],
978
981
  ['shortdowntack', 'tack.b.short'],
979
982
  ['dashVdash', 'tack.l.r'],
983
+ /*
980
984
  ['mupalpha', 'alpha'],
981
985
  ['mupbeta', 'beta'],
982
986
  ['mupchi', 'chi'],
@@ -1033,6 +1037,7 @@ const map_from_official_docs: Map<string, string> = new Map([
1033
1037
  ['mupUpsilon', 'Upsilon'],
1034
1038
  ['mupXi', 'Xi'],
1035
1039
  ['mupZeta', 'Zeta'],
1040
+ */
1036
1041
  ['BbbA', 'AA'],
1037
1042
  ['BbbB', 'BB'],
1038
1043
  ['BbbC', 'CC'],
@@ -1075,4 +1080,25 @@ for(const [key, value] of map_from_official_docs) {
1075
1080
  }
1076
1081
  }
1077
1082
 
1078
- export {symbolMap};
1083
+
1084
+ const reverseSymbolMap = new Map<string, string>();
1085
+ for(const [key, value] of Array.from(symbolMap.entries()).reverse()) {
1086
+ reverseSymbolMap.set(value, key);
1087
+ }
1088
+ reverseSymbolMap.set('dif', 'mathrm{d}');
1089
+
1090
+ // force override some one-to-multiple mappings
1091
+ const typst_to_tex_map = new Map<string, string>([
1092
+ ['top', 'top'],
1093
+ ['frac', 'frac'],
1094
+ ['tilde', 'tilde'],
1095
+ ['hat', 'hat'],
1096
+ ['upright', 'mathrm'],
1097
+ ['bold', 'boldsymbol'],
1098
+ ]);
1099
+
1100
+ for(const [key, value] of typst_to_tex_map) {
1101
+ reverseSymbolMap.set(key, value);
1102
+ }
1103
+
1104
+ export {symbolMap, reverseSymbolMap};