<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>数学公式</title> <link rel="stylesheet" href="./mathquill/mathquill.css"/> <link rel="stylesheet" href="./formula.css"/> <style> html, body, .main { margin: 0; padding: 0; /*font-size: 12px;*/ } .container { width: 100%; margin: 0 auto; font-size: 13px; } ul.tabs { margin: 0px 0 5px 0; padding: 0px; list-style: none; } ul.tabs li { background: none; color: #222; display: inline-block; padding: 5px 10px; cursor: pointer; font-weight: 600; } ul.tabs li.current { color: #222; border: 1px solid #ccc; border-radius: 2px; } .tab-content { display: none; padding: 0px; } .tab-content.current { display: inherit; } .mathquill-rendered-math { border: 1px solid #ccc; padding: 3px; width: 215px; font-size: 16px; } h3 { font-size: 14px; margin: 10px 0; } </style> </head> <body> <div class="main"> <div class="container"> <div> <ul class="tabs"> <li class="tab-link current" data-tab="common">常用公式</li> <li class="tab-link" data-tab="symbol">符号</li> <li class="tab-link" data-tab="letter">字母</li> </ul> <div id="common" class="tab-content current"> </div> <div id="symbol" class="tab-content"> </div> <div id="letter" class="tab-content"> </div> </div> <div style="width:100%;display:block;clear:both;"> <div id="editor" style="width:50%;display:inline-block;float:left;"> <h3>编辑</h3> <div> <span id="editable-math" class="mathquill-editable"></span> </div> </div> <div id="preview" style="width:50%;display:inline-block;float:right;"> <h3>预览</h3> <div id="preview-body"> <a id="codecogslink" target="_blank"><img id="codecogsimg"></a> </div> </div> <div style="clear:both;width:100%;display:block;content:' '"></div> </div> <div id="text"> <h3>公式</h3> <div> <textarea id="latex-source" style="width:98%;vertical-align:top;border:1px solid #ccc;padding:3px;"></textarea> </div> </div> </div><!-- container --> </div> <script> MathJax = { options: { enableMenu: false, // 禁用右键菜单 menuOptions: { settings: { zoom: 'None', // 禁用缩放 contextMenu: false // 禁用上下文菜单 } } } }; </script> <script src="./jquery.min.js"></script> <script src="./mathquill/mathquill.js"></script> <script src="./mathjax/mathjax.js"></script> <script> $(function () { let currentSVG = null; function updatePreview(input) { const preview = document.getElementById('preview-body'); // 添加LaTeX公式 preview.innerHTML = '\\[' + input + '\\]'; // 渲染公式 MathJax.typesetPromise().then(() => { // 获取生成的SVG const svg = preview.querySelector('svg'); if (svg) { currentSVG = svg.outerHTML; } }).catch((err) => { console.error('渲染错误:', err); preview.innerHTML = '<span style="color: red;">渲染错误</span>'; }); } var getQueryParam = function (name, url) { if (!url) { url = window.location.href; } name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&/]" + name + "([=/]([^&#/?]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, " ")); }; var formula = { 'common': [ "{/}frac{ }{ }", "^{ }/_{ }", "x^{ }", "x_{ }", "x^{ }_{ }", "{/}bar{ }", "{/}sqrt{ }", "{/}nthroot{ }{ }", "{/}sum^{ }_{n=}", "{/}sum", "{/}log_{ }", "{/}ln", "{/}int_{ }^{ }", "{/}oint_{ }^{ }" ], 'symbol': [ "+", "-", "{/}pm", "{/}times", "{/}ast", "{/}div", "/", "{/}bigtriangleup", "=", "{/}ne", "{/}approx", ">", "<", "{/}ge", "{/}le", "{/}infty", "{/}cap", "{/}cup", "{/}because", "{/}therefore", "{/}subset", "{/}supset", "{/}subseteq", "{/}supseteq", "{/}nsubseteq", "{/}nsupseteq", "{/}in", "{/}ni", "{/}notin", "{/}mapsto", "{/}leftarrow", "{/}rightarrow", "{/}Leftarrow", "{/}Rightarrow", "{/}leftrightarrow", "{/}Leftrightarrow" ], 'letter': [ "{/}alpha", "{/}beta", "{/}gamma", "{/}delta", "{/}varepsilon", "{/}varphi", "{/}lambda", "{/}mu", "{/}rho", "{/}sigma", "{/}omega", "{/}Gamma", "{/}Delta", "{/}Theta", "{/}Lambda", "{/}Xi", "{/}Pi", "{/}Sigma", "{/}Upsilon", "{/}Phi", "{/}Psi", "{/}Omega" ] }; var xMax = 0, yMax = 0; $.each(formula, function (k, v) { var contentHtml = []; $.each(v, function (i, f) { contentHtml.push('<li class="formula-latex-item" data-latex="' + f + '" style="background-position:-' + (xMax * 30) + 'px -' + (yMax * 30) + 'px"></li>'); if (++xMax >= 8) { ++yMax; xMax = 0; } }); yMax++; xMax = 0; $("#" + k).append('<div class="tab-pane"><ul>' + contentHtml.join('') + '</ul>'); }); $('ul.tabs li').click(function () { var tab_id = $(this).attr('data-tab'); $('ul.tabs li').removeClass('current'); $('.tab-content').removeClass('current'); $(this).addClass('current'); $("#" + tab_id).addClass('current'); }); var latexMath = $('#editable-math'), latexSource = $('#latex-source'), htmlSource = $('#html-source'), codecogsimg = $('#codecogsimg'), codecogslink = $('#codecogslink'); var buildImgLink = function () { var latex = latexSource.val(); updatePreview(latex); return; }; latexMath.on('keydown keypress', function () { setTimeout(function () { var latex = latexMath.mathquill('latex'); latexSource.val(latex); buildImgLink(); }); }); latexSource.on('keydown keypress', function () { var oldtext = latexSource.val(); setTimeout(function () { var newtext = latexSource.val(); if (newtext !== oldtext) { latexMath.mathquill('latex', newtext); buildImgLink(); } }); }); $(document).on("click", ".formula-latex-item", function () { var latex = $(this).data("latex"); latex = latex.replace("{/}", "\\"); latexMath.mathquill('write', latex); latex = latexMath.mathquill('latex'); latexSource.val(latex); buildImgLink(); }); var latex = getQueryParam("latex"); if (latex) { latexSource.val(latex); latexMath.mathquill('latex', latexSource.val()); buildImgLink(); } }); </script> </body> </html>