首页 > 其他分享 >editormd解析公式遇到的问题

editormd解析公式遇到的问题

时间:2024-07-25 19:07:15浏览次数:5  
标签:公式 marked times editormd katex 解析 true

场景描述

我们公司有需要 将 md 渲染 呈现到网页上的需求,内部使用了 editor.md来完成该功能。
但在使用的过程中 碰到了如下问题

  1. 部分特定的 latex 公式解析不正确
    如下 latex部分
$$
NV_{n} = NV_{0} \times P_{0} \times P_{1} \times P_{2} \times \dots \times P_{n}
$$

这种情况下 editor.md 的解析会直接报错,原因是在 之前调用 marked() 进行 markdown 解析的时候, 将 _ 转义成了<em>
2. 不同方式初始化 editor.md 会导致不同的 latex 渲染效果

//方式一
editormd.markdownToHTML("test-editormd-view", {
  //markdown        : markdown ,//+ "\r\n" + $("#append-test").text(),
  //htmlDecode      : true,       // 开启 HTML 标签解析,为了安全性,默认不开启

  //toc             : false,
  //tocm            : true,    // Using [TOCM]
  tocContainer    : "#custom-toc-container", // 自定义 ToC 容器层
  //gfm             : false,
  //tocDropdown     : true,
  // markdownSourceCode : true, // 是否保留 Markdown 源码,即是否删除保存源码的 Textarea 标签
  emoji           : true,
  taskList        : true,
  tex             : true,  // 默认不解析
  flowChart       : true,  // 默认不解析
  sequenceDiagram : true,  // 默认不解析
});


//方式二
editormd("test-editormd-view2", {
                    htmlDecode      : "style,script,iframe",  // you can filter tags decode
                    readOnly        : true,
                    styleActiveLine : false,   // disable active line
                    tex             : true,  // 默认不解析
                    path : '../lib/',
                });

造成此原因的情况是 源代码中这两种方式会调用不同的 katex 处理细节

editormd.$katex.render(tex.text(), tex[0]); // 1503  当你使用editormd的时候被调用

katex.render(tex.html().replace(/&lt;/g, "<").replace(/&gt;/g, ">"), tex[0]);     //4018 当你使用editormd.markdownToHTML的时候被调用

