255 lines
8.0 KiB
HTML
255 lines
8.0 KiB
HTML
<!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>
|