MathJax官網
文檔: https://docs.mathjax.org/en/latest/index.html
官網例子(稍加修改):

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>MathJax v3 with interactive TeX input and HTML output</title> <script> MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] }, svg: { fontCache: 'global' }, startup: { ready: () => { MathJax.startup.defaultReady(); MathJax.startup.promise.then(() => { console.log('MathJax 在頁面中的轉換已經完成,可以進行后序的頁面指令解析了'); }); } } }; </script> <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script> <script> function convert() { // // Get the TeX input // var input = document.getElementById("input").value.trim(); // // Disable the display and render buttons until MathJax is done // var display = document.getElementById("display"); var button = document.getElementById("render"); button.disabled = display.disabled = true; // // Clear the old output // output = document.getElementById('output'); output.innerHTML = ''; // // Reset the tex labels (and automatic equation numbers, though there aren't any here). // Get the conversion options (metrics and display settings) // Convert the input to CommonHTML output and use a promise to wait for it to be ready // (in case an extension needs to be loaded dynamically). // MathJax.texReset(); var options = MathJax.getMetricsFor(output); options.display = display.checked; //用於是否是居中(block)顯示,非居中的時候是inline MathJax.tex2chtmlPromise(input, options).then(function (node) { // // The promise returns the typeset node, which we add to the output // Then update the document to include the adjusted CSS for the // content of the new equation. // output.appendChild(node); MathJax.startup.document.clear(); MathJax.startup.document.updateDocument(); }).catch(function (err) { // // If there was an error, put the message into the output instead // output.appendChild(document.createElement('pre')).appendChild(document.createTextNode(err.message)); }).then(function () { // // Error or not, re-enable the display and render buttons // button.disabled = display.disabled = false; }); } </script> <style> #frame { max-width: 40em; margin: auto; } #input { border: 1px solid grey; margin: 0 0 .25em; width: 100%; font-size: 120%; box-sizing: border-box; } #output { font-size: 120%; margin-top: .75em; border: 1px solid grey; padding: .25em; min-height: 2em; } #output>pre { margin-left: 5px; } .left { float: left; } .right { float: right; } </style> </head> <body> $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$ \p\s\sqrt\$ <div id="frame"> <h1>MathJax v3: TeX to HTML</h1> <textarea id="input" rows="15" cols="10"> % % Enter TeX commands below % x = {-b \pm \sqrt{b^2-4ac} \over 2a}. </textarea> <br /> <div class="left"> <input type="checkbox" id="display" checked onchange="convert()"> <label for="display">Display style</label> </div> <div class="right"> <input type="button" value="Render TeX" id="render" onclick="convert()" /> </div> <br clear="all" /> <div id="output"></div> </div> </body> </html>
注意:
- 頁面中的tex公式一定會被自動轉換。只要你寫成\$...\$形式的,都會被識別成公式。如果想不使用mathjax轉化的,要把公式前后的\$去掉。
- mathjax渲染與window.onready的執行的順序無法確定。一般我們可以在mathjax渲染完成再做的一些事情,可以在寫成例子中的樣子:在MathJax中添加startup.
startup: { ready: () => { MathJax.startup.defaultReady(); MathJax.startup.promise.then(() => { console.log('MathJax 在頁面中的轉換已經完成,可以進行后續的頁面指令解析了'); }); } }
- 一旦你引入了tex-chtml.js文件,同一個p標簽內使用了tex公式和與公式無關的\$(請對在此符號前加一個轉義符號\)符號的話,請對在此符號前加一個轉義符號,否則,也會被認為是Tex語法,可能顯示就會出錯。