@@ -172,7 +172,7 @@ const operators = {
172
172
173
173
// allowed multicharacter latex symbols
174
174
// in addition to the below applied function symbols
175
- const allowedLatexSymbolsDefault = [ 'alpha' , 'beta' , 'gamma' , 'Gamma' , 'delta' , 'Delta' , 'epsilon' , 'zeta' , 'eta' , 'theta' , 'Theta' , 'iota' , 'kappa' , 'lambda' , 'Lambda' , 'mu' , 'nu' , 'xi' , 'Xi' , 'pi' , 'Pi' , 'rho' , 'sigma' , 'Sigma' , 'tau' , 'Tau' , 'upsilon' , 'Upsilon' , 'phi' , 'Phi' , 'chi' , 'psi' , 'Psi' , 'omega' , 'Omega' , 'partial' , "abs" , "exp" , "log" , "ln" , "log10" , "sign" , "sqrt" , "erf" , "cos" , "cosh" , "cot" , "coth" , "csc" , "csch" , "sec" , "sech" , "sin" , "sinh" , "tan" , "tanh" , 'arcsin' , 'arccos' , 'arctan' , 'arccsc' , 'arcsec' , 'arccot' , 'arg' , 'Re' , 'Im' , 'det' , 'angle' , 'perp' , 'circ' ] ;
175
+ const allowedLatexSymbolsDefault = [ 'alpha' , 'beta' , 'gamma' , 'Gamma' , 'delta' , 'Delta' , 'epsilon' , 'zeta' , 'eta' , 'theta' , 'Theta' , 'iota' , 'kappa' , 'lambda' , 'Lambda' , 'mu' , 'nu' , 'xi' , 'Xi' , 'pi' , 'Pi' , 'rho' , 'sigma' , 'Sigma' , 'tau' , 'Tau' , 'upsilon' , 'Upsilon' , 'phi' , 'Phi' , 'chi' , 'psi' , 'Psi' , 'omega' , 'Omega' , 'partial' , "abs" , "exp" , "log" , "ln" , "log10" , "sign" , "sqrt" , "erf" , "cos" , "cosh" , "cot" , "coth" , "csc" , "csch" , "sec" , "sech" , "sin" , "sinh" , "tan" , "tanh" , 'arcsin' , 'arccos' , 'arctan' , 'arccsc' , 'arcsec' , 'arccot' , 'arg' , 'Re' , 'Im' , 'det' , 'angle' , 'perp' , 'circ' , 'int' ] ;
176
176
177
177
178
178
const convertLatexSymbolsDefault = {
@@ -656,20 +656,59 @@ class astToLatex {
656
656
return '\\left\\lfloor ' + this . statement ( operands [ 1 ] ) + ' \\right\\rfloor' ;
657
657
} else if ( operands [ 0 ] === 'ceil' ) {
658
658
return '\\left\\lceil ' + this . statement ( operands [ 1 ] ) + ' \\right\\rceil' ;
659
- }
660
-
661
- if ( operands [ 0 ] === "factorial" ) {
659
+ } else if ( operands [ 0 ] === "factorial" ) {
662
660
let result = this . factor ( operands [ 1 ] ) ;
663
661
if ( this . simple_factor_or_function_or_parens ( operands [ 1 ] ) ||
664
662
( operands [ 1 ] [ 0 ] === '_' && ( typeof operands [ 1 ] [ 1 ] === 'string' ) )
665
663
)
666
664
return result + "!" ;
667
665
else
668
666
return '\\left(' + result + '\\right)!' ;
667
+ } else if ( operands [ 0 ] === 'sqrt' ) {
668
+ return '\\sqrt{' + this . statement ( operands [ 1 ] ) + '}' ;
669
669
}
670
670
671
- if ( operands [ 0 ] === 'sqrt' ) {
672
- return '\\sqrt{' + this . statement ( operands [ 1 ] ) + '}' ;
671
+
672
+ // check if have integral
673
+ let fun = operands [ 0 ] ;
674
+ if ( fun [ 0 ] === "^" ) {
675
+ fun = fun [ 1 ] ;
676
+ }
677
+ if ( fun [ 0 ] === "_" ) {
678
+ fun = fun [ 1 ]
679
+ }
680
+ if ( fun === "int" ) {
681
+ let integral = this . factor ( operands [ 0 ] ) ;
682
+ let integrand_ast = operands [ 1 ] ;
683
+ let integrand ;
684
+ if ( Array . isArray ( integrand_ast ) && integrand_ast [ 0 ] === "*" ) {
685
+ let ds = [ ] ;
686
+ let integrand_ast2 = [ "*" ] ;
687
+ for ( let i = 1 ; i < integrand_ast . length ; i ++ ) {
688
+ let factor = integrand_ast [ i ] ;
689
+ if ( Array . isArray ( factor ) && factor [ 0 ] === "d" ) {
690
+ ds . push ( factor ) ;
691
+ } else {
692
+ integrand_ast2 . push ( factor ) ;
693
+ }
694
+ }
695
+
696
+ integrand = this . term ( integrand_ast2 ) ;
697
+
698
+ if ( ds . length > 0 ) {
699
+
700
+ if ( integrand [ integrand . length - 1 ] . match ( / [ a - z A - Z ] / ) ) {
701
+ integrand += "\\,"
702
+ }
703
+ integrand += ds . map ( x => "d" + this . factor ( x [ 1 ] ) ) . join ( "\\," )
704
+ }
705
+ }
706
+
707
+ if ( ! integrand ) {
708
+ integrand = this . term ( operands [ 1 ] ) ;
709
+ }
710
+
711
+ return integral + ' ' + integrand ;
673
712
}
674
713
675
714
let f ;
0 commit comments