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>
|