tex2typst 0.3.4 → 0.3.5

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/index.js CHANGED
@@ -2375,6 +2375,33 @@ var TypstWriter = class {
2375
2375
  this.insideFunctionDepth--;
2376
2376
  break;
2377
2377
  }
2378
+ case "cases": {
2379
+ const cases = node.data;
2380
+ this.queue.push(new TypstToken(0 /* SYMBOL */, "cases"));
2381
+ this.insideFunctionDepth++;
2382
+ this.queue.push(TYPST_LEFT_PARENTHESIS);
2383
+ if (node.options) {
2384
+ for (const [key, value] of Object.entries(node.options)) {
2385
+ const value_str = typst_primitive_to_string(value);
2386
+ this.queue.push(new TypstToken(0 /* SYMBOL */, `${key}: ${value_str}, `));
2387
+ }
2388
+ }
2389
+ cases.forEach((row, i) => {
2390
+ row.forEach((cell, j) => {
2391
+ this.serialize(cell);
2392
+ if (j < row.length - 1) {
2393
+ this.queue.push(new TypstToken(1 /* ELEMENT */, "&"));
2394
+ } else {
2395
+ if (i < cases.length - 1) {
2396
+ this.queue.push(new TypstToken(1 /* ELEMENT */, ","));
2397
+ }
2398
+ }
2399
+ });
2400
+ });
2401
+ this.queue.push(TYPST_RIGHT_PARENTHESIS);
2402
+ this.insideFunctionDepth--;
2403
+ break;
2404
+ }
2378
2405
  case "unknown": {
2379
2406
  if (this.nonStrict) {
2380
2407
  this.queue.push(new TypstToken(0 /* SYMBOL */, node.content));
@@ -2685,6 +2712,9 @@ function convert_tex_node_to_typst(node, options = {}) {
2685
2712
  if (node.content.startsWith("align")) {
2686
2713
  return new TypstNode("align", "", [], data);
2687
2714
  }
2715
+ if (node.content === "cases") {
2716
+ return new TypstNode("cases", "", [], data);
2717
+ }
2688
2718
  if (node.content.endsWith("matrix")) {
2689
2719
  let delim = null;
2690
2720
  switch (node.content) {
@@ -2913,6 +2943,11 @@ function convert_typst_node_to_tex(node) {
2913
2943
  new TexNode("element", right_delim)
2914
2944
  ]);
2915
2945
  }
2946
+ case "cases": {
2947
+ const typst_data = node.data;
2948
+ const tex_data = typst_data.map((row) => row.map(convert_typst_node_to_tex));
2949
+ return new TexNode("beginend", "cases", [], tex_data);
2950
+ }
2916
2951
  case "control": {
2917
2952
  switch (node.content) {
2918
2953
  case "\\":
@@ -3257,6 +3292,12 @@ var TypstParser = class {
3257
3292
  mat.setOptions(named_params);
3258
3293
  return [mat, newPos2];
3259
3294
  }
3295
+ if (firstToken.value === "cases") {
3296
+ const [cases, named_params, newPos2] = this.parseGroupsOfArguments(tokens, start + 1, COMMA);
3297
+ const casesNode = new TypstNode("cases", "", [], cases);
3298
+ casesNode.setOptions(named_params);
3299
+ return [casesNode, newPos2];
3300
+ }
3260
3301
  const [args, newPos] = this.parseArguments(tokens, start + 1);
3261
3302
  const func_call = new TypstNode("funcCall", firstToken.value);
3262
3303
  func_call.args = args;
@@ -3271,7 +3312,7 @@ var TypstParser = class {
3271
3312
  return [this.parseCommaSeparatedArguments(tokens, start + 1, end), end + 1];
3272
3313
  }
3273
3314
  // start: the position of the left parentheses
3274
- parseGroupsOfArguments(tokens, start) {
3315
+ parseGroupsOfArguments(tokens, start, newline_token = SEMICOLON) {
3275
3316
  const end = find_closing_match2(tokens, start);
3276
3317
  tokens = tokens.slice(0, end);
3277
3318
  const matrix = [];
@@ -3318,7 +3359,7 @@ var TypstParser = class {
3318
3359
  return [arr, np2];
3319
3360
  };
3320
3361
  var extract_named_params = extract_named_params2;
3321
- let next_stop = array_find(tokens, SEMICOLON, pos);
3362
+ let next_stop = array_find(tokens, newline_token, pos);
3322
3363
  if (next_stop === -1) {
3323
3364
  next_stop = end;
3324
3365
  }
@@ -1,13 +1,13 @@
1
- "use strict";(()=>{var y=new Map([[",","thin"],[":","med"],[";","thick"],["cos","cos"],["sin","sin"],["tan","tan"],["cot","cot"],["sec","sec"],["csc","csc"],["mod","mod"],["omicron","omicron"],["Xi","Xi"],["Upsilon","Upsilon"],["lim","lim"],["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"],["iff","arrow.l.r.double.long"],["implies","arrow.r.double.long"],["leadsto","arrow.squiggly"],["Cap","sect.double"],["Cup","union.double"],["Delta","Delta"],["Gamma","Gamma"],["Join","join"],["Lambda","Lambda"],["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"],["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"],["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"],["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"],["tau","tau"],["theta","theta"],["times","times"],["to","arrow.r"],["top","top"],["triangle","triangle.t"],["twoheadrightarrow","arrow.r.twohead"],["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"]]),Se=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"],["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[r,e]of Se)y.has(r)||y.set(r,e);var k=new Map;for(let[r,e]of Array.from(y.entries()).reverse())k.set(e,r);k.set("dif","mathrm{d}");k.set("oo","infty");var Me=new Map([["top","top"],["frac","frac"],["tilde","tilde"],["hat","hat"],["upright","mathrm"],["bold","boldsymbol"],["hyph.minus","\\text{-}"]]);for(let[r,e]of Me)k.set(r,e);function K(r,e,t=0){for(let n=t;n<r.length;n++)if(r[n].eq(e))return n;return-1}function D(r,e){for(let t of r)if(t.eq(e))return!0;return!1}function Q(r,e){let t=[],n=[];for(let s of r)s.eq(e)?(t.push(n),n=[]):n.push(s);return t.push(n),t}var c=class{constructor(e,t){this.type=e,this.value=t}eq(e){return this.type===e.type&&this.value===e.value}toString(){switch(this.type){case 2:return`\\text{${this.value}}`;case 3:return`%${this.value}`;default:return this.value}}};function Oe(r){return["{","}","%"].includes(r)?"\\"+r:r}var l=class{constructor(e,t,n,s){this.type=e,this.content=t,this.args=n,this.data=s}eq(e){return this.type===e.type&&this.content===e.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 t=this.content;return t=Oe(t),[new c(0,t)]}case"symbol":return[new c(1,this.content)];case"text":return[new c(2,this.content)];case"comment":return[new c(3,this.content)];case"whitespace":{let t=[];for(let n of this.content){let s=n===" "?4:5;t.push(new c(s,n))}return t}case"ordgroup":{let t=this.args.map(n=>n.serialize()).flat();if(this.content==="parenthesis"){let n=this.isOverHigh(),s=n?"\\left(":"(",o=n?"\\right)":")";t.unshift(new c(0,s)),t.push(new c(0,o))}return t}case"unaryFunc":{let t=[];if(t.push(new c(1,this.content)),this.content==="\\sqrt"&&this.data&&(t.push(new c(0,"[")),t=t.concat(this.data.serialize()),t.push(new c(0,"]"))),this.content==="\\operatorname"&&this.args.length===1&&this.args[0].type==="text"){let n=this.args[0].content;return t.push(new c(0,"{")),t.push(new c(1,n)),t.push(new c(0,"}")),t}return t.push(new c(0,"{")),t=t.concat(this.args[0].serialize()),t.push(new c(0,"}")),t}case"binaryFunc":{let t=[];return t.push(new c(1,this.content)),t.push(new c(0,"{")),t=t.concat(this.args[0].serialize()),t.push(new c(0,"}")),t.push(new c(0,"{")),t=t.concat(this.args[1].serialize()),t.push(new c(0,"}")),t}case"supsub":{let a=function(i){return i.type==="ordgroup"||i.type==="supsub"||i.type==="empty"?!0:!!(i.type==="element"&&/\d+(\.\d+)?/.test(i.content)&&i.content.length>1)};var e=a;let t=[],{base:n,sup:s,sub:o}=this.data;return t=t.concat(n.serialize()),o&&(t.push(new c(6,"_")),a(o)?(t.push(new c(0,"{")),t=t.concat(o.serialize()),t.push(new c(0,"}"))):t=t.concat(o.serialize())),s&&(t.push(new c(6,"^")),a(s)?(t.push(new c(0,"{")),t=t.concat(s.serialize()),t.push(new c(0,"}"))):t=t.concat(s.serialize())),t}case"control":return[new c(6,this.content)];case"beginend":{let t=[],n=this.data;t.push(new c(1,`\\begin{${this.content}}`)),t.push(new c(5,`
1
+ "use strict";(()=>{var y=new Map([[",","thin"],[":","med"],[";","thick"],["cos","cos"],["sin","sin"],["tan","tan"],["cot","cot"],["sec","sec"],["csc","csc"],["mod","mod"],["omicron","omicron"],["Xi","Xi"],["Upsilon","Upsilon"],["lim","lim"],["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"],["iff","arrow.l.r.double.long"],["implies","arrow.r.double.long"],["leadsto","arrow.squiggly"],["Cap","sect.double"],["Cup","union.double"],["Delta","Delta"],["Gamma","Gamma"],["Join","join"],["Lambda","Lambda"],["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"],["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"],["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"],["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"],["tau","tau"],["theta","theta"],["times","times"],["to","arrow.r"],["top","top"],["triangle","triangle.t"],["twoheadrightarrow","arrow.r.twohead"],["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"]]),Oe=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"],["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[r,e]of Oe)y.has(r)||y.set(r,e);var S=new Map;for(let[r,e]of Array.from(y.entries()).reverse())S.set(e,r);S.set("dif","mathrm{d}");S.set("oo","infty");var Le=new Map([["top","top"],["frac","frac"],["tilde","tilde"],["hat","hat"],["upright","mathrm"],["bold","boldsymbol"],["hyph.minus","\\text{-}"]]);for(let[r,e]of Le)S.set(r,e);function K(r,e,t=0){for(let n=t;n<r.length;n++)if(r[n].eq(e))return n;return-1}function D(r,e){for(let t of r)if(t.eq(e))return!0;return!1}function Q(r,e){let t=[],n=[];for(let s of r)s.eq(e)?(t.push(n),n=[]):n.push(s);return t.push(n),t}var c=class{constructor(e,t){this.type=e,this.value=t}eq(e){return this.type===e.type&&this.value===e.value}toString(){switch(this.type){case 2:return`\\text{${this.value}}`;case 3:return`%${this.value}`;default:return this.value}}};function Ce(r){return["{","}","%"].includes(r)?"\\"+r:r}var u=class{constructor(e,t,n,s){this.type=e,this.content=t,this.args=n,this.data=s}eq(e){return this.type===e.type&&this.content===e.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 t=this.content;return t=Ce(t),[new c(0,t)]}case"symbol":return[new c(1,this.content)];case"text":return[new c(2,this.content)];case"comment":return[new c(3,this.content)];case"whitespace":{let t=[];for(let n of this.content){let s=n===" "?4:5;t.push(new c(s,n))}return t}case"ordgroup":{let t=this.args.map(n=>n.serialize()).flat();if(this.content==="parenthesis"){let n=this.isOverHigh(),s=n?"\\left(":"(",o=n?"\\right)":")";t.unshift(new c(0,s)),t.push(new c(0,o))}return t}case"unaryFunc":{let t=[];if(t.push(new c(1,this.content)),this.content==="\\sqrt"&&this.data&&(t.push(new c(0,"[")),t=t.concat(this.data.serialize()),t.push(new c(0,"]"))),this.content==="\\operatorname"&&this.args.length===1&&this.args[0].type==="text"){let n=this.args[0].content;return t.push(new c(0,"{")),t.push(new c(1,n)),t.push(new c(0,"}")),t}return t.push(new c(0,"{")),t=t.concat(this.args[0].serialize()),t.push(new c(0,"}")),t}case"binaryFunc":{let t=[];return t.push(new c(1,this.content)),t.push(new c(0,"{")),t=t.concat(this.args[0].serialize()),t.push(new c(0,"}")),t.push(new c(0,"{")),t=t.concat(this.args[1].serialize()),t.push(new c(0,"}")),t}case"supsub":{let a=function(i){return i.type==="ordgroup"||i.type==="supsub"||i.type==="empty"?!0:!!(i.type==="element"&&/\d+(\.\d+)?/.test(i.content)&&i.content.length>1)};var e=a;let t=[],{base:n,sup:s,sub:o}=this.data;return t=t.concat(n.serialize()),o&&(t.push(new c(6,"_")),a(o)?(t.push(new c(0,"{")),t=t.concat(o.serialize()),t.push(new c(0,"}"))):t=t.concat(o.serialize())),s&&(t.push(new c(6,"^")),a(s)?(t.push(new c(0,"{")),t=t.concat(s.serialize()),t.push(new c(0,"}"))):t=t.concat(s.serialize())),t}case"control":return[new c(6,this.content)];case"beginend":{let t=[],n=this.data;t.push(new c(1,`\\begin{${this.content}}`)),t.push(new c(5,`
2
2
  `));for(let s=0;s<n.length;s++){let o=n[s];for(let a=0;a<o.length;a++){let i=o[a];t=t.concat(i.serialize()),a!==o.length-1&&t.push(new c(6,"&"))}s!==n.length-1&&t.push(new c(6,"\\\\"))}return t.push(new c(5,`
3
- `)),t.push(new c(1,`\\end{${this.content}}`)),t}default:throw new Error("[TexNode.serialize] Unimplemented type: "+this.type)}}isOverHigh(){switch(this.type){case"element":case"symbol":case"text":case"control":case"empty":return!1;case"binaryFunc":if(this.content==="\\frac")return!0;case"unaryFunc":case"ordgroup":return this.args.some(e=>e.isOverHigh());case"supsub":return this.data.base.isOverHigh();case"beginend":return!0;default:return!1}}};var p=class{constructor(e,t){this.type=e,this.value=t}eq(e){return this.type===e.type&&this.value===e.value}isOneOf(e){return D(e,this)}toNode(){switch(this.type){case 2:return new u("text",this.value);case 3:return new u("comment",this.value);case 4:case 7:return new u("whitespace",this.value);case 1:return new u("atom",this.value);case 0:return new u("symbol",this.value);case 6:{let e=this.value;switch(e){case"":case"_":case"^":return new u("empty","");case"&":return new u("control","&");case"\\":return new u("control","\\");default:throw new Error(`Unexpected control character ${e}`)}}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}}},L=null,ie=!0;var u=class{constructor(e,t,n,s){this.type=e,this.content=t,this.args=n,this.data=s}setOptions(e){this.options=e}eq(e){return this.type===e.type&&this.content===e.content}};function le(r){return"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".includes(r)}function m(r,e=""){if(!r)throw new Error(e)}var ue={};function Le(r,e){return e.len!==r.len?e.len-r.len:r.index-e.index}var Z=class{constructor(e,t){this._pos=0;this._line=0;this._col=0;this._offset=0;this._less=null;this._go=!1;this._newstate=null;this._text=null;this._leng=null;this._input=e,this._lexer=t,this._state=t.states[0]}text(){return this._text}leng(){return this._leng}pos(){return this._pos}line(){return this._line}column(){return this._col}input(){return this._input.charAt(this._pos+this._leng+this._offset++)}unput(){return this._offset=this._offset>0?this._offset--:0}less(e){return this._less=e,this._offset=0,this._text=this._text.substring(0,e),this._leng=this._text.length}pushback(e){return this.less(this._leng-e)}reject(){this._go=!0}begin(e){if(this._lexer.specification[e])return this._newstate=e;let t=this._lexer.states[parseInt(e)];if(t)return this._newstate=t;throw"Unknown state '"+e+"' requested"}state(){return this._state}scan(){if(this._pos>=this._input.length)return ue;let e=this._input.substring(this._pos),t=this._lexer.specification[this._state],n=[];for(let g=0;g<t.length;g++){let b=t[g],T=e.match(b.re);T!==null&&T[0].length>0&&n.push({index:g,text:T[0],len:T[0].length,rule:b})}if(n.length===0)throw new Error("No match found for input '"+e+"'");n.sort(Le),this._go=!0;let s,o;for(let g=0,b=n.length;g<b&&this._go;g++)if(this._offset=0,this._less=null,this._go=!1,this._newstate=null,o=n[g],this._text=o.text,this._leng=o.len,s=o.rule.action(this),this._newstate&&this._newstate!=this._state){this._state=this._newstate;break}let a=this._less===null?o.text:o.text.substring(0,this._less),i=a.length;this._pos+=i+this._offset;let h=a.match(/\n/g);return h!==null?(this._line+=h.length,this._col=i-a.lastIndexOf(`
4
- `)-1):this._col+=i,s}},S=class{constructor(e){this.states=Object.keys(e),this.specification={};for(let t of this.states){let n=e[t];if(t in this.specification)throw"Duplicate state declaration encountered for state '"+t+"'";this.specification[t]=[];for(let[s,o]of n.entries()){let a;try{a=new RegExp("^"+s)}catch(i){throw"Invalid regexp '"+s+"' in state '"+t+"' ("+i.message+")"}this.specification[t].push({re:a,action:o})}}}scanner(e){return new Z(e,this)}lex(e,t){let n=this.scanner(e);for(;;){let s=n.scan();if(s===ue)return;s!==void 0&&t(s)}}collect(e){let t=[],n=function(s){Array.isArray(s)?t.push(...s):t.push(s)};return this.lex(e,n),t}};var Ae=["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","overleftarrow","overrightarrow","hspace"],Re=["frac","tfrac","binom","dbinom","dfrac","tbinom","overset"],pe=new l("empty","");function Pe(r){return Ae.includes(r)?1:Re.includes(r)?2:0}var B=new c(6,"{"),I=new c(6,"}"),ce=new c(0,"["),De=new c(0,"]");function J(r,e){let t=e;for(;t<r.length&&[4,5].includes(r[t].type);)t++;return r.slice(e,t)}function he(r,e){let t=r[e];return t.type===0&&["(",")","[","]","|","\\{","\\}","."].includes(t.value)||t.type===1&&["lfloor","rfloor","lceil","rceil","langle","rangle"].includes(t.value.slice(1))?t:null}function C(r,e){let t=e;for(;t<r.length&&r[t].eq(new c(0,"'"));)t+=1;return t-e}function z(r,e,t,n){m(r[e].eq(t));let s=1,o=e+1;for(;s>0;){if(o>=r.length)return-1;r[o].eq(t)?s+=1:r[o].eq(n)&&(s-=1),o+=1}return o-1}var ee=new c(1,"\\left"),Be=new c(1,"\\right");function Ie(r,e){return z(r,e,ee,Be)}var te=new c(1,"\\begin"),ze=new c(1,"\\end");function Ue(r,e){return z(r,e,te,ze)}function We(r){let e=["{","}","\\","$","&","#","_","%"];for(let t of e)r=r.replaceAll("\\"+t,t);return r}var Ye=new Map([[String.raw`\\(text|operatorname|begin|end|hspace){.+?}`,r=>{let e=r.text(),t=e.substring(0,e.indexOf("{")),n=e.substring(e.indexOf("{")+1,e.lastIndexOf("}"));return[new c(1,t),new c(6,"{"),new c(2,We(n)),new c(6,"}")]}],[String.raw`%[^\n]*`,r=>new c(3,r.text().substring(1))],[String.raw`[{}_^&]`,r=>new c(6,r.text())],[String.raw`\r?\n`,r=>new c(5,`
5
- `)],[String.raw`\s+`,r=>new c(4,r.text())],[String.raw`\\[\\,:;]`,r=>new c(6,r.text())],[String.raw`\\[{}%$&#_|]`,r=>new c(0,r.text())],[String.raw`\\[a-zA-Z]+`,r=>new c(1,r.text())],[String.raw`[0-9]+`,r=>new c(0,r.text())],[String.raw`[a-zA-Z]`,r=>new c(0,r.text())],[String.raw`[+\-*/='<>!.,;:?()\[\]|]`,r=>new c(0,r.text())],[String.raw`.`,r=>new c(7,r.text())]]),$e={start:Ye};function ge(r){return new S($e).collect(r)}var d=class extends Error{constructor(e){super(e),this.name="LatexParserError"}},re=new c(6,"_"),ne=new c(6,"^"),se=class{constructor(e=!1,t=!0){this.space_sensitive=e,this.newline_sensitive=t}parse(e){let[t,n]=this.parseGroup(e,0,e.length);return t}parseGroup(e,t,n){let s=[],o=t;for(;o<n;){let[i,h]=this.parseNextExpr(e,o);if(o=h,!(i.type==="whitespace"&&(!this.space_sensitive&&i.content.replace(/ /g,"").length===0||!this.newline_sensitive&&i.content===`
6
- `))){if(i.type==="control"&&i.content==="&")throw new d("Unexpected & outside of an alignment");s.push(i)}}let a;return s.length===0?a=pe:s.length===1?a=s[0]:a=new l("ordgroup","",s),[a,n+1]}parseNextExpr(e,t){let[n,s]=this.parseNextExprWithoutSupSub(e,t),o=null,a=null,i=0;if(i+=C(e,s),s+=i,s<e.length&&e[s].eq(re)){if([o,s]=this.parseNextExprWithoutSupSub(e,s+1),i+=C(e,s),s+=i,s<e.length&&e[s].eq(ne)&&([a,s]=this.parseNextExprWithoutSupSub(e,s+1),C(e,s)>0))throw new d("Double superscript")}else if(s<e.length&&e[s].eq(ne)){if([a,s]=this.parseNextExprWithoutSupSub(e,s+1),C(e,s)>0)throw new d("Double superscript");if(s<e.length&&e[s].eq(re)&&([o,s]=this.parseNextExprWithoutSupSub(e,s+1),C(e,s)>0))throw new d("Double superscript")}if(o!==null||a!==null||i>0){let h={base:n};if(o&&(h.sub=o),i>0){h.sup=new l("ordgroup","",[]);for(let g=0;g<i;g++)h.sup.args.push(new l("element","'"));a&&h.sup.args.push(a),h.sup.args.length===1&&(h.sup=h.sup.args[0])}else a&&(h.sup=a);return[new l("supsub","",[],h),s]}else return[n,s]}parseNextExprWithoutSupSub(e,t){let n=e[t];switch(n.type){case 0:return[new l("element",n.value),t+1];case 2:return[new l("text",n.value),t+1];case 3:return[new l("comment",n.value),t+1];case 4:case 5:return[new l("whitespace",n.value),t+1];case 1:return n.eq(te)?this.parseBeginEndExpr(e,t):n.eq(ee)?this.parseLeftRightExpr(e,t):this.parseCommandExpr(e,t);case 6:let s=n.value;switch(s){case"{":let o=z(e,t,B,I);if(o===-1)throw new d("Unmatched '{'");return this.parseGroup(e,t+1,o);case"}":throw new d("Unmatched '}'");case"\\\\":case"\\,":case"\\:":case"\\;":return[new l("control",s),t+1];case"_":case"^":return[pe,t];case"&":return[new l("control","&"),t+1];default:throw new d("Unknown control sequence")}default:throw new d("Unknown token type")}}parseCommandExpr(e,t){m(e[t].type===1);let n=e[t].value,s=t+1;if(["left","right","begin","end"].includes(n.slice(1)))throw new d("Unexpected command: "+n);switch(Pe(n.slice(1))){case 0:return y.has(n.slice(1))?[new l("symbol",n),s]:[new l("unknownMacro",n),s];case 1:{if(s>=e.length)throw new d("Expecting argument for "+n);if(n==="\\sqrt"&&s<e.length&&e[s].eq(ce)){let h=s,g=z(e,s,ce,De);if(g===-1)throw new d("No matching right square bracket for [");let[b,T]=this.parseGroup(e,h+1,g),[q,O]=this.parseNextExprWithoutSupSub(e,g+1);return[new l("unaryFunc",n,[q],b),O]}else if(n==="\\text"){if(s+2>=e.length)throw new d("Expecting content for \\text command");m(e[s].eq(B)),m(e[s+1].type===2),m(e[s+2].eq(I));let h=e[s+1].value;return[new l("text",h),s+3]}let[a,i]=this.parseNextExprWithoutSupSub(e,s);return[new l("unaryFunc",n,[a]),i]}case 2:{let[a,i]=this.parseNextExprWithoutSupSub(e,s),[h,g]=this.parseNextExprWithoutSupSub(e,i);return[new l("binaryFunc",n,[a,h]),g]}default:throw new Error("Invalid number of parameters")}}parseLeftRightExpr(e,t){m(e[t].eq(ee));let n=t+1;if(n+=J(e,n).length,n>=e.length)throw new d("Expecting delimiter after \\left");let s=he(e,n);if(s===null)throw new d("Invalid delimiter after \\left");n++;let o=n,a=Ie(e,t);if(a===-1)throw new d("No matching \\right");let i=a;if(n=a+1,n+=J(e,n).length,n>=e.length)throw new d("Expecting \\right after \\left");let h=he(e,n);if(h===null)throw new d("Invalid delimiter after \\right");n++;let[g,b]=this.parseGroup(e,o,i),T=[new l("element",s.value),g,new l("element",h.value)];return[new l("leftright","",T),n]}parseBeginEndExpr(e,t){m(e[t].eq(te));let n=t+1;m(e[n].eq(B)),m(e[n+1].type===2),m(e[n+2].eq(I));let s=e[n+1].value;n+=3,n+=J(e,n).length;let o=n,a=Ue(e,t);if(a===-1)throw new d("No matching \\end");let i=a;if(n=a+1,m(e[n].eq(B)),m(e[n+1].type===2),m(e[n+2].eq(I)),e[n+1].value!==s)throw new d("Mismatched \\begin and \\end environments");n+=3;let h=e.slice(o,i);for(;h.length>0&&[4,5].includes(h[h.length-1].type);)h.pop();let g=this.parseAligned(h);return[new l("beginend",s,[],g),n]}parseAligned(e){let t=0,n=[],s=[];n.push(s);let o=new l("ordgroup","",[]);for(s.push(o);t<e.length;){let[a,i]=this.parseNextExpr(e,t);t=i,!(a.type==="whitespace"&&(!this.space_sensitive&&a.content.replace(/ /g,"").length===0||!this.newline_sensitive&&a.content===`
7
- `))&&(a.type==="control"&&a.content==="\\\\"?(s=[],o=new l("ordgroup","",[]),s.push(o),n.push(s)):a.type==="control"&&a.content==="&"?(o=new l("ordgroup","",[]),s.push(o)):o.args.push(a))}return n}};function Fe(r){let e=n=>n.eq(re)||n.eq(ne),t=[];for(let n=0;n<r.length;n++)r[n].type===4&&n+1<r.length&&e(r[n+1])||r[n].type===4&&n-1>=0&&e(r[n-1])||t.push(r[n]);return t}function Ge(r,e){let t=[];for(let n of r)if(n.type===1&&e[n.value]){let s=ge(e[n.value]);t=t.concat(s)}else t.push(n);return t}function de(r,e){let t=new se,n=ge(r);return n=Fe(n),n=Ge(n,e),t.parse(n)}var U=new Map([["arrow.l.r.double.long","<==>"],["arrow.l.r.long","<-->"],["arrow.r.bar","|->"],["arrow.r.double.bar","|=>"],["arrow.r.double.long","==>"],["arrow.r.long","-->"],["arrow.r.long.squiggly","~~>"],["arrow.r.tail",">->"],["arrow.r.twohead","->>"],["arrow.l.double.long","<=="],["arrow.l.long","<--"],["arrow.l.long.squiggly","<~~"],["arrow.l.tail","<-<"],["arrow.l.twohead","<<-"],["arrow.l.r","<->"],["arrow.l.r.double","<=>"],["colon.double.eq","::="],["dots.h","..."],["gt.triple",">>>"],["lt.triple","<<<"],["arrow.r","->"],["arrow.r.double","=>"],["arrow.r.squiggly","~>"],["arrow.l","<-"],["arrow.l.squiggly","<~"],["bar.v.double","||"],["bracket.l.double","[|"],["bracket.r.double","|]"],["colon.eq",":="],["eq.colon","=:"],["eq.not","!="],["gt.double",">>"],["gt.eq",">="],["lt.double","<<"],["lt.eq","<="],["ast.op","*"],["minus","-"],["tilde.op","~"]]),W=new Map;for(let[r,e]of U.entries())e.length>1&&W.set(e,r);function be(r){return r.type==="atom"&&["(",")","[","]","{","}","|","\u230A","\u230B","\u2308","\u2309"].includes(r.content)}var A=new p(1,"("),M=new p(1,")"),Ve=new p(1,","),Xe=new p(0,`
8
- `);function we(r){switch(typeof r){case"string":return`"${r}"`;case"number":return r.toString();case"boolean":return r?"#true":"#false";default:if(r===null)return"#none";if(r instanceof p)return r.toString();throw new x(`Invalid primitive value: ${r}`,r)}}var x=class extends Error{constructor(e,t){super(e),this.name="TypstWriterError",this.node=t}},Y=class{constructor(e){this.buffer="";this.queue=[];this.insideFunctionDepth=0;this.nonStrict=e.nonStrict,this.preferShorthands=e.preferShorthands,this.keepSpaces=e.keepSpaces,this.inftyToOo=e.inftyToOo}writeBuffer(e){let t=e.toString();if(t==="")return;let n=!1;n||=/[\(\[\|]$/.test(this.buffer)&&/^\w/.test(t),n||=/^[})\]\|]$/.test(t),n||=/[^=]$/.test(this.buffer)&&t==="(",n||=/^[_^,;!]$/.test(t),n||=t==="'",n||=/[0-9]$/.test(this.buffer)&&/^[0-9]/.test(t),n||=/[\(\[{]\s*(-|\+)$/.test(this.buffer)||this.buffer==="-"||this.buffer==="+",n||=t.startsWith(`
3
+ `)),t.push(new c(1,`\\end{${this.content}}`)),t}default:throw new Error("[TexNode.serialize] Unimplemented type: "+this.type)}}isOverHigh(){switch(this.type){case"element":case"symbol":case"text":case"control":case"empty":return!1;case"binaryFunc":if(this.content==="\\frac")return!0;case"unaryFunc":case"ordgroup":return this.args.some(e=>e.isOverHigh());case"supsub":return this.data.base.isOverHigh();case"beginend":return!0;default:return!1}}};var p=class{constructor(e,t){this.type=e,this.value=t}eq(e){return this.type===e.type&&this.value===e.value}isOneOf(e){return D(e,this)}toNode(){switch(this.type){case 2:return new l("text",this.value);case 3:return new l("comment",this.value);case 4:case 7:return new l("whitespace",this.value);case 1:return new l("atom",this.value);case 0:return new l("symbol",this.value);case 6:{let e=this.value;switch(e){case"":case"_":case"^":return new l("empty","");case"&":return new l("control","&");case"\\":return new l("control","\\");default:throw new Error(`Unexpected control character ${e}`)}}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}}},C=null,le=!0;var l=class{constructor(e,t,n,s){this.type=e,this.content=t,this.args=n,this.data=s}setOptions(e){this.options=e}eq(e){return this.type===e.type&&this.content===e.content}};function ue(r){return"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".includes(r)}function T(r,e=""){if(!r)throw new Error(e)}var pe={};function Ae(r,e){return e.len!==r.len?e.len-r.len:r.index-e.index}var Z=class{constructor(e,t){this._pos=0;this._line=0;this._col=0;this._offset=0;this._less=null;this._go=!1;this._newstate=null;this._text=null;this._leng=null;this._input=e,this._lexer=t,this._state=t.states[0]}text(){return this._text}leng(){return this._leng}pos(){return this._pos}line(){return this._line}column(){return this._col}input(){return this._input.charAt(this._pos+this._leng+this._offset++)}unput(){return this._offset=this._offset>0?this._offset--:0}less(e){return this._less=e,this._offset=0,this._text=this._text.substring(0,e),this._leng=this._text.length}pushback(e){return this.less(this._leng-e)}reject(){this._go=!0}begin(e){if(this._lexer.specification[e])return this._newstate=e;let t=this._lexer.states[parseInt(e)];if(t)return this._newstate=t;throw"Unknown state '"+e+"' requested"}state(){return this._state}scan(){if(this._pos>=this._input.length)return pe;let e=this._input.substring(this._pos),t=this._lexer.specification[this._state],n=[];for(let g=0;g<t.length;g++){let d=t[g],m=e.match(d.re);m!==null&&m[0].length>0&&n.push({index:g,text:m[0],len:m[0].length,rule:d})}if(n.length===0)throw new Error("No match found for input '"+e+"'");n.sort(Ae),this._go=!0;let s,o;for(let g=0,d=n.length;g<d&&this._go;g++)if(this._offset=0,this._less=null,this._go=!1,this._newstate=null,o=n[g],this._text=o.text,this._leng=o.len,s=o.rule.action(this),this._newstate&&this._newstate!=this._state){this._state=this._newstate;break}let a=this._less===null?o.text:o.text.substring(0,this._less),i=a.length;this._pos+=i+this._offset;let h=a.match(/\n/g);return h!==null?(this._line+=h.length,this._col=i-a.lastIndexOf(`
4
+ `)-1):this._col+=i,s}},O=class{constructor(e){this.states=Object.keys(e),this.specification={};for(let t of this.states){let n=e[t];if(t in this.specification)throw"Duplicate state declaration encountered for state '"+t+"'";this.specification[t]=[];for(let[s,o]of n.entries()){let a;try{a=new RegExp("^"+s)}catch(i){throw"Invalid regexp '"+s+"' in state '"+t+"' ("+i.message+")"}this.specification[t].push({re:a,action:o})}}}scanner(e){return new Z(e,this)}lex(e,t){let n=this.scanner(e);for(;;){let s=n.scan();if(s===pe)return;s!==void 0&&t(s)}}collect(e){let t=[],n=function(s){Array.isArray(s)?t.push(...s):t.push(s)};return this.lex(e,n),t}};var Re=["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","overleftarrow","overrightarrow","hspace"],De=["frac","tfrac","binom","dbinom","dfrac","tbinom","overset"],ce=new u("empty","");function Be(r){return Re.includes(r)?1:De.includes(r)?2:0}var B=new c(6,"{"),I=new c(6,"}"),he=new c(0,"["),Ie=new c(0,"]");function J(r,e){let t=e;for(;t<r.length&&[4,5].includes(r[t].type);)t++;return r.slice(e,t)}function ge(r,e){let t=r[e];return t.type===0&&["(",")","[","]","|","\\{","\\}","."].includes(t.value)||t.type===1&&["lfloor","rfloor","lceil","rceil","langle","rangle"].includes(t.value.slice(1))?t:null}function A(r,e){let t=e;for(;t<r.length&&r[t].eq(new c(0,"'"));)t+=1;return t-e}function z(r,e,t,n){T(r[e].eq(t));let s=1,o=e+1;for(;s>0;){if(o>=r.length)return-1;r[o].eq(t)?s+=1:r[o].eq(n)&&(s-=1),o+=1}return o-1}var ee=new c(1,"\\left"),ze=new c(1,"\\right");function Ue(r,e){return z(r,e,ee,ze)}var te=new c(1,"\\begin"),We=new c(1,"\\end");function Ye(r,e){return z(r,e,te,We)}function $e(r){let e=["{","}","\\","$","&","#","_","%"];for(let t of e)r=r.replaceAll("\\"+t,t);return r}var Fe=new Map([[String.raw`\\(text|operatorname|begin|end|hspace){.+?}`,r=>{let e=r.text(),t=e.substring(0,e.indexOf("{")),n=e.substring(e.indexOf("{")+1,e.lastIndexOf("}"));return[new c(1,t),new c(6,"{"),new c(2,$e(n)),new c(6,"}")]}],[String.raw`%[^\n]*`,r=>new c(3,r.text().substring(1))],[String.raw`[{}_^&]`,r=>new c(6,r.text())],[String.raw`\r?\n`,r=>new c(5,`
5
+ `)],[String.raw`\s+`,r=>new c(4,r.text())],[String.raw`\\[\\,:;]`,r=>new c(6,r.text())],[String.raw`\\[{}%$&#_|]`,r=>new c(0,r.text())],[String.raw`\\[a-zA-Z]+`,r=>new c(1,r.text())],[String.raw`[0-9]+`,r=>new c(0,r.text())],[String.raw`[a-zA-Z]`,r=>new c(0,r.text())],[String.raw`[+\-*/='<>!.,;:?()\[\]|]`,r=>new c(0,r.text())],[String.raw`.`,r=>new c(7,r.text())]]),Ge={start:Fe};function de(r){return new O(Ge).collect(r)}var b=class extends Error{constructor(e){super(e),this.name="LatexParserError"}},re=new c(6,"_"),ne=new c(6,"^"),se=class{constructor(e=!1,t=!0){this.space_sensitive=e,this.newline_sensitive=t}parse(e){let[t,n]=this.parseGroup(e,0,e.length);return t}parseGroup(e,t,n){let s=[],o=t;for(;o<n;){let[i,h]=this.parseNextExpr(e,o);if(o=h,!(i.type==="whitespace"&&(!this.space_sensitive&&i.content.replace(/ /g,"").length===0||!this.newline_sensitive&&i.content===`
6
+ `))){if(i.type==="control"&&i.content==="&")throw new b("Unexpected & outside of an alignment");s.push(i)}}let a;return s.length===0?a=ce:s.length===1?a=s[0]:a=new u("ordgroup","",s),[a,n+1]}parseNextExpr(e,t){let[n,s]=this.parseNextExprWithoutSupSub(e,t),o=null,a=null,i=0;if(i+=A(e,s),s+=i,s<e.length&&e[s].eq(re)){if([o,s]=this.parseNextExprWithoutSupSub(e,s+1),i+=A(e,s),s+=i,s<e.length&&e[s].eq(ne)&&([a,s]=this.parseNextExprWithoutSupSub(e,s+1),A(e,s)>0))throw new b("Double superscript")}else if(s<e.length&&e[s].eq(ne)){if([a,s]=this.parseNextExprWithoutSupSub(e,s+1),A(e,s)>0)throw new b("Double superscript");if(s<e.length&&e[s].eq(re)&&([o,s]=this.parseNextExprWithoutSupSub(e,s+1),A(e,s)>0))throw new b("Double superscript")}if(o!==null||a!==null||i>0){let h={base:n};if(o&&(h.sub=o),i>0){h.sup=new u("ordgroup","",[]);for(let g=0;g<i;g++)h.sup.args.push(new u("element","'"));a&&h.sup.args.push(a),h.sup.args.length===1&&(h.sup=h.sup.args[0])}else a&&(h.sup=a);return[new u("supsub","",[],h),s]}else return[n,s]}parseNextExprWithoutSupSub(e,t){let n=e[t];switch(n.type){case 0:return[new u("element",n.value),t+1];case 2:return[new u("text",n.value),t+1];case 3:return[new u("comment",n.value),t+1];case 4:case 5:return[new u("whitespace",n.value),t+1];case 1:return n.eq(te)?this.parseBeginEndExpr(e,t):n.eq(ee)?this.parseLeftRightExpr(e,t):this.parseCommandExpr(e,t);case 6:let s=n.value;switch(s){case"{":let o=z(e,t,B,I);if(o===-1)throw new b("Unmatched '{'");return this.parseGroup(e,t+1,o);case"}":throw new b("Unmatched '}'");case"\\\\":case"\\,":case"\\:":case"\\;":return[new u("control",s),t+1];case"_":case"^":return[ce,t];case"&":return[new u("control","&"),t+1];default:throw new b("Unknown control sequence")}default:throw new b("Unknown token type")}}parseCommandExpr(e,t){T(e[t].type===1);let n=e[t].value,s=t+1;if(["left","right","begin","end"].includes(n.slice(1)))throw new b("Unexpected command: "+n);switch(Be(n.slice(1))){case 0:return y.has(n.slice(1))?[new u("symbol",n),s]:[new u("unknownMacro",n),s];case 1:{if(s>=e.length)throw new b("Expecting argument for "+n);if(n==="\\sqrt"&&s<e.length&&e[s].eq(he)){let h=s,g=z(e,s,he,Ie);if(g===-1)throw new b("No matching right square bracket for [");let[d,m]=this.parseGroup(e,h+1,g),[v,q]=this.parseNextExprWithoutSupSub(e,g+1);return[new u("unaryFunc",n,[v],d),q]}else if(n==="\\text"){if(s+2>=e.length)throw new b("Expecting content for \\text command");T(e[s].eq(B)),T(e[s+1].type===2),T(e[s+2].eq(I));let h=e[s+1].value;return[new u("text",h),s+3]}let[a,i]=this.parseNextExprWithoutSupSub(e,s);return[new u("unaryFunc",n,[a]),i]}case 2:{let[a,i]=this.parseNextExprWithoutSupSub(e,s),[h,g]=this.parseNextExprWithoutSupSub(e,i);return[new u("binaryFunc",n,[a,h]),g]}default:throw new Error("Invalid number of parameters")}}parseLeftRightExpr(e,t){T(e[t].eq(ee));let n=t+1;if(n+=J(e,n).length,n>=e.length)throw new b("Expecting delimiter after \\left");let s=ge(e,n);if(s===null)throw new b("Invalid delimiter after \\left");n++;let o=n,a=Ue(e,t);if(a===-1)throw new b("No matching \\right");let i=a;if(n=a+1,n+=J(e,n).length,n>=e.length)throw new b("Expecting \\right after \\left");let h=ge(e,n);if(h===null)throw new b("Invalid delimiter after \\right");n++;let[g,d]=this.parseGroup(e,o,i),m=[new u("element",s.value),g,new u("element",h.value)];return[new u("leftright","",m),n]}parseBeginEndExpr(e,t){T(e[t].eq(te));let n=t+1;T(e[n].eq(B)),T(e[n+1].type===2),T(e[n+2].eq(I));let s=e[n+1].value;n+=3,n+=J(e,n).length;let o=n,a=Ye(e,t);if(a===-1)throw new b("No matching \\end");let i=a;if(n=a+1,T(e[n].eq(B)),T(e[n+1].type===2),T(e[n+2].eq(I)),e[n+1].value!==s)throw new b("Mismatched \\begin and \\end environments");n+=3;let h=e.slice(o,i);for(;h.length>0&&[4,5].includes(h[h.length-1].type);)h.pop();let g=this.parseAligned(h);return[new u("beginend",s,[],g),n]}parseAligned(e){let t=0,n=[],s=[];n.push(s);let o=new u("ordgroup","",[]);for(s.push(o);t<e.length;){let[a,i]=this.parseNextExpr(e,t);t=i,!(a.type==="whitespace"&&(!this.space_sensitive&&a.content.replace(/ /g,"").length===0||!this.newline_sensitive&&a.content===`
7
+ `))&&(a.type==="control"&&a.content==="\\\\"?(s=[],o=new u("ordgroup","",[]),s.push(o),n.push(s)):a.type==="control"&&a.content==="&"?(o=new u("ordgroup","",[]),s.push(o)):o.args.push(a))}return n}};function Ve(r){let e=n=>n.eq(re)||n.eq(ne),t=[];for(let n=0;n<r.length;n++)r[n].type===4&&n+1<r.length&&e(r[n+1])||r[n].type===4&&n-1>=0&&e(r[n-1])||t.push(r[n]);return t}function Xe(r,e){let t=[];for(let n of r)if(n.type===1&&e[n.value]){let s=de(e[n.value]);t=t.concat(s)}else t.push(n);return t}function be(r,e){let t=new se,n=de(r);return n=Ve(n),n=Xe(n,e),t.parse(n)}var U=new Map([["arrow.l.r.double.long","<==>"],["arrow.l.r.long","<-->"],["arrow.r.bar","|->"],["arrow.r.double.bar","|=>"],["arrow.r.double.long","==>"],["arrow.r.long","-->"],["arrow.r.long.squiggly","~~>"],["arrow.r.tail",">->"],["arrow.r.twohead","->>"],["arrow.l.double.long","<=="],["arrow.l.long","<--"],["arrow.l.long.squiggly","<~~"],["arrow.l.tail","<-<"],["arrow.l.twohead","<<-"],["arrow.l.r","<->"],["arrow.l.r.double","<=>"],["colon.double.eq","::="],["dots.h","..."],["gt.triple",">>>"],["lt.triple","<<<"],["arrow.r","->"],["arrow.r.double","=>"],["arrow.r.squiggly","~>"],["arrow.l","<-"],["arrow.l.squiggly","<~"],["bar.v.double","||"],["bracket.l.double","[|"],["bracket.r.double","|]"],["colon.eq",":="],["eq.colon","=:"],["eq.not","!="],["gt.double",">>"],["gt.eq",">="],["lt.double","<<"],["lt.eq","<="],["ast.op","*"],["minus","-"],["tilde.op","~"]]),W=new Map;for(let[r,e]of U.entries())e.length>1&&W.set(e,r);function we(r){return r.type==="atom"&&["(",")","[","]","{","}","|","\u230A","\u230B","\u2308","\u2309"].includes(r.content)}var L=new p(1,"("),M=new p(1,")"),He=new p(1,","),je=new p(0,`
8
+ `);function oe(r){switch(typeof r){case"string":return`"${r}"`;case"number":return r.toString();case"boolean":return r?"#true":"#false";default:if(r===null)return"#none";if(r instanceof p)return r.toString();throw new x(`Invalid primitive value: ${r}`,r)}}var x=class extends Error{constructor(e,t){super(e),this.name="TypstWriterError",this.node=t}},Y=class{constructor(e){this.buffer="";this.queue=[];this.insideFunctionDepth=0;this.nonStrict=e.nonStrict,this.preferShorthands=e.preferShorthands,this.keepSpaces=e.keepSpaces,this.inftyToOo=e.inftyToOo}writeBuffer(e){let t=e.toString();if(t==="")return;let n=!1;n||=/[\(\[\|]$/.test(this.buffer)&&/^\w/.test(t),n||=/^[})\]\|]$/.test(t),n||=/[^=]$/.test(this.buffer)&&t==="(",n||=/^[_^,;!]$/.test(t),n||=t==="'",n||=/[0-9]$/.test(this.buffer)&&/^[0-9]/.test(t),n||=/[\(\[{]\s*(-|\+)$/.test(this.buffer)||this.buffer==="-"||this.buffer==="+",n||=t.startsWith(`
9
9
  `),n||=this.buffer==="",n||=/^\s/.test(t),n||=this.buffer.endsWith("&")&&t==="=",n||=this.buffer.endsWith("/")||t==="/",n||=/[\s_^{\(]$/.test(this.buffer),n||(this.buffer+=" "),this.buffer+=t}serialize(e){switch(e.type){case"empty":break;case"atom":{e.content===","&&this.insideFunctionDepth>0?this.queue.push(new p(0,"comma")):this.queue.push(new p(1,e.content));break}case"symbol":{let t=e.content;this.preferShorthands&&U.has(t)&&(t=U.get(t)),this.inftyToOo&&t==="infinity"&&(t="oo"),this.queue.push(new p(0,t));break}case"text":this.queue.push(new p(2,e.content));break;case"comment":this.queue.push(new p(3,e.content));break;case"whitespace":for(let t of e.content)if(t===" ")this.keepSpaces&&this.queue.push(new p(4,t));else if(t===`
10
- `)this.queue.push(new p(0,t));else throw new x(`Unexpected whitespace character: ${t}`,e);break;case"group":for(let t of e.args)this.serialize(t);break;case"supsub":{let{base:t,sup:n,sub:s}=e.data;this.appendWithBracketsIfNeeded(t);let o=!1,a=n&&n.type==="atom"&&n.content==="'";a&&(this.queue.push(new p(1,"'")),o=!1),s&&(this.queue.push(new p(1,"_")),o=this.appendWithBracketsIfNeeded(s)),n&&!a&&(this.queue.push(new p(1,"^")),o=this.appendWithBracketsIfNeeded(n)),o&&this.queue.push(new p(6," "));break}case"funcCall":{let t=new p(0,e.content);this.queue.push(t),this.insideFunctionDepth++,this.queue.push(A);for(let n=0;n<e.args.length;n++)this.serialize(e.args[n]),n<e.args.length-1&&this.queue.push(new p(1,","));if(e.options)for(let[n,s]of Object.entries(e.options)){let o=we(s);this.queue.push(new p(0,`, ${n}: ${o}`))}this.queue.push(M),this.insideFunctionDepth--;break}case"fraction":{let[t,n]=e.args;t.type==="group"?(this.queue.push(A),this.serialize(t),this.queue.push(M)):this.serialize(t),this.queue.push(new p(1,"/")),n.type==="group"?(this.queue.push(A),this.serialize(n),this.queue.push(M)):this.serialize(n);break}case"align":{let t=e.data;t.forEach((n,s)=>{n.forEach((o,a)=>{a>0&&this.queue.push(new p(1,"&")),this.serialize(o)}),s<t.length-1&&this.queue.push(new p(0,"\\"))});break}case"matrix":{let t=e.data;if(this.queue.push(new p(0,"mat")),this.insideFunctionDepth++,this.queue.push(A),e.options)for(let[n,s]of Object.entries(e.options)){let o=we(s);this.queue.push(new p(0,`${n}: ${o}, `))}t.forEach((n,s)=>{n.forEach((o,a)=>{this.serialize(o),a<n.length-1?this.queue.push(new p(1,",")):s<t.length-1&&this.queue.push(new p(1,";"))})}),this.queue.push(M),this.insideFunctionDepth--;break}case"unknown":{if(this.nonStrict)this.queue.push(new p(0,e.content));else throw new x(`Unknown macro: ${e.content}`,e);break}default:throw new x(`Unimplemented node type to append: ${e.type}`,e)}}appendWithBracketsIfNeeded(e){let t=["group","supsub","empty"].includes(e.type);if(e.type==="group"){let n=e.args[0],s=e.args[e.args.length-1];be(n)&&be(s)&&(t=!1)}return t?(this.queue.push(A),this.serialize(e),this.queue.push(M)):this.serialize(e),!t}flushQueue(){let e=new p(6," ");for(let t=0;t<this.queue.length;t++)this.queue[t].eq(e)&&(t===this.queue.length-1?this.queue[t].value="":this.queue[t+1].isOneOf([M,Ve,Xe])&&(this.queue[t].value=""));this.queue.forEach(t=>{this.writeBuffer(t)}),this.queue=[]}finalize(){this.flushQueue();let s=[function(o){let a=o.replace(/floor\.l\s*(.*?)\s*floor\.r/g,"floor($1)");return a=a.replace(/floor\(\)/g,'floor("")'),a},function(o){let a=o.replace(/ceil\.l\s*(.*?)\s*ceil\.r/g,"ceil($1)");return a=a.replace(/ceil\(\)/g,'ceil("")'),a},function(o){let a=o.replace(/floor\.l\s*(.*?)\s*ceil\.r/g,"round($1)");return a=a.replace(/round\(\)/g,'round("")'),a}];for(let o of s)this.buffer=o(this.buffer);return this.buffer}};var He=["dim","id","im","mod","Pr","sech","csch"];function R(r){if(/^[a-zA-Z0-9]$/.test(r))return r;if(r==="/")return"\\/";if(r==="\\|")return"parallel";if(r==="\\\\")return"\\";if(["\\$","\\#","\\&","\\_"].includes(r))return r;if(r.startsWith("\\")){let e=r.slice(1);return y.has(e)?y.get(e):e}return r}function je(r,e){let[t,n]=r.args,s=i=>{if(i.eq(new l("text","def")))return!0;if(i.type==="ordgroup"&&i.args.length===3){let[h,g,b]=i.args,T=new l("element","d"),q=new l("element","e"),O=new l("element","f");if(h.eq(T)&&g.eq(q)&&b.eq(O))return!0}return!1},o=i=>i.eq(new l("element","="));if(s(t)&&o(n))return new u("symbol","eq.def");let a=new u("funcCall","op",[w(n,e)]);return a.setOptions({limits:ie}),new u("supsub","",[],{base:a,sup:w(t,e)})}function w(r,e={}){switch(r.type){case"empty":return new u("empty","");case"whitespace":return new u("whitespace",r.content);case"ordgroup":return new u("group","",r.args.map(t=>w(t,e)));case"element":return new u("atom",R(r.content));case"symbol":return new u("symbol",R(r.content));case"text":return new u("text",r.content);case"comment":return new u("comment",r.content);case"supsub":{let{base:t,sup:n,sub:s}=r.data;if(t&&t.type==="unaryFunc"&&t.content==="\\overbrace"&&n)return new u("funcCall","overbrace",[w(t.args[0],e),w(n,e)]);if(t&&t.type==="unaryFunc"&&t.content==="\\underbrace"&&s)return new u("funcCall","underbrace",[w(t.args[0],e),w(s,e)]);let o={base:w(t,e)};return o.base.type==="empty"&&(o.base=new u("text","")),n&&(o.sup=w(n,e)),s&&(o.sub=w(s,e)),new u("supsub","",[],o)}case"leftright":{let[t,n,s]=r.args,o=new u("group","",r.args.map(a=>w(a,e)));return["[]","()","\\{\\}","\\lfloor\\rfloor","\\lceil\\rceil","\\lfloor\\rceil"].includes(t.content+s.content)?o:s.content==="."?(o.args.pop(),o):t.content==="."?(o.args.shift(),new u("funcCall","lr",[o])):new u("funcCall","lr",[o])}case"binaryFunc":return r.content==="\\overset"?je(r,e):r.content==="\\frac"&&e.fracToSlash?new u("fraction","",r.args.map(t=>w(t,e))):new u("funcCall",R(r.content),r.args.map(t=>w(t,e)));case"unaryFunc":{let t=w(r.args[0],e);if(r.content==="\\sqrt"&&r.data){let n=w(r.data,e);return new u("funcCall","root",[n,t])}if(r.content==="\\mathbf"){let n=new u("funcCall","bold",[t]);return new u("funcCall","upright",[n])}if(r.content==="\\mathbb"&&t.type==="atom"&&/^[A-Z]$/.test(t.content))return new u("symbol",t.content+t.content);if(r.content==="\\overrightarrow")return new u("funcCall","arrow",[t]);if(r.content==="\\overleftarrow")return new u("funcCall","accent",[t,new u("symbol","arrow.l")]);if(r.content==="\\operatorname"){let n=t.content;return He.includes(n)?new u("symbol",n):new u("funcCall","op",[t])}if(r.content==="\\hspace"){let n=t.content;return new u("funcCall","#h",[new u("symbol",n)])}return new u("funcCall",R(r.content),r.args.map(n=>w(n,e)))}case"beginend":{let n=r.data.map(s=>s.map(o=>w(o,e)));if(r.content.startsWith("align"))return new u("align","",[],n);if(r.content.endsWith("matrix")){let s=null;switch(r.content){case"matrix":s=L;break;case"pmatrix":s="(";break;case"bmatrix":s="[";break;case"Bmatrix":s="{";break;case"vmatrix":s="|";break;case"Vmatrix":{s=new p(0,"bar.v.double");break}default:throw new x(`Unimplemented beginend: ${r.content}`,r)}let o=new u("matrix","",[],n);return o.setOptions({delim:s}),o}throw new x(`Unimplemented beginend: ${r.content}`,r)}case"unknownMacro":return new u("unknown",R(r.content));case"control":if(r.content==="\\\\")return new u("symbol","\\");if(y.has(r.content.substring(1))){let t=y.get(r.content.substring(1));return new u("symbol",t)}else throw new x(`Unknown control sequence: ${r.content}`,r);default:throw new x(`Unimplemented node type: ${r.type}`,r)}}var Ke=["sqrt","bold","arrow","upright","lr","op","macron","dot","dot.double","hat","tilde","overline","underline","bb","cal","frak"],Qe=["frac","root","overbrace","underbrace"];function fe(r){return["{","}","%"].includes(r)?"\\"+r:r}function $(r){return/^[a-zA-Z0-9]$/.test(r)?r:r==="thin"?"\\,":k.has(r)?"\\"+k.get(r):"\\"+r}function f(r){if(r.eq(new u("symbol","eq.def")))return new l("binaryFunc","\\overset",[new l("text","def"),new l("element","=")]);switch(r.type){case"empty":return new l("empty","");case"whitespace":return new l("whitespace",r.content);case"atom":return new l("element",r.content);case"symbol":switch(r.content){case"comma":return new l("element",",");case"hyph":case"hyph.minus":return new l("text","-");default:return new l("symbol",$(r.content))}case"text":return new l("text",r.content);case"comment":return new l("comment",r.content);case"group":{let e=r.args.map(f);return new l("ordgroup",r.content,e)}case"funcCall":if(Ke.includes(r.content)){if(r.content==="lr"){let t=r.args[0];if(t.type==="group"){let n=t.args[0].content,s=t.args[t.args.length-1].content;return n=fe(n),s=fe(s),new l("ordgroup","",[new l("element","\\left"+n),...t.args.slice(1,t.args.length-1).map(f),new l("element","\\right"+s)])}}let e=$(r.content);return new l("unaryFunc",e,r.args.map(f))}else if(Qe.includes(r.content)){if(r.content==="root"){let[t,n]=r.args,s=f(t);return new l("unaryFunc","\\sqrt",[f(n)],s)}if(r.content==="overbrace"||r.content==="underbrace"){let[t,n]=r.args,s=new l("unaryFunc","\\"+r.content,[f(t)]),o=f(n),a=r.content==="overbrace"?{base:s,sup:o}:{base:s,sub:o};return new l("supsub","",[],a)}let e=$(r.content);return new l("binaryFunc",e,r.args.map(f))}else return new l("ordgroup","",[new l("symbol",$(r.content)),new l("element","("),...r.args.map(f),new l("element",")")]);case"supsub":{let{base:e,sup:t,sub:n}=r.data,s=f(e),o,a;return t&&(o=f(t)),n&&(a=f(n)),new l("supsub","",[],{base:s,sup:o,sub:a})}case"matrix":{let t=r.data.map(a=>a.map(f)),n=new l("beginend","matrix",[],t),s="\\left(",o="\\right)";if(r.options&&"delim"in r.options)switch(r.options.delim){case L:return n;case"[":s="\\left[",o="\\right]";break;case"]":s="\\left]",o="\\right[";break;case"{":s="\\left\\{",o="\\right\\}";break;case"}":s="\\left\\}",o="\\right\\{";break;case"|":s="\\left|",o="\\right|";break;case")":s="\\left)",o="\\right(";case"(":default:s="\\left(",o="\\right)";break}return new l("ordgroup","",[new l("element",s),n,new l("element",o)])}case"control":switch(r.content){case"\\":return new l("control","\\\\");case"&":return new l("control","&");default:throw new Error("[convert_typst_node_to_tex] Unimplemented control: "+r.content)}case"fraction":{let[e,t]=r.args,n=f(e),s=f(t);return new l("binaryFunc","\\frac",[n,s])}default:throw new Error("[convert_typst_node_to_tex] Unimplemented type: "+r.type)}}var G=new u("empty",""),Ze=Array.from(W.keys());function Te(r,e){let t=e;for(;t<r.length&&r[t].eq(new p(1,"'"));)t+=1;return t-e}function Je(){return`(${Ze.map(e=>(e=e.replaceAll("|","\\|"),e=e.replaceAll(".","\\."),e=e.replaceAll("[","\\["),e=e.replaceAll("]","\\]"),e)).join("|")})`}var et=Je(),tt=new Map([[String.raw`//[^\n]*`,r=>new p(3,r.text().substring(2))],[String.raw`/`,r=>new p(1,r.text())],[String.raw`[_^&]`,r=>new p(6,r.text())],[String.raw`\r?\n`,r=>new p(7,`
10
+ `)this.queue.push(new p(0,t));else throw new x(`Unexpected whitespace character: ${t}`,e);break;case"group":for(let t of e.args)this.serialize(t);break;case"supsub":{let{base:t,sup:n,sub:s}=e.data;this.appendWithBracketsIfNeeded(t);let o=!1,a=n&&n.type==="atom"&&n.content==="'";a&&(this.queue.push(new p(1,"'")),o=!1),s&&(this.queue.push(new p(1,"_")),o=this.appendWithBracketsIfNeeded(s)),n&&!a&&(this.queue.push(new p(1,"^")),o=this.appendWithBracketsIfNeeded(n)),o&&this.queue.push(new p(6," "));break}case"funcCall":{let t=new p(0,e.content);this.queue.push(t),this.insideFunctionDepth++,this.queue.push(L);for(let n=0;n<e.args.length;n++)this.serialize(e.args[n]),n<e.args.length-1&&this.queue.push(new p(1,","));if(e.options)for(let[n,s]of Object.entries(e.options)){let o=oe(s);this.queue.push(new p(0,`, ${n}: ${o}`))}this.queue.push(M),this.insideFunctionDepth--;break}case"fraction":{let[t,n]=e.args;t.type==="group"?(this.queue.push(L),this.serialize(t),this.queue.push(M)):this.serialize(t),this.queue.push(new p(1,"/")),n.type==="group"?(this.queue.push(L),this.serialize(n),this.queue.push(M)):this.serialize(n);break}case"align":{let t=e.data;t.forEach((n,s)=>{n.forEach((o,a)=>{a>0&&this.queue.push(new p(1,"&")),this.serialize(o)}),s<t.length-1&&this.queue.push(new p(0,"\\"))});break}case"matrix":{let t=e.data;if(this.queue.push(new p(0,"mat")),this.insideFunctionDepth++,this.queue.push(L),e.options)for(let[n,s]of Object.entries(e.options)){let o=oe(s);this.queue.push(new p(0,`${n}: ${o}, `))}t.forEach((n,s)=>{n.forEach((o,a)=>{this.serialize(o),a<n.length-1?this.queue.push(new p(1,",")):s<t.length-1&&this.queue.push(new p(1,";"))})}),this.queue.push(M),this.insideFunctionDepth--;break}case"cases":{let t=e.data;if(this.queue.push(new p(0,"cases")),this.insideFunctionDepth++,this.queue.push(L),e.options)for(let[n,s]of Object.entries(e.options)){let o=oe(s);this.queue.push(new p(0,`${n}: ${o}, `))}t.forEach((n,s)=>{n.forEach((o,a)=>{this.serialize(o),a<n.length-1?this.queue.push(new p(1,"&")):s<t.length-1&&this.queue.push(new p(1,","))})}),this.queue.push(M),this.insideFunctionDepth--;break}case"unknown":{if(this.nonStrict)this.queue.push(new p(0,e.content));else throw new x(`Unknown macro: ${e.content}`,e);break}default:throw new x(`Unimplemented node type to append: ${e.type}`,e)}}appendWithBracketsIfNeeded(e){let t=["group","supsub","empty"].includes(e.type);if(e.type==="group"){let n=e.args[0],s=e.args[e.args.length-1];we(n)&&we(s)&&(t=!1)}return t?(this.queue.push(L),this.serialize(e),this.queue.push(M)):this.serialize(e),!t}flushQueue(){let e=new p(6," ");for(let t=0;t<this.queue.length;t++)this.queue[t].eq(e)&&(t===this.queue.length-1?this.queue[t].value="":this.queue[t+1].isOneOf([M,He,je])&&(this.queue[t].value=""));this.queue.forEach(t=>{this.writeBuffer(t)}),this.queue=[]}finalize(){this.flushQueue();let s=[function(o){let a=o.replace(/floor\.l\s*(.*?)\s*floor\.r/g,"floor($1)");return a=a.replace(/floor\(\)/g,'floor("")'),a},function(o){let a=o.replace(/ceil\.l\s*(.*?)\s*ceil\.r/g,"ceil($1)");return a=a.replace(/ceil\(\)/g,'ceil("")'),a},function(o){let a=o.replace(/floor\.l\s*(.*?)\s*ceil\.r/g,"round($1)");return a=a.replace(/round\(\)/g,'round("")'),a}];for(let o of s)this.buffer=o(this.buffer);return this.buffer}};var Ke=["dim","id","im","mod","Pr","sech","csch"];function P(r){if(/^[a-zA-Z0-9]$/.test(r))return r;if(r==="/")return"\\/";if(r==="\\|")return"parallel";if(r==="\\\\")return"\\";if(["\\$","\\#","\\&","\\_"].includes(r))return r;if(r.startsWith("\\")){let e=r.slice(1);return y.has(e)?y.get(e):e}return r}function Qe(r,e){let[t,n]=r.args,s=i=>{if(i.eq(new u("text","def")))return!0;if(i.type==="ordgroup"&&i.args.length===3){let[h,g,d]=i.args,m=new u("element","d"),v=new u("element","e"),q=new u("element","f");if(h.eq(m)&&g.eq(v)&&d.eq(q))return!0}return!1},o=i=>i.eq(new u("element","="));if(s(t)&&o(n))return new l("symbol","eq.def");let a=new l("funcCall","op",[w(n,e)]);return a.setOptions({limits:le}),new l("supsub","",[],{base:a,sup:w(t,e)})}function w(r,e={}){switch(r.type){case"empty":return new l("empty","");case"whitespace":return new l("whitespace",r.content);case"ordgroup":return new l("group","",r.args.map(t=>w(t,e)));case"element":return new l("atom",P(r.content));case"symbol":return new l("symbol",P(r.content));case"text":return new l("text",r.content);case"comment":return new l("comment",r.content);case"supsub":{let{base:t,sup:n,sub:s}=r.data;if(t&&t.type==="unaryFunc"&&t.content==="\\overbrace"&&n)return new l("funcCall","overbrace",[w(t.args[0],e),w(n,e)]);if(t&&t.type==="unaryFunc"&&t.content==="\\underbrace"&&s)return new l("funcCall","underbrace",[w(t.args[0],e),w(s,e)]);let o={base:w(t,e)};return o.base.type==="empty"&&(o.base=new l("text","")),n&&(o.sup=w(n,e)),s&&(o.sub=w(s,e)),new l("supsub","",[],o)}case"leftright":{let[t,n,s]=r.args,o=new l("group","",r.args.map(a=>w(a,e)));return["[]","()","\\{\\}","\\lfloor\\rfloor","\\lceil\\rceil","\\lfloor\\rceil"].includes(t.content+s.content)?o:s.content==="."?(o.args.pop(),o):t.content==="."?(o.args.shift(),new l("funcCall","lr",[o])):new l("funcCall","lr",[o])}case"binaryFunc":return r.content==="\\overset"?Qe(r,e):r.content==="\\frac"&&e.fracToSlash?new l("fraction","",r.args.map(t=>w(t,e))):new l("funcCall",P(r.content),r.args.map(t=>w(t,e)));case"unaryFunc":{let t=w(r.args[0],e);if(r.content==="\\sqrt"&&r.data){let n=w(r.data,e);return new l("funcCall","root",[n,t])}if(r.content==="\\mathbf"){let n=new l("funcCall","bold",[t]);return new l("funcCall","upright",[n])}if(r.content==="\\mathbb"&&t.type==="atom"&&/^[A-Z]$/.test(t.content))return new l("symbol",t.content+t.content);if(r.content==="\\overrightarrow")return new l("funcCall","arrow",[t]);if(r.content==="\\overleftarrow")return new l("funcCall","accent",[t,new l("symbol","arrow.l")]);if(r.content==="\\operatorname"){let n=t.content;return Ke.includes(n)?new l("symbol",n):new l("funcCall","op",[t])}if(r.content==="\\hspace"){let n=t.content;return new l("funcCall","#h",[new l("symbol",n)])}return new l("funcCall",P(r.content),r.args.map(n=>w(n,e)))}case"beginend":{let n=r.data.map(s=>s.map(o=>w(o,e)));if(r.content.startsWith("align"))return new l("align","",[],n);if(r.content==="cases")return new l("cases","",[],n);if(r.content.endsWith("matrix")){let s=null;switch(r.content){case"matrix":s=C;break;case"pmatrix":s="(";break;case"bmatrix":s="[";break;case"Bmatrix":s="{";break;case"vmatrix":s="|";break;case"Vmatrix":{s=new p(0,"bar.v.double");break}default:throw new x(`Unimplemented beginend: ${r.content}`,r)}let o=new l("matrix","",[],n);return o.setOptions({delim:s}),o}throw new x(`Unimplemented beginend: ${r.content}`,r)}case"unknownMacro":return new l("unknown",P(r.content));case"control":if(r.content==="\\\\")return new l("symbol","\\");if(y.has(r.content.substring(1))){let t=y.get(r.content.substring(1));return new l("symbol",t)}else throw new x(`Unknown control sequence: ${r.content}`,r);default:throw new x(`Unimplemented node type: ${r.type}`,r)}}var Ze=["sqrt","bold","arrow","upright","lr","op","macron","dot","dot.double","hat","tilde","overline","underline","bb","cal","frak"],Je=["frac","root","overbrace","underbrace"];function fe(r){return["{","}","%"].includes(r)?"\\"+r:r}function $(r){return/^[a-zA-Z0-9]$/.test(r)?r:r==="thin"?"\\,":S.has(r)?"\\"+S.get(r):"\\"+r}function f(r){if(r.eq(new l("symbol","eq.def")))return new u("binaryFunc","\\overset",[new u("text","def"),new u("element","=")]);switch(r.type){case"empty":return new u("empty","");case"whitespace":return new u("whitespace",r.content);case"atom":return new u("element",r.content);case"symbol":switch(r.content){case"comma":return new u("element",",");case"hyph":case"hyph.minus":return new u("text","-");default:return new u("symbol",$(r.content))}case"text":return new u("text",r.content);case"comment":return new u("comment",r.content);case"group":{let e=r.args.map(f);return new u("ordgroup",r.content,e)}case"funcCall":if(Ze.includes(r.content)){if(r.content==="lr"){let t=r.args[0];if(t.type==="group"){let n=t.args[0].content,s=t.args[t.args.length-1].content;return n=fe(n),s=fe(s),new u("ordgroup","",[new u("element","\\left"+n),...t.args.slice(1,t.args.length-1).map(f),new u("element","\\right"+s)])}}let e=$(r.content);return new u("unaryFunc",e,r.args.map(f))}else if(Je.includes(r.content)){if(r.content==="root"){let[t,n]=r.args,s=f(t);return new u("unaryFunc","\\sqrt",[f(n)],s)}if(r.content==="overbrace"||r.content==="underbrace"){let[t,n]=r.args,s=new u("unaryFunc","\\"+r.content,[f(t)]),o=f(n),a=r.content==="overbrace"?{base:s,sup:o}:{base:s,sub:o};return new u("supsub","",[],a)}let e=$(r.content);return new u("binaryFunc",e,r.args.map(f))}else return new u("ordgroup","",[new u("symbol",$(r.content)),new u("element","("),...r.args.map(f),new u("element",")")]);case"supsub":{let{base:e,sup:t,sub:n}=r.data,s=f(e),o,a;return t&&(o=f(t)),n&&(a=f(n)),new u("supsub","",[],{base:s,sup:o,sub:a})}case"matrix":{let t=r.data.map(a=>a.map(f)),n=new u("beginend","matrix",[],t),s="\\left(",o="\\right)";if(r.options&&"delim"in r.options)switch(r.options.delim){case C:return n;case"[":s="\\left[",o="\\right]";break;case"]":s="\\left]",o="\\right[";break;case"{":s="\\left\\{",o="\\right\\}";break;case"}":s="\\left\\}",o="\\right\\{";break;case"|":s="\\left|",o="\\right|";break;case")":s="\\left)",o="\\right(";case"(":default:s="\\left(",o="\\right)";break}return new u("ordgroup","",[new u("element",s),n,new u("element",o)])}case"cases":{let t=r.data.map(n=>n.map(f));return new u("beginend","cases",[],t)}case"control":switch(r.content){case"\\":return new u("control","\\\\");case"&":return new u("control","&");default:throw new Error("[convert_typst_node_to_tex] Unimplemented control: "+r.content)}case"fraction":{let[e,t]=r.args,n=f(e),s=f(t);return new u("binaryFunc","\\frac",[n,s])}default:throw new Error("[convert_typst_node_to_tex] Unimplemented type: "+r.type)}}var G=new l("empty",""),et=Array.from(W.keys());function Te(r,e){let t=e;for(;t<r.length&&r[t].eq(new p(1,"'"));)t+=1;return t-e}function tt(){return`(${et.map(e=>(e=e.replaceAll("|","\\|"),e=e.replaceAll(".","\\."),e=e.replaceAll("[","\\["),e=e.replaceAll("]","\\]"),e)).join("|")})`}var rt=tt(),nt=new Map([[String.raw`//[^\n]*`,r=>new p(3,r.text().substring(2))],[String.raw`/`,r=>new p(1,r.text())],[String.raw`[_^&]`,r=>new p(6,r.text())],[String.raw`\r?\n`,r=>new p(7,`
11
11
  `)],[String.raw`\s+`,r=>new p(4,r.text())],[String.raw`\\[$&#_]`,r=>new p(1,r.text())],[String.raw`\\\n`,r=>[new p(6,"\\"),new p(7,`
12
- `)]],[String.raw`\\\s`,r=>[new p(6,"\\"),new p(4," ")]],[String.raw`\\\S`,r=>new p(6,"")],[String.raw`"([^"]|(\\"))*"`,r=>{let e=r.text().substring(1,r.text().length-1);return e.replaceAll('\\"','"'),new p(2,e)}],[et,r=>{let e=r.text(),t=W.get(e);return new p(0,t)}],[String.raw`[0-9]+(\.[0-9]+)?`,r=>new p(1,r.text())],[String.raw`[+\-*/=\'<>!.,;?()\[\]|]`,r=>new p(1,r.text())],[String.raw`[a-zA-Z\.]+`,r=>new p(r.text().length===1?1:0,r.text())],[String.raw`.`,r=>new p(1,r.text())]]),rt={start:tt};function nt(r){return new S(rt).collect(r)}function F(r,e){m(r[e].isOneOf([P,Ee,Ne]));let t=1,n=e+1;for(;t>0;){if(n>=r.length)throw new Error("Unmatched brackets");r[n].isOneOf([P,Ee,Ne])?t+=1:r[n].isOneOf([it,lt,ut])&&(t-=1),n+=1}return n-1}function st(r,e){let t=new u("atom","("),n=new u("atom",")");m(r[e].eq(t));let s=1,o=e+1;for(;s>0;){if(o>=r.length)throw new Error("Unmatched brackets");r[o].eq(t)?s+=1:r[o].eq(n)&&(s-=1),o+=1}return o-1}function ye(r){let e=[];for(let t=0;t<r;t++)e.push(new u("atom","'"));return e}var V=new u("atom","/");function ot(r,e){let t=e;for(;t<r.length&&r[t].type==="whitespace";)t++;return t===r.length?G:r[t]}function at(r){let e=!1,t=[];for(let n=0;n<r.length;n++){let s=r[n];s.type==="whitespace"&&(e||ot(r,n+1).eq(V))||(s.eq(V)?e=!0:e=!1,t.push(s))}return t}function oe(r,e=!1){r=at(r);let t=new u("atom","("),n=new u("atom",")"),s=[],o=[],a=0;for(;a<r.length;){let i=r[a];if(i.eq(n))throw new _("Unexpected ')'");if(i.eq(V))s.push(i),a++;else{let h;if(i.eq(t)){let g=st(r,a);h=oe(r.slice(a+1,g),!0),a=g+1}else h=i,a++;if(s.length>0&&s[s.length-1].eq(V)){let g=h;if(o.length===0)throw new _("Unexpected '/' operator, no numerator before it");let b=o.pop();g.type==="group"&&g.content==="parenthesis"&&(g.content=""),b.type==="group"&&b.content==="parenthesis"&&(b.content=""),o.push(new u("fraction","",[b,g])),s.pop()}else o.push(h)}}return e?new u("group","parenthesis",o):o.length===0?G:o.length===1?o[0]:new u("group","",o)}var _=class extends Error{constructor(e){super(e),this.name="TypstParserError"}},xe=new p(6,"_"),qe=new p(6,"^"),P=new p(1,"("),it=new p(1,")"),Ee=new p(1,"["),lt=new p(1,"]"),Ne=new p(1,"{"),ut=new p(1,"}"),pt=new p(1,","),ct=new p(1,";"),ht=new p(4," "),ae=class{constructor(e=!0,t=!0){this.space_sensitive=e,this.newline_sensitive=t}parse(e){let[t,n]=this.parseGroup(e,0,e.length);return t}parseGroup(e,t,n,s=!1){let o=[],a=t;for(;a<n;){let[h,g]=this.parseNextExpr(e,a);a=g,!(h.type==="whitespace"&&(!this.space_sensitive&&h.content.replace(/ /g,"").length===0||!this.newline_sensitive&&h.content===`
13
- `))&&o.push(h)}let i;return s?i=oe(o,!0):o.length===0?i=G:o.length===1?i=o[0]:i=oe(o),[i,n+1]}parseNextExpr(e,t){let[n,s]=this.parseNextExprWithoutSupSub(e,t),o=null,a=null,i=Te(e,s);if(i>0&&(n=new u("group","",[n].concat(ye(i))),s+=i),s<e.length&&e[s].eq(xe)?([o,s]=this.parseSupOrSub(e,s+1),s<e.length&&e[s].eq(qe)&&([a,s]=this.parseSupOrSub(e,s+1))):s<e.length&&e[s].eq(qe)&&([a,s]=this.parseSupOrSub(e,s+1),s<e.length&&e[s].eq(xe)&&([o,s]=this.parseSupOrSub(e,s+1))),o!==null||a!==null){let h={base:n};return o&&(h.sub=o),a&&(h.sup=a),[new u("supsub","",[],h),s]}else return[n,s]}parseSupOrSub(e,t){let n,s;if(e[t].eq(P)){let a=F(e,t);[n,s]=this.parseGroup(e,t+1,a)}else[n,s]=this.parseNextExprWithoutSupSub(e,t);let o=Te(e,s);return o>0&&(n=new u("group","",[n].concat(ye(o))),s+=o),[n,s]}parseNextExprWithoutSupSub(e,t){let n=e[t],s=n.toNode();if(n.eq(P)){let o=F(e,t);return this.parseGroup(e,t+1,o,!0)}if(n.type===1&&!le(n.value[0]))return[s,t+1];if([1,0].includes(n.type)&&t+1<e.length&&e[t+1].eq(P)){if(n.value==="mat"){let[h,g,b]=this.parseGroupsOfArguments(e,t+1),T=new u("matrix","",[],h);return T.setOptions(g),[T,b]}let[o,a]=this.parseArguments(e,t+1),i=new u("funcCall",n.value);return i.args=o,[i,a]}return[s,t+1]}parseArguments(e,t){let n=F(e,t);return[this.parseCommaSeparatedArguments(e,t+1,n),n+1]}parseGroupsOfArguments(e,t){let n=F(e,t);e=e.slice(0,n);let s=[],o={},a=t+1;for(;a<n;)for(;a<n;){let T=function(q){let O=new u("atom",":"),H={},j=[];for(let E=0;E<q.length;E++){if(q[E].type!=="group")continue;let N=q[E],v=K(N.args,O);if(v===-1||v===0)continue;if(j.push(E),N.args[v-1].eq(new u("symbol","delim")))if(N.args[v+1].type==="text"){if(H.delim=N.args[v+1].content,N.args.length!==3)throw new _("Invalid number of arguments for delim")}else if(N.args[v+1].eq(new u("atom","#"))){if(N.args.length!==4||!N.args[v+2].eq(new u("symbol","none")))throw new _("Invalid number of arguments for delim");H.delim=L}else throw new _("Not implemented for other types of delim");else throw new _("Not implemented for other named parameters")}for(let E=j.length-1;E>=0;E--)q.splice(j[E],1);return[q,H]};var i=T;let h=K(e,ct,a);h===-1&&(h=n);let g=this.parseCommaSeparatedArguments(e,a,h),b={};[g,b]=T(g),s.push(g),Object.assign(o,b),a=h+1}return[s,o,n+1]}parseCommaSeparatedArguments(e,t,n){let s=[],o=t;for(;o<n;){let a=new u("group","",[]);for(;o<n;){if(e[o].eq(pt)){o+=1;break}else if(e[o].eq(ht)){o+=1;continue}let[i,h]=this.parseNextExpr(e,o);o=h,a.args.push(i)}a.args.length===0?a=G:a.args.length===1&&(a=a.args[0]),s.push(a)}return s}};function _e(r){let e=new ae,t=nt(r);return e.parse(t)}var X=class{constructor(){this.buffer="";this.queue=[]}writeBuffer(e){let t=e.toString(),n=!1;e.type===4?n=!0:(n||=/[{\(\[\|]$/.test(this.buffer),n||=/\\\w+$/.test(this.buffer)&&t==="[",n||=/^[\.,;:!\?\(\)\]{}_^]$/.test(t),n||=["\\{","\\}"].includes(t),n||=t==="'",n||=this.buffer.endsWith("_")||this.buffer.endsWith("^"),n||=/\s$/.test(this.buffer),n||=/^\s/.test(t),n||=this.buffer==="",n||=/[\(\[{]\s*(-|\+)$/.test(this.buffer)||this.buffer==="-"||this.buffer==="+",n||=this.buffer.endsWith("&")&&t==="="),n||(this.buffer+=" "),this.buffer+=t}append(e){let t=new l("control","&"),n=new l("control","\\\\");if(e.type==="ordgroup"&&D(e.args,t)){let s=Q(e.args,n),o=[];for(let a of s){let i=Q(a,t);o.push(i.map(h=>new l("ordgroup","",h)))}e=new l("beginend","aligned",[],o)}this.queue=this.queue.concat(e.serialize())}flushQueue(){for(let e=0;e<this.queue.length;e++)this.writeBuffer(this.queue[e]);this.queue=[]}finalize(){return this.flushQueue(),this.buffer}};function ve(r,e){let t={nonStrict:!0,preferTypstIntrinsic:!0,preferShorthands:!0,keepSpaces:!1,fracToSlash:!0,inftyToOo:!1,customTexMacros:{}};if(e!==void 0)for(let a in t)e[a]!==void 0&&(t[a]=e[a]);let n=de(r,t.customTexMacros),s=w(n,t),o=new Y(t);return o.serialize(s),o.finalize()}function ke(r){let e=_e(r),t=f(e),n=new X;return n.append(t),n.finalize()}typeof window<"u"&&(window.tex2typst=ve,window.typst2tex=ke);})();
12
+ `)]],[String.raw`\\\s`,r=>[new p(6,"\\"),new p(4," ")]],[String.raw`\\\S`,r=>new p(6,"")],[String.raw`"([^"]|(\\"))*"`,r=>{let e=r.text().substring(1,r.text().length-1);return e.replaceAll('\\"','"'),new p(2,e)}],[rt,r=>{let e=r.text(),t=W.get(e);return new p(0,t)}],[String.raw`[0-9]+(\.[0-9]+)?`,r=>new p(1,r.text())],[String.raw`[+\-*/=\'<>!.,;?()\[\]|]`,r=>new p(1,r.text())],[String.raw`[a-zA-Z\.]+`,r=>new p(r.text().length===1?1:0,r.text())],[String.raw`.`,r=>new p(1,r.text())]]),st={start:nt};function ot(r){return new O(st).collect(r)}function F(r,e){T(r[e].isOneOf([R,Ee,Ne]));let t=1,n=e+1;for(;t>0;){if(n>=r.length)throw new Error("Unmatched brackets");r[n].isOneOf([R,Ee,Ne])?t+=1:r[n].isOneOf([ut,pt,ct])&&(t-=1),n+=1}return n-1}function at(r,e){let t=new l("atom","("),n=new l("atom",")");T(r[e].eq(t));let s=1,o=e+1;for(;s>0;){if(o>=r.length)throw new Error("Unmatched brackets");r[o].eq(t)?s+=1:r[o].eq(n)&&(s-=1),o+=1}return o-1}function ye(r){let e=[];for(let t=0;t<r;t++)e.push(new l("atom","'"));return e}var V=new l("atom","/");function it(r,e){let t=e;for(;t<r.length&&r[t].type==="whitespace";)t++;return t===r.length?G:r[t]}function lt(r){let e=!1,t=[];for(let n=0;n<r.length;n++){let s=r[n];s.type==="whitespace"&&(e||it(r,n+1).eq(V))||(s.eq(V)?e=!0:e=!1,t.push(s))}return t}function ae(r,e=!1){r=lt(r);let t=new l("atom","("),n=new l("atom",")"),s=[],o=[],a=0;for(;a<r.length;){let i=r[a];if(i.eq(n))throw new _("Unexpected ')'");if(i.eq(V))s.push(i),a++;else{let h;if(i.eq(t)){let g=at(r,a);h=ae(r.slice(a+1,g),!0),a=g+1}else h=i,a++;if(s.length>0&&s[s.length-1].eq(V)){let g=h;if(o.length===0)throw new _("Unexpected '/' operator, no numerator before it");let d=o.pop();g.type==="group"&&g.content==="parenthesis"&&(g.content=""),d.type==="group"&&d.content==="parenthesis"&&(d.content=""),o.push(new l("fraction","",[d,g])),s.pop()}else o.push(h)}}return e?new l("group","parenthesis",o):o.length===0?G:o.length===1?o[0]:new l("group","",o)}var _=class extends Error{constructor(e){super(e),this.name="TypstParserError"}},xe=new p(6,"_"),qe=new p(6,"^"),R=new p(1,"("),ut=new p(1,")"),Ee=new p(1,"["),pt=new p(1,"]"),Ne=new p(1,"{"),ct=new p(1,"}"),_e=new p(1,","),ht=new p(1,";"),gt=new p(4," "),ie=class{constructor(e=!0,t=!0){this.space_sensitive=e,this.newline_sensitive=t}parse(e){let[t,n]=this.parseGroup(e,0,e.length);return t}parseGroup(e,t,n,s=!1){let o=[],a=t;for(;a<n;){let[h,g]=this.parseNextExpr(e,a);a=g,!(h.type==="whitespace"&&(!this.space_sensitive&&h.content.replace(/ /g,"").length===0||!this.newline_sensitive&&h.content===`
13
+ `))&&o.push(h)}let i;return s?i=ae(o,!0):o.length===0?i=G:o.length===1?i=o[0]:i=ae(o),[i,n+1]}parseNextExpr(e,t){let[n,s]=this.parseNextExprWithoutSupSub(e,t),o=null,a=null,i=Te(e,s);if(i>0&&(n=new l("group","",[n].concat(ye(i))),s+=i),s<e.length&&e[s].eq(xe)?([o,s]=this.parseSupOrSub(e,s+1),s<e.length&&e[s].eq(qe)&&([a,s]=this.parseSupOrSub(e,s+1))):s<e.length&&e[s].eq(qe)&&([a,s]=this.parseSupOrSub(e,s+1),s<e.length&&e[s].eq(xe)&&([o,s]=this.parseSupOrSub(e,s+1))),o!==null||a!==null){let h={base:n};return o&&(h.sub=o),a&&(h.sup=a),[new l("supsub","",[],h),s]}else return[n,s]}parseSupOrSub(e,t){let n,s;if(e[t].eq(R)){let a=F(e,t);[n,s]=this.parseGroup(e,t+1,a)}else[n,s]=this.parseNextExprWithoutSupSub(e,t);let o=Te(e,s);return o>0&&(n=new l("group","",[n].concat(ye(o))),s+=o),[n,s]}parseNextExprWithoutSupSub(e,t){let n=e[t],s=n.toNode();if(n.eq(R)){let o=F(e,t);return this.parseGroup(e,t+1,o,!0)}if(n.type===1&&!ue(n.value[0]))return[s,t+1];if([1,0].includes(n.type)&&t+1<e.length&&e[t+1].eq(R)){if(n.value==="mat"){let[h,g,d]=this.parseGroupsOfArguments(e,t+1),m=new l("matrix","",[],h);return m.setOptions(g),[m,d]}if(n.value==="cases"){let[h,g,d]=this.parseGroupsOfArguments(e,t+1,_e),m=new l("cases","",[],h);return m.setOptions(g),[m,d]}let[o,a]=this.parseArguments(e,t+1),i=new l("funcCall",n.value);return i.args=o,[i,a]}return[s,t+1]}parseArguments(e,t){let n=F(e,t);return[this.parseCommaSeparatedArguments(e,t+1,n),n+1]}parseGroupsOfArguments(e,t,n=ht){let s=F(e,t);e=e.slice(0,s);let o=[],a={},i=t+1;for(;i<s;)for(;i<s;){let v=function(q){let Me=new l("atom",":"),H={},j=[];for(let E=0;E<q.length;E++){if(q[E].type!=="group")continue;let N=q[E],k=K(N.args,Me);if(k===-1||k===0)continue;if(j.push(E),N.args[k-1].eq(new l("symbol","delim")))if(N.args[k+1].type==="text"){if(H.delim=N.args[k+1].content,N.args.length!==3)throw new _("Invalid number of arguments for delim")}else if(N.args[k+1].eq(new l("atom","#"))){if(N.args.length!==4||!N.args[k+2].eq(new l("symbol","none")))throw new _("Invalid number of arguments for delim");H.delim=C}else throw new _("Not implemented for other types of delim");else throw new _("Not implemented for other named parameters")}for(let E=j.length-1;E>=0;E--)q.splice(j[E],1);return[q,H]};var h=v;let g=K(e,n,i);g===-1&&(g=s);let d=this.parseCommaSeparatedArguments(e,i,g),m={};[d,m]=v(d),o.push(d),Object.assign(a,m),i=g+1}return[o,a,s+1]}parseCommaSeparatedArguments(e,t,n){let s=[],o=t;for(;o<n;){let a=new l("group","",[]);for(;o<n;){if(e[o].eq(_e)){o+=1;break}else if(e[o].eq(gt)){o+=1;continue}let[i,h]=this.parseNextExpr(e,o);o=h,a.args.push(i)}a.args.length===0?a=G:a.args.length===1&&(a=a.args[0]),s.push(a)}return s}};function ve(r){let e=new ie,t=ot(r);return e.parse(t)}var X=class{constructor(){this.buffer="";this.queue=[]}writeBuffer(e){let t=e.toString(),n=!1;e.type===4?n=!0:(n||=/[{\(\[\|]$/.test(this.buffer),n||=/\\\w+$/.test(this.buffer)&&t==="[",n||=/^[\.,;:!\?\(\)\]{}_^]$/.test(t),n||=["\\{","\\}"].includes(t),n||=t==="'",n||=this.buffer.endsWith("_")||this.buffer.endsWith("^"),n||=/\s$/.test(this.buffer),n||=/^\s/.test(t),n||=this.buffer==="",n||=/[\(\[{]\s*(-|\+)$/.test(this.buffer)||this.buffer==="-"||this.buffer==="+",n||=this.buffer.endsWith("&")&&t==="="),n||(this.buffer+=" "),this.buffer+=t}append(e){let t=new u("control","&"),n=new u("control","\\\\");if(e.type==="ordgroup"&&D(e.args,t)){let s=Q(e.args,n),o=[];for(let a of s){let i=Q(a,t);o.push(i.map(h=>new u("ordgroup","",h)))}e=new u("beginend","aligned",[],o)}this.queue=this.queue.concat(e.serialize())}flushQueue(){for(let e=0;e<this.queue.length;e++)this.writeBuffer(this.queue[e]);this.queue=[]}finalize(){return this.flushQueue(),this.buffer}};function ke(r,e){let t={nonStrict:!0,preferTypstIntrinsic:!0,preferShorthands:!0,keepSpaces:!1,fracToSlash:!0,inftyToOo:!1,customTexMacros:{}};if(e!==void 0)for(let a in t)e[a]!==void 0&&(t[a]=e[a]);let n=be(r,t.customTexMacros),s=w(n,t),o=new Y(t);return o.serialize(s),o.finalize()}function Se(r){let e=ve(r),t=f(e),n=new X;return n.append(t),n.finalize()}typeof window<"u"&&(window.tex2typst=ke,window.typst2tex=Se);})();
package/dist/types.d.ts CHANGED
@@ -68,7 +68,7 @@ export interface TypstSupsubData {
68
68
  sub?: TypstNode;
69
69
  }
70
70
  export type TypstArrayData = TypstNode[][];
71
- type TypstNodeType = 'atom' | 'symbol' | 'text' | 'control' | 'comment' | 'whitespace' | 'empty' | 'group' | 'supsub' | 'funcCall' | 'fraction' | 'align' | 'matrix' | 'unknown';
71
+ type TypstNodeType = 'atom' | 'symbol' | 'text' | 'control' | 'comment' | 'whitespace' | 'empty' | 'group' | 'supsub' | 'funcCall' | 'fraction' | 'align' | 'matrix' | 'cases' | 'unknown';
72
72
  export type TypstPrimitiveValue = string | boolean | null | TypstToken;
73
73
  export type TypstNamedParams = {
74
74
  [key: string]: TypstPrimitiveValue;
@@ -14,7 +14,7 @@ export declare class TypstParser {
14
14
  parseSupOrSub(tokens: TypstToken[], start: number): TypstParseResult;
15
15
  parseNextExprWithoutSupSub(tokens: TypstToken[], start: number): TypstParseResult;
16
16
  parseArguments(tokens: TypstToken[], start: number): [TypstNode[], number];
17
- parseGroupsOfArguments(tokens: TypstToken[], start: number): [TypstNode[][], TypstNamedParams, number];
17
+ parseGroupsOfArguments(tokens: TypstToken[], start: number, newline_token?: TypstToken): [TypstNode[][], TypstNamedParams, number];
18
18
  parseCommaSeparatedArguments(tokens: TypstToken[], start: number, end: number): TypstNode[];
19
19
  }
20
20
  export declare function parseTypst(typst: string): TypstNode;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tex2typst",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "JavaScript library for converting TeX code to Typst",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/convert.ts CHANGED
@@ -274,6 +274,9 @@ export function convert_tex_node_to_typst(node: TexNode, options: Tex2TypstOptio
274
274
  // align, align*, alignat, alignat*, aligned, etc.
275
275
  return new TypstNode('align', '', [], data);
276
276
  }
277
+ if (node.content! === 'cases') {
278
+ return new TypstNode('cases', '', [], data);
279
+ }
277
280
  if (node.content!.endsWith('matrix')) {
278
281
  let delim: TypstPrimitiveValue = null;
279
282
  switch (node.content) {
@@ -516,6 +519,11 @@ export function convert_typst_node_to_tex(node: TypstNode): TexNode {
516
519
  new TexNode('element', right_delim)
517
520
  ]);
518
521
  }
522
+ case 'cases': {
523
+ const typst_data = node.data as TypstNode[][];
524
+ const tex_data = typst_data.map(row => row.map(convert_typst_node_to_tex));
525
+ return new TexNode('beginend', 'cases', [], tex_data);
526
+ }
519
527
  case 'control': {
520
528
  switch (node.content) {
521
529
  case '\\':
package/src/types.ts CHANGED
@@ -350,7 +350,7 @@ export interface TypstSupsubData {
350
350
  export type TypstArrayData = TypstNode[][];
351
351
 
352
352
  type TypstNodeType = 'atom' | 'symbol' | 'text' | 'control' | 'comment' | 'whitespace'
353
- | 'empty' | 'group' | 'supsub' | 'funcCall' | 'fraction' | 'align' | 'matrix' | 'unknown';
353
+ | 'empty' | 'group' | 'supsub' | 'funcCall' | 'fraction' | 'align' | 'matrix' | 'cases' | 'unknown';
354
354
 
355
355
  export type TypstPrimitiveValue = string | boolean | null | TypstToken;
356
356
  export type TypstNamedParams = { [key: string]: TypstPrimitiveValue };
@@ -383,6 +383,12 @@ export class TypstParser {
383
383
  mat.setOptions(named_params);
384
384
  return [mat, newPos];
385
385
  }
386
+ if(firstToken.value === 'cases') {
387
+ const [cases, named_params, newPos] = this.parseGroupsOfArguments(tokens, start + 1, COMMA);
388
+ const casesNode = new TypstNode('cases', '', [], cases);
389
+ casesNode.setOptions(named_params);
390
+ return [casesNode, newPos];
391
+ }
386
392
  const [args, newPos] = this.parseArguments(tokens, start + 1);
387
393
  const func_call = new TypstNode('funcCall', firstToken.value);
388
394
  func_call.args = args;
@@ -400,7 +406,7 @@ export class TypstParser {
400
406
  }
401
407
 
402
408
  // start: the position of the left parentheses
403
- parseGroupsOfArguments(tokens: TypstToken[], start: number): [TypstNode[][], TypstNamedParams, number] {
409
+ parseGroupsOfArguments(tokens: TypstToken[], start: number, newline_token = SEMICOLON): [TypstNode[][], TypstNamedParams, number] {
404
410
  const end = find_closing_match(tokens, start);
405
411
  tokens = tokens.slice(0, end);
406
412
 
@@ -410,7 +416,7 @@ export class TypstParser {
410
416
  let pos = start + 1;
411
417
  while (pos < end) {
412
418
  while(pos < end) {
413
- let next_stop = array_find(tokens, SEMICOLON, pos);
419
+ let next_stop = array_find(tokens, newline_token, pos);
414
420
  if (next_stop === -1) {
415
421
  next_stop = end;
416
422
  }
@@ -275,6 +275,33 @@ export class TypstWriter {
275
275
  this.insideFunctionDepth--;
276
276
  break;
277
277
  }
278
+ case 'cases': {
279
+ const cases = node.data as TypstNode[][];
280
+ this.queue.push(new TypstToken(TypstTokenType.SYMBOL, 'cases'));
281
+ this.insideFunctionDepth++;
282
+ this.queue.push(TYPST_LEFT_PARENTHESIS);
283
+ if (node.options) {
284
+ for (const [key, value] of Object.entries(node.options)) {
285
+ const value_str = typst_primitive_to_string(value);
286
+ this.queue.push(new TypstToken(TypstTokenType.SYMBOL, `${key}: ${value_str}, `));
287
+ }
288
+ }
289
+ cases.forEach((row, i) => {
290
+ row.forEach((cell, j) => {
291
+ this.serialize(cell);
292
+ if (j < row.length - 1) {
293
+ this.queue.push(new TypstToken(TypstTokenType.ELEMENT, '&'));
294
+ } else {
295
+ if (i < cases.length - 1) {
296
+ this.queue.push(new TypstToken(TypstTokenType.ELEMENT, ','));
297
+ }
298
+ }
299
+ });
300
+ });
301
+ this.queue.push(TYPST_RIGHT_PARENTHESIS);
302
+ this.insideFunctionDepth--;
303
+ break;
304
+ }
278
305
  case 'unknown': {
279
306
  if (this.nonStrict) {
280
307
  this.queue.push(new TypstToken(TypstTokenType.SYMBOL, node.content));