xunfeiAI/components/bing-math/bing-math.vue

122 lines
2.8 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="content">
<view v-html="mathlab" :mathlab="mathlab" :change:mathlab="math.receiveLab" class="latexId">
</view>
</view>
</template>
<script>
export default {
name: "bing-math",
props: {
latex: {
type: String,
default: ''
},
},
data() {
return {
mathlab: ''
}
},
watch: { // 监视latex的变化
latex: {
handler(newval, oldval) {
// console.log("--------- 监视latex的变化 ----------")
// console.log("oldval", oldval);
// console.log("newval", newval);
this.mathlab = newval;
this.$forceUpdate();
},
deep: true
}
},
mounted() {
this.mathlab = this.latex;
}
}
</script>
<script module="math" lang="renderjs">
export default {
methods: {
// 接收逻辑层发送的数据
receiveLab(newValue, oldValue, ownerVm, vm) {
// console.log("--------- 接收逻辑层发送的数据 ----------")
// console.log("newValue", newValue);
// console.log("oldValue", oldValue);
this.mathlab = newValue;
if (typeof window.MathJax != 'object') {
console.log("window.MathJax", window.MathJax);
this.initMathJax();
}
// 根据id渲染重新渲染
const el = document.getElementsByClassName('latexId');
this.renderByMathjax(el)
},
initMathJax() {
window.MathJax = {
tex: {
inlineMath: [
['$', '$'],
['\\(', '\\)']
], //行内公式选择符
displayMath: [
["$$", "$$"],
["\\[", "\\]"]
], //段内公式选择符
// 支持渲染某些公式
processEnvironments: true,
processRefs: true,
},
// 参考官方文档 https://www.osgeo.cn/mathjax/options/menu.html#menu-options
options: {
//关闭右击选择菜单
enableMenu: false,
// 跳过渲染的标签
skipHtmlTags: ['noscript', 'style', 'textarea', 'pre', 'code', 'a'],
// 跳过mathjax处理的元素的类名任何元素指定一个类 tex2jax_ignore 将被跳过多个累=类名'class1|class2'
ignoreHtmlClass: 'tex2jax_ignore',
},
svg: {
scale: 1.0
}
};
(function() {
var script = document.createElement('script')
script.id = 'MathJax-script'
// cdn引入比较慢
// script.src = 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js'
// script.src = 'static/tex-svg.js'; // 下载源码导入比较快svg比chtml视觉上比较好
script.src = 'static/tex-chtml.js';
document.head.appendChild(script)
})();
console.log("initMathJax() window.MathJax", window.MathJax);
},
renderByMathjax: function(el) {
// mathjax初始化后才会注入version
if (!window.MathJax.version) {
return
}
if (el && !Array.isArray(el)) {
el = [el]
}
return window.MathJax.typesetPromise(el)
}
}
}
</script>
<style>
</style>