123 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						|
<html lang="en">
 | 
						|
<head>
 | 
						|
  <meta charset="utf-8">
 | 
						|
  <title>math.js | pretty printing with MathJax</title>
 | 
						|
 | 
						|
  <script src="../../lib/browser/math.js"></script>
 | 
						|
  <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
 | 
						|
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
 | 
						|
 | 
						|
  <style>
 | 
						|
    body,
 | 
						|
    html,
 | 
						|
    table td,
 | 
						|
    table th,
 | 
						|
    input[type=text] {
 | 
						|
      font-size: 11pt;
 | 
						|
      font-family: verdana, arial, sans-serif;
 | 
						|
    }
 | 
						|
 | 
						|
    h1 {
 | 
						|
      font-size: 11pt;
 | 
						|
    }
 | 
						|
 | 
						|
    input[type=text] {
 | 
						|
      padding: 5px;
 | 
						|
      width: 400px;
 | 
						|
    }
 | 
						|
 | 
						|
    table {
 | 
						|
      border-collapse: collapse;
 | 
						|
    }
 | 
						|
 | 
						|
    table td,
 | 
						|
    table th {
 | 
						|
      padding: 5px;
 | 
						|
      border: 1px solid lightgray;
 | 
						|
    }
 | 
						|
 | 
						|
    table th {
 | 
						|
      background-color: lightgray;
 | 
						|
    }
 | 
						|
 | 
						|
  </style>
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
 | 
						|
<h1>
 | 
						|
  Expression evaluation with math.js, pretty printing with MathJax
 | 
						|
</h1>
 | 
						|
 | 
						|
<table>
 | 
						|
  <tr>
 | 
						|
    <th>Expression</th>
 | 
						|
    <td><input type="text" id="expr"/></td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <th>Pretty print</th>
 | 
						|
    <td><div id="pretty"></div></td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <th>Result</th>
 | 
						|
    <td><div id="result"></div></td>
 | 
						|
  </tr>
 | 
						|
</table>
 | 
						|
<b>Parenthesis option:</b>
 | 
						|
<input type="radio" name="parenthesis" value="keep" onclick="parenthesis = 'keep'; expr.oninput();" checked>keep
 | 
						|
<input type="radio" name="parenthesis" value="auto" onclick="parenthesis = 'auto'; expr.oninput();">auto
 | 
						|
<input type="radio" name="parenthesis" value="all" onclick="parenthesis = 'all'; expr.oninput();">all
 | 
						|
<br/>
 | 
						|
<b>Implicit multiplication:</b>
 | 
						|
<input type="radio" name="implicit" value="hide" onclick="implicit = 'hide'; expr.oninput();" checked>hide
 | 
						|
<input type="radio" name="implicit" value="show" onclick="implicit = 'show'; expr.oninput();">show
 | 
						|
 | 
						|
 | 
						|
<script>
 | 
						|
  const expr = document.getElementById('expr')
 | 
						|
  const pretty = document.getElementById('pretty')
 | 
						|
  const result = document.getElementById('result')
 | 
						|
  let parenthesis = 'keep'
 | 
						|
  let implicit = 'hide'
 | 
						|
 | 
						|
  const mj = function (tex) {
 | 
						|
    return MathJax.tex2svg(tex, {em: 16, ex: 6, display: false});
 | 
						|
  }
 | 
						|
 | 
						|
  // initialize with an example expression
 | 
						|
  expr.value = 'sqrt(75 / 3) + det([[-1, 2], [3, 1]]) - sin(pi / 4)^2'
 | 
						|
  pretty.innerHTML = '';
 | 
						|
  pretty.appendChild(mj(math.parse(expr.value).toTex({parenthesis: parenthesis})));
 | 
						|
  result.innerHTML = math.format(math.evaluate(expr.value))
 | 
						|
 | 
						|
  expr.oninput = function () {
 | 
						|
    let node = null
 | 
						|
 | 
						|
    try {
 | 
						|
      // parse the expression
 | 
						|
      node = math.parse(expr.value)
 | 
						|
 | 
						|
      // evaluate the result of the expression
 | 
						|
      result.innerHTML = math.format(node.compile().evaluate())
 | 
						|
    }
 | 
						|
    catch (err) {
 | 
						|
      result.innerHTML = '<span style="color: red;">' + err.toString() + '</span>'
 | 
						|
    }
 | 
						|
 | 
						|
    try {
 | 
						|
      // export the expression to LaTeX
 | 
						|
      const latex = node ? node.toTex({parenthesis: parenthesis, implicit: implicit}) : ''
 | 
						|
      console.log('LaTeX expression:', latex)
 | 
						|
 | 
						|
      // display and re-render the expression
 | 
						|
      MathJax.typesetClear();
 | 
						|
      pretty.innerHTML = '';
 | 
						|
      pretty.appendChild(mj(latex));
 | 
						|
    }
 | 
						|
    catch (err) {}
 | 
						|
  }
 | 
						|
</script>
 | 
						|
 | 
						|
</body>
 | 
						|
</html>
 |