解决过程

  • 针对情况二

    • 我们尝试了 将两端的代码统一为 tex.text() 调用
  • 针对情况一

    • 我们首先 将有问题的 latex 公式复制至最新的 katex 在线解析器中,用于排除 katex 类库无法解析的问题。
    • 公式在 katex 中可以被解析,故尝试升级 katex 版本号,升至最新再次预览。
    • 依然不行,在调用 katex 渲染处打断点 (editormd.js#4017),输出日志得到 如下
    • <p> <span class="editormd-tex"> NV<em>{n} = NV</em>{0} \times P<em>{0} \times P</em>{1} \times P<em>{2} \times \dots \times P</em>{n} </span> </p>
    • 阅读源代码发现 解析的 tex 是由上游的 marked 解析得到的,再次断点,得到如下日志
    • <p> <span class="editormd-tex"> NV<em>{n} = NV</em>{0} \times P<em>{0} \times P</em>{1} \times P<em>{2} \times \dots \times P</em>{n} </span> </p>
    • 发现从源头就出现了错误的解析,查看 marked 版本号,发现是 0.3.x ,故尝试升级 marked
    • marked 升级到最新后,发现 如下问题
      • api 不兼容,最新的 marked 与 老版本 marked 存在大量 api 兼容性问题
      • 尝试新建工程,只用 marked 解析,验证是否 可以得到正确的 解析结果
        • 验证过程中,关于 _ 的验证得到了预期的结果,但形如 ABC**How To Use:**The Demo 这样的文本 出现了不一致的解析
    • marked 升级无法解决该问题,转变方向

解决方案

  1. 不使用$$进行行内公式渲染,使用 latex 代码块进行公式的书写,
  • 优点:简单,无需改动代码
  • 缺点: 复杂公式无法内嵌在行内。影响排版
  1. 基于 marked 二次开发 markdown 编辑器,并结合社区 marked-katex 来完成公式的渲染(我们选择的方案)
  • 优点:方便升级,可以基于 marked 提供的扩展接口进行升级
  • 缺点:需要理解 marked 相关 api。

标签:公式,marked,times,editormd,katex,解析,true
From: https://www.cnblogs.com/jnzhsh/p/18323954

相关文章

  • 深入解析 `sdbusplus::bus_t`
    在现代的Linux系统中,D-Bus(DesktopBus)是一个非常重要的进程间通信(IPC)机制。它允许不同的应用程序和系统组件之间进行高效、安全的通信。sdbusplus是一个用于简化D-Bus编程的C++库,而sdbusplus::bus_t则是这个库中的一个核心类,负责管理D-Bus连接。本文将详细介绍sdbusplus......
  • 深入解析sizeof和strlen的区别与联系
    目录一、深度解析1.sizeof2.strlen 二、对比三、举例说明总结 大家好,今天我们来探讨一下C语言中两个常用的函数sizeof和strlen。虽然它们都与字符串有关,但它们的用途和实现原理却大相径庭。下面我将从以下几个方面进行对比分析:一、深度解析1.sizeof定义:sizeof是......
  • 高通进dump和抓取解析dump log
    1.触发dump的办法:高通进dump的方式使用指令:echoc>/proc/sysrq-trigger长按power键有些基线默认是重启,需要进行配置才能使用该方法通过PS-HOLD硬件的方式进入dloader模式抓取dump硬件飞线PS-HOLD将PS-HOLD短接地,手机进入dloader模式,抓取ramdump短接时......
  • 2个月搞定计算机二级C语言——真题(2)解析
    1.前言大家好,我是梁国庆。本篇博客讲解真题2,其中的填空题用到了指向结构体的指针访问被指结构体的成员的知识,我在下文做了讲解。其他的主要还是对数组的考察,没什么难度,搞清楚思路写程序就可以。2.程序填空题2.1题目要求2.2提供的代码#include<stdio.h>#include<st......
  • 一文搞懂系列——PEM文件解析流程
    背景前几周,协助同事解决了SM2软签名的需求,其流程可参考终于解决了!!!基于GmSSL的SM2签名算法及思路分享。但是在解决这个问题的过程中,让我想起了一些不好的回忆:曾经在大众项目中,也接触过椭圆曲线算法签名。其中因为平台下发的公钥格式,由于双方理解不一致,导致最终调试很久,并......
  • 程序设计:C++入门教程(速成) + 15道经典例题(附带例题解析)
    本文章以实用为主,若实在是不明白文字所表达的内容,无脑复制代码,自己动手运行一下,实验一下即可理解文章内容,放心,代码是全的,全选复制粘贴即可不废话,直接开整数据类型常用数据类型int:整数类型,用于表示整数值。例如:1,2,-3,0等。float:单精度浮点数类型,用于表示带有小数点的数......
  • 钢铁百科:舞钢产20号钢材质解析,20#钢板调质状态交货,20号钢力学性能
    20#钢板材质是一种优质的低碳碳素钢,具有良好的韧性、塑性和焊接性。以下是对其执行标准、化学成分、力学性能、交货状态、应用范围及常用规格的详细介绍。执行标准:对于厚度在3~60mm的20#钢板,执行标准为GB/T711-2008,其交货状态通常为热轧,也可根据需求进行正火、退火或高温......
  • 钢铁百科:15#钢材质解析,15号钢四切,NB二探保材质保性能
    一、15#钢执行标准:   -GB/T711-2017:这是目前关于15#钢板的主要执行标准,该标准确保了钢板的质量、生产流程和性能均达到国家规定的要求。二、15#钢化学成分:*碳(C):0.12~0.18%*硅(Si):0.17~0.37%*锰(Mn):0.35~0.65%*硫(S)和磷(P)的含量均不超过0.035%此外,还可能含有少量的铬(Cr)、......
  • C语言【面试】常用知识点总结之常用易错易混点解析
    第二部分:程序代码评价或者找错有符号整型和无符号整型混合运算时,有符号型自动转换成无符号型,运算的结果是无符号的。如果参与运算的数据类型不同,会自动转化为同一类再运算,这就是自动转换自动转换的规则如下:1.当参与运算的数据的类型不同时,编译系统会自动先将他们转换成......
  • 信息收集:网络空间测绘FOFA,查询语法最全使用方法(图文解析)
    前言经小绿书粉丝投稿,特意搜集了一些fofa的使用教程和一些高级用法什么是FOFA?官网描述:FOFA-网络空间资产搜索引擎是华顺信安推出的一款通过对全球网络对外开放服务的资产进行主动或被动方式探测、抓取、存储,分析整理不同种类的网络空间资产指纹信息(规则),并对符合规则的资产......