pretty_printing_with_mathjax.html (3084B)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="utf-8"> 5 <title>math.js | pretty printing with MathJax</title> 6 7 <script src="../../lib/browser/math.js"></script> 8 <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> 9 <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script> 10 11 <style> 12 body, 13 html, 14 table td, 15 table th, 16 input[type=text] { 17 font-size: 11pt; 18 font-family: verdana, arial, sans-serif; 19 } 20 21 h1 { 22 font-size: 11pt; 23 } 24 25 input[type=text] { 26 padding: 5px; 27 width: 400px; 28 } 29 30 table { 31 border-collapse: collapse; 32 } 33 34 table td, 35 table th { 36 padding: 5px; 37 border: 1px solid lightgray; 38 } 39 40 table th { 41 background-color: lightgray; 42 } 43 44 </style> 45 </head> 46 <body> 47 48 <h1> 49 Expression evaluation with math.js, pretty printing with MathJax 50 </h1> 51 52 <table> 53 <tr> 54 <th>Expression</th> 55 <td><input type="text" id="expr"/></td> 56 </tr> 57 <tr> 58 <th>Pretty print</th> 59 <td><div id="pretty"></div></td> 60 </tr> 61 <tr> 62 <th>Result</th> 63 <td><div id="result"></div></td> 64 </tr> 65 </table> 66 <b>Parenthesis option:</b> 67 <input type="radio" name="parenthesis" value="keep" onclick="parenthesis = 'keep'; expr.oninput();" checked>keep 68 <input type="radio" name="parenthesis" value="auto" onclick="parenthesis = 'auto'; expr.oninput();">auto 69 <input type="radio" name="parenthesis" value="all" onclick="parenthesis = 'all'; expr.oninput();">all 70 <br/> 71 <b>Implicit multiplication:</b> 72 <input type="radio" name="implicit" value="hide" onclick="implicit = 'hide'; expr.oninput();" checked>hide 73 <input type="radio" name="implicit" value="show" onclick="implicit = 'show'; expr.oninput();">show 74 75 76 <script> 77 const expr = document.getElementById('expr') 78 const pretty = document.getElementById('pretty') 79 const result = document.getElementById('result') 80 let parenthesis = 'keep' 81 let implicit = 'hide' 82 83 const mj = function (tex) { 84 return MathJax.tex2svg(tex, {em: 16, ex: 6, display: false}); 85 } 86 87 // initialize with an example expression 88 expr.value = 'sqrt(75 / 3) + det([[-1, 2], [3, 1]]) - sin(pi / 4)^2' 89 pretty.innerHTML = ''; 90 pretty.appendChild(mj(math.parse(expr.value).toTex({parenthesis: parenthesis}))); 91 result.innerHTML = math.format(math.evaluate(expr.value)) 92 93 expr.oninput = function () { 94 let node = null 95 96 try { 97 // parse the expression 98 node = math.parse(expr.value) 99 100 // evaluate the result of the expression 101 result.innerHTML = math.format(node.compile().evaluate()) 102 } 103 catch (err) { 104 result.innerHTML = '<span style="color: red;">' + err.toString() + '</span>' 105 } 106 107 try { 108 // export the expression to LaTeX 109 const latex = node ? node.toTex({parenthesis: parenthesis, implicit: implicit}) : '' 110 console.log('LaTeX expression:', latex) 111 112 // display and re-render the expression 113 MathJax.typesetClear(); 114 pretty.innerHTML = ''; 115 pretty.appendChild(mj(latex)); 116 } 117 catch (err) {} 118 } 119 </script> 120 121 </body> 122 </html>