首页 > 其他分享 >vue3 在渲染md中的数学公式

vue3 在渲染md中的数学公式

时间:2025-01-03 16:44:37浏览次数:1  
标签:md markdown 数学公式 equation katex vue3 mathjax import

常规的md转数学公式插件无法解决此问题

问题: 在渲染过程中 \t 被转义 导致渲染出错

**方案为:将\t 转义为\t **

依赖的插件及版本

    "katex": "^0.16.15",
    "markdown-it": "^14.1.0",
    "markdown-it-katex": "^2.0.3",
    "markdown-it-latex": "^0.2.0",
    "markdown-it-mathjax": "^2.0.0",
    "markdown-it-multimd-table": "^4.2.3",
    "markdown-it-texmath": "^1.0.0",
    "mathjax": "^3.2.2",
    "vue-markdown": "^2.2.4",

utils 文件

mathjax.js

window.MathJax = {
    tex: {
        inlineMath: [
            ["$", "$"],
            ["\\(", "\\)"],
            ["\(", "\)"],
            ["\\[", "\\]"],
        ], // 行内公式选择符
        displayMath: [
            ["$$", "$$"],
            ["\\[", "\\]"],
            ['?', '?'],
        ], // 段内公式选择符
    },
    startup: {
        ready() {
            MathJax.startup.defaultReady();
        },
    },
};

引入代码

mian.ts中

import "/@/utils/mathjax";
import "mathjax/es5/tex-svg"; 

vue文件中

import MarkdownIt from 'markdown-it';
import markdownItMathjax from 'markdown-it-mathjax';
import mk from 'markdown-it-katex';
import mkl from 'markdown-it-latex';

import 'katex/dist/katex.min.css';
import 'github-markdown-css';

方法调用

const preprocessLaTeX = (content: string) => {
	if (typeof content !== 'string') return content;
	return content
		.replace(/\\\[(.*?)\\\]/gs, (_, equation) => `$$${equation}$$`)
		.replace(/\\\((.*?)\\\)/gs, (_, equation) => `$$${equation}$$`)
		.replace(/(^|[^\\])\$(.+?)\$/gs, (_, prefix, equation) => `${prefix}$${equation}$`)
		.replace(/\t/g, '\\t');
};

const md = new MarkdownIt({
	html: true,
	linkify: true,
	typographer: true,
});
md.use(markdownItMathjax);
md.use(mk, {
	throwOnError: false,
});
md.use(mkl);


const renderMd = (text: string) => {
	window.MathJax.startup.defaultReady();
	text = preprocessLaTeX(text);
	return md.render(text);
};

renderMd中传入的是需要 渲染到md中的文本

标签:md,markdown,数学公式,equation,katex,vue3,mathjax,import
From: https://www.cnblogs.com/wxyblog/p/18650433

相关文章

  • STM32CubeMX输出报错“but MDK-ARM V5.32project generation have a problem.”
    前言笔者在使用STM32CubeMX+git协同开发时,从仓库拉取的STM32CubeMX工程使用STM32CubeMX输出代码时报错butMDK-ARMV5.32projectgenerationhaveaproblem。但本地新建一个工程可正常输出。使用的软件版本为●java:23.0.1●STM32CubeMX:6.13.0参考网上其他人分享的方法,......
  • 前端学习openLayers配合vue3(加载线上数据源)
    现在我们学习一下加载网上的线上数据再加上点矢量图层,紧接着上一步关键代码layers:[//瓦片图层source第三方,或者自带的,地图的底层newTileLayer({//source:newOSM(),//内置的国外地址,需要代理source:newXYZ({url......
  • vue3随记
    vue3父组件传值子组件,Vue3父组件给子组件传值父组件先引入组件importMbglUserDetailfrom"@/views/mbgl/user/mbglUserDetail.vue";定义传值数据响应式letdataOne=ref()使用组件并传值<MbglUserDetail:parentOneData="dataOne"/>子组件获取采用ts语法糖......
  • vue3整理
    vue3随记,idea启动前端vue项目前期工作,vue全局变量,vue3全局变量,vue循环、vue遍历、vue3循环、vue3遍历 vue项目异常报错记录Error:Cannotfindmodule'@vue/cli-plugin-babel'......
  • 在Windows CMD中批量删除某个时间之前的文件
    在日常使用Windows系统时,可能会遇到需要清理过期文件的情况。比如,删除某个目录下所有修改时间早于特定日期的文件。对于那些不想使用第三方软件的用户,Windows自带的命令行工具就可以轻松完成这个任务。在这篇文章中,我们将介绍如何使用CMD(命令提示符)通过forfiles命令批量删除指......
  • ctf中有关md5值绕过与碰撞
    参考文献:漫画:什么是MD5算法?摘要哈希生成的正确姿势是什么样呢?PHP中MD5函数漏洞总结-知乎成理信安协会反序列化01-利用fastcoll实现md5碰撞-Riv3r1and-博客园PHPmd5相等绕过-Ainsliaea-博客园文章目录前言一、md5算法MD5算法底层原理二、md5值相等绕......
  • 前端学习openLayers配合vue3(偏移动画效果,限制范围)
    我们原来的偏移感觉比较生硬,我们来学习一下偏移的动画,先列一下这节的知识点限制经纬度范围和缩放范围(view层)view=newView({center:[114.305469,30.592876],zoom:10,projection:'EPSG:4326',extent:[113.999999,30.25,114.666667,30.833333],//限制地图......
  • 前端学习openLayers配合vue3(图层中心点的偏移)
    有了上一步的学习,我们知道了如何创建一个地图,现在我们来尝试更改一下图层的中心点关键代码letview=map.getView();//获取视图层letcenter=view.getCenter();//表示当前中心点的位置,调增经纬度就可以进行位置的便宜,下移,左移右移也同理console.log(center);//[......
  • 前端学习openLayers配合vue3(简单的创建一个地图)
    首先搭建一个vue工程化环境,首先我们先来创建一个地图吧首先我们需要下载npmiol其次我们需要在main.js里面引入相关的cssimport'ol/ol.css'到现在我们就可以开始敲击我们的代码了,直接复制就可以展示出一个简单的地图啦,相关备注已经在代码中标注,有什么不懂的可以留言哦......
  • vue3 tsx ref dom获取方式
    在Vue3中使用TypeScript和TSX(TypeScript的JSX语法)时,获取DOM元素的方式与普通的Vue组件略有不同。Vue提供了ref和reactive等响应式API来帮助我们处理组件的状态,而当我们需要直接访问DOM节点时,我们可以使用ref。下面是一个简单的例子,展示如何在Vue3+TSX......