123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import {reactive, watch} from 'vue'
- import {createGlobalState} from "@vueuse/core";
- import config from "@/config";
- export const useMathJaxService = createGlobalState(() => {
- const MathJax = {
- tex: {
- inlineMath: [["$", "$"], ["\\(", "\\)"]], //行内公式选择符
- displayMath: [["$$", "$$"], ["\\[", "\\]"]], //段内公式选择符
- // autoload: {color: [], colorv2: ['color']}, // 3.0开始已经不支持此选项了
- packages: {'[+]': ['noerrors', 'mathtools', 'ams']}
- },
- options: {
- skipHtmlTags: ["script", "noscript", "style", "textarea", "pre", "code", "a"], //避开某些标签
- ignoreHtmlClass: 'tex2jax_ignore',
- processHtmlClass: 'tex2jax_process'
- },
- loader: {
- load: ['input/asciimath', '[tex]/noerrors', '[tex]/mathtools', '[tex]/ams']
- }
- }
- // NOTE:mathjax库在加载完毕后会用新对象直接覆盖window.MathJax, 所以后续都需要使用window.MathJax
- window.MathJax = MathJax
- const updateMathJax = function (el) {
- // 指定了HTML元素即更新指定元素,否则全部更新
- const elements = []
- if (el instanceof HTMLElement) elements.push(el)
- const mathjax = window.MathJax
- if (!mathjax.version) return
- mathjax.startup.promise.then(_ => mathjax.typesetPromise(elements))
- }
- const script = document.createElement('script')
- script.src = config.mathJaxCDN
- script.onload = () => updateMathJax()
- document.head.appendChild(script)
- return {
- MathJax,
- updateMathJax
- }
- })
|